diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b3c57b4b..ef9ade89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,50 +12,92 @@ jobs: - name: Setup Java uses: actions/setup-java@v4 with: - distribution: "temurin" - java-version: "21" - cache: "gradle" + distribution: 'temurin' + java-version: '21' + cache: 'gradle' - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 - - name: Compile JavaScript - run: ./gradlew generateJavaScript - - name: Compile assets.epk - run: bash ./CompileEPK.sh - - name: Generate offline download - run: bash ./MakeOfflineDownload.sh - - name: Prepare web files + uses: gradle/actions/wrapper-validation@v4 + - name: Compile client run: | - mkdir -p ${{ runner.temp }}/gh-pages + bash ./CompileEPK.sh && + bash ./CompileJS.sh && + bash ./MakeOfflineDownload.sh + - name: Compile client (WASM) + run: | + cd ./wasm_gc_teavm && + bash ./CompileEPK.sh && + bash ./CompileWASM.sh && + bash ./CompileEagRuntimeJS.sh && + bash ./CompileBootstrapJS.sh && + bash ./CompileLoaderWASM.sh && + bash ./MakeWASMClientBundle.sh && + cd .. + - name: Prepare files + run: | + mkdir -p ${{ runner.temp }}/gh-pages && cp -t ${{ runner.temp }}/gh-pages \ - javascript/assets.epk \ - javascript/classes.js \ - javascript/classes.js.map \ - javascript/index.html - cp javascript/Starlike_Client_Offline.html ${{ runner.temp }}/gh-pages/offline.html + ./LICENSE.md \ + ./javascript/assets.epk \ + ./javascript/assets.epw \ + ./javascript/bootstrap.js \ + ./javascript/classes.js \ + ./javascript/classes.js.map \ + ./javascript/index.html \ + ./javascript/Starlike_Client_Offline.html \ + ./javascript/Starlike_Client_Offline_WASM.html \ + ./javascript/wasm.html - name: Upload web files continue-on-error: true uses: actions/upload-artifact@v4 with: - name: web - path: ${{ runner.temp }}/gh-pages/ + name: Starlike_Client_Web + path: ${{ runner.temp }}/gh-pages retention-days: 1 compression-level: 9 - name: Upload offline download continue-on-error: true uses: actions/upload-artifact@v4 with: - name: offline - path: javascript/Starlike_Client_Offline.html + name: Starlike_Client_Offline + path: | + ${{ runner.temp }}/gh-pages/LICENSE.md + ${{ runner.temp }}/gh-pages/Starlike_Client_Offline.html + ${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html retention-days: 1 compression-level: 9 - - name: Deploy to GitHub Pages + - name: Upload web files (WASM) + continue-on-error: true + uses: actions/upload-artifact@v4 + with: + name: Starlike_Client_Web_WASM + path: | + ${{ runner.temp }}/gh-pages/LICENSE.md + ${{ runner.temp }}/gh-pages/assets.epw + ${{ runner.temp }}/gh-pages/bootstrap.js + ${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html + ${{ runner.temp }}/gh-pages/wasm.html + retention-days: 1 + compression-level: 9 + - name: Upload offline download (WASM) + continue-on-error: true + uses: actions/upload-artifact@v4 + with: + name: Starlike_Client_Offline_WASM + path: | + ${{ runner.temp }}/gh-pages/LICENSE.md + ${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html + retention-days: 1 + compression-level: 9 + - name: Deploy to `gh-pages` branch if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ runner.temp }}/gh-pages - cname: starlike.zumbiepig.dev + allow_empty_commit: true force_orphan: true user_name: 'github-actions[bot]' user_email: '41898282+github-actions[bot]@users.noreply.github.com' commit_message: 'github-actions: deploy' + # disable_nojekyll: true + cname: 'starlike.zumbiepig.dev' diff --git a/.gitignore b/.gitignore index f2ba9bf6..f741dd6c 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,10 @@ javascript/Starlike_Client_Offline_Signed.html javascript/Starlike_Client_Offline_Signed.html.cert javascript/Starlike_Client_Offline_Signed.html.dat -.metadata +javascript/assets.epw +javascript/bootstrap.js +javascript/favicon.png +javascript/Starlike_Client_Offline_WASM.html -GenerateBlocks.py -EaglerTools +.metadata +.DS_Store diff --git a/CompileEPK.bat b/CompileEPK.bat index a7ac88ac..9a875c96 100644 --- a/CompileEPK.bat +++ b/CompileEPK.bat @@ -3,4 +3,4 @@ title epkcompiler echo compiling, please wait... java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk" echo finished compiling epk -pause \ No newline at end of file +pause diff --git a/CompileFull.bat b/CompileFull.bat new file mode 100644 index 00000000..3de2dd1e --- /dev/null +++ b/CompileFull.bat @@ -0,0 +1,11 @@ +call CompileEPK && +call CompileJS && +call MakeOfflineDownload && +cd wasm_gc_teavm && +call CompileEPK && +call CompileWASM && +call CompileEagRuntimeJS && +call CompileBootstrapJS && +call CompileLoaderWASM && +call MakeWASMClientBundle && +cd .. diff --git a/CompileFull.sh b/CompileFull.sh new file mode 100755 index 00000000..8e222b64 --- /dev/null +++ b/CompileFull.sh @@ -0,0 +1,12 @@ +#!/bin/sh +. ./CompileEPK.sh && +. ./CompileJS.sh && +. ./MakeOfflineDownload.sh && +cd ./wasm_gc_teavm && +. ./CompileEPK.sh && +. ./CompileWASM.sh && +. ./CompileEagRuntimeJS.sh && +. ./CompileBootstrapJS.sh && +. ./CompileLoaderWASM.sh && +. ./MakeWASMClientBundle.sh && +cd .. diff --git a/CompileJS.sh b/CompileJS.sh index ff22273b..461c3152 100755 --- a/CompileJS.sh +++ b/CompileJS.sh @@ -1,2 +1,3 @@ #!/bin/sh -./gradlew generateJavascript +chmod +x gradlew +./gradlew generateJavaScript diff --git a/EAGLERCRAFTX_README.md b/EAGLERCRAFTX_README.md index 60b70e45..f43e1628 100644 --- a/EAGLERCRAFTX_README.md +++ b/EAGLERCRAFTX_README.md @@ -1,4 +1,3 @@ - # EaglercraftX 1.8 ### Play Minecraft 1.8 in your browser, supports singleplayer and multiplayer @@ -7,28 +6,28 @@ ### This repository contains: - - **Utilities to decompile Minecraft 1.8 and apply patch files to it** - - **Source code to provide the LWJGL keyboard, mouse, and OpenGL APIs in a browser** - - **Patch files to mod the Minecraft 1.8 source code to make it browser compatible** - - **Browser-modified portions of Minecraft 1.8's open-source dependencies** - - **Plugins for Minecraft servers to allow the eagler client to connect to them** +- **Utilities to decompile Minecraft 1.8 and apply patch files to it** +- **Source code to provide the LWJGL keyboard, mouse, and OpenGL APIs in a browser** +- **Patch files to mod the Minecraft 1.8 source code to make it browser compatible** +- **Browser-modified portions of Minecraft 1.8's open-source dependencies** +- **Plugins for Minecraft servers to allow the eagler client to connect to them** ### This repository does NOT contain: - - **Any portion of the decompiled Minecraft 1.8 source code or resources** - - **Any portion of Mod Coder Pack and it's config files** - - **Data that can be used alone to reconstruct portions of the game's source code** +- **Any portion of the decompiled Minecraft 1.8 source code or resources** +- **Any portion of Mod Coder Pack and it's config files** +- **Data that can be used alone to reconstruct portions of the game's source code** ## Getting Started: -### To compile the latest version of the client, on Windows: +### To compile the latest version of the JavaScript client, on Windows: 1. Make sure you have at least Java 11 installed and added to your PATH, it is recommended to use Java 17 2. Download (clone) this repository to your computer 3. Double click `CompileLatestClient.bat`, a GUI resembling a classic windows installer should open 4. Follow the steps shown to you in the new window to finish compiling -### To compile the latest version of the client, on Linux/macOS: +### To compile the latest version of the JavaScript client, on Linux/macOS: 1. Make sure you have at least Java 11 installed, it is recommended to use Java 17 2. Download (clone) this repository to your computer @@ -37,9 +36,21 @@ 5. Type `./CompileLatestClient.sh` and hit enter, a GUI resembling a classic windows installer should open 6. Follow the steps shown to you in the new window to finish compiling +### To set up the development environment + +1. Prepare the required files in the mcp918 folder ([readme](mcp918/readme.txt)) +2. Run the `build_init` script +3. Run the `build_make_workspace` script + ## Browser Compatibility -EaglercraftX 1.8 is currently known to work on browsers as old as Chrome 38 on Windows XP, the game supports both WebGL 1.0 and WebGL 2.0 however features such as dynamic lighting and PBR shaders require WebGL 2.0. The game also supports mobile browsers that don't have a keyboard or mouse, the game will enter touch screen mode automatically when touch input is detected. The game also includes an embedded OGG codec (JOrbis) for loading audio files on iOS where the browsers don't support loading OGG files in an AudioContext. +The JavaScript runtime of EaglercraftX 1.8 is currently known to work on browsers as old as Chrome 38 on Windows XP, the game supports both WebGL 1.0 and WebGL 2.0 however features such as dynamic lighting and PBR shaders require WebGL 2.0. The game also supports mobile browsers that don't have a keyboard or mouse, the game will enter touch screen mode automatically when touch input is detected. The game also includes an embedded OGG codec (JOrbis) for loading audio files on iOS where the browsers don't support loading OGG files in an AudioContext. + +## WebAssembly GC Support + +EaglercraftX 1.8 also has an experimental WebAssembly GC (WASM-GC) runtime, almost all of the features supported on the JavaScript runtime are also supported on the WebAssembly GC runtime, however it is still incompatible with several major browsers (especially Safari) and will not run in Chrome unless you can access the `chrome://flags` menu or request an origin trial token from Google for your website. Its based on experimental technology and may still crash sometimes due to browser bugs or unresolved issues in the Java to WASM compiler. Hopefully in the coming months the required feature (JSPI, WebAssembly JavaScript Promise Integration) will become enabled by default on the Chrome browser. It performs significantly better than the JavaScript client, around 50% more FPS and TPS in some cases, and will hopefully replace it someday. Just make sure you enable VSync when you play it, otherwise the game will run "too fast" and choke the browser's event loop, causing input lag. + +You can compile the WebAssembly GC runtime by creating a development environment (workspace) and reading the README in the "wasm_gc_teavm" folder. ## Singleplayer @@ -55,7 +66,7 @@ If you would like to invite other players to join your singleplayer world and pl Once you press "Start Shared World", EaglercraftX 1.8 will give you a "join code" (usually 5 letters) to share with your friends. On a different device, go the "Multiplayer" screen and press "Direct Connect" and press "Join Shared World", enter the join code given to you when you started the shared world and press "Join World". Given a few seconds, the client should successfully be able to join your shared world from any other device on the internet that also has unrestricted internet access. If it does not work, check the "Network Settings" screen and make sure you and your friends all have the same set of shared world relay URLs configured or your clients will not be able to find each other. -If you would like to host your own relay, the JAR file and instructions can be downloaded from the "Network Settings" screen in the client. EaglercraftX 1.8 uses the same "LAN world" relay server that is used by Eaglercraft 1.5.2, if you would like the relay source code find a random copy of the Eaglercraft 1.5.2 source code and it should be located in the "sp-relay" folder. The relay has not been updated since then, it has only been renamed from "LAN world relay" to "Shared world relay". +If you would like to host your own relay, the JAR file and instructions can be downloaded from the "Network Settings" screen in the client. EaglercraftX 1.8 uses the same "LAN world" relay server that is used by Eaglercraft 1.5.2, however there have been several bug fixes. The current version is available in the `sp-relay/SharedWorldRelay` folder. ## PBR Shaders @@ -77,6 +88,8 @@ To make a server for EaglercraftX 1.8 the recommended software to use is Eaglerc There is an experimental velocity plugin available in `gateway/EaglercraftXVelocity` but it is still in development and not recommended for public servers, so be sure to check for updates regularly if you use it. Configuration files are basically identical to EaglercraftXBungee so its safe to just directy copy in your old EaglercraftXBungee config files to the `plugins/eaglerxvelocity` folder and they should work with a minimal number of edits if you are migrating your network from BungeeCord to Velocity. +**Warning:** Both EaglerXBungee and EaglerXVelocity perform a lot of reflection that will inevitably break after a while when BungeeCord or Velocity is updated upstream. Both plugins will display the precise build number of BungeeCord and Velocity that has been tested by the developers and known to be compatible with EaglerXBungee and EaglerXVelocity when the proxy first starts up. If you are experiencing issues, try checking the BungeeCord or Velocity website for old versions and find the closest version number to whatever the current compatible version number is that is printed by EaglerXBungee/EaglerXVelocity, it will probably fix whatever missing functions the error messages are complaining about. + ### Detailed READMEs - [**EaglerXBungee README**](README_EAGLERXBUNGEE.md) @@ -198,11 +211,12 @@ The default eaglercraftXOpts values is this: - `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 +- `enforceVSync:` (WASM only) if the game should automatically re-enable VSync at launch if its disabled - `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 - * `crashReportShow:` JavaScript callback when a crash report is shown (report, customMessageCB) - * `screenChanged:` JavaScript callback when the screen changes/resizes (screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor) + - `localStorageSaved:` JavaScript callback to save local storage keys (key, data) + - `localStorageLoaded:` JavaScript callback to load local storage keys (key) returns data + - `crashReportShow:` JavaScript callback when a crash report is shown (report, customMessageCB) + - `screenChanged:` JavaScript callback when the screen changes/resizes (screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor) ### Using Hooks @@ -245,7 +259,7 @@ 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. +**Note:** If you are trying to use the desktop runtime on Linux, make sure you add the "desktopRuntime" folder to the `LD_LIBRARY_PATH` environment variable of the Java process. This should be done automatically by the Eclipse project's default run configuration, but it might not work properly on every system, or when the Eclipse project is imported into IntelliJ. # EaglercraftX 1.8 Workspace @@ -258,17 +272,20 @@ A javascript-based modding API resembling Minecraft Forge may be implemented som 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 @@ -437,6 +454,7 @@ if(lightValue > 0.0) { ``` **Correct:** + ```glsl float lightValue = max(dot(lightDirection, normal), 0.0); color += lightValue * lightColor * diffuseColor; @@ -462,7 +480,6 @@ float depthValue = textureLod(depthBuffer, pos, 0.0).r; 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. @@ -528,7 +545,7 @@ try(InputStream is = new FileInputStream(new File("phile.txt"))) { Notice that the `.close()` can be omitted completely when using a try-with-resources -### 15. Always close compression/decompression streams +### 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. diff --git a/EaglerTools/GenerateBlocks.mjs b/EaglerTools/GenerateBlocks.mjs new file mode 100644 index 00000000..ef3a334c --- /dev/null +++ b/EaglerTools/GenerateBlocks.mjs @@ -0,0 +1,251 @@ +import path from 'path'; +import fs from 'fs/promises'; + +let blockId = 695; // replace with next id + +const basePath = path.dirname(path.dirname(path.resolve(import.meta.filename))); +const sourceFolder = path.join(basePath, 'EaglerTools', 'makeBlock'); +const starlikeAssetsFolder = path.join( + basePath, + 'desktopRuntime', + 'resources', + 'assets', + 'starlike', +); + +const blockTextureFolder = path.join( + starlikeAssetsFolder, + 'textures', + 'blocks', +); +const blockModelFolder = path.join(starlikeAssetsFolder, 'models', 'block'); +const itemModelFolder = path.join(starlikeAssetsFolder, 'models', 'item'); +const blockstateFolder = path.join(starlikeAssetsFolder, 'blockstates'); +const langFilePath = path.join(starlikeAssetsFolder, 'lang', 'en_US.lang'); + +const itemsStarlikeJavaPath = path.join( + basePath, + 'src', + 'main', + 'java', + 'net', + 'starlikeclient', + 'minecraft', + 'init', + 'ItemsStarlike.java', +); +const blocksJavaPath = path.join( + basePath, + 'src', + 'game', + 'java', + 'net', + 'minecraft', + 'init', + 'Blocks.java', +); + +async function createDirectories() { + await fs.mkdir(blockTextureFolder, { recursive: true }); + await fs.mkdir(blockModelFolder, { recursive: true }); + await fs.mkdir(itemModelFolder, { recursive: true }); + await fs.mkdir(blockstateFolder, { recursive: true }); +} + +async function insertInFile( + filePath, + searchText, + insertText, + insertAfter = true, + tabBefore = false, +) { + try { + const content = await fs.readFile(filePath, 'utf8'); + const lines = content.split('\n'); + + for (let i = 0; i < lines.length; i++) { + if (lines[i].includes(searchText)) { + let insertLine = insertText + '\n'; + if (tabBefore) { + insertLine = '\t' + insertLine; + } + if (insertAfter) { + lines.splice(i + 1, 0, insertLine); + } else { + lines.splice(i, 0, insertLine); + } + break; + } + } + + await fs.writeFile(filePath, lines.join('\n')); + console.log(`Updated ${filePath} successfully.`); + return true; + } catch (err) { + console.error(`Error with file ${filePath}: ${err}`); + return false; + } +} + +async function appendToFile(filePath, newLine) { + try { + await fs.appendFile(filePath, newLine + '\n'); + console.log(`Appended to ${filePath} successfully.`); + } catch (err) { + console.error(`Error appending to ${filePath}: ${err}`); + } +} + +async function processBlocks() { + console.log('Welcome to GenerateBlocks (EaglerTools)'); + console.log( + 'Drag the texture of the FULL block into the EaglerTools/makeBlock folder', + ); + + try { + const files = await fs.readdir(sourceFolder); + + for (const filename of files) { + if (!filename.endsWith('.png')) continue; + + const blockName = path.parse(filename).name; + const sourceImage = path.join(sourceFolder, filename); + const destImage = path.join(blockTextureFolder, filename); + + try { + await fs.rename(sourceImage, destImage); + console.log(`Moved image: ${filename} to ${destImage}`); + + // Create blockstate data + const blockModelData = { + parent: 'block/cube_all', + textures: { + all: `starlike:blocks/${blockName}`, + }, + }; + + // Create item model data + const itemModelData = { + parent: `starlike:block/${blockName}`, + display: { + thirdperson: { + rotation: [10, -45, 170], + translation: [0, 1.5, -2.75], + scale: [0.375, 0.375, 0.375], + }, + }, + }; + + // Create blockstate JSON data + const blockstateData = { + variants: { + normal: { + model: `starlike:${blockName}`, + }, + }, + }; + + // Write JSON files + await fs.writeFile( + path.join(blockModelFolder, `${blockName}.json`), + JSON.stringify(blockModelData, null, 4), + ); + + await fs.writeFile( + path.join(itemModelFolder, `${blockName}.json`), + JSON.stringify(itemModelData, null, 4), + ); + + await fs.writeFile( + path.join(blockstateFolder, `${blockName}.json`), + JSON.stringify(blockstateData, null, 4), + ); + + // Determine material properties + let materialType = 'Material.rock'; + let hardness = '1.5f'; + let resistance = '10.0f'; + let soundType = 'soundTypePiston'; + + if (/log|planks|wood/.test(blockName)) { + materialType = 'Material.wood'; + hardness = '0.5f'; + resistance = '10.0f'; + soundType = 'soundTypeWood'; + } else if (/steel|iron|grate|bar|copper|gold/.test(blockName)) { + materialType = 'Material.iron'; + hardness = '5f'; + resistance = '10.0f'; + soundType = 'soundTypeMetal'; + } else if (/dirt|grass/.test(blockName)) { + materialType = 'Material.ground'; + hardness = '0.5f'; + resistance = '1f'; + soundType = 'soundTypeGround'; + } + + // Generate and insert Java code + const registrationLine = + `Block.registerBlock(${blockId}, "starlike:${blockName}", ` + + `(new Block(${materialType}, MapColor.purpleColor)).setHardness(${hardness}).setResistance(${resistance}) ` + + `.setStepSound(Block.${soundType}).setUnlocalizedName("${blockName}").setCreativeTab(CreativeTabs.tabStarlike));`; + + await insertInFile( + itemsStarlikeJavaPath, + '//autogenerateequals', + registrationLine, + ); + + const blockDeclaration = ` public static Block ${blockName};`; + const getRegisteredLine = ` ${blockName} = getRegisteredBlock("starlike:${blockName}");`; + + await insertInFile( + blocksJavaPath, + '//autogeneratevar', + blockDeclaration, + ); + await insertInFile( + blocksJavaPath, + '//autogenerateequals', + getRegisteredLine, + ); + + const itemBlockRegistration = `Item.registerItemBlock(Blocks.${blockName});`; + await insertInFile( + itemsStarlikeJavaPath, + '//autogenerateregisterblock', + itemBlockRegistration, + true, + true, + ); + + const itemBlockRenderRegistration = `e.registerBlock(Blocks.${blockName},"starlike:${blockName}");`; + await insertInFile( + itemsStarlikeJavaPath, + '//autogeneraterender', + itemBlockRenderRegistration, + true, + true, + ); + + const langEntry = `tile.${blockName}.name=${ + blockName.replace('_', ' ').charAt(0).toUpperCase() + + blockName.slice(1) + }`; + await appendToFile(langFilePath, langEntry); + + blockId++; + } catch (err) { + console.error(`Error processing ${filename}: ${err}`); + continue; + } + } + } catch (err) { + console.error(`Error reading source folder: ${err}`); + } +} + +// Run the script +createDirectories() + .then(() => processBlocks()) + .catch((err) => console.error('Error:', err)); diff --git a/EaglerTools/GenerateBlocks.py b/EaglerTools/GenerateBlocks.py new file mode 100644 index 00000000..a62bcb9f --- /dev/null +++ b/EaglerTools/GenerateBlocks.py @@ -0,0 +1,173 @@ +import os +import shutil +import json + +base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +source_folder = os.path.join(base_path,"EaglerTools", "makeBlock") +block_texture_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "textures", "blocks") +block_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "block") +item_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "item") +blockstate_folder = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "blockstates") +lang_file_path = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "lang", "en_US.lang") + +os.makedirs(block_texture_folder, exist_ok=True) +os.makedirs(block_model_folder, exist_ok=True) +os.makedirs(item_model_folder, exist_ok=True) +os.makedirs(blockstate_folder, exist_ok=True) + + +items_starlike_java_path = os.path.join( + base_path, "src", "main", "java", "net", "starlikeclient", "minecraft", "init", "ItemsStarlike.java" +) +blocks_java_path = os.path.join(base_path,"src", "game", "java", "net", "minecraft", "init", "Blocks.java") + +blockId = 695; #replace with next id +def insert_in_file(file_path, search_text, insert_text, insert_after=True, tab_before=False): + try: + with open(file_path, 'r') as file: + lines = file.readlines() + except Exception as e: + print(f"Error reading {file_path}: {e}") + return False + + for i, line in enumerate(lines): + if search_text in line: + insert_line = insert_text + '\n' + if tab_before: + insert_line = '\t' + insert_line + if insert_after: + lines.insert(i + 1, insert_line) + else: + lines.insert(i, insert_line) + break + + try: + with open(file_path, 'w') as file: + file.writelines(lines) + print(f"Updated {file_path} successfully.") + return True + except Exception as e: + print(f"Error writing to {file_path}: {e}") + return False + +def append_to_file(file_path, new_line): + try: + with open(file_path, 'a') as file: + file.write(new_line + '\n') + print(f"Appended to {file_path} successfully.") + except Exception as e: + print(f"Error appending to {file_path}: {e}") + +print("Welcome to GenerateBlocks (EaglerTools)") +print("Drag the texture of the FULL block into the ") +for filename in os.listdir(source_folder): + if filename.endswith(".png"): + + block_name = os.path.splitext(filename)[0] + + source_image = os.path.join(source_folder, filename) + dest_image = os.path.join(block_texture_folder, filename) + + try: + shutil.move(source_image, dest_image) + print(f"Moved image: {filename} to {dest_image}") + except Exception as e: + print(f"Error moving file {filename}: {e}") + continue + + blockstate_data = { + "parent": "block/cube_all", + "textures": { + "all": f"starlike:blocks/{block_name}" + } + } + blockstate_path = os.path.join(block_model_folder, f"{block_name}.json") + try: + with open(blockstate_path, 'w') as blockstate_file: + json.dump(blockstate_data, blockstate_file, indent=4) + print(f"Created blockstate JSON: {blockstate_path}") + except Exception as e: + print(f"Error writing blockstate JSON for {block_name}: {e}") + continue + + item_model_data = { + "parent": f"starlike:block/{block_name}", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } + } + item_model_path = os.path.join(item_model_folder, f"{block_name}.json") + try: + with open(item_model_path, 'w') as item_model_file: + json.dump(item_model_data, item_model_file, indent=4) + print(f"Created item model JSON: {item_model_path}") + except Exception as e: + print(f"Error writing item model JSON for {block_name}: {e}") + continue + + blockstate_json_data = { + "variants": { + "normal": { + "model": f"starlike:{block_name}" + } + } + } + blockstate_json_path = os.path.join(blockstate_folder, f"{block_name}.json") + try: + with open(blockstate_json_path, 'w') as blockstate_json_file: + json.dump(blockstate_json_data, blockstate_json_file, indent=4) + print(f"Created blockstate JSON: {blockstate_json_path}") + except Exception as e: + print(f"Error writing blockstate JSON for {block_name}: {e}") + continue + + material_type = "Material.wood" + hardness = "0.5f" + resistance = "5.0f" + soundType = "soundTypePiston" + if any(keyword in block_name for keyword in ["log", "planks", "wood"]): + material_type = "Material.wood" + hardness = "0.5f" + resistance = "10.0f" + soundType = "soundTypeWood" + elif any(keyword in block_name for keyword in ["steel", "iron", "grate", "bar", "copper", "gold"]): + material_type = "Material.iron" + hardness = "5f" + resistance = "10.0f" + soundType = "soundTypeMetal" + elif any(keyword in block_name for keyword in ["dirt", "grass"]): + material_type = "Material.ground" + hardness = "0.5f" + resistance = "1f" + soundType = "soundTypeGround" + else: + material_type = "Material.rock" + hardness = "1.5f" + resistance = "10.0f" + soundType = "soundTypePiston" + + registration_line = ( + f"Block.registerBlock({blockId}, \"starlike:{block_name}\", " + f"(new Block({material_type}, MapColor.purpleColor)).setHardness({hardness}).setResistance({resistance}) " + f".setStepSound(Block.{soundType}).setUnlocalizedName(\"{block_name}\").setCreativeTab(CreativeTabs.tabStarlike));" + ) + insert_in_file(items_starlike_java_path, "//autogenerateequals", registration_line) + + block_declaration = f" public static Block {block_name};" + get_registered_line = f" {block_name} = getRegisteredBlock(\"starlike:{block_name}\");" + insert_in_file(blocks_java_path, "//autogeneratevar", block_declaration) + insert_in_file(blocks_java_path, "//autogenerateequals", get_registered_line) + + item_block_registration = f"Item.registerItemBlock(Blocks.{block_name});" + insert_in_file(items_starlike_java_path, "//autogenerateregisterblock", item_block_registration, tab_before=True) + item_block_render_registration = f'e.registerBlock(Blocks.{block_name},"starlike:{block_name}");' + insert_in_file(items_starlike_java_path, "//autogeneraterender", item_block_render_registration, tab_before=True) + lang_entry = f"tile.{block_name}.name={block_name.replace('_', ' ').capitalize()}" + append_to_file(lang_file_path, lang_entry) + blockId += 1 + diff --git a/LICENSE.md b/LICENSE.md index 31e0c3a4..0bcae25c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -4,15 +4,17 @@ Copyright (c) 2024 zumbiepig and SpeedSlicer ## 1. Attribution -If you use any part of this code in your project, you **must credit** the original author, zumbiepig and SpeedSlicer, in a clearly visible manner in both the project documentation and the software interface, including but not limited to: +If you use any part of this code in your project, you **must credit** the original authors, zumbiepig and SpeedSlicer, in a clearly visible manner in both the project documentation and the software interface, including but not limited to: + - **Credits section** in documentation - **Main menu or splash screen** within the application -The **main menu** of the software or application **must not be changed** without written permission from zumbiepig and SpeedSlicer. +The **main menu** of the software or application **must not be changed** without written permission from _both_ zumbiepig and SpeedSlicer. ## 2. Open Source Requirement for Derivative Works If you create any derivative work (a "fork") based on this project: + - You **must release the source code** of the derivative work under this same license, ensuring that all forks and modifications remain open source. - You **must clearly state** that the original code is based on work by zumbiepig and SpeedSlicer. @@ -28,6 +30,4 @@ This software is provided "as is", without any warranty of any kind, express or --- -License written by HoosierTransfer - By using this code, you agree to the terms of this license. diff --git a/MakeSignedClient.bat b/MakeSignedClient.bat index 788a3eac..61ffea9f 100644 --- a/MakeSignedClient.bat +++ b/MakeSignedClient.bat @@ -1,4 +1,4 @@ @echo off title MakeSignedClient 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 \ No newline at end of file +pause diff --git a/SIGNED_CLIENT.env b/SIGNED_CLIENT.env deleted file mode 100644 index 3ba9ab31..00000000 --- a/SIGNED_CLIENT.env +++ /dev/null @@ -1,4 +0,0 @@ -SIGNED_CLIENT_INTEGER="301" -SIGNED_CLIENT_VERSION="0.3.1" -SIGNED_CLIENT_CHANGELOG="View the changelog in the Discord server" - diff --git a/build.gradle b/build.gradle index 0fbb835c..e264952f 100644 --- a/build.gradle +++ b/build.gradle @@ -58,15 +58,16 @@ teavm.js { tasks.named("generateJavaScript") { doLast { - + delete file(folder + "/js") + // NOTE: This step may break at any time, and is not required for 99% of browsers - + def phile = file(folder + "/" + name) def dest = phile.getText("UTF-8") def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ") dest = dest.substring(0, i) + "var" + dest.substring(i + 3) def j = dest.indexOf("function(\$rt_globals,\$rt_exports){") - dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34) + dest = dest.substring(0, j + 34) + "\n" + file("desktopRuntime/resources/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34) phile.write(dest, "UTF-8") } } diff --git a/designModels/starlike/sc.bbmodel b/designModels/starlike/sc.bbmodel new file mode 100644 index 00000000..d121eeea --- /dev/null +++ b/designModels/starlike/sc.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"minecraft_title","box_uv":false},"name":"starlike-logo","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":1000,"height":320},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[1.2417513413863963,0.35522979209927885,-20.389338309551352],"to":[29.241751341386397,40.35522979209928,1.6106616904486482],"autouv":0,"color":2,"origin":[16.241751341386397,-0.6447702079007211,-9.389338309551352],"faces":{"north":{"uv":[580,22,608,62],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[608,22,580,62],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[608,22,580,0],"texture":0},"down":{"uv":[608,84,580,62],"texture":0}},"type":"cube","uuid":"8a883880-4154-1e9d-0d0d-55ddbb8ca808"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[15.241751341386397,10.355229792099278,-22.389338309551352],"to":[31.241751341386397,14.355229792099278,3.6106616904486484],"autouv":0,"color":6,"origin":[16.241751341386397,-0.6447702079007211,-9.389338309551352],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,266,1,267],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"d53aebfc-1fa3-3135-70d7-3cb2207e4163"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-0.7582486586136037,26.355229792099276,-22.389338309551352],"to":[15.241751341386397,30.355229792099276,3.6106616904486484],"autouv":0,"color":9,"origin":[16.241751341386397,-0.6447702079007211,-9.389338309551352],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"615d78f6-9b38-0438-32f2-d5e4a95b86a3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[31.241751341386397,42.35522979209928,3.6106616904486484],"to":[-0.7582486586136037,-1.644770207900721,-22.389338309551352],"autouv":0,"color":5,"origin":[16.241751341386397,-0.6447702079007211,-9.389338309551352],"faces":{"north":{"uv":[0,277,2,288],"texture":0},"east":{"uv":[0,277,1,288],"texture":0},"south":{"uv":[2,277,0,288],"texture":0},"west":{"uv":[1,277,2,288],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"f3c57242-1a19-0a1d-79bc-fbc2e7b15a25"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-32.53837729877064,-8.169368028605767,-10.989979399695912],"to":[-4.538377298770641,31.83063197139424,11.010020600304088],"autouv":0,"color":5,"origin":[11.46162270122936,40.83063197139424,-9.98997939969591],"faces":{"north":{"uv":[90,22,118,62],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[118,22,90,62],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[118,22,90,0],"texture":1},"down":{"uv":[118,84,90,62],"texture":1}},"type":"cube","uuid":"fbcfe8d6-453a-631c-ed19-3d527357d621"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-34.53837729877064,1.8306319713942365,-12.989979399695912],"to":[-18.53837729877064,21.83063197139424,13.010020600304088],"autouv":0,"color":4,"origin":[11.46162270122936,40.83063197139424,-9.98997939969591],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[1,266,0,267],"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[1,266,0,267],"texture":1},"down":{"uv":[1,266,0,267],"texture":1}},"type":"cube","uuid":"cc2695e5-b9c2-27c3-fc41-3b67720b5258"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2.5383772987706408,33.83063197139424,13.010020600304088],"to":[-34.53837729877064,-10.169368028605767,-12.989979399695912],"autouv":0,"color":8,"origin":[11.46162270122936,40.83063197139424,-9.98997939969591],"faces":{"north":{"uv":[2,266,0,277],"texture":1},"east":{"uv":[2,266,1,277],"texture":1},"south":{"uv":[0,266,2,277],"texture":1},"west":{"uv":[0,266,1,267],"texture":1},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"ff3815da-a5cb-c8f5-9192-e52d1152e845"}],"outliner":[{"name":"sc","origin":[0,0,0],"color":0,"uuid":"0113182a-8e9c-276b-8f8c-2553872f633c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"s","origin":[16.241751341386397,21.355229792099273,-9.389338309551352],"rotation":[-7.5,-15,7.5],"color":0,"uuid":"25905988-a7e3-dd54-8f88-1268058bad71","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8a883880-4154-1e9d-0d0d-55ddbb8ca808","d53aebfc-1fa3-3135-70d7-3cb2207e4163","615d78f6-9b38-0438-32f2-d5e4a95b86a3","f3c57242-1a19-0a1d-79bc-fbc2e7b15a25"]},{"name":"c","origin":[10.794956034562695,20.830631971394237,-9.989979399695912],"rotation":[-5,-17.5,7.5],"color":0,"uuid":"5dca70f7-4b4a-eccd-58cb-3cc628c0c24f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fbcfe8d6-453a-631c-ed19-3d527357d621","cc2695e5-b9c2-27c3-fc41-3b67720b5258","ff3815da-a5cb-c8f5-9192-e52d1152e845"]}]}],"textures":[{"path":"","name":"s.png","folder":"","namespace":"","id":"0","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"18867d51-359f-49e8-4833-90106ac74fa8","source":"data:image/png;base64,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QAAEQAAEQAAEQAAEQAAEQAAEQAABOnwABEAABEAABEAABEAABEAABEAABGqAAAL0GjACRAABEAABEAABEAABEAABEAABEAABBOjwARAAARAAARAAARAAARAAARAAARCoAQII0GvACBABBEAABEAABEAABEAABEAABEAABBCgwwdAAARAAARAAARAAARAAARAAARAoAYIIECvASNABBAAARAAARAAARAAARAAARAAARBAgA4fAAEQAAEQAAEQAAEQAAEQAAEQAIEaIIAAvQaMABFAAARAAARAAARAAARAAARAAARAAAE6fAAEQAAEQAAEQAAEQAAEQAAEQAAEaoAAAvQaMAJEAAEQAAEQAAEQAAEQAAEQAAEQAAEE6PABEAABEAABEAABEAABEAABEAABEKgBAgjQa8AIEAEEQAAEQAAEQAAEQAAEQAAEQAAEEKDDB0AABEAABEAABEAABEAABEAABECgBgggQK8BI0AEEAABEAABEAABEAABEAABEAABEECADh8AARAAARAAARAAARAAARAAARAAgRoggAC9BowAEUAABEAABEAABEAABEAABEAABEAAATp8AARAAARAAARAAARAAARAAARAAARqgAAC9BowAkQAARAAARAAARAAARAAARAAARAAAQTo8AEQAAEQAAEQAAEQAAEQAAEQAAEQqAECCNBrwAgQAQRAAARAAARAAARAAARAAARAAAQQoMMHQAAEQAAEQAAEQAAEQAAEQAAEQKAGCCBArwEjQAQQAAEQAAEQAAEQAAEQAAEQAAEQ+P8BSOeCX56LxusAAAAASUVORK5CYII="},{"path":"","name":"c.png","folder":"","namespace":"","id":"1","group":"","width":4000,"height":1280,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"18de1981-3773-2ea7-5d01-469ea1a6fef0","source":"data:image/png;base64,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BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+BFwAN0gECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCPgAPoBoEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEfgQcQDcIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAj4AC6QSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBHwEH0A0CAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPwI/PV//1/+Z3972eJ/+bf/9+Mhev1dTvf9taf53S4wvb+u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECHwEYzQAAIABJREFUBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYKOIC+N5ufytIBQQdQlwcYykv5bu9uev6u+1Xznfav1m/9rMDX98+svqcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgr4AD6Huz+aksHRB0AHV5gKG8lO/27qbn77pfNd9p/2r91s8KfH3/zOp7OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYK/PXe0lRGgMB2gf/r//gnf/uf/8P/bqTMf/ev/7e/+i/+m//10++wSf+R0D30TxOwf/40SjciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA6wQ+fXjzdWlqiMAvC/ybf/qf/O1/+g/+27/67UPofxye/Xf/5//+V//1v/p/Pv0Om/L/5THzuD9ZwP75k0HdjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAi8T+PThzZdlqR0Cvy7wxwHoPx76m4fQ//3h2T+e6wD67/v/+pB54J8qYP/8qZxuRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVcKOID+ylg1ReB3BP79AfQ/nvYbh9D/48OzfzzTAfT/7wD6b/n/zlR5SpeA/dMl674ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4l4AD6O/KUzcEflXgPz6A/seDOw+h/93Ds388zwH0/3AAvdv/VwfLw/50AfvnTyd1QwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLwkF0CuAAAgAElEQVRWwAH010arMQL9An/3APofT/yv/uf/seXBf/OP/vnfu68D6P//A+id/i2huumvCdg/v0btQQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDgv4AD6+Qg1QGBOwAH0Ofs/nvyb/rOdenpVwAH0qqD1BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+I6AA+jfyVqnBP50gb98APp/+NOf88cN/+Yf/Yu/d1//A/pf+h/Qe/xbQnXTXxOwf36N2oMIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwXsAB9PMRaoDAnMBfPID+L3sOQP/NP3YA/e8m/Zv+c1PmyX+GgP3zZyi6BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL4h4AD6N3LWJYEWgb98APqftTzrb/7x//T37ut/QP8L/wP6v+zxbwnVTX9NwP75NWoPIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPD/snff8Xpc5Z3AX+0Gp2AF3G1crgQJxDgFpZBooy1kNwXLIY2OZLATA4LQIZSQsrvpvZAowSARLExNgXCVZNN2bdkCjC0wxjZVVxB6iRNDcJxk735esxfu+87onnfOnJk5M/PlP3hnznme73POK/753ZcAAQIECBAgQIAAAQIECBAgQIAAgd4LCKD3foQaINCdgAB6d/bTndv077ZTu9cVEECvK+h9AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjEdAAH08s9YpgeQCZQHoC37xmcn3mS541eN/qbCuX0Av/gJ6U/6NDNWirQm4P61R24gAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK9FxBA7/0INUCgOwEB9O7spzu36d9tp3avKyCAXlfQ+wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBiPgAD6eGatUwLJBcoD0M9Ivs90wase/8uFdf0CetkvoDfj38hQLdqagPvTGrWNCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HsBAfTej1ADBLoTEEDvzn66c5v+3XZq97oCAuh1Bb1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB8QgIoI9n1jolkFygNAD9C09Pvs90waue8CuFdf0CeskvoDfk38hQLdqagPvTGrWNCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HsBAfTej1ADBLoTEECvZ3/0wJ7VLTsvjV5kZXnf5PbDV8y8f4EAerTnkF+cD6BvufCSSd2zt3XXXv8fYsiHRm8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIxWQHhstKPXOIH6AuUB9KfVX7hkhaue8KuF/7Xvv4A+9du8fXftIPD6EPoFv9CMfyNDtWhrAuvvT4rw+crB/ZO+37/W8G1EgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBngkIoPdsYMolkJNAaQD955/aSIlXPfHXCuv2PQC75pcyhH5BQ/6NDNWirQms3Z9U4fNp4X2/f63h24gAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI9ExBA79nAlEsgJwEB9HrTWO+XKoQugF5vJkN9expATxk+nzoJoA/1tOiLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGxCwigj/0E6J9ADYHyAPpTaqx4/FeveuKvFz7sewB23i9FCP28h9yzEX+L9lvgA2+4bbJl56XRTaws75usHNw/837f7180hhcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwcAEB9IEPWHsEmhQoDaD/XEMB9D3DD6BPZ3VBQ35NngNrD1/gqgHev+FPTYcECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCIExBAj3PzFgECk8mkPID+o43YXLXnNwrr9v0XmNv0a2QoFh2NwBDv32iGp1ECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUFBBArwjmcQIEvihQGqD+2Sc3QnTVk36zsO4gA+gN+TUyFIuORmCI9280w9MoAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKgoIoFcE8ziBNgWOHtizumXnpW1uWWmvleV9k9sPXzHzzgUNBajnA7BbLrxkkrvN1l17N/yObTPAX2mwHiYwJyCA7kgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgPAIC6OOZtU57KDANKG/evjv7oPX6EPr9f/ZJjUhf/aTf+sK6fQifrxzcPwn9QntZAL0pv0aGYtHRCKy/f2tNh873aHA0SoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYEJCKAPbKDaGZbAWkC5TyH0+//MnkaGcPWTf/uudfsSPp/WGgrolgbQG/JrZCgWHY3A2v1b33DofI8GR6MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYmIAA+sAGqp1hCawPKPclhN5kAL1P4fPpSQwFdPsUQP/g8mcmSzu2DeuCZdbNsUNHJufuPDGzqj5fjgB6lmNRFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBoREEBvhNWiBNIIzAeU+xBCP3fn3dM0P7fKB5c/O9my89JG1k6x6MryvsnKwf0zS8UF0J+Yopzka1z95Bfd9evzQujJae9acBo+v/3wFZP7/0y+85/vPHS+m5GyKgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0LSCA3rSw9QnUECj9hez/+YQaK3q1KYGrf/R3CkuHArp9mu9af0Lo6U/QWvh8uvL9M73fMec7vZQVCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKANAQH0NpTtQSBSoE8B5cgWB/NaTEC3T/Nd358Qerpjuz58Pl1VAD2drZUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIE5AAD3OzVsEWhEoDSj/j8e3srdNqglc/ZTfLbwQ9Qvomc53vj8h9Grno+zp+fD59Jn792T+01pD57u+kBUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAuBwQfQjx7Ys7pl56Vd2Nbec2V532Trrr2Dn1FtqAEvUB5Av2zAHfe3taufsrdQfCig26f5xvTX32m2U7n5t+NsFwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoJjD4cPM04Ld5++5J30Lo0/D5ysH9fmG22nke3NPlAdUfGVyfQ2jo6qf8XqGNuAB6nvON6W8Ic22yhz7db/Nv8iRYmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnkJjCKAPiXvUwh9LXw+rTsUYM3rOKkmtUBpQPW/5xlQTt1739a7+qmJAuiZzjemv77NsO16+3S/zb/t02E/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdCcwmgD6lLgPIfT14fNpzQLo3V2OHHYuD6j+cA6lqWFO4Oqn/n7BJHR/+zTfmP4cko0FzN8JIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEcBUYVQJ8OIOcQ+nz4fFpvKMCa46FSUzqB0oDqT1+abgMrJRO4+mkvLqwVur99mm9Mf8lwB7qQ+Q90sNoiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAzwVGF0Cfzuv8n74ky7EdetrlhbpCAdYsG1FUMoGygGqu5zdZ0z1dKOb+9mm+Mf31dJStlW3+rVHbiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQqCIwzgP5TmQbQny6AXuHsjuLR0oBqpud3FAPZoMlDEfe3T/ON6W/sZyLUv/mHhHxOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl0IjDSA/rgurIN7Hnr6SwrP+AX0INugHygPqOZ5fgc9iAWai7m/fZpvTH8LsI36EfMf9fg1T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWwFRhpAf2yWAzn09JcW6hJAz3JUrRVVHlDN8/y2hpLpRjH3t0/zjekv01FlU5b5ZzMKhRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAOoFxBtB/8uIsD8GhZ+wr1CWAnuWoWiuqNKCa6fltDSXTjWLub5/mG9NfpqPKpizzz2YUCiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBdQIC6BkdBwHPjIaRSSl9CqhmQtZZGTH3t0/zjemvs2H0ZGPz78mglEmAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGRCYwzgP4Tu7Mc86Fn7i/U5RfQsxxVa0WVBlQzPb+toWS6Ucz97dN8Y/rLdFTZlGX+2YxCIQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwTmCkAfRdWR6CQ898WaEuAfQsR9VaUeUB1TzPb2somW4Uc3/7NN+Y/jIdVTZlmX82o1AIAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKwTGGkA/TFZHoJDz/yDQl0C6FmOqrWiygOqeZ7f1lAy3Sjm/vZpvjH9ZTqqbMoy/2xGoRACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWCcwzgD6C/MM8B56lgC62zkrUBpQzfT8jn12Mfe3T/ON6W/sZyLUv/mHhHxOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl0IjDSA/ugurIN7HnrWywvP+AX0INugHygPqOZ5fgc9iAWai7m/fZpvTH8LsI36EfMf9fg1T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWwFRhlA/5off1SWA7nm2VcU6hJAz3JUrRVVFlDN9fy2hpLpRjH3t0/zjekv01FlU5b5ZzMKhRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAOoGRBtAfmeUhuObZBwp1CaBnOarWiioPqOZ5fltDyXSjmPvbp/nG9JfpqLIpy/yzGYVCCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCdwDgD6C/IM8B7zXME0N3OWYHSgGqm53fss4u5v32ab0x/Yz8Tof7NPyTkcwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoQmCkAfRHdGEd3POa57yi8IxfQA+yDfqB8oBqnuf3Q397wmRpx7ZBz2Oj5o4dOjJZObh/5pHQ/e3TfH0/pT/a5p/e1IoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUF9gpAH0h9eXa2CFa55zZWHVUIC1gTIsmZFAeUA13/O75cJLhNDXhdBD97dv852/GqH+MrpKWZZi/lmORVEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYvcA4A+jPf1iWg7/mx15ZqEvAM8tRtVZUaUA18/MrhP7FX0IP3d8+znf94Q/119pF6elG5t/TwSmbAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAxcQQM9owALoGQ0jk1L6GlAVQv98CD0U0O7rfNeuR6i/TK5RtmWYf7ajURgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGLTDOAPrzHprl0K957qsKdQl4Zjmq1ooqDaj25PwKoR+ZbN21d8Pv2D7Pd3oJfD/V+yow/3p+3iZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBZgRGGkD/oWY0J5PJ3c55bPzayz9YeHfTRbcNfkbxYMN/szyg2tz5rSN6zXNfXXhdQHlj0bHP9+iBPatbdl5a59h19u7K8r7gHxgIFTf2+Yd8fE6AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC3QgMPtzcdsBPAL2bgzzUXds+v3UcBdCr6419vtP+N2/fPelbCH0aPl85uL/2L8CPff7Vb4w3CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKANgXEG0J9b/KXxVNh3O/fi+KWWH1p41y+gx3MO4c3SgGqD57eO2TXPe03hdb+AvrHo2Oe71n+fQuhr4fPpZOue77HPv873jXcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDmBkQbQf6Ax0buduzt+7eWHF94VQI/nHMKb5QHV5s5vHbNrnvfawut1A7p16unDu2Of7/r++xBCXx8+n56vuud77PPvwx1VIwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYoMMoA+v1+7Psbm/UJ5+2aWfvODxxYeK9rn/+6wrN1A44Lb+7BLAXKAqpNnt86CM5vdb2xz3e+/5xD6PPh8+m0634/j33+1W+MNwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgDQEB9MTKAuiJQUe+nIDqsA/A2Oer/xNX50+4PzAx7DuvOwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPRBYKQB9O9rbDYnnPeYmbXv/MArFt7r2uf/YeHZur+wu/DmHsxSoDyg29z5rYPg/FbXG/t89V8WQHe/q98kbxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASoFxBtCf85CUhjNrnbD06Jn/fuexKxfe69oX/FHhWQH0hfkG+WBpQLfB81sH0fmtrjf2+eq/JIDufle/SN4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaQCAuhJOSeT+QB6peWXdxUe33TRbYOfUSWjkT089oDu0Mc99vnqXwB96HdcfwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOijwODDzeUBx+9tbFYnLD0qfu3liwvvCqDHcw7hzbbPbx2za1/wx4XXH3TlHYP/jqljNvb56r8sgN7cv091zqr7XUfPuwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOiXwODDoaUBx2df1NiUTtjyyPi1lx9XeFcAPZ5zCG+2fX7rmF37439SeF0AfWPRsc9X/yUB9Ab/fXK/6wh4lwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuMREEBPPGsB9MSgI19u7AHdoY9/7PPVvwD60O+4/ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBHgXEG0J+1s7FZnbD1ETNr33n01Qvvde0LX1941i9IL8w3yAdLA7oNnt86iM5vdb2xz1f/JQF097v6RfIGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQVEEBPyjmZCKAnBh35cmMP6A59/GOfr/4F0Id+x/VHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBPgqMNIB+YWOzOmHrw2fWvvPoaxbe69oXvqHwrF9AX5hvkA+WB3SbO791EJ3f6npjn6/+ywLo7nf1m+QNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgpMNIA+oNTGs6sdcLWh8389zuPvnbhva594Z8WnhVAX5hvkA+WB3SbO791EJ3f6npjn6/+ywLo7nf1m+QNAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgpMM4A+jObC/idcO+5APr7KwTQf0IAPeXhHsJapQHdBs9vHbNr587vlgsvmWzZeWmdJXv97sryvsnWXXs3/I7t83ynw6n7BzL0XxJA78n9TjH/Xl9wxRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGDAAqMMoN/3md/T2Ei/9N4PnVn7n9//uoX3OvwTbyw8WzfgufDmHsxSoCyg2+T5rYOw/vwKn++brBzcHwxo93W+a+ek7veT/osB9D7c71Tzr/N9410CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaE5AAD2xrQB6YtCRL9fHgK7w+efD59P/hALafZzv+isZ6i90ffUvgB46Iz4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfYFRhdA37x992Rpx7bGpDctXTaz9uqxyxfe69ihI18Irq69VDfgufDmHsxSoDSg+4zvzrLWwz+5PBE+/2L4fDqk0P3t23znD16ov9BB1X9JAD3j+516/qHz4XMCBAgQ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bfZft5cc/er25H0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBcQQHcyCGQsUB5Af3Syij/z1sPJ1hr7Qm/99SMFgphfQN/6uK/LkjKmv1AjZQHspvpvov5Qf6HP2+w/VEvo8xz9QjX7nAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTiBATQ49y8RaAVgdQB1RO/eftM3QLo6cYYE9BNPd903RRXiukvVE+b/TdRf6i/0Odt9h+qJfR5jn6hmn1OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnECAuhxbt4i0IpAaUD1sV8bvfeJ3/JtM+9+5ro3Ra/lxVmBt/7G2wokUb+AXmO+Tc4kpr9QPanP90b7NVF/qL/Q5232H6ol9HmOfqGafU6AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECcQIC6HFu3iLQikBpQPXiC6L3PvGB3zrz7mfe8ubotbw4K/DW33x7gSQqgF5jvk3OJKa/UD2pz/dG+zVRf6i/0Odt9h+qJfR5jn6hmn1OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnECAuhxbt4i0IpA6oCqAHpzY4sJ6Kaeb3PdTSYx/YXqabP/JuoP9Rf6vM3+Q7WEPs/RL1SzzwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgTkAAPc7NWwRaESgNqO6+f/TeJ37rA2fe/cyb3xK9lhdnBd76WzcWSKJ+Ab3GfJucSUx/oXpSn++N9mui/lB/oc/b7D9US+jzHP1CNfucAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOIEBNDj3LxFoBWBsoDqll3nR++9+du+Zebd2990XfRaXpwVuP6331EgiQmg15lvkzOJ6S9UT+rzvdF+TdQf6i/0eZv9h2oJfZ6jX6hmnxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAnIAAepybtwi0IlAaUH1MjQD69rkA+mEB9FSDvP5FiQLoNeabqpeydWL6C9WT+nxvtF8T9Yf6C33eZv+hWkKf5+gXqtnnBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIBAnIIAe5+YtAq0IzAdUN2/fPVnasS16701Ll828u3rs8ui1unjx2KEjk1PunWdo/voX3VQgifoF9Md8TRe0wT1j+gstWh7Abqb/JuoP9Rf6vM3+Q7WEPs/RL1SzzwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgTkAAPc7NWwRaEVgfUK0bPp8W3OcA+jR8fvvhKyZbHn2/VuyrbnL977yz8EpUAH1A/YUMSwPYDfUfM59Q/XU/b7P/urXm6Fe3J+8TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLmAALqTQSBjgbWAaorw+bTNvgbQ18Ln0x62POq+WU7s+t+9uVBXVAB9QP2FBlUawG6o/5j5hOqv+3mb/detNUe/uj15nwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKBQTQnQwCGQtMA6qpwufTNvsYQF8fPp/2sPTIPAPoN+xNE0AfUn+hq1UWwG6q/5j5hOqv+3mb/detNUe/uj15nwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKBQTQnQwCGQscPbBndWnHtmQV9i2APh8+n0IsPfKrk3mkXOiGvbcUlov5BfQh9RfyLQ9gNzPfmPmE6q/7eZv91601R7+6PXmfAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMoFBNCdDAIEshUoDeg+4quyrPeG37u1UFdUAH1A/YUG1eZ8Y+YTqr/u5232X7fWHP3q9uR9AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgXEEB3MggQyFagNKD78EwD6L+fKIA+oP5CB6vN+d4QMZ9Q/XU/b7P/urXm6Fe3J+8TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLmAALqTQYBAtgJlAd3zHnafLOs98uJ3FeqK+QX0IfUXGlSb842ZT6j+up+32X/dWnP0q9uT9wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgXEAA3ckgQCBbgdKA7kPvnWW9Ry5/d6GuqAD6gPoLDarN+cbMJ1R/3c/b7L9urTn61e3J+wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQLiCA7mQQIJCtQHlAd2uW9R65/D2FuuIC6MPpLzSoNucbM59Q/XU/b7P/urXm6Fe3J+8TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLmAALqTQYBAtgKlAd0f2pJlvUde8t5CXVEB9AH1FxpUm/ONmU+o/rqft9l/3Vpz9Kvbk/cJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFxAAN3JIEAgW4HSgO4PZhpAf2miAPqA+gsdrDbneyRiPqH6637eZv91a83Rr25P3idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgEBdCeDAIFsBcoCuuf+wFKW9b5t3/sKdcX8AvqQ+gsNqs35xswnVH/dz9vsv26tOfrV7cn7BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAusOnogT2rW3Ze2kufleV9k6279m4Yoh96f70cnKIJLChQGtD9/vMWfLvdx962//2FDaMC6APqLzSBNuc7P58tF14y6frfvum/YbcfvmKG6dwRzT90PnxOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt0IbJoGADdv3915EK9q+9Pg3srB/ZNFAp5D7q+qm+cJ9EmgNKD8fedm2cLbXna0UNci30/zL507oP5Cg2pzvuvnk0P4fM1mPoQ+pvmHzofPCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAbgbsC6NOt+xTSXgufT+teNOA51P66OTZ2JdCOQJsB5bodCaBXF2xzvmvzySl8via2PoQugF79HHmDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNIKfCGAPl22DyHt9eHzac2LBtCH2l/a42A1AnkJlAWUz3nIOXkV+f+refsfrBTqqvL9tPbykPoLDarN+U7nk2P4fM1oLYQ+pvmHzofPCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAbgZkA+rSEnEPo8+Hzab1VA55D66+bY2NXAu0IlAaUv/fsZJuf9N33S7bWZPmqwlqbLrpt00YbNN1fuuYmk7e//FhhudD3b2j/Nvv/h09+x2TLzktDJXX6+fTfuHuc+jed1nC8zZuYf5aNKooAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJoUA+tTknIvulSXN26/4QKGuUACyNOA4oP6yHJSiCCQSaPr+nvQ9901U6WQyWT5UWCsqgD6i76em55tuuFaK+feXGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0U6A8gL7zrCy7efuBDxbqigqgD6i/LAelKAKJBEoDygnv70kP/upElU4D6NcW1ooKoCfsL11zk0nM929o/6bnG9rf54sLNDH/xXf3JAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0KVAeQL8w0wD6KxIF0AfUX5uHxV4E2hYoDSgnvL8nXZhhAD1hfynn9faI79/Q/k3PN7S/zxcXaGL+i+/uSQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoU6A0gH72g89ss4aF97rxyr8rPBvzC+hD6m9hPA/2UuDogT2rW3Ze2svaUxS9srxvcvvhK2aWSnl/T975VTNrf3r5vdFl+36qTrd685mrhbfOf8DCC9WZ18KbePAugZjzjY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+ilwnAD6GVl2c+OVHyrUFRdAH05/WQ5KUckEpr8QvXn77okQ+hdD6Gc/ON39PXnnfWZm9enl90XPzvdTdbryAPrXL7xQnXktvIkH7xKIOd/oCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCfAuUB9O85Pctubnzlhwt1RQXQB9RfloNSVDKBaQB9upgQ+hd/Cf3shPf35IvuPTOrT7/x/dGz8/1Una48gP61Cy9UZ14Lb+LBuwRizjc6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOinQHkA/bszDaC/KlEAfUD99fPYqXpRgbUA+vR5IfTPh9DPTnh/T/7euQD6n9YIoPt+WvRYf+G52gH0GvOqXOzIX7gx4nyPnEz7BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6K1AaQD9Xt91WpYNvePVHynUFfML6EPqL8tBKSqZwPoA+nRRIfR9k82b/zyZ7ykP2ZpsrcnyDYW1Nl1026aNNpif7/TZMX0/Ve1/fl6fesPRdPOz0oYCMf/+IiVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBfgqUB9C/89Qsu3nHaz5aqCsqgD6g/rIclKKSCZQGdDM9v8mabnGhU75vS7rdlt9WWCsqgJ7pfGO+f0O4Vc/3/Lw+9fqV0BY+TyTQxPwTlWYZAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgsUB5A/2+nJN4mzXLveO3HCgtFBdAH1F8aWavkKlAa0M30/OZquFFdp3z/Urqyl28srBUVQM90vjHfvyHcqud7fl6f+pNjoS18nkigifknKs0yBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBYoDyA/l9PTrxNmuXe8bqPFxaKCqAPqL80slbJVaA0oJvp+c3VcKO6TvmB89KVvXxTYa2oAHqm8435/g3hVj3f8/P61B9/ILSFzxMJNDH/RKVZhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQSC5QG0M/KNAB5U6IA+pD6S3weLJeZQFlAN9fzmxndQuWcOhdA/2SNQLPvp4XIZx6qer5Tzqt6teN+I+Z8j1tM9wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOivQHkA/TtOyrKjm/7wE4W6Yn4B/awB9ZfloBSVTKA0oJvp+U3WdIsLnfqD587s9sk/+mD07r6fqtNVPd8p51W92nG/EXO+xy2mewIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPRXoDyA/qB7ZtnRTX/0yUJdUQH0AfWX5aAUlUygNKCb6flN1nSLC536Q+fM7PbJP/y76N19P1Wnq3q+U86rerXjfiPmfI9bTPcECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDor0B5AP2/3CPLjm76408V6ooKoA+ovywHpahkAqUB3UzPb7KmW1zo1IeePbPbJ1/3oejdfT9Vp6t6vlPOq3q1434j5nyPW0z3BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6K9AeQD9P2caQP+TRAH0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CBAgQIAAAQIECBAgQIAAAQIECBAgQKAfArXD26s3n1lMhZ9/ZzPdLxd/AX3TRbfV7mGjYnPvrzSA/tWL/wGAc542F0j9TYHUZg7vZPLet7T/BxSa6mVt3fXnr2r4fLpGlQD69Pn5EPqQAugxfuvnO7W5/fAVk5M2uP/ue9M34vjrD/H+d6dpZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoUqB2eDv3gHZdvNz7Kw2gf1WFAPrT5wLovyGAXvfMHO/991433AB6bHi6agB9ars+hD6UAHqs39pZWwufT//7SRvc/3Pc96aud3DdId7/YNMeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFeCgigB8bWxwD6Pe+zeAD93GfMBtA/+OsC6E3d5Pe9dZgB9Drh6ZgA+nQ+ayH0IQTQ6/itWUx/+XztPxvdf/e9qdsdXneI9z/ctScIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoI8CAuiBqfUygH7vCgH0Z84F0H9NAL2pi/y+64cXQD96YM/q0o5t0WSxAfTphtMQ+tZde2t/h0UXn+DFun7rf/l8rZx7bnD/z3XfE0wtbokh3v84CW8RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQO4CtcObNz75xEKq9h5bFw9AVwF6/w3tB3hz769ufec9azaA/oFf7TaAPl9PlfOR/bPL/7dQ4qaLbqt9B7PvW4GNCVS9/7nd99QwWX9/uP+px209AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGhIoHb4tTQAueVfGyn3/UeKyz7oyjtq97BRsbn3V7e+8579ZTPtf+BX7mhkdosuOl/Pou/14rnlYpUC6L2YXLZFVr3/ud331LBZf3+4/6nHbT0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaEigdni7NAC51FAA/W1FhU4C6Bn1V9f/vOfMBdB/ueMA+lw9DZ37bpYVQO3GfcC7Vr3/ud331KOZ7y/1+rXWc/9r8XmZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNoTaCSA/pXnNRNAP/r2IkwXAfSc+isLoFapb+nHZgPox36p2wD6fD3tXYUWdhJAbQF5XFtUvf+53ffU08r6+8P9Tz1u6xEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAQwLNBNDPbSiAfmNRoZMAekb9lQZQK9S39Ny5APovdhxAz6yelPfuaAfnN2X91spPoOr9z+2+pxbNuT/3P/W0rUeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTQk0E0A/p6EA+juKDJ0E0DPqrzSAWqG+pefNBdB/oeMAemb1pLx4Rzs4vynrt1Z+AlXvf273PbVozv25/6mnbT0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaEqgkQD65rP/pZF6V24qlttFAD2n/soCqFXq2/L8L52Z1crP/3Mjs1t00dzqWbTuRZ7r4vwuUpdn+itQ9f4P+X5Np5hzf+5/f++ZygkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDA2gWYC6PdqKID+zkwC6Bn1VxpArVDflhfMBdB/ruMAemb1pPxCWOng/Kas31r5CVS9/7nd99SiOffn/qeetvUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCkBAfSAbNWAZ51BxQQU69aXW2Azt3rqzHP+3Zj5ptzfWsMTqHr/h3y/ptPNuT/3f3j3T0cECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYqkAzAfSzGvoF9Jsz+QX0jPorDaBWqG/Lj8/9AvrPdvwL6JnVk/Lir3RwflPWb638BKre/9zue2rRnPtz/1NP23oECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0JRAIwH0E89sJoB+7JY8Aug59VcWQK1S39YXzgbQj/5MtwH03OpJefG6OL8p67dWfgJV7/+Q79d0Ojn35/7nd39URIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLlAskD6Ju3754s7djWiPexQ0cmKwf3z6z9oCvvqN3DRsXOBzxz669ufZuWLptpf/XY5Y3MbtFFc6tn0boXea6L87tIXZ7pr0DV+z/k+zWdYs79uf/9vWcqJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwNgEaoe31wcgmwxnrw1mPsTXZgA9x/7q+ucW2MytntRfCG2f39T1Wy8vgar3f+j3K/f+3P+87o9qCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBcIFkAvY1w9loL60N8bQXQc+1vLYAaW19ugc3c6mnii6PN89tE/dbMR6Dq/R/6/epDf+5/PvdHJQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQLpAkgB4bfq4zlLUQXxsB9Jz7mwZQ69SXW2Azt3rqnNGN3m3r/DZVv3XzEKh6/4d+v/rSn/ufx/1RBQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUC9QOoB89sGd1ace2TnynIb6tu/bW7mGj4nPvr259uQU2c6unyYPdxvltsn5rdy9Q9f4P/X71qT/3v/v7owICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBeoHd5+/NLm1S5xX3zs9to9bFR/7v11XV+Xsx/C3k2f36aNuj5/fferO5+u/evWP/b3x35+xz5//RMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCBXgdrh7a4DkE0H+HLvr+v6cj3Yfamr6fPbtEPX56/vfnXn07V/3frH/v7Yz+/Y569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5CoggB6YTNcBz1BAsev6cj3YfakrNN/c++j6/PXdr+58u/avW//Y3x/7+R37/PVPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBXAUE0AOT6TrgGQoodl1frge7L3WF5pt7H12fv7771Z1v1/516x/7+2M/v2Ofv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQq4AAemAyXQc8QwHFruvL9WD3pa7QfHPvo+vz13e/uvPt2r9u/WN/f+znd+zz1z8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRyFRBAD0ym64BnKKDYdX25Huy+1BWab+59dH3++u5Xd75d+9etf+zvj/38jn3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECuAgLogcl0HfAMBRS7ri/Xg92XukLzzb2Prs9f3/3qzrdr/7r1j/39sZ/fsc9f/wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMhVQAA9MJmuA56hgGLX9eV6sPtSV2i+uffR9fnru1/d+XbtX7f+sb8/9vM79vnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArkKCKAHJtN1wDMUUOy6vlwPdl/qCs039z66Pn9996s7367969Y/9vfHfn7HPn/9EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIFcBAfTAZLoOeIYCil3Xl+vB7ktdofnm3kfX56/vfnXn27V/3frH/v7Yz+/Y569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5CoggB6YTNcBz1BAsev6cj3YfakrNN/c++j6/PXdr+58u/avW//Y3x/7+R37/PVPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBXAUE0AOT6TrgGQoodl1frge7L3WF5pt7H12fv7771Z1v1/516x/7+2M/v2Ofv/4JECBAgAABAgQIECBAgAABAgQIECBrWEI/AAAgAElEQVRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQq4AAemAyXQc8QwHFruvL9WD3pa7QfHPvo+vz13e/uvPt2r9u/WN/f+znd+zz1z8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRyFRBAD0ym64BnKKDYdX25Huy+1BWab+59dH3++u5Xd75d+9etf+zvj/38jn3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECuAgLogcl0HfAMBRS7ri/Xg92XukLzzb2Prs9f3/3qzrdr/7r1j/39sZ/fsc9f/wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMD/Y+8Ozm63cWyBfhVBhdSxd0gVQb9pW+5394EhCaS4xoekgAX8d7ZtAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAgLoYTLTAc8UUJyub9XF3qWuNN/V+5jev939uvOd9u/Wf/r90/f39PnrnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsKCKCHyUwHPFNAcbq+VRd7l7rSfFfvY3r/dvfrznfav1v/6fdP39/T569/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrCoggB4mMx3wTAHF6fpWXexd6krzXb2P6f3b3a8732n/bv2n3z99f0+fv/4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqoAAepjMdMAzBRSn61t1sXepK8139T6m9293v+58p/279Z9+//T9PX3++idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCqAu0A+qqNqYsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEagIC6DUvpwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPBZAQH0z45WYwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgJCKDXvJwmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAZwUE0D87Wo0RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgJiCAXvNymgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvZBThUAACAASURBVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8VEED/7Gg1RoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZqAAHrNy2kCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8VuBf//Xvf//PZHf//Z//tELw3fqr37/7e933urN7u/9uvd37136n/e/u5/petb+0D9333r5f9b27/+r3v35+N99U79fnpT8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOFNAAL0YgK8GaK9rtVoAuhqw7PY//We2mn/XI82vOq+n3+vWU71f9b27/+r3v35+N99U79fnpT8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOFNAAF0AvfR/oH86APz0n6EA+p+FU+C2Ov+ud/d+dZ/u7r/6/a+f38031fv1eemPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBM4UEEAXQBdA3/hvPwVku4HxK033vbfvV0d7t2f1+18/v5tvqvfr89IfAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJwpEAPoT/8fiLsBv2qg9Trm6vfv/l73ve7avt1/t97u/af3uVtf9X6aX3W/7n6v2s/0+dP7f9p/N99U79Ne3idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhMCAuj+D+j+D+gTf3k3fTMFZAXQa9B3e9a+/v3Tu/mmer8/MR0SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwIkCAugC6ALoG//lp4CsAHptuHd71r7+/dO7+aZ6vz8xHRIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAiQIC6ALoAugb/+WngKwAem24d3vWvv7907v5pnq/PzEdEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCJAscH0K9DvwYOqwHetERPv5++n/pN9+/2SN/zOwEC5wjs/u/jOZPSKQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8WUAA/TLdpwOQT79fXdbq/+FXAL0q7DwBAr8K7P7v4699OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFYWEEC/TOfpAOTT71eXTQC9KuY8AQJPCez+7+NTLt4lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJvCgigX7SfDkA+/X51eQTQq2LOEyDwlMDu/z4+5eJdAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwpsDfAujdQHK6/1///vf//O8G0/mEcX0vnU+/Px2AfPr91N/076vNO3mkeu/ev1TP9O9P7+/d76f5XT1Pm+f0Pl2/f/f8U3/V/Ujv+Z0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHxBQAD9MsWnA5BPv7/6UnYDn28HhFO9b9czPd+n9/fu99P8rp6nzXN6n67fv3v+qb/qfqT3/E6AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL4gIIB+meLTAcin3199KbuBz7cDwqnet+uZnu/T+3v3+2l+V8/T5jm9T9fv3z3/1F91P9J7fidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl8QEEC/TPHpAOTT76++lN3A59sB4VTv2/VMz/fp/b37/TS/q+dp85zep+v3755/6q+6H+k9vxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgS8IlAPodwc0uwHAu+v5wlBX7qE67+n5pnq79b0duF15N9RG4G2B9Pf9dj2+R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEVhAQQF9hCgfVUA18dgPeXdpUb7c+AfTuhNwn8M8F0t/3P3/ZTQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsK+AAPq+s9uy8mrgsxvw7iKlerv1CaB3J+Q+gX8ukP6+//nLbhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgX0FBND3nd2WlVcDn92Adxcp1dutTwC9OyH3CfxzgfT3/c9fdpMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwrIIC+7+y2rLwa+Hw74F2t7zqEar3dAHqqt1tPt78tl1TRxwikv59jIDRKgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT+l4AAunV4VaAa+KwGqK/NVAPe1fqu36vWW60v9Xd3Pd33Xl0uHyNQFOj+vRc/5zgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENhCQAB9izF9p8hq4LMa6L5KVQPe1fqu36vWW60v9Xd3Pd33vrO5OvmiQPfv/YsmeiJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgLoduBVgWrgsxrovjZTDXhX67t+r1pvtb7U3931dN97dbl8jEBRoPv3Xvyc4wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAuB8QD6VakaCKwGfreYyoeLTPO9e56rBbzTvqf+k9/1/fRequfu96r1fPhP4f9srTrfu32+Pp9p37vn5T0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCEgAD6E6re/P8KpADo3QFYAfR//09lHe+eT9e/UvsXzib/p3u8++/v6Xqr70/7Vut1ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQITAgIoE+oH/zNFAC9OwDbDUA/XW+1vlTPdbWqnun97nvV+6f9qST/pz2+Pp9p36fn530CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHCHgAD6HYre+FkgBUDvDsBWA97XRp6ut1pfqudaf9Uzvd99r3r/58X6yMHk/3SbX5/PtO/T8/M+AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4Q6AcQL9+9BpYrAZqr+9VA4JfD0zeMeSV3kjz7c7z7vfvfi/te+o/1ZP+PrvfT7tUrS+9lzzS/Wo93e+levz+Z4HqvHgSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC9wsIoN9v6sU/CKSAaTcAfPf7d793pan+BxtSPdf3k2f1+2m5q/Wl91L96X61nu73Uj1+/7NAdV48CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfsFBNDvN/XiHwRSwLQbAL77/bvfu9JUA+Cpnuv7ybP6/bTc1frSe6n+dL9aT/d7qR6//1mgOi+eBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwP0CAuj3m3rxDwIpYNoNAN/9/t3vXWmqAfBUz/X95Fn9flruan3pvVR/ul+tp/u9VI/f/yxQnRdPAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4H6BvwXQr5+oBlSr5+9vyYsdgafn9/b7V4vVAsZVjxTQXb2/6m6u1k+1fudrAmm/a685TYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPwTAQH0f6L24TvVQHSV4u33r/WtFmiueqSA7ur9VfdltX6q9TtfE0j7XXvNaQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCfCAig/xO1D9+pBqKrFG+/f61vtUBz1SMFdFfvr7ovq/VTrd/5mkDa79prThMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL/REAA/Z+offhONRBdpXj7/Wt9qwWaqx4poLt6f9V9Wa2fav3O1wTSftdec5oAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4JwLHB9CrgcfVArHVAHNakqffu36/61md393fT57p96p39Xz6/tO/7z6fp328/1eB7r7wJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPoCAuj/+c+/KozdwHTlW7+cvTuQ/PR71566nt3Aavf7v8zoT2eq3tXz3fq693efT7d/92sC3X2pfc1pAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4P8SEEAXQP/LXtwdcE6B0m4APL2f/uy730/vp9+r3tXz6ftP/777fJ728f5fBbr7wpMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCwigC6D/ZYvuDjinQGk3AJ7eT38i3e+n99PvVe/q+fT9p3/ffT5P+3j/rwLdfeFJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI9AViAL36ia8HZKcDy9d53O399HvX+rue3cBq9/vVv4/u/Lrz6d6v9tudz937Uq3f+XcF7t6Xd6v3NQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8A0BAXT/B/S/bPLdAeUUKO0GwNP76c+0+/30fvq96l09f/1+937qJ32vev96fnpe3frd/7NA9++ZLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAXEEAXQP/LFt0dUE6B0m6gOL2f/kS630/vp9+r3tXz1+9376d+0veq96/np+fVrd/9Pwt0/575EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn0BAXQB9L9s0d0B5RQo7QaK0/vpT6T7/fR++r3qXT1//X73fuonfa96/3p+el7d+t3/s0D375kvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0Be4PYDeL8kLKwncHQjtBojfDlDfPYuqZ9frWn/Vr3v++v2n++nO6+76uvWcdr/693Gaj34JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAbAgLobyhv/I27A6HdgG81EL0afdWz63Xtv+rXPX/9/tP9dOd9d33dek67X/37OM1HvwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4A0BAfQ3lDf+xt2B0G7AtxqIXo2+6tn1uvZf9euev37/6X668767vm49p92v/n2c5qNfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwhoAA+hvKG3/j7kBoN+BbDUSvRl/17Hpd+6/6dc9fv/90P915311ft57T7lf/Pk7z0S8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHhDQAD9DeWNv1ENhD4d4K0GolejX80z+VS9q+fT96u/V32v7z+9v9V+Tjvfnd9pXvolQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJPCAigP6H6oTergdCnA7zTAefuaFfzTP1Uvavn0/erv1d9r+8/vb/Vfk47353faV76JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTwgIoD+h+qE3q4HQpwO80wHn7mhX80z9VL2r59P3q79Xfa/vP72/1X5OO9+d32le+iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk8ICKA/ofqhN6uB0KcDvNMB5+5oV/NM/VS9q+fT96u/V32v7z+9v9V+Tjvfnd9pXvolQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJPCAigP6H6oTdTIPTtwO5q9VRHfXf904Hva//T9STfNK+39znVc/fvyWe6/1Tf3R7eI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBP4uIIBuK/4okAKhbwdWV6unuj531z8d+L72P11P8k3zenufUz13/558pvtP9d3t4T0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDg7wIC6LbijwIpEPp2YHW1eqrrc3f904Hva//T9STfNK+39znVc/fvyWe6/1Tf3R7eI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBP4uIIBuK/4okAKhbwdWV6unuj531z8d+L72P11P8k3zenufUz13/558pvtP9d3t4T0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDg7wJ/C6CnAGAKKE4HUE8b8tPz6r5/9zxWqyf1l+q93k9/X9fz6f3qe6mf9Pvdf//V/tL5VP/bXqme037vzu80L/0SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEnBATQn1B98c0U2EyB2hQY7r5/N8Vq9aT+Ur3X+2le1/Pp/ep7qZ/0e9qndL/bX/JI33/bK9Vz2u/d+Z3mpV8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCEgAD6E6ovvpkCmylQmwLD3ffvplitntRfqvd6P83rej69X30v9ZN+T/uU7nf7Sx7p+297pXpO+707v9O89EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJ4QEEB/QvXFN1NgMwVqU2C4+/7dFKvVk/pL9V7vp3ldz6f3q++lftLvaZ/S/W5/ySN9/22vVM9pv3fnd5qXfgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwBMCfwugXz9SDZRWzz/R1ElvPu399PvVWXUDqm8HjKv1pvqq71V9r+er9aTz3XrSv0/d99+uv1vv1+6/vd9f89MPAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4Q0AA/Q7FwTeeDog//X6VrhtQfTtgXK031Vd9r+p7PV+tJ53v1nO9f7fH2/Xf7bH7e3fPc3cP9RMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQkBAfQJ9Ru/+XRA/On3qxTdgOrbAeNqvam+6ntV3+v5aj3pfLee6/27Pd6u/26P3d+7e567e6ifAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMCAigT6jf+M2nA+JPv1+l6AZU3w4YV+tN9VXfq/pez1frSee79Vzv3+3xdv13e+z+3t3z3N1D/QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEJAAH1CfaNvrh5AvwaGV6/3Ovpq4PnpgG63nur97p/C3R5v19/t/2v3757n13z0Q4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE3hAQQH9DeeNvrB7oFkC/d7mqAezp/bg7sFzt/159r909T6IECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXUAAvW521I3pgPEVO9WTfn97eClQWw08p/e6/XXrqd7v1nu3x9v1d/v/2v275/k1H/0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIE3BATQ31De+BurB7r9H9DvXa5qAHt6P+4OLFf7v1ffa3fPkygBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQF/h8AL0akK2er5I//X6qZ/r7qb7q7ymwOh0o7taX7le90vnklepJ99P3q7+neqrvvV1/tb6vn797nl/30h8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHhCQAD9ovp0QPvp99OSTH8/1Vf9PQVWpwPF3frS/apXOp+8Uj3pfvp+9fdUT/W9t+uv1vf183fP8+te+iNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk8ICKBfVJ8OaD/9flqS6e+n+qq/p8DqdKC4W1+6X/VK55NXqifdT9+v/p7qqb73dv3V+r5+/u55ft1LfwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4AkBAfSL6tMB7affT0sy/f1UX/X3FFidDhR360v3q17pfPJK9aT76fvV31M91fferr9a39fP3z3Pr3vpjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPCHwr+uj1wBmNbCcAoRPBzy73+/eT0Oqeqb30u9P95O+KAR9vgAAIABJREFU//Tvb3tW++nWl+ZXrSf9vXff6/Z7/X7qP/17Ve3n6X+fqvWcdj7N+zQP/RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQkBAfSLegpAdgOqdwd009I83U/6/tO/v+1Z7adbX5pftZ7r+e4+X9/r9pveS/V3ve726M7ntPvd+Z3mpV8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCEgAD6RTUFILsB1bsDumkpnu4nff/p39/2rPbTrS/Nr1rP9Xx3n6/vdftN76X6u153e3Tnc9r97vxO89IvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4QkAA/aKaApDdgOrdAd20FE/3k77/9O9ve1b76daX5let53q+u8/X97r9pvdS/V2vuz268zntfnd+p3nplwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPCHwrxS4rAZKU4Awfa/bZPf73fup/qpneu/035+e17Rv6q9b39N/j936qve7Xl/zqPpNn+/Ob7p+3ydAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl8QEEC/TDEFILsBVQH0e/9snp7XvdXWX0v91V/8643uPne/f/f9rtfXPO72ffq97vyers/7BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgBAEB9MuUUwCyG1AVQL/3z+rped1bbf211F/9xb/e6O5z9/t33+96fc3jbt+n3+vO7+n6vE+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBE4QEEC/TDkFILsBVQH0e/+snp7XvdXWX0v91V/8643uPne/f/f9rtfXPO72ffq97vyers/7BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgBIHXA+hX1G7gsxpYTN9L76X7aWl2C6Anj9Tv0/O+zmM336vP3d5pPmmfd/dM/affn55H8k/1Te9PtT7nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfUFBNAvM0qB025gdLdAb/KorvjTfrv5Xv3u9k7zSfPY3TP1n35/eh7JP9U3vT/V+pwnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1hcQQL/MKAVOu4HR3QK9yaO64k/77eZ79bvbO80nzWN3z9R/+v3peST/VN/0/lTrc54AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYX0AA/TKjFDjtBkZ3C/Qmj+qKP+23m+/V727vNJ80j909U//p96fnkfxTfdP7U63PeQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB9AQH0y4xS4LQbGN0t0Js8qiv+tN9uvle/u73TfNI8Vvd82yt5+p0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsLuAAPplginQmgK7aSFWD/Re608eqd/r70/77eb7tHeaT5rH6p5372fy8jsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4OsCAuiXCadAawrspoVZPdB7rT95pH6vvz/tt5vv095pPmkeq3vevZ/Jy+8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAga8LCKBfJpwCrSmwmxZm9UDvtf7kkfq9/v60326+T3un+aR5rO55934mL78TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL4u8K+vN6g/AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDweQEB9M+PWIMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4TUAA/TcnpwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB5AQH0z49YgwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhNQAD9NyenCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8HkBAfTPj1iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+E1AAP03J6cIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT+X/t2SAQAAIBArH9rKqD/5jEMDQECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gIO6PmJFSRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAn4ID+OUkRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgL+CAnp9YQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHwCDuifkxQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTyAg7o+YkVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCfggP45SREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAv4ICen1hBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfAIO6J+TFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gIO6PmJFSRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAn4ID+OUkRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgL+CAnp9YQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHwCDuifkxQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTyAg7o+YkVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCfggP45SREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAv4IBrwzfNAAAMCElEQVSen1hBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfAIO6J+TFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gIO6PmJFSRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAn4ID+OUkRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgL+CAnp9YQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHwCDuifkxQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTyAg7o+YkVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCfggP45SREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAv4ICen1hBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfAIO6J+TFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gIO6PmJFSRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAn4ID+OUkRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgL+CAnp9YQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHwCDuifkxQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTyAg7o+YkVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCfggP45SREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAv4ICen1hBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfAIO6J+TFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gIO6PmJFSRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAn4ID+OUkRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgL+CAnp9YQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHwCDuifkxQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTyAg7o+YkVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCfggP45SREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAv4ICen1hBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfAIO6J+TFAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPICDuj5iRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAJ+CA/jlJESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC/ggJ6fWEECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8Ag7on5MUAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE8gID0xvYFY/L8T4AAAAASUVORK5CYII="}],"reference_images":[{"name":"Pasted","layer":"viewport","scope":"project","position":[341,226],"size":[311,311],"opacity":0.5,"source":"data:image/png;base64,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"}]} diff --git a/designModels/starlike/starlike-starlike.bbmodel b/designModels/starlike/starlike-starlike.bbmodel new file mode 100644 index 00000000..8a0ebe5e --- /dev/null +++ b/designModels/starlike/starlike-starlike.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"minecraft_title","box_uv":false},"name":"starlike-title","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":1000,"height":320},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[98,2,-11],"to":[126,42,11],"autouv":0,"color":9,"origin":[64,0,0],"faces":{"north":{"uv":[580,22,608,62],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[608,22,580,62],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[608,22,580,0],"texture":0},"down":{"uv":[608,84,580,62],"texture":0}},"type":"cube","uuid":"335a9617-436d-0d87-c28d-f26e5dc002b5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[112,12,-13],"to":[128,16,13],"autouv":0,"color":7,"origin":[64,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,266,1,267],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"3476cb27-b51c-04a8-b2f6-77934839ae2a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[96,28,-13],"to":[112,32,13],"autouv":0,"color":4,"origin":[64,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"ad54cadd-96d4-3575-e060-018676483f39"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[128,44,13],"to":[96,0,-13],"autouv":0,"color":2,"origin":[64,0,0],"faces":{"north":{"uv":[0,277,2,288],"texture":0},"east":{"uv":[0,277,1,288],"texture":0},"south":{"uv":[2,277,0,288],"texture":0},"west":{"uv":[1,277,2,288],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"9a85b301-071d-9420-c111-8b51b3bbd9fd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[66,2,-11],"to":[94,42,11],"autouv":0,"color":9,"origin":[64,0,0],"faces":{"north":{"uv":[610,22,638,62],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[638,22,610,62],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[638,22,610,0],"texture":0},"down":{"uv":[638,84,610,62],"texture":0}},"type":"cube","uuid":"1532e4dd-dbe0-74b9-d98c-3fa51f0b27ec"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[88,0,-13],"to":[96,32,13],"autouv":0,"color":3,"origin":[64,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,266,1,267],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"5b7a43d8-23b0-987e-2740-55223d3f4fd2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[64,0,-13],"to":[72,32,13],"autouv":0,"color":9,"origin":[64,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,0,0,0],"texture":null}},"type":"cube","uuid":"3df33e28-1e3d-7321-5e05-c5dca9d6d042"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[96,44,13],"to":[64,0,-13],"autouv":0,"color":6,"origin":[64,0,0],"faces":{"north":{"uv":[2,288,6,277],"texture":0},"east":{"uv":[2,288,3,277],"texture":0},"south":{"uv":[2,288,6,277],"texture":0},"west":{"uv":[2,288,3,277],"texture":0},"up":{"uv":[2,288,6,287],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"e144f450-6357-d625-df46-a54db4531bee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[34,2,-11],"to":[62,42,11],"autouv":0,"color":0,"origin":[64,0,0],"faces":{"north":{"uv":[30,22,58,62],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[58,22,30,62],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[58,22,30,0],"texture":0},"down":{"uv":[58,84,30,62],"texture":0}},"type":"cube","uuid":"7efc91de-49b1-896a-9f87-78484d64e03b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[64,44,13],"to":[32,0,-13],"autouv":0,"color":6,"origin":[64,0,0],"faces":{"north":{"uv":[0,266,1,267],"texture":0},"east":{"uv":[0,266,1,267],"texture":0},"south":{"uv":[0,266,1,267],"texture":0},"west":{"uv":[0,266,1,267],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"2b7f4122-6ef4-3804-1ce2-7454ed43a8cd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[2,2,-11],"to":[30,42,11],"autouv":0,"color":4,"origin":[64,0,0],"faces":{"north":{"uv":[550,22,578,62],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[578,22,550,62],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[578,22,550,0],"texture":0},"down":{"uv":[578,84,550,62],"texture":0}},"type":"cube","uuid":"7004e2cc-0bb9-c667-d769-aa556ae0b314"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[32,44,13],"to":[0,0,-13],"autouv":0,"color":9,"origin":[64,0,0],"faces":{"north":{"uv":[0,266,1,267],"texture":0},"east":{"uv":[0,266,1,267],"texture":0},"south":{"uv":[0,266,1,267],"texture":0},"west":{"uv":[0,266,1,267],"texture":0},"up":{"uv":[0,266,1,267],"texture":0},"down":{"uv":[0,266,1,267],"texture":0}},"type":"cube","uuid":"4e39e333-9d8b-c23c-337b-023bb6edaebe"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26,2,-11],"to":[-2,42,11],"autouv":0,"color":1,"origin":[-54,0,0],"faces":{"north":{"uv":[344,22,368,62],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[368,22,344,62],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[368,22,344,0],"texture":1},"down":{"uv":[368,84,344,62],"texture":1}},"type":"cube","uuid":"1e8543f3-8f02-8c38-7cb9-1868d71a76ab"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-28,12,-13],"to":[-16,44,13],"autouv":0,"color":1,"origin":[-54,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"68e9a253-f6f1-6450-e1f6-5b973773d17c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[0,44,13],"to":[-28,0,-13],"autouv":0,"color":9,"origin":[-54,0,0],"faces":{"north":{"uv":[9,277,16,266],"texture":1},"east":{"uv":[9,277,10,266],"texture":1},"south":{"uv":[16,277,9,266],"texture":1},"west":{"uv":[0,266,1,267],"texture":1},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[16,266,9,267],"texture":1}},"type":"cube","uuid":"d9f396eb-0b6c-748c-5f7e-73d3ec554479"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-42,2,-11],"to":[-30,42,11],"autouv":0,"color":7,"origin":[-54,0,0],"faces":{"north":{"uv":[270,22,282,62],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[282,22,270,62],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[282,22,270,0],"texture":1},"down":{"uv":[282,84,270,62],"texture":1}},"type":"cube","uuid":"65b71d6c-90da-dd84-9fd4-de2862306fca"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-28,44,13],"to":[-44,0,-13],"autouv":0,"color":4,"origin":[-54,0,0],"faces":{"north":{"uv":[0,266,1,267],"texture":1},"east":{"uv":[0,266,1,267],"texture":1},"south":{"uv":[0,266,1,267],"texture":1},"west":{"uv":[0,266,1,267],"texture":1},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"b2b211b5-606d-bd52-4de2-48f38a949085"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-74,2,-11],"to":[-46,42,11],"autouv":0,"color":6,"origin":[-54,0,0],"faces":{"north":{"uv":[314,22,342,62],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[342,22,314,62],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[342,22,314,0],"texture":1},"down":{"uv":[342,84,314,62],"texture":1}},"type":"cube","uuid":"6c9e8c9c-0868-3078-918f-ebd54fc43627"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-44,44,13],"to":[-76,0,-13],"autouv":0,"color":7,"origin":[-54,0,0],"faces":{"north":{"uv":[0,266,1,267],"texture":1},"east":{"uv":[0,266,1,267],"texture":1},"south":{"uv":[0,266,1,267],"texture":1},"west":{"uv":[0,266,1,267],"texture":1},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"5b9524ce-fedd-429f-74e9-fdeb462eef4e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-106,2,-11],"to":[-78,42,11],"autouv":0,"color":0,"origin":[-54,0,0],"faces":{"north":{"uv":[150,22,178,62],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[178,22,150,62],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[178,22,150,0],"texture":1},"down":{"uv":[178,84,150,62],"texture":1}},"type":"cube","uuid":"101e4f9f-12e6-c772-987f-944e717b2704"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-108,28,-13],"to":[-92,32,13],"autouv":0,"color":4,"origin":[-54,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"31cb5829-8d5a-7089-9323-866fa04ba66d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-108,12,-13],"to":[-92,16,13],"autouv":0,"color":1,"origin":[-54,0,0],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,266,1,267],"texture":1},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"535e7e4a-8301-fe1c-a206-cd55a60a34ac"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-76,44,13],"to":[-108,0,-13],"autouv":0,"color":9,"origin":[-54,0,0],"faces":{"north":{"uv":[3,266,5,277],"texture":1},"east":{"uv":[4,266,3,277],"texture":1},"south":{"uv":[5,266,3,277],"texture":1},"west":{"uv":[0,266,1,267],"texture":1},"up":{"uv":[0,266,1,267],"texture":1},"down":{"uv":[0,266,1,267],"texture":1}},"type":"cube","uuid":"99e80c8c-43bc-f3ea-9153-1005f5b43082"}],"outliner":[{"name":"starlike","origin":[0,0,0],"color":0,"uuid":"81ae8cb0-8994-5ede-8933-ded3ffd7c5e7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"s","origin":[0,0,0],"color":0,"uuid":"0eac7f93-9863-3c56-2967-251163e7b55d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"t","origin":[0,0,0],"color":0,"uuid":"845bfd9e-74e1-84c9-6608-6ae71bf0d131","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"c3bfbadf-6d8f-fa5b-d300-b0b5aacd524b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"r","origin":[0,0,0],"color":0,"uuid":"b8dad0ec-9aa6-04dd-b9b0-b5b30d077ff1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"4c560e5a-94cc-510f-28a8-76dfc5c4ee21","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"4ab48db1-768b-5a04-8419-18b9218c482c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"k","origin":[0,0,0],"color":0,"uuid":"d9440efb-4954-ee47-773f-ab35a967b250","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"391e515f-b5a5-b3ab-e2d2-9c3b92b74871","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]}]},{"name":"starlike","origin":[0,0,0],"color":0,"uuid":"600df34b-86fe-6982-8ec1-b78816f836dc","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"s","origin":[0,0,0],"color":0,"uuid":"126d52ea-6e12-6be3-a254-4a95ae0382b3","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"t","origin":[0,0,0],"color":0,"uuid":"4bb09f4a-db84-c8ae-b36a-43a00e7dd029","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"c4b19c52-637a-5e43-5a39-03b4cafd2ac6","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"r","origin":[0,0,0],"color":0,"uuid":"c653f0aa-f76f-5b63-419b-17936a77f693","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"0a1fcd04-7e9a-0569-cfe8-efe7273a7748","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"1fa93872-3b5f-9d9c-aef3-f6728c1539df","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"k","origin":[0,0,0],"color":0,"uuid":"d1e1c6d8-8b18-f4cf-a283-cf0ec6e41829","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"a599a73f-c8ff-8ef6-22e0-89dc63ef8d87","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]}]},{"name":"starlike","origin":[0,0,0],"color":0,"uuid":"83a76348-4777-bbef-c6b1-fbd24d3bfa76","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"s","origin":[0,0,0],"color":0,"uuid":"1b7fa127-33c2-6739-f001-41f80c6f13fd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"t","origin":[0,0,0],"color":0,"uuid":"4fe58ba9-f1f0-0660-271d-0e4734a3e46d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"f7aa8b00-75ee-cdcf-0ee3-4646549d921a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"r","origin":[0,0,0],"color":0,"uuid":"e8535de7-3499-8284-7ca5-6f69a200b46a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"13879e0b-9478-737b-6bc0-811949ca7cf1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"75224b02-2d93-2457-a569-5ffc6c545850","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"k","origin":[0,0,0],"color":0,"uuid":"c3959f2f-01b5-1e1a-3a07-10c879f1cbc8","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"32c5c500-0bf0-58cd-ef04-690ce9299531","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]}]},{"name":"star","origin":[64,0,0],"color":0,"uuid":"7f4152fd-e1ed-131b-9d81-f5738d6690dd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"s","origin":[64,0,0],"color":0,"uuid":"3843b293-bacb-f969-fea2-984d71e7c1a4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["335a9617-436d-0d87-c28d-f26e5dc002b5","3476cb27-b51c-04a8-b2f6-77934839ae2a","ad54cadd-96d4-3575-e060-018676483f39","9a85b301-071d-9420-c111-8b51b3bbd9fd"]},{"name":"t","origin":[64,0,0],"color":0,"uuid":"e3033461-c846-5818-bfa6-22709c2906fa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["1532e4dd-dbe0-74b9-d98c-3fa51f0b27ec","5b7a43d8-23b0-987e-2740-55223d3f4fd2","3df33e28-1e3d-7321-5e05-c5dca9d6d042","e144f450-6357-d625-df46-a54db4531bee"]},{"name":"a","origin":[64,0,0],"color":0,"uuid":"9f7a969d-267b-4174-46fe-eabe7313a8a9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7efc91de-49b1-896a-9f87-78484d64e03b","2b7f4122-6ef4-3804-1ce2-7454ed43a8cd"]},{"name":"r","origin":[64,0,0],"color":0,"uuid":"6cd10c75-cfc2-b1f7-38b2-7a3afd3449f4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7004e2cc-0bb9-c667-d769-aa556ae0b314","4e39e333-9d8b-c23c-337b-023bb6edaebe"]}]},{"name":"like","origin":[-54,0,0],"color":0,"uuid":"c81d8c2b-95e4-dacd-b196-aca7c64c0e48","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"l","origin":[-54,0,0],"color":0,"uuid":"431a1d7f-422e-60b0-c418-eaac87fe4064","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["1e8543f3-8f02-8c38-7cb9-1868d71a76ab","68e9a253-f6f1-6450-e1f6-5b973773d17c","d9f396eb-0b6c-748c-5f7e-73d3ec554479"]},{"name":"i","origin":[-54,0,0],"color":0,"uuid":"0b934d33-3f25-9c9a-46ea-528d0b718491","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["65b71d6c-90da-dd84-9fd4-de2862306fca","b2b211b5-606d-bd52-4de2-48f38a949085"]},{"name":"k","origin":[-54,0,0],"color":0,"uuid":"51c87065-8768-bda3-85e0-f207c3c839c7","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["6c9e8c9c-0868-3078-918f-ebd54fc43627","5b9524ce-fedd-429f-74e9-fdeb462eef4e"]},{"name":"e","origin":[-54,0,0],"color":0,"uuid":"0b914f60-3d92-5a45-7414-c5c4db3224c5","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["101e4f9f-12e6-c772-987f-944e717b2704","31cb5829-8d5a-7089-9323-866fa04ba66d","535e7e4a-8301-fe1c-a206-cd55a60a34ac","99e80c8c-43bc-f3ea-9153-1005f5b43082"]}]}],"textures":[{"path":"","name":"star.png","folder":"","namespace":"","id":"0","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"afcf36fc-00b8-43d3-007e-9f96545a44d4","source":"data:image/png;base64,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"},{"path":"","name":"like.png","folder":"","namespace":"","id":"1","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"caae73f8-2f52-c03f-4711-1eb4a178fd05","source":"data:image/png;base64,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"}]} diff --git a/designModels/starlike/starlikeclient-com.bbmodel b/designModels/starlike/starlikeclient-com.bbmodel new file mode 100644 index 00000000..67d94574 --- /dev/null +++ b/designModels/starlike/starlikeclient-com.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"minecraft_title","box_uv":false},"name":"starlikeclient-com","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":1000,"height":320},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[198,2,-8],"to":[204,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":0},"east":{"uv":[294,180,310,228],"texture":0},"south":{"uv":[316,180,310,228],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":0},"down":{"uv":[316,244,310,228],"texture":0}},"type":"cube","uuid":"4291dd58-7d9d-23e1-e880-3a4521e2d88d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[162,2,-8],"to":[198,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[596,16,632,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[632,16,596,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[632,16,596,0],"texture":0},"down":{"uv":[632,80,596,64],"texture":0}},"type":"cube","uuid":"331de109-8f1e-0f9d-001a-52bc5751dc57"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[126,2,-8],"to":[162,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":0},"down":{"uv":[480,80,444,64],"texture":0}},"type":"cube","uuid":"a3f96ef0-f085-eef2-fe5c-a757041bed9b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[90,2,-8],"to":[126,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,16,36,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[36,16,0,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[36,16,0,0],"texture":0},"down":{"uv":[36,80,0,64],"texture":0}},"type":"cube","uuid":"abdfce4b-da7f-eeaa-df83-b70da4fe76eb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[54,2,-8],"to":[90,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[938,16,974,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[974,16,938,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[974,16,938,0],"texture":0},"down":{"uv":[974,80,938,64],"texture":0}},"type":"cube","uuid":"24761f39-ad53-b9a2-7856-8ea41dc25031"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[42,2,-8],"to":[54,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[976,16,988,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[988,16,976,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[988,16,976,0],"texture":0},"down":{"uv":[988,80,976,64],"texture":0}},"type":"cube","uuid":"24d337a4-a1cc-3c4f-05b8-d7b75b539442"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[6,2,-8],"to":[42,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":0},"down":{"uv":[594,80,558,64],"texture":0}},"type":"cube","uuid":"e51e1b30-878f-3d48-1565-39e798cbb0a0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30,2,-8],"to":[6,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[228,16,264,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[264,16,228,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[264,16,228,0],"texture":0},"down":{"uv":[264,80,228,64],"texture":0}},"type":"cube","uuid":"35618134-24c3-c37a-35af-41ca4e151eea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-66,2,-8],"to":[-30,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[228,16,264,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[264,16,228,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[264,16,228,0],"texture":0},"down":{"uv":[264,80,228,64],"texture":0}},"type":"cube","uuid":"675dca8f-00aa-cdff-f6af-527a529e7194"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-102,2,-8],"to":[-66,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":0},"down":{"uv":[480,80,444,64],"texture":0}},"type":"cube","uuid":"2d8de2fe-07ee-375a-4dcb-9e753706d337"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-126,2,-8],"to":[-102,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":0},"down":{"uv":[366,80,342,64],"texture":0}},"type":"cube","uuid":"5c724a95-ec5d-02a6-cfdb-3e87f8d40dd3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-162,2,-8],"to":[-126,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":0},"down":{"uv":[556,80,520,64],"texture":0}},"type":"cube","uuid":"1c78aee5-90f3-a259-46a3-f010b13ac39c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-198,2,-8],"to":[-162,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[190,16,226,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[226,16,190,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[226,16,190,0],"texture":0},"down":{"uv":[226,80,190,64],"texture":0}},"type":"cube","uuid":"91f8ae53-a184-d878-3fba-79f52f4c5cc7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-204,2,-8],"to":[-198,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":0},"west":{"uv":[324,180,340,228],"texture":0},"up":{"uv":[324,180,318,164],"texture":0},"down":{"uv":[324,244,318,228],"texture":0}},"type":"cube","uuid":"2304a5e4-d55a-1132-14cf-109c3970d348"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[206,52,10],"to":[-206,0,-10],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":0},"east":{"uv":[0,246,1,247],"texture":0},"south":{"uv":[0,246,1,247],"texture":0},"west":{"uv":[0,246,1,247],"texture":0},"up":{"uv":[0,246,1,247],"texture":0},"down":{"uv":[0,246,1,247],"texture":0}},"type":"cube","uuid":"89c614e5-b438-ea72-cde9-5698cb18f656"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[192,2,-8],"to":[198,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":1},"east":{"uv":[294,180,310,228],"texture":1},"south":{"uv":[316,180,310,228],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":1},"down":{"uv":[316,244,310,228],"texture":1}},"type":"cube","uuid":"15ac1d84-6e7f-74af-f49d-7c25ad581030"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[156,2,-8],"to":[192,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[368,16,404,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[404,16,368,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[404,16,368,0],"texture":1},"down":{"uv":[404,80,368,64],"texture":1}},"type":"cube","uuid":"6784ded4-3dfa-2cb9-5dce-fce04acbba5b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[120,2,-8],"to":[156,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":1},"down":{"uv":[594,80,558,64],"texture":1}},"type":"cube","uuid":"f4860c35-7119-8999-d328-3ec988d5237b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[96,2,-8],"to":[120,50,8],"autouv":0,"color":3,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":1},"down":{"uv":[366,80,342,64],"texture":1}},"type":"cube","uuid":"2aca1498-fbf8-d87b-ab24-0c6660c8af12"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[60,2,-8],"to":[96,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":1},"down":{"uv":[556,80,520,64],"texture":1}},"type":"cube","uuid":"e65594fd-c62d-275a-220a-1e06919f40ca"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[48,2,-8],"to":[60,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[976,16,988,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[988,16,976,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[988,16,976,0],"texture":1},"down":{"uv":[988,80,976,64],"texture":1}},"type":"cube","uuid":"440b8d95-e8f2-5a72-5efc-f43794623378"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[12,2,-8],"to":[48,50,8],"autouv":0,"color":3,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":1},"down":{"uv":[188,80,152,64],"texture":1}},"type":"cube","uuid":"5b6490e9-e004-45ca-e1d7-052d47027111"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-12,2,-8],"to":[12,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":1},"down":{"uv":[366,80,342,64],"texture":1}},"type":"cube","uuid":"c53a38f6-2b8d-4601-93af-267baf12eb72"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-48,2,-8],"to":[-12,50,8],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[710,16,746,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[746,16,710,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[746,16,710,0],"texture":1},"down":{"uv":[746,80,710,64],"texture":1}},"type":"cube","uuid":"31ededc5-556e-5444-ae04-7b104c0f48c0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-84,2,-8],"to":[-48,50,8],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[114,16,150,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[150,16,114,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[150,16,114,0],"texture":1},"down":{"uv":[150,80,114,64],"texture":1}},"type":"cube","uuid":"2086b419-7ebf-c8c2-213d-7a024e5d887d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-120,2,-8],"to":[-84,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":1},"down":{"uv":[594,80,558,64],"texture":1}},"type":"cube","uuid":"96236d9f-7721-3531-1820-bc129b4624c5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-156,2,-8],"to":[-120,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[672,16,708,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[708,16,672,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[708,16,672,0],"texture":1},"down":{"uv":[708,80,672,64],"texture":1}},"type":"cube","uuid":"002220dd-5c0e-678d-f91e-7b478736baea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-192,2,-8],"to":[-156,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":1},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":1},"down":{"uv":[188,80,152,64],"texture":1}},"type":"cube","uuid":"4ad9ea59-11cb-40a1-c0a9-2c8f296e8723"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-198,2,-8],"to":[-192,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":1},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":1},"west":{"uv":[324,180,340,228],"texture":1},"up":{"uv":[324,180,318,164],"texture":1},"down":{"uv":[324,244,318,228],"texture":1}},"type":"cube","uuid":"06db7e55-ac08-f59c-3a30-2910284a0184"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[200,52,10],"to":[-200,0,-10],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":1},"east":{"uv":[0,246,1,247],"texture":1},"south":{"uv":[0,246,1,247],"texture":1},"west":{"uv":[0,246,1,247],"texture":1},"up":{"uv":[0,246,1,247],"texture":1},"down":{"uv":[0,246,1,247],"texture":1}},"type":"cube","uuid":"a6d39d52-4a30-0a33-4eea-dd79bdbf2dd1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[132,2,-8],"to":[138,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":2},"east":{"uv":[294,180,310,228],"texture":2},"south":{"uv":[316,180,310,228],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":2},"down":{"uv":[316,244,310,228],"texture":2}},"type":"cube","uuid":"70030a3c-7ea3-a1ae-76ae-0d1c39b03710"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[96,2,-8],"to":[132,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[824,16,860,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[860,16,824,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[860,16,824,0],"texture":2},"down":{"uv":[860,80,824,64],"texture":2}},"type":"cube","uuid":"c3337725-8193-8bc5-5d52-c28848986422"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[72,2,-8],"to":[96,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":2},"down":{"uv":[366,80,342,64],"texture":2}},"type":"cube","uuid":"c946a0bf-3f8c-93b3-153f-5631be28d8fc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[36,2,-8],"to":[72,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[190,16,226,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[226,16,190,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[226,16,190,0],"texture":2},"down":{"uv":[226,80,190,64],"texture":2}},"type":"cube","uuid":"8bbb015d-0a48-1765-146f-63b49a4fe34b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[0,2,-8],"to":[36,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[862,16,898,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[898,16,862,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[898,16,862,0],"texture":2},"down":{"uv":[898,80,862,64],"texture":2}},"type":"cube","uuid":"54251148-7d58-bdee-a19e-529a3bedb2ff"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-12,2,-8],"to":[0,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[976,16,988,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[988,16,976,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[988,16,976,0],"texture":2},"down":{"uv":[988,80,976,64],"texture":2}},"type":"cube","uuid":"bd36c3cd-9625-0d40-3076-3781ae5867a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-48,2,-8],"to":[-12,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[862,16,898,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[898,16,862,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[898,16,862,0],"texture":2},"down":{"uv":[898,80,862,64],"texture":2}},"type":"cube","uuid":"5036a92b-1ceb-239c-dd44-a9283014b98e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-72,2,-8],"to":[-48,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":2},"down":{"uv":[366,80,342,64],"texture":2}},"type":"cube","uuid":"722d3dc9-45b9-b2d5-cf88-678c60cd85be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-108,2,-8],"to":[-72,50,8],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[406,16,442,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[442,16,406,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[442,16,406,0],"texture":2},"down":{"uv":[442,80,406,64],"texture":2}},"type":"cube","uuid":"eca97994-b123-08a6-4760-63508fb2b31e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-132,2,-8],"to":[-108,50,8],"autouv":0,"color":3,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":2},"down":{"uv":[366,80,342,64],"texture":2}},"type":"cube","uuid":"58f710cd-b3d7-9255-860e-1f2c1859e353"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-138,2,-8],"to":[-132,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":2},"west":{"uv":[324,180,340,228],"texture":2},"up":{"uv":[324,180,318,164],"texture":2},"down":{"uv":[324,244,318,228],"texture":2}},"type":"cube","uuid":"e1458475-15da-ce67-ef4d-779e1da57628"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[140,52,10],"to":[-140,0,-10],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":2},"east":{"uv":[0,246,1,247],"texture":2},"south":{"uv":[0,246,1,247],"texture":2},"west":{"uv":[0,246,1,247],"texture":2},"up":{"uv":[0,246,1,247],"texture":2},"down":{"uv":[0,246,1,247],"texture":2}},"type":"cube","uuid":"a789814d-9c98-d82d-f573-0291ce853c50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[132,2,-8],"to":[138,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":0},"east":{"uv":[294,180,310,228],"texture":0},"south":{"uv":[316,180,310,228],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":0},"down":{"uv":[316,244,310,228],"texture":0}},"type":"cube","uuid":"14387ede-26a5-91cd-60f7-a0a590ab499c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[96,2,-8],"to":[132,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[596,16,632,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[632,16,596,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[632,16,596,0],"texture":0},"down":{"uv":[632,80,596,64],"texture":0}},"type":"cube","uuid":"52de2bd0-01e0-a23f-b476-506a849ef656"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[60,2,-8],"to":[96,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":0},"down":{"uv":[480,80,444,64],"texture":0}},"type":"cube","uuid":"02335160-67a3-e57e-c76a-49d3ada9529d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[24,2,-8],"to":[60,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,16,36,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[36,16,0,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[36,16,0,0],"texture":0},"down":{"uv":[36,80,0,64],"texture":0}},"type":"cube","uuid":"250aad1c-23b2-9b96-5104-addf2c4c8bea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-12,2,-8],"to":[24,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[938,16,974,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[974,16,938,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[974,16,938,0],"texture":0},"down":{"uv":[974,80,938,64],"texture":0}},"type":"cube","uuid":"4c78a3cf-7d6e-5343-14ce-9f2128ccfde2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-24,2,-8],"to":[-12,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[976,16,988,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[988,16,976,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[988,16,976,0],"texture":0},"down":{"uv":[988,80,976,64],"texture":0}},"type":"cube","uuid":"89140ceb-f7ad-4904-f722-696687b8f9ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-60,2,-8],"to":[-24,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":0},"down":{"uv":[556,80,520,64],"texture":0}},"type":"cube","uuid":"769d2135-1a38-251b-9c00-c2fee5ff3dcb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-96,2,-8],"to":[-60,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":0},"down":{"uv":[594,80,558,64],"texture":0}},"type":"cube","uuid":"fd9c2668-88c3-1fb9-b7d0-12f0ec136c62"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-132,2,-8],"to":[-96,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[862,16,898,64],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[898,16,862,64],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[898,16,862,0],"texture":0},"down":{"uv":[898,80,862,64],"texture":0}},"type":"cube","uuid":"2c0e2f65-0298-1455-3a27-936d7e920a00"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-138,2,-8],"to":[-132,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":0},"west":{"uv":[324,180,340,228],"texture":0},"up":{"uv":[324,180,318,164],"texture":0},"down":{"uv":[324,244,318,228],"texture":0}},"type":"cube","uuid":"dfdc109d-e5b8-13ae-3db0-d81ce6d0e519"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[140,52,10],"to":[-140,0,-10],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":0},"east":{"uv":[0,246,1,247],"texture":0},"south":{"uv":[0,246,1,247],"texture":0},"west":{"uv":[0,246,1,247],"texture":0},"up":{"uv":[0,246,1,247],"texture":0},"down":{"uv":[0,246,1,247],"texture":0}},"type":"cube","uuid":"6bed24c6-79a8-08a0-7699-ed847ff7fd35"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[270,2,-8],"to":[276,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":4},"east":{"uv":[294,180,310,228],"texture":4},"south":{"uv":[316,180,310,228],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":4},"down":{"uv":[316,244,310,228],"texture":4}},"type":"cube","uuid":"445d787d-e82a-635b-dc3c-ef9d5cd42056"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[234,2,-8],"to":[270,50,8],"autouv":0,"color":8,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":4},"down":{"uv":[188,80,152,64],"texture":4}},"type":"cube","uuid":"a49eae0b-f991-bc92-5312-d410201d7bba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[198,2,-8],"to":[234,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":4},"down":{"uv":[594,80,558,64],"texture":4}},"type":"cube","uuid":"c0d48e69-fe2d-2eb0-3754-f49cff75918b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[162,2,-8],"to":[198,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[862,16,898,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[898,16,862,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[898,16,862,0],"texture":4},"down":{"uv":[898,80,862,64],"texture":4}},"type":"cube","uuid":"acd9e0eb-db83-c380-dac8-9a8866bb8688"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[126,2,-8],"to":[162,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":4},"down":{"uv":[556,80,520,64],"texture":4}},"type":"cube","uuid":"56785c05-476a-3c7c-ef1c-0c8e7a934f09"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[90,2,-8],"to":[126,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":4},"down":{"uv":[480,80,444,64],"texture":4}},"type":"cube","uuid":"3cc1b0fa-5c97-94ec-5cbd-f18c31579656"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[54,2,-8],"to":[90,50,8],"autouv":0,"color":3,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":4},"down":{"uv":[594,80,558,64],"texture":4}},"type":"cube","uuid":"65e2f212-4d37-861e-0c22-e3f31853891d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[18,2,-8],"to":[54,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,16,36,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[36,16,0,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[36,16,0,0],"texture":4},"down":{"uv":[36,80,0,64],"texture":4}},"type":"cube","uuid":"13e8752b-839c-500a-49cc-2517e25e3965"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-18,2,-8],"to":[18,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":4},"down":{"uv":[188,80,152,64],"texture":4}},"type":"cube","uuid":"a8fc5957-a0aa-750d-a859-d92c283e43e3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30,2,-8],"to":[-18,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[976,16,988,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[988,16,976,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[988,16,976,0],"texture":4},"down":{"uv":[988,80,976,64],"texture":4}},"type":"cube","uuid":"efe0e810-b9db-9054-7767-10b5e2780f50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-66,2,-8],"to":[-30,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":4},"down":{"uv":[594,80,558,64],"texture":4}},"type":"cube","uuid":"f0ae9b62-d166-3ac7-9719-dc9f0d3e06e3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-102,2,-8],"to":[-66,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[228,16,264,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[264,16,228,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[264,16,228,0],"texture":4},"down":{"uv":[264,80,228,64],"texture":4}},"type":"cube","uuid":"146df024-4ff6-5c69-ffb7-73679a0d2109"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-138,2,-8],"to":[-102,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[228,16,264,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[264,16,228,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[264,16,228,0],"texture":4},"down":{"uv":[264,80,228,64],"texture":4}},"type":"cube","uuid":"9189fbaf-c57f-a283-aad5-d9d44f808ed8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-174,2,-8],"to":[-138,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":4},"down":{"uv":[480,80,444,64],"texture":4}},"type":"cube","uuid":"944face1-a23b-4626-d00b-b51b266e50cc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-198,2,-8],"to":[-174,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[342,16,366,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[366,16,342,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[366,16,342,0],"texture":4},"down":{"uv":[366,80,342,64],"texture":4}},"type":"cube","uuid":"cddd9e31-57e9-870a-30ba-f68495793007"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-234,2,-8],"to":[-198,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":4},"down":{"uv":[556,80,520,64],"texture":4}},"type":"cube","uuid":"85f86804-6a94-72e5-4f53-07da3815a629"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-270,2,-8],"to":[-234,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[190,16,226,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[226,16,190,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[226,16,190,0],"texture":4},"down":{"uv":[226,80,190,64],"texture":4}},"type":"cube","uuid":"a8901854-4369-0b7a-7a77-4fe21ca10c55"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-276,2,-8],"to":[-270,50,8],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":4},"west":{"uv":[324,180,340,228],"texture":4},"up":{"uv":[324,180,318,164],"texture":4},"down":{"uv":[324,244,318,228],"texture":4}},"type":"cube","uuid":"70e9661a-b2a7-ac11-b8a4-bdd93759261d"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[278,52,10],"to":[-278,0,-10],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":4},"east":{"uv":[0,246,1,247],"texture":4},"south":{"uv":[0,246,1,247],"texture":4},"west":{"uv":[0,246,1,247],"texture":4},"up":{"uv":[0,246,1,247],"texture":4},"down":{"uv":[0,246,1,247],"texture":4}},"type":"cube","uuid":"42742550-15ce-2bd3-dd06-a41d7594ac32"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[144,2,-8],"to":[150,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[310,180,316,228],"texture":4},"east":{"uv":[294,180,310,228],"texture":4},"south":{"uv":[316,180,310,228],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[316,180,310,164],"texture":4},"down":{"uv":[316,244,310,228],"texture":4}},"type":"cube","uuid":"7b712859-eb72-8d0f-9afb-73aa24def1b8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[108,2,-8],"to":[144,50,8],"autouv":0,"color":3,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":4},"down":{"uv":[188,80,152,64],"texture":4}},"type":"cube","uuid":"c21dae5b-2ed6-876d-8cfb-9b0f21f2fd02"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[72,2,-8],"to":[108,50,8],"autouv":0,"color":7,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":4},"down":{"uv":[594,80,558,64],"texture":4}},"type":"cube","uuid":"4bf3ac86-d58f-72c9-df94-77beb194de3c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[36,2,-8],"to":[72,50,8],"autouv":0,"color":4,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[862,16,898,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[898,16,862,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[898,16,862,0],"texture":4},"down":{"uv":[898,80,862,64],"texture":4}},"type":"cube","uuid":"ef6ac3ae-928c-3a9b-99dc-8853acbc13f7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[0,2,-8],"to":[36,50,8],"autouv":0,"color":0,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[520,16,556,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[556,16,520,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[556,16,520,0],"texture":4},"down":{"uv":[556,80,520,64],"texture":4}},"type":"cube","uuid":"22bb0116-0d76-f63b-6121-c10d11dd70b7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-36,2,-8],"to":[0,50,8],"autouv":0,"color":6,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[444,16,480,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[480,16,444,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[480,16,444,0],"texture":4},"down":{"uv":[480,80,444,64],"texture":4}},"type":"cube","uuid":"52a69de7-9bb1-f3be-7a6c-472991c8f711"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-72,2,-8],"to":[-36,50,8],"autouv":0,"color":1,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[558,16,594,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[594,16,558,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[594,16,558,0],"texture":4},"down":{"uv":[594,80,558,64],"texture":4}},"type":"cube","uuid":"bc230dbc-47ed-f650-c780-c1be0e42369b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-108,2,-8],"to":[-72,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,16,36,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[36,16,0,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[36,16,0,0],"texture":4},"down":{"uv":[36,80,0,64],"texture":4}},"type":"cube","uuid":"73dc88ae-efde-5051-7175-bcd153c266d2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-144,2,-8],"to":[-108,50,8],"autouv":0,"color":9,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[152,16,188,64],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[188,16,152,64],"texture":4},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[188,16,152,0],"texture":4},"down":{"uv":[188,80,152,64],"texture":4}},"type":"cube","uuid":"5d84ed27-4ef2-aab6-069f-5d1e5acc85a2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-150,2,-8],"to":[-144,50,8],"autouv":0,"color":2,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[318,180,324,228],"texture":4},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[324,180,318,228],"texture":4},"west":{"uv":[324,180,340,228],"texture":4},"up":{"uv":[324,180,318,164],"texture":4},"down":{"uv":[324,244,318,228],"texture":4}},"type":"cube","uuid":"17a465bf-9124-12ec-3e17-231a2a25684f"},{"name":"border","box_uv":false,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[152,52,10],"to":[-152,0,-10],"autouv":0,"color":5,"visibility":false,"origin":[0,0,0],"faces":{"north":{"uv":[0,246,1,247],"texture":4},"east":{"uv":[0,246,1,247],"texture":4},"south":{"uv":[0,246,1,247],"texture":4},"west":{"uv":[0,246,1,247],"texture":4},"up":{"uv":[0,246,1,247],"texture":4},"down":{"uv":[0,246,1,247],"texture":4}},"type":"cube","uuid":"6d305b0b-e6bd-a62f-83b9-c8fa2c88db6f"}],"outliner":[{"name":"all","origin":[0,0,0],"rotation":[-15,0,0],"color":0,"uuid":"cd1277e3-63c7-58b8-eb13-bfa14b54767c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"play_now","origin":[0,0,0],"color":0,"uuid":"32f51407-80ba-cf25-e01d-e83b4e1fe3f0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"eae7852a-8bdf-726a-136f-f3782c1872a4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["14387ede-26a5-91cd-60f7-a0a590ab499c"]},{"name":"p","origin":[0,0,0],"color":0,"uuid":"11d5688c-b98a-128f-1d26-df7e24db7fe2","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["52de2bd0-01e0-a23f-b476-506a849ef656"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"8d37782f-14c6-d425-6377-01ed6b6244c7","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["02335160-67a3-e57e-c76a-49d3ada9529d"]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"d65e1ae0-890d-4fb1-8f3b-232ac9f322a4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["250aad1c-23b2-9b96-5104-addf2c4c8bea"]},{"name":"y","origin":[0,0,0],"color":0,"uuid":"4f4c771e-7d87-74f4-02f0-2b1fc7e08d62","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["4c78a3cf-7d6e-5343-14ce-9f2128ccfde2"]},{"name":"space","origin":[0,0,0],"color":0,"uuid":"c84bd781-2305-2f92-493a-4f85946fe6de","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["89140ceb-f7ad-4904-f722-696687b8f9ee"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"6b720406-8522-5dd2-6914-8a4f941065ca","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["769d2135-1a38-251b-9c00-c2fee5ff3dcb"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"89dac778-3ba1-b719-6b5d-d9aef5f727bd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["fd9c2668-88c3-1fb9-b7d0-12f0ec136c62"]},{"name":"w","origin":[0,0,0],"color":0,"uuid":"c5bd1c39-6657-6754-adf9-462cf45aa9af","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["2c0e2f65-0298-1455-3a27-936d7e920a00"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"d8f2f1ad-ca3f-60a0-b31f-9758f70c0399","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["dfdc109d-e5b8-13ae-3db0-d81ce6d0e519"]},"6bed24c6-79a8-08a0-7699-ed847ff7fd35"]},{"name":"play_offline","origin":[0,0,0],"color":0,"uuid":"2f0ea713-009d-da05-1e04-075b79f69885","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"b0b7f5dc-bff1-336c-9856-17afc7efe22a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["4291dd58-7d9d-23e1-e880-3a4521e2d88d"]},{"name":"p","origin":[0,0,0],"color":0,"uuid":"77f9a0e5-416a-0c08-90f5-dd989b1afcde","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["331de109-8f1e-0f9d-001a-52bc5751dc57"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"5aaaa707-383b-8b8b-624f-c69b214f3f30","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["a3f96ef0-f085-eef2-fe5c-a757041bed9b"]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"6fb609c8-0d78-75c5-a896-8bfd92836ea9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["abdfce4b-da7f-eeaa-df83-b70da4fe76eb"]},{"name":"y","origin":[0,0,0],"color":0,"uuid":"53a9bca9-3bdf-22ce-6320-c53875f05506","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["24761f39-ad53-b9a2-7856-8ea41dc25031"]},{"name":"space","origin":[0,0,0],"color":0,"uuid":"8495571d-275c-0c5f-d402-2fa44476049a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["24d337a4-a1cc-3c4f-05b8-d7b75b539442"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"40babdbc-3291-fa3b-2b86-da0ce858ed42","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["e51e1b30-878f-3d48-1565-39e798cbb0a0"]},{"name":"f","origin":[0,0,0],"color":0,"uuid":"fc061273-85ba-5b72-b045-630567968aea","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["35618134-24c3-c37a-35af-41ca4e151eea"]},{"name":"f","origin":[0,0,0],"color":0,"uuid":"a175b25b-c454-b6d7-10e9-dc46cd5757a8","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["675dca8f-00aa-cdff-f6af-527a529e7194"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"a14a350c-0ef6-3126-a1c3-85a6700714fd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["2d8de2fe-07ee-375a-4dcb-9e753706d337"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"545fb0a5-102f-f21a-aadc-b4da2308778e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["5c724a95-ec5d-02a6-cfdb-3e87f8d40dd3"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"7b9a5aa0-7faa-8217-bc13-b78f699fdde9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["1c78aee5-90f3-a259-46a3-f010b13ac39c"]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"710c2b11-1759-26a5-2090-da5b622eb87c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["91f8ae53-a184-d878-3fba-79f52f4c5cc7"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"47ca8a0d-b8f8-8cb4-00a6-25a9b58e9bfa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["2304a5e4-d55a-1132-14cf-109c3970d348"]},"89c614e5-b438-ea72-cde9-5698cb18f656"]},{"name":"download","origin":[0,0,0],"color":0,"uuid":"8b760ebc-e326-d535-0676-0de180f5a684","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"e094c1bf-6c89-f8ee-1f1a-a9bdc56a469e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["7b712859-eb72-8d0f-9afb-73aa24def1b8"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"b19bab0b-46e7-da82-0510-b06afb299e0a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["c21dae5b-2ed6-876d-8cfb-9b0f21f2fd02"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"534f4b8f-edbc-0e96-1e8f-dcbf861da8a6","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["4bf3ac86-d58f-72c9-df94-77beb194de3c"]},{"name":"w","origin":[0,0,0],"color":0,"uuid":"b07b7f02-2f42-f126-28d6-a6d1b032d54b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["ef6ac3ae-928c-3a9b-99dc-8853acbc13f7"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"3ebe64ca-fe04-5a09-186e-7e16e0b1178d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["22bb0116-0d76-f63b-6121-c10d11dd70b7"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"d813099f-cef9-a830-b71b-3935607ce35a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["52a69de7-9bb1-f3be-7a6c-472991c8f711"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"dee8253c-0dfe-2f5c-828c-a949c5a650ee","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["bc230dbc-47ed-f650-c780-c1be0e42369b"]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"bfec56a6-1107-c0b6-1ebb-8cd9a91eaff1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["73dc88ae-efde-5051-7175-bcd153c266d2"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"4c79be59-ff55-906e-00b6-4dd59826e63e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["5d84ed27-4ef2-aab6-069f-5d1e5acc85a2"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"d3833211-ce0b-a474-2c0a-f472b8fccef0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["17a465bf-9124-12ec-3e17-231a2a25684f"]},"6d305b0b-e6bd-a62f-83b9-c8fa2c88db6f"]},{"name":"download_offline","origin":[0,0,0],"color":0,"uuid":"cc547372-a0a7-8605-6cca-36b1a0f55f40","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"3d7cea0e-a2d0-12af-b4c6-d0a811746e7e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["445d787d-e82a-635b-dc3c-ef9d5cd42056"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"2be8d69e-2683-8872-e38d-1ce144ca2e3a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["a49eae0b-f991-bc92-5312-d410201d7bba"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"aab5b10f-603f-44a1-3f48-c91c5d7edc26","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["c0d48e69-fe2d-2eb0-3754-f49cff75918b"]},{"name":"w","origin":[0,0,0],"color":0,"uuid":"9c279b20-219e-72ba-bed8-1c6ee14442e1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["acd9e0eb-db83-c380-dac8-9a8866bb8688"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"3060587f-17d0-d813-fc81-be6b3db3c552","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["56785c05-476a-3c7c-ef1c-0c8e7a934f09"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"ee3f1f56-9dbd-4f2b-b24f-51d4f0e910aa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["3cc1b0fa-5c97-94ec-5cbd-f18c31579656"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"b8e3b9ff-85af-a104-0aa1-605bbd91e942","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["65e2f212-4d37-861e-0c22-e3f31853891d"]},{"name":"a","origin":[0,0,0],"color":0,"uuid":"db9cf929-9d64-2d5c-3d9e-8f6b4ebe93c0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["13e8752b-839c-500a-49cc-2517e25e3965"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"250c1629-1419-b070-8ec6-f2f97a954343","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["a8fc5957-a0aa-750d-a859-d92c283e43e3"]},{"name":"space","origin":[0,0,0],"color":0,"uuid":"b550b64f-c3a4-9cf8-2f04-0c1e51291290","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["efe0e810-b9db-9054-7767-10b5e2780f50"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"e496819e-a4b3-ff85-fcad-447ce0ba54d9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["f0ae9b62-d166-3ac7-9719-dc9f0d3e06e3"]},{"name":"f","origin":[0,0,0],"color":0,"uuid":"e7f0e83c-6afb-f7b2-53a1-ffcffaa9538f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["146df024-4ff6-5c69-ffb7-73679a0d2109"]},{"name":"f","origin":[0,0,0],"color":0,"uuid":"79367d58-e751-14ab-eb99-6303071b6719","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["9189fbaf-c57f-a283-aad5-d9d44f808ed8"]},{"name":"l","origin":[0,0,0],"color":0,"uuid":"5d99da5e-53a5-34bb-1cd9-3a9dd30de6f8","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["944face1-a23b-4626-d00b-b51b266e50cc"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"1f24f426-4e31-910f-e322-615dc29c9e6b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["cddd9e31-57e9-870a-30ba-f68495793007"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"9ea7e4d1-7f75-8027-0337-90596f527e8c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["85f86804-6a94-72e5-4f53-07da3815a629"]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"c0dfa647-e712-9c2d-e6cb-502fa0b58afa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["a8901854-4369-0b7a-7a77-4fe21ca10c55"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"ade5a306-f736-1104-e007-f4741013f442","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["70e9661a-b2a7-ac11-b8a4-bdd93759261d"]},"42742550-15ce-2bd3-dd06-a41d7594ac32"]},{"name":"view_wiki","origin":[0,0,0],"color":0,"uuid":"435d5fe5-ce84-7534-6c81-3be74c3c4b0e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"dcd3929b-41b8-812a-d6bd-919d51db5afa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["70030a3c-7ea3-a1ae-76ae-0d1c39b03710"]},{"name":"v","origin":[0,0,0],"color":0,"uuid":"50be10bb-8aff-0143-50ec-1b8c8badae49","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["c3337725-8193-8bc5-5d52-c28848986422"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"2f993a12-0389-d126-648b-4e3ff3d5b2f6","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["c946a0bf-3f8c-93b3-153f-5631be28d8fc"]},{"name":"e","origin":[0,0,0],"color":0,"uuid":"d822f0d4-2eb8-3f71-6844-620b986ab088","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["8bbb015d-0a48-1765-146f-63b49a4fe34b"]},{"name":"w","origin":[0,0,0],"color":0,"uuid":"5399d86f-e714-da5d-ce8e-c406b5af1d4d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["54251148-7d58-bdee-a19e-529a3bedb2ff"]},{"name":"space","origin":[0,0,0],"color":0,"uuid":"e7c3d678-0ae5-48ce-e89f-fe88ca12ec10","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["bd36c3cd-9625-0d40-3076-3781ae5867a9"]},{"name":"w","origin":[0,0,0],"color":0,"uuid":"7763c356-9532-4768-494f-7cd4f7998f05","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["5036a92b-1ceb-239c-dd44-a9283014b98e"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"ec0da6ae-a6f5-03c8-c66f-8ca431147cfe","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["722d3dc9-45b9-b2d5-cf88-678c60cd85be"]},{"name":"k","origin":[0,0,0],"color":0,"uuid":"316ff31c-4fff-4108-acb0-08bae60ae3d0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["eca97994-b123-08a6-4760-63508fb2b31e"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"bcd0f41a-3974-1036-8163-92591da55f28","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["58f710cd-b3d7-9255-860e-1f2c1859e353"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"f31c88b0-9bed-0ecd-52b2-c32e856f9c57","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["e1458475-15da-ce67-ef4d-779e1da57628"]},"a789814d-9c98-d82d-f573-0291ce853c50"]},{"name":"join_discord","origin":[0,0,0],"color":0,"uuid":"a6a5fb2e-bf54-ea55-4d45-2cad12489ef9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":[{"name":"open_terminator","origin":[0,0,0],"color":0,"uuid":"9c0c01f7-d209-2ed7-5846-d1039f2f8e03","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["15ac1d84-6e7f-74af-f49d-7c25ad581030"]},{"name":"j","origin":[0,0,0],"color":0,"uuid":"b7c2c124-5cfc-7e05-67df-10a48e9bd63b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["6784ded4-3dfa-2cb9-5dce-fce04acbba5b"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"e477eeb7-7301-661d-c89b-cf8e2cc820af","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["f4860c35-7119-8999-d328-3ec988d5237b"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"b0736281-6892-22bf-9b58-f778b9cc624c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["2aca1498-fbf8-d87b-ab24-0c6660c8af12"]},{"name":"n","origin":[0,0,0],"color":0,"uuid":"a5d404cd-a9cc-826e-1848-7279b741deb4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["e65594fd-c62d-275a-220a-1e06919f40ca"]},{"name":"space","origin":[0,0,0],"color":0,"uuid":"26c6ce54-d34e-4e36-80b1-487a94a3b3f0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["440b8d95-e8f2-5a72-5efc-f43794623378"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"9c6991c0-cf24-9936-b5d4-c26153c1273a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["5b6490e9-e004-45ca-e1d7-052d47027111"]},{"name":"i","origin":[0,0,0],"color":0,"uuid":"1967169f-7bdd-591c-acb8-3e96b74ae585","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["c53a38f6-2b8d-4601-93af-267baf12eb72"]},{"name":"s","origin":[0,0,0],"color":0,"uuid":"047ad4b7-999f-9072-f1eb-10d689bedff6","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["31ededc5-556e-5444-ae04-7b104c0f48c0"]},{"name":"c","origin":[0,0,0],"color":0,"uuid":"1fe764b0-ca36-652b-e959-7a017d74f0d9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["2086b419-7ebf-c8c2-213d-7a024e5d887d"]},{"name":"o","origin":[0,0,0],"color":0,"uuid":"5f9aa1ce-0052-4162-a19f-6d702995f8ba","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["96236d9f-7721-3531-1820-bc129b4624c5"]},{"name":"r","origin":[0,0,0],"color":0,"uuid":"a3d5b7f9-9dfe-536d-d5bb-253852545478","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["002220dd-5c0e-678d-f91e-7b478736baea"]},{"name":"d","origin":[0,0,0],"color":0,"uuid":"66f13642-0399-81fc-79f2-4c281a468c51","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["4ad9ea59-11cb-40a1-c0a9-2c8f296e8723"]},{"name":"close_terminator","origin":[0,0,0],"color":0,"uuid":"946a2792-42fa-e0c4-d856-db8651819267","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":false,"autouv":0,"children":["06db7e55-ac08-f59c-3a30-2910284a0184"]},"a6d39d52-4a30-0a33-4eea-dd79bdbf2dd1"]}]}],"textures":[{"path":"","name":"play_offline.png","folder":"","namespace":"","id":"0","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"670584db-d750-24dc-0278-92342fcd554e","source":"data:image/png;base64,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"},{"path":"","name":"join_discord.png","folder":"","namespace":"","id":"1","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"79a96689-87f0-27d6-eb82-0620cbf6d010","source":"data:image/png;base64,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uqz83v6qeS2+felS64jjg4/+eP2FXW4N+z33fE6tP3cPpdZ4a9qv/67NAy7+gMmA7iVHHAQgAAEIQAACEIBAILD8TvEb9E8fv0Fvta7rVnnrecPq3VWlvHD71LP7xbqs/Kn9ctcFcd71qt5aMGtzVHVZ+VP7eX2XWu/ti1pPqS41Xxwf8t++/uIul+1+zz2fU+vP1Zda461pv/7xm/sfBvT9/RhyedcTBwEIQAACEIAABCAAAQZ05x8cfmv1h1Xd8qPb75UGdCt/ar/cdUGcd308+FjrasGszVHVZeXvakC3+PalS+WXGtC36y/tcmvY77nnc2r9uQE9tcZb0379anM/BnQvMOIgAAEIQAACEIAABK4jwIDuHNB/c7Wpap8f266lAd3Kn9ovd10Q510fDz7Wulowa3NUdVn5uxrQLb596VL5pQb096+/vMutYb/nns+p9ecG9NQab0379U/c3JcB3QuMOAhAAAIQgAAEIACB6wf0h4g/cf/McaBtta7rnnnreX3lAT1V14uOg3usy8of1sX7WutK+ebqLc0b1qfqDs9VjqquOL/FO8Urldfaz/KRWo/3PKj7euND/veuv7yzentuzz23U+vP1Zda49W+X//k44C+vx9DLu964iAAAQhAAAIQgAAEILBsNWj3/eKfarVX1+tW72nilhdvn3LIE+uy8od1sUhrXWlRuXpL84b1qbpTA3ptHnF+a/8UrxQPa7/UOotL6Xmo1b94n+D7zforu9wa9nvuuZ1af+68p9Z4a92vX2/uc/gGfagD+jfWH5H+qx3e2r1x99o85sCH/0EAAhCAAAQgAAEInCawfPClR0ovbJ+9fOfhBavVuq4bl1tPrq7fMAb9Hz8O6LEu77pYl7Uut46wLqU3ta+lJ+xXqius9/a3li7vPq11eXl6dXn3U+NC/nev/2RX4oV9H06tP1dfao23hv36p26+4+J+DLm861vEfX39kd1jtz/YItV1OT68+r3FvRnQe2FPUghAAAIQgAAExkOAAT3zDw65LX7t6r1nl75k++TD83iQ8K6LN7fW5dYR1qX0pva19IT9SnWpA3otXd59vIOwd7/WvGrli/cJXN65/u+7Ei/suZ1af457ao231v36p2/+7qAH9K+t79g9bvs8b0lV4z60evPimzY38Q16VapsBgEIQAACEIDA1AgwoDce0F+zet9Z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"},{"path":"","name":"view_wiki.png","folder":"","namespace":"","id":"2","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"6f4a7e1e-0a52-4e0d-f716-ecc52594b7d7","source":"data:image/png;base64,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"},{"path":"","name":"download_offline.png","folder":"","namespace":"","id":"3","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"df18e3b2-be4e-da3f-84ce-4ba96a2be29c","source":"data:image/png;base64,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"},{"path":"","name":"download_offline.png","folder":"","namespace":"","id":"4","group":"","width":1000,"height":320,"uv_width":1000,"uv_height":320,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"front","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"3894ee7f-0af7-9414-f529-6f2ddb1661bb","source":"data:image/png;base64,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"}]} diff --git a/designModels/watcher/Watcher.bbmodel b/designModels/watcher/Watcher.bbmodel new file mode 100644 index 00000000..3747757d --- /dev/null +++ b/designModels/watcher/Watcher.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"modded_entity","box_uv":true},"name":"Watcher","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.12","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4,0,-4],"to":[4,8,5],"autouv":0,"color":2,"origin":[-3,0,-2],"faces":{"north":{"uv":[9,9,17,17],"texture":0},"east":{"uv":[0,9,9,17],"texture":0},"south":{"uv":[26,9,34,17],"texture":0},"west":{"uv":[17,9,26,17],"texture":0},"up":{"uv":[17,9,9,0],"texture":0},"down":{"uv":[25,0,17,9],"texture":0}},"type":"cube","uuid":"4728ac68-6450-6a89-3336-a536eff48632"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-1,1,-12],"to":[1,3,-4],"autouv":0,"color":7,"origin":[0,1,-5],"uv_offset":[0,17],"faces":{"north":{"uv":[8,25,10,27],"texture":0},"east":{"uv":[0,25,8,27],"texture":0},"south":{"uv":[18,25,20,27],"texture":0},"west":{"uv":[10,25,18,27],"texture":0},"up":{"uv":[10,25,8,17],"texture":0},"down":{"uv":[12,17,10,25],"texture":0}},"type":"cube","uuid":"54cbd8bd-6904-1a5b-e4d0-25b8724c9cfa"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[2,4,-12],"to":[4,6,-4],"autouv":0,"color":7,"origin":[3,4,-5],"uv_offset":[20,17],"faces":{"north":{"uv":[28,25,30,27],"texture":0},"east":{"uv":[20,25,28,27],"texture":0},"south":{"uv":[38,25,40,27],"texture":0},"west":{"uv":[30,25,38,27],"texture":0},"up":{"uv":[30,25,28,17],"texture":0},"down":{"uv":[32,17,30,25],"texture":0}},"type":"cube","uuid":"b6c68617-6f53-4c66-1ed8-536e72ccd278"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-3,6,-12],"to":[-1,8,-4],"autouv":0,"color":7,"origin":[-2,6,-5],"uv_offset":[0,27],"faces":{"north":{"uv":[8,35,10,37],"texture":0},"east":{"uv":[0,35,8,37],"texture":0},"south":{"uv":[18,35,20,37],"texture":0},"west":{"uv":[10,35,18,37],"texture":0},"up":{"uv":[10,35,8,27],"texture":0},"down":{"uv":[12,27,10,35],"texture":0}},"type":"cube","uuid":"87ef2ee3-317f-9592-eb02-cdbcfe8c1883"}],"outliner":[{"name":"leg2","origin":[0,0,0],"color":0,"uuid":"f8b3b210-af4c-9c1f-3583-b1ceb7d04cbf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b6c68617-6f53-4c66-1ed8-536e72ccd278"]},{"name":"leg3","origin":[3,24,-5],"color":0,"uuid":"4a7d4a27-a6f2-6842-61ff-58d82d90ccb7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["87ef2ee3-317f-9592-eb02-cdbcfe8c1883"]},{"name":"head","origin":[3,24,-5],"color":0,"uuid":"3f147dd2-861f-0d93-fc1e-629cb614876b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4728ac68-6450-6a89-3336-a536eff48632"]},{"name":"leg","origin":[0,0,0],"color":0,"uuid":"eb810a44-34f0-5045-9f19-42cb240a9202","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["54cbd8bd-6904-1a5b-e4d0-25b8724c9cfa"]}],"textures":[{"path":"C:\\Users\\mathk\\Documents\\GitHub\\Starlike-Client-src\\designModels\\watcher\\watcher.png","name":"watcher.png","folder":"block","namespace":"","id":"0","group":"","width":64,"height":64,"uv_width":64,"uv_height":64,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"1b7eaa38-676c-438e-c950-22417fad0ec7","relative_path":"watcher.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAexJREFUeF7tmEFywjAMRe1Vew/OkBysB+FgyRl6kK7ccWfUMQbzraCAI35WDFJU6elbVomh40kppQ63pkuMMT7y/p7vdiW2FcC6rmGapkAA76aA3Pn85O7n5/AKWJYlSTEi61yYfK6/K4t3C6DscglCBlYGJj7zPHfNmj2HXSt2V2JZAdJVKaoOWBZc+7oBsLVDBDDyEbh3x/+f83m+2/x1Wa7sMjR7VfOqmyK2AJRnfeoAoC24BjMMgFtDrgdAffU1p261FcuW7QJAeQUeFoAkrj0CZcFyJd46FvVWPJQCmnd8xwxodbyGMDQAWW+vlpxOAHWx5YqMboNhZoDFEegdiCWUlwFAnUkhXPwYEkPoWp9bca3jofyRHRZjnbB1PFQgshMAImTdMet4KH9kpwIQIeuOWcdD+SM7FYAIWXfMOh7KH9ljnRB6oWX/+f76M32czltDXLwn8T5PZ6jSR/4gASB6o0kW5au1Q3kRgPH/AtoO7e1PBSDCPAI8Ara/ByDFPdvOGWC9Ce69uVkrxHwTPBwAa6JHiwdnwNEK0uZLAFpi3vypAG8d1dZDBWiJefOnArx1VFsPFaAl5s2fCvDWUW09VICWmDd/KsBbR7X1UAFaYt78qQBvHdXWQwVoiXnzpwK8dVRbz9sr4Bc8h/1B1Idr9gAAAABJRU5ErkJggg=="}],"animations":[{"uuid":"1c872ab8-1ec1-a506-a5e8-e1e8b161d454","name":"animation","loop":"once","override":false,"length":0,"snapping":24,"selected":true,"anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{}}]} diff --git a/designModels/watcher/watcher.java b/designModels/watcher/watcher.java new file mode 100644 index 00000000..b32778cf --- /dev/null +++ b/designModels/watcher/watcher.java @@ -0,0 +1,46 @@ +// Made with Blockbench 4.11.2 +// Exported for Minecraft version 1.7 - 1.12 +// Paste this class into your mod and generate all required imports + + +public class Watcher extends ModelBase { + private final ModelRenderer leg2; + private final ModelRenderer leg3; + private final ModelRenderer head; + private final ModelRenderer leg; + + public Watcher() { + textureWidth = 64; + textureHeight = 64; + + leg2 = new ModelRenderer(this); + leg2.setRotationPoint(0.0F, 24.0F, 0.0F); + leg2.cubeList.add(new ModelBox(leg2, 20, 17, -4.0F, -6.0F, -12.0F, 2, 2, 8, 0.0F, false)); + + leg3 = new ModelRenderer(this); + leg3.setRotationPoint(-3.0F, 0.0F, -5.0F); + leg3.cubeList.add(new ModelBox(leg3, 0, 27, 4.0F, 16.0F, -7.0F, 2, 2, 8, 0.0F, false)); + + head = new ModelRenderer(this); + head.setRotationPoint(-3.0F, 0.0F, -5.0F); + head.cubeList.add(new ModelBox(head, 0, 0, -1.0F, 16.0F, 1.0F, 8, 8, 9, 0.0F, false)); + + leg = new ModelRenderer(this); + leg.setRotationPoint(0.0F, 24.0F, 0.0F); + leg.cubeList.add(new ModelBox(leg, 0, 17, -1.0F, -3.0F, -12.0F, 2, 2, 8, 0.0F, false)); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + leg2.render(f5); + leg3.render(f5); + head.render(f5); + leg.render(f5); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/designModels/watcher/watcher.png b/designModels/watcher/watcher.png new file mode 100644 index 00000000..616697a4 Binary files /dev/null and b/designModels/watcher/watcher.png differ diff --git a/desktopRuntime/CompileEPK.jar b/desktopRuntime/CompileEPK.jar index 8b253fc8..768e868e 100644 Binary files a/desktopRuntime/CompileEPK.jar and b/desktopRuntime/CompileEPK.jar differ diff --git a/desktopRuntime/LICENSE b/desktopRuntime/LICENSE index a17ad0af..ac1135ce 100644 --- a/desktopRuntime/LICENSE +++ b/desktopRuntime/LICENSE @@ -26,4 +26,4 @@ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/desktopRuntime/RTWebViewClient.html b/desktopRuntime/RTWebViewClient.html index f5e104b7..16b80044 100644 --- a/desktopRuntime/RTWebViewClient.html +++ b/desktopRuntime/RTWebViewClient.html @@ -511,4 +511,4 @@ POSSIBILITY OF SUCH DAMAGE. - \ No newline at end of file + diff --git a/desktopRuntime/angle_license.txt b/desktopRuntime/angle_license.txt index 88cc97ce..6b7c7e6f 100644 --- a/desktopRuntime/angle_license.txt +++ b/desktopRuntime/angle_license.txt @@ -29,4 +29,4 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +POSSIBILITY OF SUCH DAMAGE. diff --git a/desktopRuntime/eclipseProject/.project b/desktopRuntime/eclipseProject/.project index c00481f7..49d5cda4 100644 --- a/desktopRuntime/eclipseProject/.project +++ b/desktopRuntime/eclipseProject/.project @@ -15,16 +15,21 @@ org.eclipse.jdt.core.javanature - - src_main_java - 2 - PARENT-2-PROJECT_LOC../src/main/java - src_game_java 2 PARENT-2-PROJECT_LOC../src/game/java + + src_lwjgl_java + 2 + PARENT-2-PROJECT_LOC../src/lwjgl/java + + + src_main_java + 2 + PARENT-2-PROJECT_LOC../src/main/java + src_protocol-game_java 2 @@ -35,10 +40,16 @@ 2 PARENT-2-PROJECT_LOC../src/protocol-relay/java - - src_lwjgl_java - 2 - PARENT-2-PROJECT_LOC../src/lwjgl/java - + + + 1734217596828 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/desktopRuntime/eclipseProject/.settings/org.eclipse.jdt.core.prefs b/desktopRuntime/eclipseProject/.settings/org.eclipse.jdt.core.prefs index 0fee6a9c..99263cb4 100644 --- a/desktopRuntime/eclipseProject/.settings/org.eclipse.jdt.core.prefs +++ b/desktopRuntime/eclipseProject/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,9 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled 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 @@ -10,6 +15,12 @@ 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.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 diff --git a/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch index ac01d356..ca10c9fc 100644 --- a/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch +++ b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch @@ -7,6 +7,9 @@ + + + @@ -17,6 +20,7 @@ + diff --git a/desktopRuntime/eclipseProject/starlike_basic_format.xml b/desktopRuntime/eclipseProject/starlike_basic_format.xml new file mode 100644 index 00000000..ef64ea9a --- /dev/null +++ b/desktopRuntime/eclipseProject/starlike_basic_format.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktopRuntime/icon16.png b/desktopRuntime/icon16.png index 64e16b36..1dd06fab 100644 Binary files a/desktopRuntime/icon16.png and b/desktopRuntime/icon16.png differ diff --git a/desktopRuntime/icon32.png b/desktopRuntime/icon32.png index 9c9fc898..287345b0 100644 Binary files a/desktopRuntime/icon32.png and b/desktopRuntime/icon32.png differ diff --git a/desktopRuntime/jemalloc_license.txt b/desktopRuntime/jemalloc_license.txt index fd579785..98458d97 100644 --- a/desktopRuntime/jemalloc_license.txt +++ b/desktopRuntime/jemalloc_license.txt @@ -24,4 +24,4 @@ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- \ No newline at end of file +-------------------------------------------------------------------------------- diff --git a/desktopRuntime/khronos_license.txt b/desktopRuntime/khronos_license.txt index d7e6e9dd..69f8814c 100644 --- a/desktopRuntime/khronos_license.txt +++ b/desktopRuntime/khronos_license.txt @@ -19,4 +19,4 @@ ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ \ No newline at end of file +*/ diff --git a/desktopRuntime/libEGL.so.1 b/desktopRuntime/libEGL.so.1 new file mode 100644 index 00000000..12e971ca Binary files /dev/null and b/desktopRuntime/libEGL.so.1 differ diff --git a/desktopRuntime/libGLESv2.so b/desktopRuntime/libGLESv2.so new file mode 100644 index 00000000..da548ec2 Binary files /dev/null and b/desktopRuntime/libGLESv2.so differ diff --git a/desktopRuntime/libffi_license.txt b/desktopRuntime/libffi_license.txt index 7b64447f..4f0b7625 100644 --- a/desktopRuntime/libffi_license.txt +++ b/desktopRuntime/libffi_license.txt @@ -18,4 +18,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/desktopRuntime/liburing_license.txt b/desktopRuntime/liburing_license.txt index 67bc3301..ae941fa6 100644 --- a/desktopRuntime/liburing_license.txt +++ b/desktopRuntime/liburing_license.txt @@ -4,4 +4,4 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/desktopRuntime/resources/EPKVersionIdentifier.txt b/desktopRuntime/resources/EPKVersionIdentifier.txt index 9325c3cc..1d0ba9ea 100644 --- a/desktopRuntime/resources/EPKVersionIdentifier.txt +++ b/desktopRuntime/resources/EPKVersionIdentifier.txt @@ -1 +1 @@ -0.3.0 \ No newline at end of file +0.4.0 diff --git a/desktopRuntime/resources/ES6ShimScript.txt b/desktopRuntime/resources/ES6ShimScript.txt new file mode 100644 index 00000000..7bc83d0e --- /dev/null +++ b/desktopRuntime/resources/ES6ShimScript.txt @@ -0,0 +1,41 @@ +(function(_jsGlobal){try {(function(){var namedFunction=function(name,body){if(typeof body==="function"){try {Object.defineProperty(body,"name",{configurable:true,enumerable:false,writable:false,value:name});}catch(ex){}}return body;};var enabledShims=[];var collectionsShimImpl=function(){var i;var createCollection=function(proto,objectOnly){var Collection=namedFunction("Collection",function(a){if(!this||this.constructor!==Collection)return new Collection(a);Object.defineProperty(this, +"_keys",{value:[]});Object.defineProperty(this,"_values",{value:[]});Object.defineProperty(this,"_itp",{value:[]});Object.defineProperty(this,"objectOnly",{value:objectOnly});if(a)init.call(this,a);});if(!objectOnly){Object.defineProperty(proto,"size",{get:sharedSize});}proto.constructor=Collection;for(var k in proto){Object.defineProperty(Collection.prototype,k,{value:proto[k]});}return Collection;};var init=function(a){if(this.add)a.forEach(this.add,this);else a.forEach(function(a){this.set(a[0],a[1]);},this);};var sharedDelete +=function(key){if(this.has(key)){this._keys.splice(i,1);this._values.splice(i,1);this._itp.forEach(function(p){if(i0x10FFFF){throw new $rt_globals.RangeError("Invalid code point "+next);}if(next<0x10000){result.push($rt_globals.String.fromCharCode(next));}else {next -=0x10000;result.push($rt_globals.String.fromCharCode((next>>10)+0xD800));result.push($rt_globals.String.fromCharCode(next%0x400+0xDC00));}}return result.join("");})});return true;}else {return false;}};var shim_String_proto_codePointAt +=function(){if(typeof $rt_globals.String.prototype.codePointAt==="undefined"){Object.defineProperty($rt_globals.String.prototype,"codePointAt",{value:namedFunction("codePointAt",function(pos){pos=pos|0;var leng=this.length;if(pos>=0&&pos0xDBFF||isEnd){return first;}var second=this.charCodeAt(pos+1);if(second<0xDC00||second>0xDFFF){return first;}return (first -0xD800)*1024+second -0xDC00+0x10000;}})});return true;}else {return false;}};var shim_String_proto_startsWith +=function(){if(typeof $rt_globals.String.prototype.startsWith==="undefined"){Object.defineProperty($rt_globals.String.prototype,"startsWith",{value:namedFunction("startsWith",function(str){var position=0;if(arguments.length>1){position=arguments[1];}var start=$rt_globals.Math.max(position,0)|0;return this.slice(start,start+str.length)===str;})});return true;}else {return false;}};var shim_String_proto_endsWith=function(){if(typeof $rt_globals.String.prototype.endsWith==="undefined"){Object.defineProperty($rt_globals.String.prototype, +"endsWith",{value:namedFunction("endsWith",function(str){var len=this.length;var endPosition;if(arguments.length>1){endPosition=arguments[1];}var pos=typeof endPosition==="undefined"?len:endPosition|0;var end=$rt_globals.Math.min($rt_globals.Math.max(pos,0)|0,len);return this.slice(end -str.length,end)===str;})});return true;}else {return false;}};var shim_String_proto_includes=function(){if(typeof $rt_globals.String.prototype.includes==="undefined"){Object.defineProperty($rt_globals.String.prototype,"includes", +{value:namedFunction("includes",function(str){var position;if(arguments.length>1){position=arguments[1];}return this.indexOf(str,position)!== -1;})});return true;}else {return false;}};var stringRepeatHelper;stringRepeatHelper=function(s,times){if(times<1){return '';}if(times%2){return stringRepeatHelper(s,times -1)+s;}var half=stringRepeatHelper(s,times/2);return half+half;};var shim_String_proto_repeat=function(){if(typeof $rt_globals.String.prototype.repeat==="undefined"){Object.defineProperty($rt_globals.String.prototype, +"repeat",{value:namedFunction("repeat",function(numTimes){if(numTimes>=$rt_globals.Infinity||(numTimes|=0)<0){throw new $rt_globals.RangeError("repeat count must be less than infinity and not overflow maximum string size");}return stringRepeatHelper(this,numTimes);})});return true;}else {return false;}};var shim_Object_is=function(){if(typeof Object.is==="undefined"){Object.defineProperty(Object,"is",{value:namedFunction("is",function(a,b){return a===b||a!==a&&b!==b;})});return true;}else {return false;}};var shim_Object_setPrototypeOf +=function(){if(typeof Object.setPrototypeOf==="undefined"){var theShim=function(Object,magic){var set;var checkArgs=function(O,proto){if(typeof O!=="object"||O===null){throw new $rt_globals.TypeError("can not set prototype on a non-object");}if(typeof proto!=="object"&&proto!==null){throw new $rt_globals.TypeError("can only set prototype to an object or null");}};var setPrototypeOf=function(O,proto){checkArgs(O,proto);set.call(O,proto);return O;};try {set=(Object.getOwnPropertyDescriptor(Object.prototype,magic)).set;set.call({ +},null);}catch(o_O){if(Object.prototype!=={}[magic]||{__proto__:null}.__proto__===void 0){$rt_globals.console.error("ES6Shims: Can not shim Object.setPrototypeOf on this browser! Ignoring for now");return false;}set=function(proto){this[magic]=proto;};}return setPrototypeOf;}(Object,"__proto__");if(theShim){Object.defineProperty(Object,"setPrototypeOf",{value:namedFunction("setPrototypeOf",theShim)});return true;}else {return false;}}else {return false;}};var shim_Function_proto_name=function(){if($rt_globals.Math.max.name +!=="max"){Object.defineProperty($rt_globals.Function.prototype,"name",{configurable:true,enumerable:false,get:function(){if(this===$rt_globals.Function.prototype){return "";}var str=$rt_globals.Function.prototype.toString.call(this);var match=str.match(/\s*function\s+([^(\s]*)\s*/);var name=match&&match[1];Object.defineProperty(this,"name",{configurable:true,enumerable:false,writable:false,value:name});return name;}});return true;}else {return false;}};var shim_Math_sign=function(){if(typeof $rt_globals.Math.sign +==="undefined"){Object.defineProperty($rt_globals.Math,"sign",{value:namedFunction("sign",function(val){var number=$rt_globals.Number(val);if(number===0){return number;}if($rt_globals.isNaN(number)){return number;}return number<0? -1:1;})});return true;}else {return false;}};var shim_Symbol=function(){if(typeof $rt_globals.Symbol==="undefined"){Object.defineProperty(_jsGlobal,"Symbol",{value:function(){var symRet=namedFunction("Symbol",function(){return "[[ShimbolR_"+(($rt_globals.Math.random()).toString(36)).substring(2) ++"]]";});symRet.for=namedFunction("for",function(symName){if(!(typeof symName==="string"))return $rt_globals.undefined;return "[[ShimbolN_"+symName+"]]";});symRet.keyFor=namedFunction("keyFor",function(sym){return typeof sym==="string"&&sym.startsWith("[[ShimbolN_")&&sym.endsWith("]]")?sym.substring(11,sym.length -2):$rt_globals.undefined;});return symRet;}()});return true;}else {return false;}};var hasErrors=false;var shim_install=function(str,cb){try {return cb();}catch(_exx_){hasErrors=true;$rt_globals.console.error("ES6Shims: Failed to detect and enable shim \"" ++str+"\" for this browser! (Continuing anyway)");$rt_globals.console.error(_exx_);return false;}};if(shim_install("Map",shim_Map))enabledShims.push(0);if(shim_install("WeakMap",shim_WeakMap))enabledShims.push(1);if(shim_install("Set",shim_Set))enabledShims.push(2);if(shim_install("WeakSet",shim_WeakSet))enabledShims.push(3);if(shim_install("Promise",shim_Promise))enabledShims.push(4);if(shim_install("String_fromCodePoint",shim_String_fromCodePoint))enabledShims.push(5);if(shim_install("String_proto_codePointAt", +shim_String_proto_codePointAt))enabledShims.push(6);if(shim_install("String_proto_startsWith",shim_String_proto_startsWith))enabledShims.push(7);if(shim_install("String_proto_endsWith",shim_String_proto_endsWith))enabledShims.push(8);if(shim_install("String_proto_includes",shim_String_proto_includes))enabledShims.push(9);if(shim_install("String_proto_repeat",shim_String_proto_repeat))enabledShims.push(10);if(shim_install("Object_is",shim_Object_is))enabledShims.push(12);if(shim_install("Object_setPrototypeOf", +shim_Object_setPrototypeOf))enabledShims.push(13);if(shim_install("Function_proto_name",shim_Function_proto_name))enabledShims.push(14);if(shim_install("Math_sign",shim_Math_sign))enabledShims.push(15);if(shim_install("Symbol",shim_Symbol))enabledShims.push(16);var enCnt=enabledShims.length;_jsGlobal.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return (enCnt>0?1:0)|(hasErrors?2:0);},getEnabledShimCount:function(){return enCnt;},getEnabledShimID:function(idxIn){return enabledShims[idxIn];}};})();} +catch(_ex_){$rt_globals.console.error("ES6Shims: Failed to detect and enable shims for this browser! (Continuing anyway)");$rt_globals.console.error(_ex_);_jsGlobal.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return -1;},getEnabledShimCount:function(){return 0;},getEnabledShimID:function(idxIn){return $rt_globals.undefined;}};}})($rt_globals); diff --git a/desktopRuntime/resources/OfflineDownloadTemplate.txt b/desktopRuntime/resources/OfflineDownloadTemplate.txt index 6d92a559..0df82842 100644 --- a/desktopRuntime/resources/OfflineDownloadTemplate.txt +++ b/desktopRuntime/resources/OfflineDownloadTemplate.txt @@ -3,14 +3,19 @@ - - + + - + + + + + + Starlike Client Offline h3 > span { color: #f5deb3; @@ -135,9 +140,10 @@ timeoutReference: null, }; function playGame() { - if (window.location.protocol !== 'file:') { + if (!['file:', 'data:', 'blob:'].includes(window.location.protocol)) { alert('This is the offline download, please use the web version for better performance'); - } else if (document.readyState !== 'complete') { + } + if (document.readyState !== 'complete') { alert('Please wait for the game to finish loading.'); } else { clearTimeout(textData.timeoutReference); @@ -145,8 +151,8 @@ document.body.innerHTML = ''; document.head.querySelector('meta[name="viewport"]').setAttribute('content', 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0'); document.documentElement.removeAttribute('lang'); - document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:black;'); - document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:black;'); + document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:#000000;'); + document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:#000000;'); document.body.setAttribute('id', 'game_frame'); window.main(); } diff --git a/desktopRuntime/resources/SignedBundleTemplate.txt b/desktopRuntime/resources/SignedBundleTemplate.txt deleted file mode 100644 index f4941bec..00000000 --- a/desktopRuntime/resources/SignedBundleTemplate.txt +++ /dev/null @@ -1,24 +0,0 @@ -"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", - enableSignatureBadge: true - }; - } - window.addEventListener("load", function() { - main(); - }); -} - -// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -if(typeof window !== "undefined") { window.eaglercraftXOpts.enableSignatureBadge = true; window.eaglercraftXOpts.assetsURI = ${assets_epk}; main(); } diff --git a/desktopRuntime/resources/SignedClientTemplate.txt b/desktopRuntime/resources/SignedClientTemplate.txt deleted file mode 100644 index f5914cff..00000000 --- a/desktopRuntime/resources/SignedClientTemplate.txt +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - -Starlike Client - - - - - - - - - - - - - -
-
-

This file is from ${date}

-

Game will launch in 5...

-
-

-
-
- - diff --git a/desktopRuntime/resources/UpdateDownloadSources.txt b/desktopRuntime/resources/UpdateDownloadSources.txt index c6ced65f..6d360f34 100644 --- a/desktopRuntime/resources/UpdateDownloadSources.txt +++ b/desktopRuntime/resources/UpdateDownloadSources.txt @@ -1 +1 @@ -url: https://starlike.orionzleon.me/latest_update.dat \ No newline at end of file +url: https://starlike.orionzleon.me/latest_update.dat diff --git a/desktopRuntime/resources/assets/eagler/CREDITS.txt b/desktopRuntime/resources/assets/eagler/CREDITS.txt index c2579d34..5fdf15bd 100644 --- a/desktopRuntime/resources/assets/eagler/CREDITS.txt +++ b/desktopRuntime/resources/assets/eagler/CREDITS.txt @@ -1,804 +1,885 @@ - - Starlike Client - ~~~~~~~~~~~~~~~~~~~~~~~ - - - SpeedSlicer - Owner - - zumbiepig - Co-Owner - - CatFoolYou - Texture artist - - Oeil-de-Lynx - Contributor - - - - EaglercraftX Developers - ~~~~~~~~~~~~~~~~~~~~~~~ - - lax1dude: - - - Creator of Eaglercraft - - Ported the Minecraft 1.8 src to TeaVM - - Wrote HW accelerated OpenGL 1.3 emulator - - Wrote the default shader pack - - Made the integrated PBR resource pack - - Added touch and mobile device support - - Wrote all desktop emulation code - - Wrote EaglercraftXBungee - - Wrote EaglercraftXVelocity - - Wrote WebRTC relay server - - Wrote voice chat server - - Wrote the patch and build system - - ayunami2000: - - - Many bug fixes - - WebRTC LAN worlds - - WebRTC voice chat - - Worked on touch support - - Made velocity plugin work - - Added resource packs - - Added screen recording - - Added seamless fullscreen - - Created the replit - - - - Code used within EaglercraftX - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Other Helpers -~~~~~~~~~~~~~~~~~~~ - - - Cirs?? - Wiki Contributor - - A_Person - Boosted the server seven times :) - -~~~~~~~~~~~~~~~~~~~ - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: TeaVM - Project Author: Alexey Andreev - Project URL: https://teavm.org/ - - Used For: Compiling Java to JS, JRE implementation - - * Copyright 2014 Alexey Andreev. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: LWJGL 3 - Project Author: Spasi - Project URL: https://www.lwjgl.org - - Used For: OpenGL, OpenAL, and GLFW bindings in desktop debug runtime - - * Copyright (c) 2012-present Lightweight Java Game Library - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name Lightweight Java Game Library nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: ANGLE - Project Author: Google - Project URL: https://angleproject.org/ - - Used For: OpenGL ES 3.0 emulation in desktop debug runtime - - * Copyright 2018 The ANGLE Project Authors. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. - * Ltd., nor the names of their contributors may be used to endorse - * or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: JOML - Project Author: httpdigest - Project URL: https://github.com/JOML-CI/JOML - - Used For: Math library for some calculations used by the renderer - - * The MIT License (MIT) - * - * Copyright (c) 2015-2023 JOML - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: NVIDIA FXAA - Project Author: Timothy Lottes, NVIDIA - Project URL: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 - - Used For: in-game hardware accelerated FXAA antialiasing (when enabled) - - * ============================================================================== - * - * - * NVIDIA FXAA 3.11 by TIMOTHY LOTTES - * - * - * ------------------------------------------------------------------------------ - * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. - * ------------------------------------------------------------------------------ - * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED - * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS - * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA - * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR - * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR - * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, - * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE - * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGES. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: java-diff-utils - Project Author: Google, forked by wumpz - Project URL: https://java-diff-utils.github.io/java-diff-utils/ - - Used For: generating and applying patch files in build system - - * Copyright 2009-2017 java-diff-utils. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Google Guava - Project Author: Google - Project URL: https://github.com/google/guava - - Used For: It's a dependency for Minecraft 1.8 - - * Copyright (C) 2011 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: javax.annotation - Project Author: Oracle Inc. - Project URL: ?? - - Used For: Dependency for Google Guava - - * Copyright (c) 2005-2018 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * https://oss.oracle.com/licenses/CDDL+GPL-1.1 - * or LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Apache Commons Lang - Project Author: Apache Software Foundation - Project URL: https://commons.apache.org/proper/commons-lang/ - - Used For: It's a dependency for Minecraft 1.8 - - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Apache Commons IO - Project Author: Apache Software Foundation - Project URL: https://commons.apache.org/proper/commons-io/ - - Used For: simplifying file IO in build system - - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Apache Commons CSV - Project Author: Apache Software Foundation - Project URL: https://commons.apache.org/proper/commons-csv/ - - Used For: loading mod coder pack config files in build system - - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: JSON-java - Project Author: Sean Leary (stleary) - Project URL: https://github.com/stleary/JSON-java - - Used For: JSON serialization and parsing in client and build system - - * Public domain. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Eclipse IDE Java Formatter - Project Author: Eclipse Foundation - Project URL: https://www.eclipse.org/ - - Used For: Formatting source code in build system before making diffs - - * License is here: https://www.eclipse.org/legal/epl-2.0/ - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: ObjectWeb ASM - Project Author: OW2 - Project URL: https://asm.ow2.io/ - - Used For: parsing method signatures in build system - - * ASM: a very small and fast Java bytecode manipulation framework - * Copyright (c) 2000-2011 INRIA, France Telecom - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Bouncy Castle Crypto - Project Author: The Legion of the Bouncy Castle - Project URL: https://www.bouncycastle.org/java.html - - Used For: MD5, SHA-1, SHA-256, and AES implementations - - * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Apache Harmony JRE - Project Author: Apache Software Foundation - Project URL: https://harmony.apache.org/ - - Used For: TeaVM compatible String.format implementation - - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Apache Commons Codec - Project Author: Apache Software Foundation - Project URL: https://commons.apache.org/proper/commons-codec/ - - Used For: Base64 encoder/decoder implementation - - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: JZlib - Project Author: ymnk, JCraft Inc. - Project URL: http://www.jcraft.com/jzlib/ - - Used For: Deflate and GZIP implementations in client - - * Copyright (c) 2011 ymnk, JCraft,Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the distribution. - * - * 3. The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - * INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Java-WebSocket - Project Author: Nathan Rajlich (TooTallNate) - Project URL: http://tootallnate.github.io/Java-WebSocket - - Used For: WebSockets in desktop runtime - - * Copyright (c) 2010-2020 Nathan Rajlich - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: webrtc-java - Project Author: Alex Andres - Project URL: https://github.com/devopvoid/webrtc-java - - Used For: WebRTC LAN worlds in desktop runtime - - * Copyright 2019 Alex Andres - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: Netty - Project Author: Netty Project - Project URL: https://netty.io/ - - Used For: 'ByteBuf' classes implementations for Minecraft 1.8's networking engine - - * Copyright 2015 The Netty Project - * - * The Netty Project licenses this file to you under the Apache License, version 2.0 (the - * "License"); you may not use this file except in compliance with the License. You may obtain a - * copy of the License at: - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: BungeeCord - Project Author: md_5 - Project URL: https://www.spigotmc.org/go/bungeecord/ - - Used For: parsing YAML config files in EaglercraftXVelocity - - * Copyright (c) 2012, md_5. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * The name of the author may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * You may not use the software for commercial software hosting services without - * written permission from the author. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: 3D Sound System - Project Author: Paul Lamb - Project URL: http://www.paulscode.com/forum/index.php?topic=4.0 - - Used For: Audio in desktop runtime - - * SoundSystem License: - * - * You are free to use this library for any purpose, commercial or - * otherwise. You may modify this library or source code, and distribute it any - * way you like, provided the following conditions are met: - * - * 1) You must abide by the conditions of the aforementioned LWJGL License. - * - * 2) You may not falsely claim to be the author of this library or any - * unmodified portion of it. - * - * 3) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement. - * - * 4) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code. - * - * 5) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com - * - * 6) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it. - * - * 7) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it. - * - * Author: Paul Lamb - * http://www.paulscode.com - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: JOrbis - Project Author: ymnk, JCraft Inc. - Project URL: http://www.jcraft.com/jorbis/ - - Used For: Audio in desktop runtime and browsers that don't support OGG - - * JOrbis - * Copyright (C) 2000 ymnk, JCraft,Inc. - * - * Written by: 2000 ymnk - * - * Many thanks to - * Monty and - * The XIPHOPHORUS Company http://www.xiph.org/ . - * JOrbis has been based on their awesome works, Vorbis codec. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: NanoHTTPD - Project Author: NanoHTTPD - Project URL: http://nanohttpd.org/ - - Used For: HTTP server in the desktop runtime - - * Copyright (c) 2012-2013 by Paul S. Hawke, - * 2001,2005-2013 by Jarno Elonen, - * 2010 by Konstantinos Togias All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of the NanoHttpd organization nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: sqlite-jdbc - Project Author: Taro L. Saito (xerial) - Project URL: https://github.com/xerial/sqlite-jdbc - - Used For: Default skin cache and authentication JDBC driver in EaglerXBungee - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Project Name: fix-webm-duration - Project Author: Yury Sitnikov - Project URL: https://github.com/yusitnikov/fix-webm-duration - - Used For: Post-processing screen recordings to add durations to the file headers - - * The MIT license - * - * Copyright (c) 2018 Yury Sitnikov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Starlike Client + ~~~~~~~~~~~~~~~~~~~~~~~ + + - SpeedSlicer - Owner + - zumbiepig - Co-Owner + - CatFoolYou - Texture artist + - Oeil-de-Lynx - Contributor + +HoosierTransfer's Dedicated Section + ~~~~~~~~~~~~~~~~~~~~~~~ + HoosierTransfer: + - Made the culling mod for this + - Helped out in early dev stages + - Made the VERY first eagler mod (1.9) + - Cool Person + + EaglercraftX Developers + ~~~~~~~~~~~~~~~~~~~~~~~ + + lax1dude: + + - Creator of Eaglercraft + - Ported the Minecraft 1.8 src to TeaVM + - Wrote HW accelerated OpenGL 1.3 emulator + - Wrote the default shader pack + - Made the integrated PBR resource pack + - Added touch and mobile device support + - Wrote all desktop emulation code + - Wrote EaglercraftXBungee + - Wrote EaglercraftXVelocity + - Wrote WebRTC relay server + - Wrote voice chat server + - Wrote the patch and build system + + ayunami2000: + + - Many bug fixes + - WebRTC LAN worlds + - WebRTC voice chat + - Worked on touch support + - Made velocity plugin work + - Added resource packs + - Added screen recording + - Added seamless fullscreen + - Created the replit + + + + Code used within EaglercraftX + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Other Helpers +~~~~~~~~~~~~~~~~~~~ + + - Cirs?? - Wiki Contributor + - A_Person - Boosted the server seven times :) + +~~~~~~~~~~~~~~~~~~~ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: TeaVM + Project Author: Alexey Andreev + Project URL: https://teavm.org/ + + Used For: Compiling Java to JS, JRE implementation + + * Copyright 2014 Alexey Andreev. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: LWJGL 3 + Project Author: Spasi + Project URL: https://www.lwjgl.org + + Used For: OpenGL, OpenAL, and GLFW bindings in desktop debug runtime + + * Copyright (c) 2012-present Lightweight Java Game Library + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name Lightweight Java Game Library nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: ANGLE + Project Author: Google + Project URL: https://angleproject.org/ + + Used For: OpenGL ES 3.0 emulation in desktop debug runtime + + * Copyright 2018 The ANGLE Project Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + * Ltd., nor the names of their contributors may be used to endorse + * or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: JOML + Project Author: httpdigest + Project URL: https://github.com/JOML-CI/JOML + + Used For: Math library for some calculations used by the renderer + + * The MIT License (MIT) + * + * Copyright (c) 2015-2023 JOML + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: NVIDIA FXAA + Project Author: Timothy Lottes, NVIDIA + Project URL: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 + + Used For: in-game hardware accelerated FXAA antialiasing (when enabled) + + * ============================================================================== + * + * + * NVIDIA FXAA 3.11 by TIMOTHY LOTTES + * + * + * ------------------------------------------------------------------------------ + * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. + * ------------------------------------------------------------------------------ + * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED + * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS + * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA + * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR + * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, + * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE + * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGES. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: java-diff-utils + Project Author: Google, forked by wumpz + Project URL: https://java-diff-utils.github.io/java-diff-utils/ + + Used For: generating and applying patch files in build system + + * Copyright 2009-2017 java-diff-utils. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Google Guava + Project Author: Google + Project URL: https://github.com/google/guava + + Used For: It's a dependency for Minecraft 1.8 + + * Copyright (C) 2011 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: javax.annotation + Project Author: Oracle Inc. + Project URL: ?? + + Used For: Dependency for Google Guava + + * Copyright (c) 2005-2018 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://oss.oracle.com/licenses/CDDL+GPL-1.1 + * or LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Apache Commons Lang + Project Author: Apache Software Foundation + Project URL: https://commons.apache.org/proper/commons-lang/ + + Used For: It's a dependency for Minecraft 1.8 + + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Apache Commons IO + Project Author: Apache Software Foundation + Project URL: https://commons.apache.org/proper/commons-io/ + + Used For: simplifying file IO in build system + + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Apache Commons CSV + Project Author: Apache Software Foundation + Project URL: https://commons.apache.org/proper/commons-csv/ + + Used For: loading mod coder pack config files in build system + + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: JSON-java + Project Author: Sean Leary (stleary) + Project URL: https://github.com/stleary/JSON-java + + Used For: JSON serialization and parsing in client and build system + + * Public domain. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Eclipse IDE Java Formatter + Project Author: Eclipse Foundation + Project URL: https://www.eclipse.org/ + + Used For: Formatting source code in build system before making diffs + + * License is here: https://www.eclipse.org/legal/epl-2.0/ + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: ObjectWeb ASM + Project Author: OW2 + Project URL: https://asm.ow2.io/ + + Used For: parsing method signatures in build system + + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2011 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Bouncy Castle Crypto + Project Author: The Legion of the Bouncy Castle + Project URL: https://www.bouncycastle.org/java.html + + Used For: MD5, SHA-1, SHA-256, and AES implementations + + * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Apache Harmony JRE + Project Author: Apache Software Foundation + Project URL: https://harmony.apache.org/ + + Used For: TeaVM compatible String.format implementation + + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Apache Commons Codec + Project Author: Apache Software Foundation + Project URL: https://commons.apache.org/proper/commons-codec/ + + Used For: Base64 encoder/decoder implementation + + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: JZlib + Project Author: ymnk, JCraft Inc. + Project URL: http://www.jcraft.com/jzlib/ + + Used For: Deflate and GZIP implementations in client + + * Copyright (c) 2011 ymnk, JCraft,Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * + * 3. The names of the authors may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, + * INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Java-WebSocket + Project Author: Nathan Rajlich (TooTallNate) + Project URL: http://tootallnate.github.io/Java-WebSocket + + Used For: WebSockets in desktop runtime + + * Copyright (c) 2010-2020 Nathan Rajlich + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: webrtc-java + Project Author: Alex Andres + Project URL: https://github.com/devopvoid/webrtc-java + + Used For: WebRTC LAN worlds in desktop runtime + + * Copyright 2019 Alex Andres + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Netty + Project Author: Netty Project + Project URL: https://netty.io/ + + Used For: 'ByteBuf' classes implementations for Minecraft 1.8's networking engine + + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: BungeeCord + Project Author: md_5 + Project URL: https://www.spigotmc.org/go/bungeecord/ + + Used For: parsing YAML config files in EaglercraftXVelocity + + * Copyright (c) 2012, md_5. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * The name of the author may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * You may not use the software for commercial software hosting services without + * written permission from the author. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: 3D Sound System + Project Author: Paul Lamb + Project URL: http://www.paulscode.com/forum/index.php?topic=4.0 + + Used For: Audio in desktop runtime + + * SoundSystem License: + * + * You are free to use this library for any purpose, commercial or + * otherwise. You may modify this library or source code, and distribute it any + * way you like, provided the following conditions are met: + * + * 1) You must abide by the conditions of the aforementioned LWJGL License. + * + * 2) You may not falsely claim to be the author of this library or any + * unmodified portion of it. + * + * 3) You may not copyright this library or a modified version of it and then + * sue me for copyright infringement. + * + * 4) If you modify the source code, you must clearly document the changes made + * before redistributing the modified source code, so other users know it is not + * the original code. + * + * 5) You are not required to give me credit for this library in any derived + * work, but if you do, you must also mention my website: + * http://www.paulscode.com + * + * 6) I the author will not be responsible for any damages (physical, financial, + * or otherwise) caused by the use if this library or any part of it. + * + * 7) I the author do not guarantee, warrant, or make any representations, + * either expressed or implied, regarding the use of this library or any part of + * it. + * + * Author: Paul Lamb + * http://www.paulscode.com + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: JOrbis + Project Author: ymnk, JCraft Inc. + Project URL: http://www.jcraft.com/jorbis/ + + Used For: Audio in desktop runtime and browsers that don't support OGG + + * JOrbis + * Copyright (C) 2000 ymnk, JCraft,Inc. + * + * Written by: 2000 ymnk + * + * Many thanks to + * Monty and + * The XIPHOPHORUS Company http://www.xiph.org/ . + * JOrbis has been based on their awesome works, Vorbis codec. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: NanoHTTPD + Project Author: NanoHTTPD + Project URL: http://nanohttpd.org/ + + Used For: HTTP server in the desktop runtime + + * Copyright (c) 2012-2013 by Paul S. Hawke, + * 2001,2005-2013 by Jarno Elonen, + * 2010 by Konstantinos Togias All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NanoHttpd organization nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: sqlite-jdbc + Project Author: Taro L. Saito (xerial) + Project URL: https://github.com/xerial/sqlite-jdbc + + Used For: Default skin cache and authentication JDBC driver in EaglerXBungee + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: fix-webm-duration + Project Author: Yury Sitnikov + Project URL: https://github.com/yusitnikov/fix-webm-duration + + Used For: Post-processing screen recordings to add durations to the file headers + + * The MIT license + * + * Copyright (c) 2018 Yury Sitnikov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: Emscripten + Project Author: Emscripten authors + Project URL: https://emscripten.org/ + + Used For: Compiling the WASM runtime's loader.wasm program + + * Emscripten is available under 2 licenses, the MIT license and the + * University of Illinois/NCSA Open Source License. + * + * Copyright (c) 2010-2014 Emscripten authors, see AUTHORS file. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: XZ Embedded + Project Author: Lasse Collin (Larhzu) + Project URL: https://tukaani.org/xz/embedded.html + + Used For: Decompressing the WASM runtime + + * Copyright (C) The XZ Embedded authors and contributors + * + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Project Name: XZ for Java + Project Author: Lasse Collin (Larhzu) + Project URL: https://tukaani.org/xz/java.html + + Used For: Compression in the MakeWASMClientBundle command + + * Copyright (C) The XZ for Java authors and contributors + * + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_markup.html b/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_markup.html index 3d386a1b..307e2ada 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_markup.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_markup.html @@ -1,88 +1,87 @@ - -
-
-
-

EaglercraftX 1.8 Boot Manager

-
-
-
- - - -
-
- -
-
\ No newline at end of file + +
+
+
+

EaglercraftX 1.8 Boot Manager

+
+
+
+ + + +
+
+ +
+
diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_style.css b/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_style.css index edac9eb9..3468b290 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_style.css +++ b/desktopRuntime/resources/assets/eagler/boot_menu/boot_menu_style.css @@ -1,328 +1,328 @@ -@font-face { - font-family: "{% global `root_class_gen` %}_font0"; - src: url("data:font/woff;base64,{% embed base64 `web_cl_eagleiii_8x16.woff` %}") format("woff"); -} -.{% global `root_class_gen` %} { - font: 24px "{% global `root_class_gen` %}_font0"; - color: #CCCCCC; - background-color: #000000; - user-select: none; - width: 100%; - height: 100%; - overflow-y: auto; -} -.{% global `root_class_gen` %}::-moz-selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %}::selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %}::-webkit-scrollbar { - width: 12px; -} -.{% global `root_class_gen` %} ::-webkit-scrollbar { - width: 12px; -} -.{% global `root_class_gen` %}::-webkit-scrollbar-track, .{% global `root_class_gen` %} ::-webkit-scrollbar-track { - background-color: #000000; -} -.{% global `root_class_gen` %}::-webkit-scrollbar-thumb, .{% global `root_class_gen` %} ::-webkit-scrollbar-thumb { - background-color: #CCCCCC; -} -.{% global `root_class_gen` %}::-webkit-scrollbar-button, .{% global `root_class_gen` %} ::-webkit-scrollbar-button { - display: none; -} -.{% global `root_class_gen` %}::-webkit-scrollbar-corner, .{% global `root_class_gen` %} ::-webkit-scrollbar-corner { - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_inner { - width: 100%; - height: 100%; - min-height: 480px; - display: flex; - flex-flow: column; -} -.{% global `root_class_gen` %} p { - margin-block-start: 0px; - margin-block-end: 0px; - -webkit-margin-before:0px; - -webkit-margin-after:0px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header { - flex: 0 1 auto; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header_title { - text-align: center; - padding: 32px 0px 0px 0px; - color: #CCCCCC; - white-space: pre-wrap; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content { - flex: 1 1 auto; - position: relative; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_inner { - position: absolute; - top: 32px; - left: 32px; - bottom: 32px; - right: 32px; - border: 2px solid white; - z-index: 1; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup { - position: absolute; - top: 128px; - left: 64px; - bottom: 64px; - right: 64px; - z-index: 10; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_inner { - width: 50%; - min-width: min(calc(100% - 20px), 400px); - max-width: 800px; - max-height: calc(100% - 20px); - margin-left: auto; - margin-right: auto; - border: 2px solid white; - background-color: #000000; - padding: 10px; - overflow-y: auto; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_title { - text-align: center; - padding: 16px; - color: #CCCCCC; - white-space: pre-wrap; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opts { - text-align: center; - padding: 16px; - color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt { - cursor: pointer; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_selected { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_disabled { - color: #888888; - cursor: default; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection_title { - text-align: center; - padding: 16px; - color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection { - width: calc(100% - 8px); - padding: 8px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_title { - text-align: center; - padding: 16px; - color: #CCCCCC; - white-space: pre-wrap; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opts { - text-align: center; - padding: 16px; - color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt { - cursor: pointer; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_selected { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_disabled { - color: #888888; - cursor: default; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val_container { - text-align: center; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val { - min-width: 15em; - width: calc(90% - 50px); - font: 24px "{% global `root_class_gen` %}_font0"; - outline: none; - resize: none; - background-color: #000000; - color: #CCCCCC; - border: 2px solid white; - padding: 2px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val:disabled { - color: #888888; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::-moz-selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_selection { - width: 100%; - height: 100%; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_selection { - width: calc(100% - 8px); - height: calc(100% - 16px); - padding: 8px 4px; - overflow-y: auto; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item { - width: 100%; - overflow-y: auto; - cursor: pointer; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item::before { - content: "\00a0"; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected::before { - content: "*"; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_disabled { - color: #888888; - cursor: default; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_editor { - width: 100%; - height: 100%; - position: relative; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf { - position: absolute; - top: 0px; - left: 0px; - right: 0px; - height: calc(25% - 20px); - padding: 10px; - overflow-x: hidden; - overflow-y: auto; - color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item_wide { - width: 100%; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item { - display: inline-block; - padding: 20px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text] { - min-width: 15em; - font: 24px "{% global `root_class_gen` %}_font0"; - outline: none; - resize: none; - background-color: #000000; - color: #CCCCCC; - border: 2px solid white; - padding: 2px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text]:disabled { - color: #888888; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=checkbox] { - zoom: 2; - padding: 2px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item select { - font: 24px "{% global `root_class_gen` %}_font0"; - outline: none; - resize: none; - background-color: #000000; - color: #CCCCCC; - border: 2px solid white; - padding: 2px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:checked { - background-color: #CCCCCC; - color: #000000; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:disabled { - color: #888888; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::-moz-selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name { - width: calc(100% - 10em); - font: 24px "{% global `root_class_gen` %}_font0"; - outline: none; - resize: none; - background-color: #000000; - color: #CCCCCC; - border: 2px solid white; - padding: 2px 4px; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::-moz-selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name:disabled { - color: #888888; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_data_format { - padding: 2px 4px; - border: 2px solid white; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor { - position: absolute; - bottom: 0px; - left: 0px; - right: 0px; - height: calc(75% - 22px); - width: calc(100% - 20px); - margin: 0px; - padding: 10px; - font: 24px "{% global `root_class_gen` %}_font0"; - border: none; - border-top: 2px solid white; - outline: none; - resize: none; - background-color: #000000; - color: #CCCCCC; - overflow: auto; - tab-size: 4; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor:disabled { - color: #888888; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::-moz-selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::selection { - color: #000000; - background-color: #CCCCCC; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer { - flex: 0 1 auto; -} -.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer_text { - text-align: left; - padding: 0px 0px 32px 64px; - color: #CCCCCC; -} \ No newline at end of file +@font-face { + font-family: "{% global `root_class_gen` %}_font0"; + src: url("data:font/woff;base64,{% embed base64 `web_cl_eagleiii_8x16.woff` %}") format("woff"); +} +.{% global `root_class_gen` %} { + font: 24px "{% global `root_class_gen` %}_font0"; + color: #CCCCCC; + background-color: #000000; + user-select: none; + width: 100%; + height: 100%; + overflow-y: auto; +} +.{% global `root_class_gen` %}::-moz-selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %}::selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %}::-webkit-scrollbar { + width: 12px; +} +.{% global `root_class_gen` %} ::-webkit-scrollbar { + width: 12px; +} +.{% global `root_class_gen` %}::-webkit-scrollbar-track, .{% global `root_class_gen` %} ::-webkit-scrollbar-track { + background-color: #000000; +} +.{% global `root_class_gen` %}::-webkit-scrollbar-thumb, .{% global `root_class_gen` %} ::-webkit-scrollbar-thumb { + background-color: #CCCCCC; +} +.{% global `root_class_gen` %}::-webkit-scrollbar-button, .{% global `root_class_gen` %} ::-webkit-scrollbar-button { + display: none; +} +.{% global `root_class_gen` %}::-webkit-scrollbar-corner, .{% global `root_class_gen` %} ::-webkit-scrollbar-corner { + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_inner { + width: 100%; + height: 100%; + min-height: 480px; + display: flex; + flex-flow: column; +} +.{% global `root_class_gen` %} p { + margin-block-start: 0px; + margin-block-end: 0px; + -webkit-margin-before:0px; + -webkit-margin-after:0px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header { + flex: 0 1 auto; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header_title { + text-align: center; + padding: 32px 0px 0px 0px; + color: #CCCCCC; + white-space: pre-wrap; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content { + flex: 1 1 auto; + position: relative; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_inner { + position: absolute; + top: 32px; + left: 32px; + bottom: 32px; + right: 32px; + border: 2px solid white; + z-index: 1; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup { + position: absolute; + top: 128px; + left: 64px; + bottom: 64px; + right: 64px; + z-index: 10; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_inner { + width: 50%; + min-width: min(calc(100% - 20px), 400px); + max-width: 800px; + max-height: calc(100% - 20px); + margin-left: auto; + margin-right: auto; + border: 2px solid white; + background-color: #000000; + padding: 10px; + overflow-y: auto; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_title { + text-align: center; + padding: 16px; + color: #CCCCCC; + white-space: pre-wrap; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opts { + text-align: center; + padding: 16px; + color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt { + cursor: pointer; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_selected { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_disabled { + color: #888888; + cursor: default; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection_title { + text-align: center; + padding: 16px; + color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection { + width: calc(100% - 8px); + padding: 8px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_title { + text-align: center; + padding: 16px; + color: #CCCCCC; + white-space: pre-wrap; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opts { + text-align: center; + padding: 16px; + color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt { + cursor: pointer; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_selected { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_disabled { + color: #888888; + cursor: default; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val_container { + text-align: center; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val { + min-width: 15em; + width: calc(90% - 50px); + font: 24px "{% global `root_class_gen` %}_font0"; + outline: none; + resize: none; + background-color: #000000; + color: #CCCCCC; + border: 2px solid white; + padding: 2px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val:disabled { + color: #888888; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::-moz-selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_selection { + width: 100%; + height: 100%; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_selection { + width: calc(100% - 8px); + height: calc(100% - 16px); + padding: 8px 4px; + overflow-y: auto; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item { + width: 100%; + overflow-y: auto; + cursor: pointer; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item::before { + content: "\00a0"; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected::before { + content: "*"; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_disabled { + color: #888888; + cursor: default; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_editor { + width: 100%; + height: 100%; + position: relative; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + height: calc(25% - 20px); + padding: 10px; + overflow-x: hidden; + overflow-y: auto; + color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item_wide { + width: 100%; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item { + display: inline-block; + padding: 20px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text] { + min-width: 15em; + font: 24px "{% global `root_class_gen` %}_font0"; + outline: none; + resize: none; + background-color: #000000; + color: #CCCCCC; + border: 2px solid white; + padding: 2px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text]:disabled { + color: #888888; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=checkbox] { + zoom: 2; + padding: 2px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item select { + font: 24px "{% global `root_class_gen` %}_font0"; + outline: none; + resize: none; + background-color: #000000; + color: #CCCCCC; + border: 2px solid white; + padding: 2px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:checked { + background-color: #CCCCCC; + color: #000000; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:disabled { + color: #888888; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::-moz-selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name { + width: calc(100% - 10em); + font: 24px "{% global `root_class_gen` %}_font0"; + outline: none; + resize: none; + background-color: #000000; + color: #CCCCCC; + border: 2px solid white; + padding: 2px 4px; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::-moz-selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name:disabled { + color: #888888; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_data_format { + padding: 2px 4px; + border: 2px solid white; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor { + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; + height: calc(75% - 22px); + width: calc(100% - 20px); + margin: 0px; + padding: 10px; + font: 24px "{% global `root_class_gen` %}_font0"; + border: none; + border-top: 2px solid white; + outline: none; + resize: none; + background-color: #000000; + color: #CCCCCC; + overflow: auto; + tab-size: 4; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor:disabled { + color: #888888; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::-moz-selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::selection { + color: #000000; + background-color: #CCCCCC; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer { + flex: 0 1 auto; +} +.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer_text { + text-align: left; + padding: 0px 0px 32px 64px; + color: #CCCCCC; +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8.json index 43c867c8..e032fc0f 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "EAGLERX_V1", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "EAGLERX_V1", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8_signed.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8_signed.json index c7d40460..eaaf32f0 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8_signed.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraftX_1_8_signed.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "EAGLERX_SIGNED_V1", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "EAGLERX_SIGNED_V1", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5.json index a579c7b3..ff97e344 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "EAGLER_1_5_V2", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "EAGLER_1_5_V2", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5_legacy.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5_legacy.json index 551d0fda..4c1cfd35 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5_legacy.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_1_5_legacy.json @@ -1,5 +1,5 @@ -{ - "client_launch_type": "EAGLER_1_5_V1", - "join_server": "", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "EAGLER_1_5_V1", + "join_server": "", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_b1_3.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_b1_3.json index 57ec0c8b..ab36f31e 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_b1_3.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_eaglercraft_b1_3.json @@ -1,5 +1,5 @@ -{ - "client_launch_type": "EAGLER_BETA_V1", - "join_server": "", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "EAGLER_BETA_V1", + "join_server": "", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_a1_2_6.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_a1_2_6.json index b3e05316..88ec751c 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_a1_2_6.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_a1_2_6.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "PEYTON_V2", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "PEYTON_V2", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_b1_7_3.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_b1_7_3.json index b3e05316..88ec751c 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_b1_7_3.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_b1_7_3.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "PEYTON_V2", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "PEYTON_V2", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_indev.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_indev.json index 53ee5e5c..f2b605da 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_indev.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_peytonplayz585_indev.json @@ -1,4 +1,4 @@ -{ - "client_launch_type": "PEYTON_V1", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "PEYTON_V1", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_standard_offline.json b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_standard_offline.json index ad974b08..38734b4d 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_standard_offline.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/conf_template_standard_offline.json @@ -1,8 +1,8 @@ -{ - "client_launch_type": "STANDARD_OFFLINE_V1", - "client_launch_opts_var": "eaglercraftXOpts", - "client_launch_opts_assetsURI_var": "assetsURI", - "client_launch_opts_container_var": "container", - "client_launch_main_func": "main", - "clear_cookies_before_launch": false -} \ No newline at end of file +{ + "client_launch_type": "STANDARD_OFFLINE_V1", + "client_launch_opts_var": "eaglercraftXOpts", + "client_launch_opts_assetsURI_var": "assetsURI", + "client_launch_opts_container_var": "container", + "client_launch_main_func": "main", + "clear_cookies_before_launch": false +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/meta_opts_templates.json b/desktopRuntime/resources/assets/eagler/boot_menu/meta_opts_templates.json index e5ad2070..e9ced29f 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/meta_opts_templates.json +++ b/desktopRuntime/resources/assets/eagler/boot_menu/meta_opts_templates.json @@ -1,148 +1,108 @@ -{ - "defaults": { - "EAGLERX_SIGNED_V1": { - "conf": "conf_template_eaglercraftX_1_8_signed.json", - "opts": "opts_template_eaglercraftX_1_8.txt" - }, - "EAGLERX_V1": { - "conf": "conf_template_eaglercraftX_1_8.json", - "opts": "opts_template_eaglercraftX_1_8.txt" - }, - "EAGLER_BETA_V1": { - "conf": "conf_template_eaglercraft_b1_3.json", - "opts": null - }, - "EAGLER_1_5_V1": { - "conf": "conf_template_eaglercraft_1_5_legacy.json", - "opts": "opts_template_eaglercraft_1_5_legacy.txt" - }, - "EAGLER_1_5_V2": { - "conf": "conf_template_eaglercraft_1_5.json", - "opts": "opts_template_eaglercraft_1_5.txt" - }, - "PEYTON_V1": { - "conf": "conf_template_peytonplayz585_indev.json", - "opts": null - }, - "PEYTON_V2": { - "conf": "conf_template_peytonplayz585_a1_2_6.json", - "opts": "opts_template_peytonplayz585_a1_2_6.txt" - }, - "STANDARD_OFFLINE_V1": { - "conf": "conf_template_standard_offline.json", - "opts": null - } - }, - "templates": [ - { - "name": "EaglercraftX 1.8", - "conf": "conf_template_eaglercraftX_1_8.json", - "opts": "opts_template_eaglercraftX_1_8.txt", - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFTX_1_8_OFFLINE" - ] - }, - { - "name": "EaglercraftX 1.8 Signed", - "conf": "conf_template_eaglercraftX_1_8_signed.json", - "opts": "opts_template_eaglercraftX_1_8.txt", - "allow": [ - "EAGLER_SIGNED_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFTX_1_8_SIGNED" - ] - }, - { - "name": "Eaglercraft 1.5.2 (post-22w34a)", - "conf": "conf_template_eaglercraft_1_5.json", - "opts": "opts_template_eaglercraft_1_5.txt", - "allow": [ - "EAGLER_STANDARD_1_5_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFT_1_5_NEW_OFFLINE" - ] - }, - { - "name": "Eaglercraft 1.5.2 Live Music (post-22w34a)", - "conf": "conf_template_eaglercraft_1_5.json", - "opts": "opts_template_eaglercraft_1_5_livestream.txt", - "allow": [ - "EAGLER_STANDARD_1_5_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFT_1_5_NEW_OFFLINE" - ] - }, - { - "name": "Eaglercraft 1.5.2 (pre-22w34a)", - "conf": "conf_template_eaglercraft_1_5_legacy.json", - "opts": "opts_template_eaglercraft_1_5_legacy.txt", - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFT_1_5_OLD_OFFLINE" - ] - }, - { - "name": "Eaglercraft Beta 1.3", - "conf": "conf_template_eaglercraft_b1_3.json", - "opts": null, - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "EAGLERCRAFT_BETA_B1_3_OFFLINE" - ] - }, - { - "name": "PeytonPlayz585 Beta 1.7.3", - "conf": "conf_template_peytonplayz585_b1_7_3.json", - "opts": "opts_template_peytonplayz585_b1_7_3.txt", - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "PEYTONPLAYZ585_ALPHA_BETA" - ] - }, - { - "name": "PeytonPlayz585 Alpha 1.2.6", - "conf": "conf_template_peytonplayz585_a1_2_6.json", - "opts": "opts_template_peytonplayz585_a1_2_6.txt", - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "PEYTONPLAYZ585_ALPHA_BETA" - ] - }, - { - "name": "PeytonPlayz585 Indev", - "conf": "conf_template_peytonplayz585_indev.json", - "opts": null, - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "PEYTONPLAYZ585_INDEV" - ] - }, - { - "name": "Standard Offline Download", - "conf": "conf_template_standard_offline.json", - "opts": null, - "allow": [ - "EAGLER_STANDARD_OFFLINE" - ], - "parseTypes": [ - "EXPORTED_STANDARD_OFFLINE" - ] - } - ] -} \ No newline at end of file +{ + "defaults": { + "EAGLERX_SIGNED_V1": { + "conf": "conf_template_eaglercraftX_1_8_signed.json", + "opts": "opts_template_eaglercraftX_1_8.txt" + }, + "EAGLERX_V1": { + "conf": "conf_template_eaglercraftX_1_8.json", + "opts": "opts_template_eaglercraftX_1_8.txt" + }, + "EAGLER_BETA_V1": { + "conf": "conf_template_eaglercraft_b1_3.json", + "opts": null + }, + "EAGLER_1_5_V1": { + "conf": "conf_template_eaglercraft_1_5_legacy.json", + "opts": "opts_template_eaglercraft_1_5_legacy.txt" + }, + "EAGLER_1_5_V2": { + "conf": "conf_template_eaglercraft_1_5.json", + "opts": "opts_template_eaglercraft_1_5.txt" + }, + "PEYTON_V1": { + "conf": "conf_template_peytonplayz585_indev.json", + "opts": null + }, + "PEYTON_V2": { + "conf": "conf_template_peytonplayz585_a1_2_6.json", + "opts": "opts_template_peytonplayz585_a1_2_6.txt" + }, + "STANDARD_OFFLINE_V1": { + "conf": "conf_template_standard_offline.json", + "opts": null + } + }, + "templates": [ + { + "name": "EaglercraftX 1.8", + "conf": "conf_template_eaglercraftX_1_8.json", + "opts": "opts_template_eaglercraftX_1_8.txt", + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["EAGLERCRAFTX_1_8_OFFLINE"] + }, + { + "name": "EaglercraftX 1.8 Signed", + "conf": "conf_template_eaglercraftX_1_8_signed.json", + "opts": "opts_template_eaglercraftX_1_8.txt", + "allow": ["EAGLER_SIGNED_OFFLINE"], + "parseTypes": ["EAGLERCRAFTX_1_8_SIGNED"] + }, + { + "name": "Eaglercraft 1.5.2 (post-22w34a)", + "conf": "conf_template_eaglercraft_1_5.json", + "opts": "opts_template_eaglercraft_1_5.txt", + "allow": ["EAGLER_STANDARD_1_5_OFFLINE"], + "parseTypes": ["EAGLERCRAFT_1_5_NEW_OFFLINE"] + }, + { + "name": "Eaglercraft 1.5.2 Live Music (post-22w34a)", + "conf": "conf_template_eaglercraft_1_5.json", + "opts": "opts_template_eaglercraft_1_5_livestream.txt", + "allow": ["EAGLER_STANDARD_1_5_OFFLINE"], + "parseTypes": ["EAGLERCRAFT_1_5_NEW_OFFLINE"] + }, + { + "name": "Eaglercraft 1.5.2 (pre-22w34a)", + "conf": "conf_template_eaglercraft_1_5_legacy.json", + "opts": "opts_template_eaglercraft_1_5_legacy.txt", + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["EAGLERCRAFT_1_5_OLD_OFFLINE"] + }, + { + "name": "Eaglercraft Beta 1.3", + "conf": "conf_template_eaglercraft_b1_3.json", + "opts": null, + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["EAGLERCRAFT_BETA_B1_3_OFFLINE"] + }, + { + "name": "PeytonPlayz585 Beta 1.7.3", + "conf": "conf_template_peytonplayz585_b1_7_3.json", + "opts": "opts_template_peytonplayz585_b1_7_3.txt", + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["PEYTONPLAYZ585_ALPHA_BETA"] + }, + { + "name": "PeytonPlayz585 Alpha 1.2.6", + "conf": "conf_template_peytonplayz585_a1_2_6.json", + "opts": "opts_template_peytonplayz585_a1_2_6.txt", + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["PEYTONPLAYZ585_ALPHA_BETA"] + }, + { + "name": "PeytonPlayz585 Indev", + "conf": "conf_template_peytonplayz585_indev.json", + "opts": null, + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["PEYTONPLAYZ585_INDEV"] + }, + { + "name": "Standard Offline Download", + "conf": "conf_template_standard_offline.json", + "opts": null, + "allow": ["EAGLER_STANDARD_OFFLINE"], + "parseTypes": ["EXPORTED_STANDARD_OFFLINE"] + } + ] +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8.html index b8f4d58f..f0d3ef7c 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8.html @@ -1,86 +1,86 @@ - - - - - - - - - - -${client_name} - - - - - - - - - - - -
-
-

${client_name}

-

Game will launch in 5...

-
-

-
-
- - + + + + + + + + + + +${client_name} + + + + + + + + + + + +
+
+

${client_name}

+

Game will launch in 5...

+
+

+
+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_offline.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_offline.html index b0730123..9813ea6f 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_offline.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_offline.html @@ -1,85 +1,85 @@ - - - - - - - - - - -EaglercraftX 1.8 - - - - - - - - - -${fat_offline_data} - - -
-
-

EaglercraftX 1.8 "Fat Offline"

-

Contains: ${num_clients} Client(s)

-

Game will launch in 5...

-
-

-
-
- - + + + + + + + + + + +EaglercraftX 1.8 + + + + + + + + + +${fat_offline_data} + + +
+
+

EaglercraftX 1.8 "Fat Offline"

+

Contains: ${num_clients} Client(s)

+

Game will launch in 5...

+
+

+
+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_signed.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_signed.html index 00bc1b7d..0666b518 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_signed.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_fat_signed.html @@ -1,268 +1,268 @@ - - - - - - - - - - -EaglercraftX 1.8 - - - - - - - - - - - - -${fat_offline_data} - - -
-
-

EaglercraftX 1.8 "Fat Offline"

-

Contains: ${num_clients} Client(s)

-

Game will launch in 5...

-
-

-
-
- - + + + + + + + + + + +EaglercraftX 1.8 + + + + + + + + + + + + +${fat_offline_data} + + +
+
+

EaglercraftX 1.8 "Fat Offline"

+

Contains: ${num_clients} Client(s)

+

Game will launch in 5...

+
+

+
+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_signed.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_signed.html index 989e5137..ab884730 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_signed.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraftX_1_8_signed.html @@ -1,267 +1,267 @@ - - - - - - - - - - -${client_name} - - - - - - - - - - - - - - -
-
-

${client_name_or_origin_date}

-

Game will launch in 5...

-
-

-
-
- - + + + + + + + + + + +${client_name} + + + + + + + + + + + + + + +
+
+

${client_name_or_origin_date}

+

Game will launch in 5...

+
+

+
+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5.html index d50f5ac7..eb4c41ae 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5.html @@ -1,78 +1,78 @@ - - - - - - - - -My Drive - Google Drive - - - - - - - - - - - - - - - - - - -
-
-

${client_name}

-

(Game will launch in 5)

-
- - \ No newline at end of file + + + + + + + + +My Drive - Google Drive + + + + + + + + + + + + + + + + + + +
+
+

${client_name}

+

(Game will launch in 5)

+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5_legacy.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5_legacy.html index abe08608..2a4a0983 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5_legacy.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_1_5_legacy.html @@ -1,59 +1,59 @@ - - - - - - - - -${client_name} - - - - - - - - - - - - - - -
-
-

${client_name}

-

(Game will launch in 5)

-
- - \ No newline at end of file + + + + + + + + +${client_name} + + + + + + + + + + + + + + +
+
+

${client_name}

+

(Game will launch in 5)

+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_b1_3.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_b1_3.html index ef907002..5644dd9d 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_b1_3.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_eaglercraft_b1_3.html @@ -1,59 +1,59 @@ - - - - - - - - -${client_name} - - - - - - - - - - - - - - -
-
-

${client_name}

-

(Game will launch in 5)

-
- - \ No newline at end of file + + + + + + + + +${client_name} + + + + + + + + + + + + + + +
+
+

${client_name}

+

(Game will launch in 5)

+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_a_b.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_a_b.html index 1058fa05..fc888d17 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_a_b.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_a_b.html @@ -1,40 +1,40 @@ - - - - - - - - -${client_name} - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + +${client_name} + + + + + + + + + + + + + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_indev.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_indev.html index f28bb11e..77f464c0 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_indev.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_peytonplayz585_indev.html @@ -1,38 +1,38 @@ - - - - - - - - -${client_name} - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + +${client_name} + + + + + + + + + + + + + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_standard_offline.html b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_standard_offline.html index e0f03777..cf505c67 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_standard_offline.html +++ b/desktopRuntime/resources/assets/eagler/boot_menu/offline_template_standard_offline.html @@ -1,77 +1,77 @@ - - - - - - - - - - -${client_name} - - - - - - - - - - - -
-
-

${client_name}

-

Game will launch in 5...

-
-
-
- - + + + + + + + + + + +${client_name} + + + + + + + + + + + +
+
+

${client_name}

+

Game will launch in 5...

+
+
+
+ + diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraftX_1_8.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraftX_1_8.txt index 7d514454..9d85c3cd 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraftX_1_8.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraftX_1_8.txt @@ -1,69 +1,69 @@ -{ - "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, - "downloadOfflineButtonLink": null, - "resourcePacksDB": "resourcePacks_starlike", - "enableWebViewCSP": true, - "checkRelaysForUpdates": true, - "allowServerRedirects": true, - "allowUpdateSvc": true, - "html5CursorSupport": false, - "allowFNAWSkins": true, - "allowVoiceClient": true, - "worldsDB": "worlds_starlike", - "demoMode": false, - "localStorageNamespace": "_eaglercraftX_starlike", - "enableSignatureBadge": false, - "lang": "en_US", - "enableMinceraft": true, - "autoFixLegacyStyleAttr": true, - "allowUpdateDL": true, - "logInvalidCerts": true, - "checkGLErrors": 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, - "enableEPKVersionCheck": true -} \ No newline at end of file +{ + "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, + "downloadOfflineButtonLink": null, + "resourcePacksDB": "resourcePacks_starlike", + "enableWebViewCSP": true, + "checkRelaysForUpdates": true, + "allowServerRedirects": true, + "allowUpdateSvc": true, + "html5CursorSupport": false, + "allowFNAWSkins": true, + "allowVoiceClient": true, + "worldsDB": "worlds_starlike", + "demoMode": false, + "localStorageNamespace": "_eaglercraftX_starlike", + "enableSignatureBadge": false, + "lang": "en_US", + "enableMinceraft": true, + "autoFixLegacyStyleAttr": true, + "allowUpdateDL": true, + "logInvalidCerts": true, + "checkGLErrors": 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, + "enableEPKVersionCheck": true +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5.txt index af539a9d..8db9f367 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5.txt @@ -1,52 +1,52 @@ -{ - "joinServer": null, - "servers": [ - { - "serverName": "Local Test Server", - "serverAddress": "localhost:25565", - "hideAddress": false - } - ], - "relays": [ - { - "addr": "wss://relay.deev.is/", - "name": "lax1dude relay #1", - "primary": "$random_relay_primary_0" - }, - { - "addr": "wss://relay.lax1dude.net/", - "name": "lax1dude relay #2", - "primary": "$random_relay_primary_1" - }, - { - "addr": "wss://relay.shhnowisnottheti.me/", - "name": "ayunami relay #1", - "primary": "$random_relay_primary_2" - } - ], - "mainMenu": { - "splashes": [ - "Darviglet!", - "eaglerenophile!", - "You Eagler!", - "Yeeeeeee!", - "yeee", - "EEEEEEEEE!", - "You Darvig!", - "You Vigg!", - ":>", - "|>", - "You Yumpster!" - ], - "eaglerLogo": false, - "itemLink": null, - "itemLine0": null, - "itemLine1": null, - "itemLine2": null - }, - "worldsFolder": "MAIN", - "profanity": false, - "hideDownServers": false, - "serverListTitle": null, - "serverListLink": null -} \ No newline at end of file +{ + "joinServer": null, + "servers": [ + { + "serverName": "Local Test Server", + "serverAddress": "localhost:25565", + "hideAddress": false + } + ], + "relays": [ + { + "addr": "wss://relay.deev.is/", + "name": "lax1dude relay #1", + "primary": "$random_relay_primary_0" + }, + { + "addr": "wss://relay.lax1dude.net/", + "name": "lax1dude relay #2", + "primary": "$random_relay_primary_1" + }, + { + "addr": "wss://relay.shhnowisnottheti.me/", + "name": "ayunami relay #1", + "primary": "$random_relay_primary_2" + } + ], + "mainMenu": { + "splashes": [ + "Darviglet!", + "eaglerenophile!", + "You Eagler!", + "Yeeeeeee!", + "yeee", + "EEEEEEEEE!", + "You Darvig!", + "You Vigg!", + ":>", + "|>", + "You Yumpster!" + ], + "eaglerLogo": false, + "itemLink": null, + "itemLine0": null, + "itemLine1": null, + "itemLine2": null + }, + "worldsFolder": "MAIN", + "profanity": false, + "hideDownServers": false, + "serverListTitle": null, + "serverListLink": null +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_legacy.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_legacy.txt index bbbefa5c..896478e4 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_legacy.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_legacy.txt @@ -1,32 +1,32 @@ -[NBT]{ - servers: [ - { - name: "Local Test Server", - ip: "localhost:25565", - hideAddress: false - } - ], - mainMenu: { - itemLink: "", - itemLine0: "", - itemLine1: "", - itemLine2: "", - splashes: [ - "Darviglet!", - "eaglerenophile!", - "You Eagler!", - "Yeeeeeee!", - "yeee", - "EEEEEEEEE!", - "You Darvig!", - "You Vigg!", - ":>", - "|>", - "You Yumpster!" - ] - }, - profanity: false, - hide_down: false, - serverListTitle: "", - serverListLink: "" -}[/NBT] \ No newline at end of file +[NBT]{ + servers: [ + { + name: "Local Test Server", + ip: "localhost:25565", + hideAddress: false + } + ], + mainMenu: { + itemLink: "", + itemLine0: "", + itemLine1: "", + itemLine2: "", + splashes: [ + "Darviglet!", + "eaglerenophile!", + "You Eagler!", + "Yeeeeeee!", + "yeee", + "EEEEEEEEE!", + "You Darvig!", + "You Vigg!", + ":>", + "|>", + "You Yumpster!" + ] + }, + profanity: false, + hide_down: false, + serverListTitle: "", + serverListLink: "" +}[/NBT] diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_livestream.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_livestream.txt index 014eb416..42146123 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_livestream.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_eaglercraft_1_5_livestream.txt @@ -1,63 +1,63 @@ -{ - "joinServer": null, - "servers": [ - { - "serverName": "Local Test Server", - "serverAddress": "localhost:25565", - "hideAddress": false - } - ], - "relays": [ - { - "addr": "wss://relay.deev.is/", - "name": "lax1dude relay #1", - "primary": "$random_relay_primary_0" - }, - { - "addr": "wss://relay.lax1dude.net/", - "name": "lax1dude relay #2", - "primary": "$random_relay_primary_1" - }, - { - "addr": "wss://relay.shhnowisnottheti.me/", - "name": "ayunami relay #1", - "primary": "$random_relay_primary_2" - } - ], - "mainMenu": { - "splashes": [ - "Darviglet!", - "eaglerenophile!", - "You Eagler!", - "Yeeeeeee!", - "yeee", - "EEEEEEEEE!", - "You Darvig!", - "You Vigg!", - ":>", - "|>", - "You Yumpster!" - ], - "eaglerLogo": false, - "itemLink": null, - "itemLine0": null, - "itemLine1": null, - "itemLine2": null - }, - "worldsFolder": "MAIN", - "assetOverrides": { - "title/no-pano-blur.flag": "false", - "records/wait.mp3": "wait.mp3", - "records/mellohi.mp3": "https://stream.nightride.fm/chillsynth.m4a", - "records/far.mp3": "https://stream.nightride.fm/nightride.m4a", - "records/cat.mp3": "http://usa9.fastcast4u.com/proxy/jamz?mp=/1", - "records/ward.mp3": "http://fr4.1mix.co.uk:8000/192h", - "records/strad.mp3": "http://listen.011fm.com:8028/stream15", - "records/blocks.mp3": "https://www.ophanim.net:8444/s/9780", - "records/13.mp3": "https://s2.radio.co/s2b2b68744/listen" - }, - "profanity": false, - "hideDownServers": false, - "serverListTitle": null, - "serverListLink": null -} \ No newline at end of file +{ + "joinServer": null, + "servers": [ + { + "serverName": "Local Test Server", + "serverAddress": "localhost:25565", + "hideAddress": false + } + ], + "relays": [ + { + "addr": "wss://relay.deev.is/", + "name": "lax1dude relay #1", + "primary": "$random_relay_primary_0" + }, + { + "addr": "wss://relay.lax1dude.net/", + "name": "lax1dude relay #2", + "primary": "$random_relay_primary_1" + }, + { + "addr": "wss://relay.shhnowisnottheti.me/", + "name": "ayunami relay #1", + "primary": "$random_relay_primary_2" + } + ], + "mainMenu": { + "splashes": [ + "Darviglet!", + "eaglerenophile!", + "You Eagler!", + "Yeeeeeee!", + "yeee", + "EEEEEEEEE!", + "You Darvig!", + "You Vigg!", + ":>", + "|>", + "You Yumpster!" + ], + "eaglerLogo": false, + "itemLink": null, + "itemLine0": null, + "itemLine1": null, + "itemLine2": null + }, + "worldsFolder": "MAIN", + "assetOverrides": { + "title/no-pano-blur.flag": "false", + "records/wait.mp3": "wait.mp3", + "records/mellohi.mp3": "https://stream.nightride.fm/chillsynth.m4a", + "records/far.mp3": "https://stream.nightride.fm/nightride.m4a", + "records/cat.mp3": "http://usa9.fastcast4u.com/proxy/jamz?mp=/1", + "records/ward.mp3": "http://fr4.1mix.co.uk:8000/192h", + "records/strad.mp3": "http://listen.011fm.com:8028/stream15", + "records/blocks.mp3": "https://www.ophanim.net:8444/s/9780", + "records/13.mp3": "https://s2.radio.co/s2b2b68744/listen" + }, + "profanity": false, + "hideDownServers": false, + "serverListTitle": null, + "serverListLink": null +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_a1_2_6.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_a1_2_6.txt index 418a8936..120f2248 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_a1_2_6.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_a1_2_6.txt @@ -1,6 +1,6 @@ -{ - "dataBaseName": "_net_PeytonPlayz585_eaglercraft_Alpha_IndexedDBFilesystem_1_2_6", - "playerUsername": null, - "serverIP": null, - "joinServerOnLaunch": null -} \ No newline at end of file +{ + "dataBaseName": "_net_PeytonPlayz585_eaglercraft_Alpha_IndexedDBFilesystem_1_2_6", + "playerUsername": null, + "serverIP": null, + "joinServerOnLaunch": null +} diff --git a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_b1_7_3.txt b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_b1_7_3.txt index dcfb717b..5642d806 100644 --- a/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_b1_7_3.txt +++ b/desktopRuntime/resources/assets/eagler/boot_menu/opts_template_peytonplayz585_b1_7_3.txt @@ -1,6 +1,6 @@ -{ - "dataBaseName": "_net_PeytonPlayz585_eaglercraft_beta_IndexedDBFilesystem_1_7_3", - "playerUsername": null, - "serverIP": null, - "joinServerOnLaunch": null -} \ No newline at end of file +{ + "dataBaseName": "_net_PeytonPlayz585_eaglercraft_beta_IndexedDBFilesystem_1_7_3", + "playerUsername": null, + "serverIP": null, + "joinServerOnLaunch": null +} diff --git a/desktopRuntime/resources/assets/eagler/capes/13.cobalt.png b/desktopRuntime/resources/assets/eagler/capes/13.cobalt.png index 50d24b7f..16395b1e 100644 Binary files a/desktopRuntime/resources/assets/eagler/capes/13.cobalt.png and b/desktopRuntime/resources/assets/eagler/capes/13.cobalt.png differ diff --git a/desktopRuntime/resources/assets/eagler/eagtek.png b/desktopRuntime/resources/assets/eagler/eagtek.png index 44008fc2..73995bff 100644 Binary files a/desktopRuntime/resources/assets/eagler/eagtek.png and b/desktopRuntime/resources/assets/eagler/eagtek.png differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh b/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh index c9621339..10bb5b1e 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh @@ -1,32 +1,32 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN(vec2, v_texCoord2f) -EAGLER_IN(vec4, v_color4f) - -EAGLER_FRAG_OUT() - -uniform sampler2D u_inputTexture; -uniform vec4 u_colorBias4f; - -void main() { - EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f; - if(EAGLER_FRAG_COLOR.a < 0.004) { - discard; - } -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN(vec2, v_texCoord2f) +EAGLER_IN(vec4, v_color4f) + +EAGLER_FRAG_OUT() + +uniform sampler2D u_inputTexture; +uniform vec4 u_colorBias4f; + +void main() { + EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f; + if(EAGLER_FRAG_COLOR.a < 0.004) { + discard; + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh index ddef1228..8a274fad 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh @@ -1,50 +1,50 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_VSH_LAYOUT_BEGIN() -EAGLER_IN(0, vec3, a_position3f) -EAGLER_IN(1, vec2, c_position2i) -EAGLER_IN(2, vec2, c_coords2i) -EAGLER_IN(3, vec4, c_color4f) -EAGLER_VSH_LAYOUT_END() - -EAGLER_OUT(vec2, v_texCoord2f) -EAGLER_OUT(vec4, v_color4f) - -uniform mat4 u_matrixTransform; -uniform vec2 u_charSize2f; -uniform vec2 u_charCoordSize2f; -uniform vec4 u_color4f; - -void main() { - v_color4f = c_color4f.bgra; - float shadowBit = a_position3f.z; - float boldBit = shadowBit >= 0.5 ? 1.0 : 0.0; - shadowBit -= boldBit * 0.5; - v_color4f.rgb *= (1.0 - shadowBit * 3.0); - v_texCoord2f = (c_coords2i + a_position3f.xy) * u_charCoordSize2f; - vec2 pos2d = c_position2i + vec2(shadowBit * 4.0); - pos2d += a_position3f.xy * u_charSize2f; - pos2d.x += boldBit; - float italicBit = v_color4f.a >= 0.5 ? 2.0 : 0.0; - v_color4f.a -= italicBit * 0.25; - pos2d.x -= (a_position3f.y - 0.5) * italicBit; - v_color4f.a *= 2.0; - v_color4f *= u_color4f; - EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos2d, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_VSH_LAYOUT_BEGIN() +EAGLER_IN(0, vec3, a_position3f) +EAGLER_IN(1, vec2, c_position2i) +EAGLER_IN(2, vec2, c_coords2i) +EAGLER_IN(3, vec4, c_color4f) +EAGLER_VSH_LAYOUT_END() + +EAGLER_OUT(vec2, v_texCoord2f) +EAGLER_OUT(vec4, v_color4f) + +uniform mat4 u_matrixTransform; +uniform vec2 u_charSize2f; +uniform vec2 u_charCoordSize2f; +uniform vec4 u_color4f; + +void main() { + v_color4f = c_color4f.bgra; + float shadowBit = a_position3f.z; + float boldBit = shadowBit >= 0.5 ? 1.0 : 0.0; + shadowBit -= boldBit * 0.5; + v_color4f.rgb *= (1.0 - shadowBit * 3.0); + v_texCoord2f = (c_coords2i + a_position3f.xy) * u_charCoordSize2f; + vec2 pos2d = c_position2i + vec2(shadowBit * 4.0); + pos2d += a_position3f.xy * u_charSize2f; + pos2d.x += boldBit; + float italicBit = v_color4f.a >= 0.5 ? 2.0 : 0.0; + v_color4f.a -= italicBit * 0.25; + pos2d.x -= (a_position3f.y - 0.5) * italicBit; + v_color4f.a *= 2.0; + v_color4f *= u_color4f; + EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos2d, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh index dd6dc865..bbf4ed05 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh @@ -1,31 +1,31 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN(vec2, v_texCoord2f) -EAGLER_IN(vec4, v_color4f) - -EAGLER_FRAG_OUT() - -uniform sampler2D u_inputTexture; - -void main() { - EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f; - if(EAGLER_FRAG_COLOR.a < 0.004) { - discard; - } -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN(vec2, v_texCoord2f) +EAGLER_IN(vec4, v_color4f) + +EAGLER_FRAG_OUT() + +uniform sampler2D u_inputTexture; + +void main() { + EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f; + if(EAGLER_FRAG_COLOR.a < 0.004) { + discard; + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh index be45b76f..4983ac0c 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh @@ -1,55 +1,55 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_VSH_LAYOUT_BEGIN() -EAGLER_IN(0, vec2, a_position2f) -EAGLER_IN(1, vec3, p_position3f) -EAGLER_IN(2, vec2, p_texCoords2i) -EAGLER_IN(3, vec2, p_lightMap2f) -EAGLER_IN(4, vec2, p_particleSize_texCoordsSize_2i) -EAGLER_IN(5, vec4, p_color4f) -EAGLER_VSH_LAYOUT_END() - -EAGLER_OUT(vec2, v_texCoord2f) -EAGLER_OUT(vec4, v_color4f) - -uniform mat4 u_matrixTransform; -uniform vec3 u_texCoordSize2f_particleSize1f; -uniform vec3 u_transformParam_1_2_5_f; -uniform vec2 u_transformParam_3_4_f; -uniform vec4 u_color4f; - -uniform sampler2D u_lightmapTexture; - -void main() { - v_color4f = u_color4f * p_color4f.bgra * EAGLER_TEXTURE_2D(u_lightmapTexture, p_lightMap2f); - - vec2 tex2f = a_position2f * 0.5 + 0.5; - tex2f.y = 1.0 - tex2f.y; - tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; - v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; - - float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; - - vec3 pos3f = p_position3f; - vec2 spos2f = a_position2f * particleSize; - pos3f += u_transformParam_1_2_5_f * spos2f.xyy; - pos3f.zx += u_transformParam_3_4_f * spos2f; - - EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos3f, 1.0); -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_VSH_LAYOUT_BEGIN() +EAGLER_IN(0, vec2, a_position2f) +EAGLER_IN(1, vec3, p_position3f) +EAGLER_IN(2, vec2, p_texCoords2i) +EAGLER_IN(3, vec2, p_lightMap2f) +EAGLER_IN(4, vec2, p_particleSize_texCoordsSize_2i) +EAGLER_IN(5, vec4, p_color4f) +EAGLER_VSH_LAYOUT_END() + +EAGLER_OUT(vec2, v_texCoord2f) +EAGLER_OUT(vec4, v_color4f) + +uniform mat4 u_matrixTransform; +uniform vec3 u_texCoordSize2f_particleSize1f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; +uniform vec4 u_color4f; + +uniform sampler2D u_lightmapTexture; + +void main() { + v_color4f = u_color4f * p_color4f.bgra * EAGLER_TEXTURE_2D(u_lightmapTexture, p_lightMap2f); + + vec2 tex2f = a_position2f * 0.5 + 0.5; + tex2f.y = 1.0 - tex2f.y; + tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; + v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; + + float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; + + vec3 pos3f = p_position3f; + vec2 spos2f = a_position2f * particleSize; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; + + EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos3f, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/core.fsh b/desktopRuntime/resources/assets/eagler/glsl/core.fsh index 9f5f8fa7..660bc913 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/core.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/core.fsh @@ -1,199 +1,199 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) -EAGLER_IN(vec4, v_position4f) -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -EAGLER_IN(vec2, v_texture2f) -#endif - -uniform vec4 u_color4f; - -#ifdef COMPILE_BLEND_ADD -uniform vec4 u_colorBlendSrc4f; -uniform vec4 u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -EAGLER_IN(vec4, v_color4f) -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -EAGLER_IN(vec3, v_normal3f) -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -EAGLER_IN(vec2, v_lightmap2f) -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -uniform sampler2D u_samplerTexture; -#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN) -uniform vec2 u_textureCoords01; -#endif -#endif - -#ifdef COMPILE_ENABLE_LIGHTMAP -uniform sampler2D u_samplerLightmap; -#ifndef COMPILE_LIGHTMAP_ATTRIB -uniform vec2 u_textureCoords02; -#endif -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST -uniform float u_alphaTestRef1f; -#endif - -#ifdef COMPILE_ENABLE_MC_LIGHTING -uniform int u_lightsEnabled1i; -uniform vec4 u_lightsDirections4fv[4]; -uniform vec3 u_lightsAmbient3f; -#ifndef COMPILE_NORMAL_ATTRIB -uniform vec3 u_uniformNormal3f; -#endif -#endif - -#ifdef COMPILE_ENABLE_FOG -uniform vec4 u_fogParameters4f; -uniform vec4 u_fogColor4f; -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN -EAGLER_IN(vec3, v_objectPosition3f) -uniform ivec4 u_texGenPlane4i; -uniform vec4 u_texGenS4f; -uniform vec4 u_texGenT4f; -uniform vec4 u_texGenR4f; -uniform vec4 u_texGenQ4f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX -uniform vec2 u_textureAnisotropicFix; -#endif - -EAGLER_FRAG_OUT() - -void main() { - -#ifdef COMPILE_COLOR_ATTRIB - vec4 color = v_color4f * u_color4f; -#else - vec4 color = u_color4f; -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN - vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); - vec4 texGenVector; - texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); - texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); - texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); - texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); -#ifdef EAGLER_HAS_GLES_300 - texGenVector.xyz = mat4x3( - u_textureMat4f01[0].xyw, - u_textureMat4f01[1].xyw, - u_textureMat4f01[2].xyw, - u_textureMat4f01[3].xyw - ) * texGenVector; - texGenVector.xy /= texGenVector.z; -#else - texGenVector = u_textureMat4f01 * texGenVector; - texGenVector.xy /= texGenVector.w; -#endif - - color *= EAGLER_TEXTURE_2D(u_samplerTexture, texGenVector.xy); - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif - -#else - -#ifdef COMPILE_ENABLE_TEXTURE2D -#ifdef COMPILE_TEXTURE_ATTRIB -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX - // d3d11 doesn't support GL_NEAREST upscaling with anisotropic - // filtering enabled, so it needs this stupid fix to 'work' - vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; - color *= EAGLER_TEXTURE_2D(u_samplerTexture, uv / u_textureAnisotropicFix); -#else - color *= EAGLER_TEXTURE_2D(u_samplerTexture, v_texture2f); -#endif -#else - color *= EAGLER_TEXTURE_2D(u_samplerTexture, u_textureCoords01); -#endif -#endif - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - color *= EAGLER_TEXTURE_2D(u_samplerLightmap, v_lightmap2f); -#else - color *= EAGLER_TEXTURE_2D(u_samplerLightmap, u_textureCoords02); -#endif -#endif - -#ifdef COMPILE_BLEND_ADD - color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif - -#endif - -#ifdef COMPILE_ENABLE_MC_LIGHTING -#ifdef COMPILE_NORMAL_ATTRIB - vec3 normal = normalize(v_normal3f); -#else - vec3 normal = u_uniformNormal3f; -#endif - float diffuse = 0.0; - vec4 light; -#ifdef EAGLER_HAS_GLES_300 - for(int i = 0; i < u_lightsEnabled1i; ++i) { -#else - for(int i = 0; i < 4; ++i) { -#endif - light = u_lightsDirections4fv[i]; - diffuse += max(dot(light.xyz, normal), 0.0) * light.w; -#ifndef EAGLER_HAS_GLES_300 - if(i + 1 >= u_lightsEnabled1i) { - break; - } -#endif - } - color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0); -#endif - -#ifdef COMPILE_ENABLE_FOG - vec3 fogPos = v_position4f.xyz / v_position4f.w; - float dist = length(fogPos); - float fogDensity = u_fogParameters4f.y; - float fogStart = u_fogParameters4f.z; - float fogEnd = u_fogParameters4f.w; - float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) : - (dist - fogStart) / (fogEnd - fogStart); - color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a); -#endif - - EAGLER_FRAG_COLOR = color; -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) +EAGLER_IN(vec4, v_position4f) +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +EAGLER_IN(vec2, v_texture2f) +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_BLEND_ADD +uniform vec4 u_colorBlendSrc4f; +uniform vec4 u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +EAGLER_IN(vec4, v_color4f) +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +EAGLER_IN(vec3, v_normal3f) +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +EAGLER_IN(vec2, v_lightmap2f) +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN) +uniform vec2 u_textureCoords01; +#endif +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP +uniform sampler2D u_samplerLightmap; +#ifndef COMPILE_LIGHTMAP_ATTRIB +uniform vec2 u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +uniform int u_lightsEnabled1i; +uniform vec4 u_lightsDirections4fv[4]; +uniform vec3 u_lightsAmbient3f; +#ifndef COMPILE_NORMAL_ATTRIB +uniform vec3 u_uniformNormal3f; +#endif +#endif + +#ifdef COMPILE_ENABLE_FOG +uniform vec4 u_fogParameters4f; +uniform vec4 u_fogColor4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +EAGLER_IN(vec3, v_objectPosition3f) +uniform ivec4 u_texGenPlane4i; +uniform vec4 u_texGenS4f; +uniform vec4 u_texGenT4f; +uniform vec4 u_texGenR4f; +uniform vec4 u_texGenQ4f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX +uniform vec2 u_textureAnisotropicFix; +#endif + +EAGLER_FRAG_OUT() + +void main() { + +#ifdef COMPILE_COLOR_ATTRIB + vec4 color = v_color4f * u_color4f; +#else + vec4 color = u_color4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN + vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); + vec4 texGenVector; + texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); + texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); + texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); + texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); +#ifdef EAGLER_HAS_GLES_300 + texGenVector.xyz = mat4x3( + u_textureMat4f01[0].xyw, + u_textureMat4f01[1].xyw, + u_textureMat4f01[2].xyw, + u_textureMat4f01[3].xyw + ) * texGenVector; + texGenVector.xy /= texGenVector.z; +#else + texGenVector = u_textureMat4f01 * texGenVector; + texGenVector.xy /= texGenVector.w; +#endif + + color *= EAGLER_TEXTURE_2D(u_samplerTexture, texGenVector.xy); + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#else + +#ifdef COMPILE_ENABLE_TEXTURE2D +#ifdef COMPILE_TEXTURE_ATTRIB +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX + // d3d11 doesn't support GL_NEAREST upscaling with anisotropic + // filtering enabled, so it needs this stupid fix to 'work' + vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; + color *= EAGLER_TEXTURE_2D(u_samplerTexture, uv / u_textureAnisotropicFix); +#else + color *= EAGLER_TEXTURE_2D(u_samplerTexture, v_texture2f); +#endif +#else + color *= EAGLER_TEXTURE_2D(u_samplerTexture, u_textureCoords01); +#endif +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + color *= EAGLER_TEXTURE_2D(u_samplerLightmap, v_lightmap2f); +#else + color *= EAGLER_TEXTURE_2D(u_samplerLightmap, u_textureCoords02); +#endif +#endif + +#ifdef COMPILE_BLEND_ADD + color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +#ifdef COMPILE_NORMAL_ATTRIB + vec3 normal = v_normal3f; +#else + vec3 normal = u_uniformNormal3f; +#endif + float diffuse = 0.0; + vec4 light; +#ifdef EAGLER_HAS_GLES_300 + for(int i = 0; i < u_lightsEnabled1i; ++i) { +#else + for(int i = 0; i < 4; ++i) { +#endif + light = u_lightsDirections4fv[i]; + diffuse += max(dot(light.xyz, normal), 0.0) * light.w; +#ifndef EAGLER_HAS_GLES_300 + if(i + 1 >= u_lightsEnabled1i) { + break; + } +#endif + } + color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0); +#endif + +#ifdef COMPILE_ENABLE_FOG + vec3 fogPos = v_position4f.xyz / v_position4f.w; + float dist = length(fogPos); + float fogDensity = u_fogParameters4f.y; + float fogStart = u_fogParameters4f.z; + float fogEnd = u_fogParameters4f.w; + float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) : + (dist - fogStart) / (fogEnd - fogStart); + color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a); +#endif + + EAGLER_FRAG_COLOR = color; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/core.vsh b/desktopRuntime/resources/assets/eagler/glsl/core.vsh index 350b912a..f7ebd7e6 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/core.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/core.vsh @@ -1,99 +1,99 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN_AUTO(vec3, a_position3f) - -#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) -#define _COMPILE_VARYING_POSITION -#endif - -#ifdef _COMPILE_VARYING_POSITION -EAGLER_OUT(vec4, v_position4f) -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN -EAGLER_OUT(vec3, v_objectPosition3f) -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -EAGLER_IN_AUTO(vec2, a_texture2f) -EAGLER_OUT(vec2, v_texture2f) -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -EAGLER_IN_AUTO(vec4, a_color4f) -EAGLER_OUT(vec4, v_color4f) -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -EAGLER_IN_AUTO(vec4, a_normal4f) -EAGLER_OUT(vec3, v_normal3f) -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -EAGLER_IN_AUTO(vec2, a_lightmap2f) -EAGLER_OUT(vec2, v_lightmap2f) -uniform mat4 u_textureMat4f02; -#endif - -#ifdef _COMPILE_VARYING_POSITION -uniform mat4 u_modelviewMat4f; -uniform mat4 u_projectionMat4f; -#else -uniform mat4 u_modelviewProjMat4f; -#ifdef COMPILE_NORMAL_ATTRIB -uniform mat4 u_modelviewMat4f; -#endif -#endif - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { -#ifdef COMPILE_ENABLE_TEX_GEN - v_objectPosition3f = a_position3f; -#endif - -#ifdef _COMPILE_VARYING_POSITION - v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif - -#ifdef COMPILE_COLOR_ATTRIB - v_color4f = a_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - -#ifdef _COMPILE_VARYING_POSITION - EAGLER_VERT_POSITION = u_projectionMat4f * v_position4f; -#else - EAGLER_VERT_POSITION = u_modelviewProjMat4f * vec4(a_position3f, 1.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN_AUTO(vec3, a_position3f) + +#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) +#define _COMPILE_VARYING_POSITION +#endif + +#ifdef _COMPILE_VARYING_POSITION +EAGLER_OUT(vec4, v_position4f) +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +EAGLER_OUT(vec3, v_objectPosition3f) +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +EAGLER_IN_AUTO(vec2, a_texture2f) +EAGLER_OUT(vec2, v_texture2f) +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +EAGLER_IN_AUTO(vec4, a_color4f) +EAGLER_OUT(vec4, v_color4f) +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +EAGLER_IN_AUTO(vec4, a_normal4f) +EAGLER_OUT(vec3, v_normal3f) +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +EAGLER_IN_AUTO(vec2, a_lightmap2f) +EAGLER_OUT(vec2, v_lightmap2f) +uniform mat4 u_textureMat4f02; +#endif + +#ifdef _COMPILE_VARYING_POSITION +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; +#else +uniform mat4 u_modelviewProjMat4f; +#ifdef COMPILE_NORMAL_ATTRIB +uniform mat4 u_modelviewMat4f; +#endif +#endif + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef COMPILE_ENABLE_TEX_GEN + v_objectPosition3f = a_position3f; +#endif + +#ifdef _COMPILE_VARYING_POSITION + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + +#ifdef _COMPILE_VARYING_POSITION + EAGLER_VERT_POSITION = u_projectionMat4f * v_position4f; +#else + EAGLER_VERT_POSITION = u_modelviewProjMat4f * vec4(a_position3f, 1.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh index b6dd4f44..b7507327 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh @@ -1,72 +1,72 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; - -layout(location = 0) in vec2 a_position2f; - -layout(location = 1) in vec3 p_position3f; -layout(location = 2) in vec2 p_texCoords2i; -layout(location = 3) in vec2 p_lightMap2f; -layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i; -layout(location = 5) in vec4 p_color4f; - -out vec2 v_texCoord2f; -out vec4 v_color4f; -out vec2 v_lightmap2f; - -#ifdef COMPILE_FORWARD_VSH -out vec4 v_position4f; -uniform mat4 u_modelViewMatrix4f; -uniform mat4 u_projectionMatrix4f; -#endif - -#ifdef COMPILE_GBUFFER_VSH -uniform mat4 u_matrixTransform; -#endif - -uniform vec3 u_texCoordSize2f_particleSize1f; -uniform vec3 u_transformParam_1_2_5_f; -uniform vec2 u_transformParam_3_4_f; - -void main() { - v_color4f = p_color4f.bgra; - v_lightmap2f = p_lightMap2f; - - vec2 tex2f = a_position2f * 0.5 + 0.5; - tex2f.y = 1.0 - tex2f.y; - tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; - v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; - - float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; - - vec3 pos3f = p_position3f; - vec2 spos2f = a_position2f * particleSize; - pos3f += u_transformParam_1_2_5_f * spos2f.xyy; - pos3f.zx += u_transformParam_3_4_f * spos2f; - -#ifdef COMPILE_GBUFFER_VSH - gl_Position = u_matrixTransform * vec4(pos3f, 1.0); -#endif -#ifdef COMPILE_FORWARD_VSH - v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0); - gl_Position = u_projectionMatrix4f * v_position4f; -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec2 a_position2f; + +layout(location = 1) in vec3 p_position3f; +layout(location = 2) in vec2 p_texCoords2i; +layout(location = 3) in vec2 p_lightMap2f; +layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i; +layout(location = 5) in vec4 p_color4f; + +out vec2 v_texCoord2f; +out vec4 v_color4f; +out vec2 v_lightmap2f; + +#ifdef COMPILE_FORWARD_VSH +out vec4 v_position4f; +uniform mat4 u_modelViewMatrix4f; +uniform mat4 u_projectionMatrix4f; +#endif + +#ifdef COMPILE_GBUFFER_VSH +uniform mat4 u_matrixTransform; +#endif + +uniform vec3 u_texCoordSize2f_particleSize1f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; + +void main() { + v_color4f = p_color4f.bgra; + v_lightmap2f = p_lightMap2f; + + vec2 tex2f = a_position2f * 0.5 + 0.5; + tex2f.y = 1.0 - tex2f.y; + tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; + v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; + + float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; + + vec3 pos3f = p_position3f; + vec2 spos2f = a_position2f * particleSize; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; + +#ifdef COMPILE_GBUFFER_VSH + gl_Position = u_matrixTransform * vec4(pos3f, 1.0); +#endif +#ifdef COMPILE_FORWARD_VSH + v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0); + gl_Position = u_projectionMatrix4f * v_position4f; +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh index c55d8fef..6af26863 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh @@ -1,235 +1,235 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; -precision highp sampler2DShadow; - -in vec4 v_position4f; -in vec2 v_texCoord2f; -in vec4 v_color4f; -in vec2 v_lightmap2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_diffuseTexture; - -uniform vec2 u_textureYScale2f; - -uniform mat4 u_inverseViewMatrix4f; - -#ifdef COMPILE_DYNAMIC_LIGHTS -struct DynamicLight { - mediump vec4 u_lightPosition4f; - mediump vec4 u_lightColor4f; -}; -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - DynamicLight u_dynamicLightArray[12]; -}; -#endif - -layout(std140) uniform u_worldLightingData { - mediump vec4 u_sunDirection4f; - mediump vec4 u_sunColor3f_sky1f; - mediump vec4 u_fogParameters4f; - mediump vec4 u_fogColorLight4f; - mediump vec4 u_fogColorDark4f; - mediump vec4 u_fogColorAddSun4f; - mediump vec4 u_blockSkySunDynamicLightFac4f; -#ifdef COMPILE_SUN_SHADOW_LOD0 - mediump mat4 u_sunShadowMatrixLOD04f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; - mediump mat4 u_sunShadowMatrixLOD24f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif -}; - -uniform sampler2D u_samplerNormalMaterial; - -uniform sampler2D u_metalsLUT; - -#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION -#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH -#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" - -uniform sampler2D u_irradianceMap; - -#ifdef DO_COMPILE_SUN_SHADOWS -uniform sampler2DShadow u_sunShadowDepthTexture; -#endif - -void main() { - vec4 worldPosition4f; - vec4 worldDirection4f; - vec4 diffuseColor4f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - vec3 materialData3f; - - // =========== RESOLVE CONSTANTS ============ // - - worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - worldPosition4f.w = 1.0; - worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); - worldDirection4f.xyz = normalize(worldDirection4f.xyz); - - lightmapCoords2f = v_lightmap2f; - - normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); - - // ========= CALCULATE DIFFUSE COLOR ========== // - - diffuseColor4f = texture(u_diffuseTexture, v_texCoord2f) * v_color4f; - - // ============= ALPHA TEST ============== // - - if(diffuseColor4f.a < 0.004) discard; - - // ========== RESOLVE MATERIALS =========== // - - materialData3f = texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb; - - vec3 metalN, metalK; - PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK) - - // ============ SUN LIGHTING ============== // - - diffuseColor4f.rgb *= diffuseColor4f.rgb; - - vec3 lightColor3f = vec3(0.0); - if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && - (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { -#ifdef DO_COMPILE_SUN_SHADOWS - - // ========== SUN SHADOW: LOD0 ============ // - - float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); - float shadowSample = 1.0; - vec4 shadowWorldPos4f = worldPosition4f; - shadowWorldPos4f.xyz += normalVector3f * 0.05; - - vec4 shadowTexPos4f; - vec2 tmpVec2; - for(;;) { - shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); - break; - } - -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 1.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 2.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - } -#endif - break; - } -#endif - lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); -#ifdef DO_COMPILE_SUN_SHADOWS - lightColor3f *= shadowSample * skyLight; -#endif - vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0); - lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z; - } - - // =========== IRRADIANCE MAP =========== // - - lightmapCoords2f *= lightmapCoords2f; - - vec3 irradianceMapSamplePos2f = normalVector3f; - irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; - float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); - dst *= dst; - irradianceMapSamplePos2f.xz *= 0.975; - vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0))); - if(dst < 0.005) { - vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; - }else { - irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); - irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); - skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; - } - skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w; - -#ifdef COMPILE_DYNAMIC_LIGHTS - - // =========== DYNAMIC LIGHTING =========== // - - vec3 dlightDist3f, dlightDir3f, dlightColor3f; - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this - for(int i = 0; i < safeLightCount; ++i) { - dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz; - dlightDir3f = normalize(dlightDist3f); - dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0); - dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f; - if(dot(dlightDir3f, normalVector3f) <= 0.0) { - continue; - } - dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); - if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { - continue; - } - lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w; - } - -#endif - - // ============ OUTPUT COLOR ============== // - - vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; - skyLight *= u_blockSkySunDynamicLightFac4f.y; - float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b; - diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075; - diffuseColor4f.rgb += lightColor3f; - - output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; +precision highp sampler2DShadow; + +in vec4 v_position4f; +in vec2 v_texCoord2f; +in vec4 v_color4f; +in vec2 v_lightmap2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_diffuseTexture; + +uniform vec2 u_textureYScale2f; + +uniform mat4 u_inverseViewMatrix4f; + +#ifdef COMPILE_DYNAMIC_LIGHTS +struct DynamicLight { + mediump vec4 u_lightPosition4f; + mediump vec4 u_lightColor4f; +}; +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + DynamicLight u_dynamicLightArray[12]; +}; +#endif + +layout(std140) uniform u_worldLightingData { + mediump vec4 u_sunDirection4f; + mediump vec4 u_sunColor3f_sky1f; + mediump vec4 u_fogParameters4f; + mediump vec4 u_fogColorLight4f; + mediump vec4 u_fogColorDark4f; + mediump vec4 u_fogColorAddSun4f; + mediump vec4 u_blockSkySunDynamicLightFac4f; +#ifdef COMPILE_SUN_SHADOW_LOD0 + mediump mat4 u_sunShadowMatrixLOD04f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; + mediump mat4 u_sunShadowMatrixLOD24f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif +}; + +uniform sampler2D u_samplerNormalMaterial; + +uniform sampler2D u_metalsLUT; + +#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION +#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH +#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" + +uniform sampler2D u_irradianceMap; + +#ifdef DO_COMPILE_SUN_SHADOWS +uniform sampler2DShadow u_sunShadowDepthTexture; +#endif + +void main() { + vec4 worldPosition4f; + vec4 worldDirection4f; + vec4 diffuseColor4f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + vec3 materialData3f; + + // =========== RESOLVE CONSTANTS ============ // + + worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + worldPosition4f.w = 1.0; + worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); + worldDirection4f.xyz = normalize(worldDirection4f.xyz); + + lightmapCoords2f = v_lightmap2f; + + normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); + + // ========= CALCULATE DIFFUSE COLOR ========== // + + diffuseColor4f = texture(u_diffuseTexture, v_texCoord2f) * v_color4f; + + // ============= ALPHA TEST ============== // + + if(diffuseColor4f.a < 0.004) discard; + + // ========== RESOLVE MATERIALS =========== // + + materialData3f = texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb; + + vec3 metalN, metalK; + PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK) + + // ============ SUN LIGHTING ============== // + + diffuseColor4f.rgb *= diffuseColor4f.rgb; + + vec3 lightColor3f = vec3(0.0); + if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && + (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { +#ifdef DO_COMPILE_SUN_SHADOWS + + // ========== SUN SHADOW: LOD0 ============ // + + float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); + float shadowSample = 1.0; + vec4 shadowWorldPos4f = worldPosition4f; + shadowWorldPos4f.xyz += normalVector3f * 0.05; + + vec4 shadowTexPos4f; + vec2 tmpVec2; + for(;;) { + shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); + break; + } + +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 1.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 2.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + } +#endif + break; + } +#endif + lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); +#ifdef DO_COMPILE_SUN_SHADOWS + lightColor3f *= shadowSample * skyLight; +#endif + vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0); + lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z; + } + + // =========== IRRADIANCE MAP =========== // + + lightmapCoords2f *= lightmapCoords2f; + + vec3 irradianceMapSamplePos2f = normalVector3f; + irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; + float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); + dst *= dst; + irradianceMapSamplePos2f.xz *= 0.975; + vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0))); + if(dst < 0.005) { + vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; + }else { + irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); + irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); + skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; + } + skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w; + +#ifdef COMPILE_DYNAMIC_LIGHTS + + // =========== DYNAMIC LIGHTING =========== // + + vec3 dlightDist3f, dlightDir3f, dlightColor3f; + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this + for(int i = 0; i < safeLightCount; ++i) { + dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz; + dlightDir3f = normalize(dlightDist3f); + dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0); + dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f; + if(dot(dlightDir3f, normalVector3f) <= 0.0) { + continue; + } + dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); + if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { + continue; + } + lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w; + } + +#endif + + // ============ OUTPUT COLOR ============== // + + vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; + skyLight *= u_blockSkySunDynamicLightFac4f.y; + float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b; + diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075; + diffuseColor4f.rgb += lightColor3f; + + output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh index 317d460e..f927f290 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh @@ -1,44 +1,44 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision mediump sampler2D; - -in vec2 v_texCoord2f; -in vec4 v_color4f; -in vec2 v_lightmap2f; - -layout(location = 0) out vec4 gbufferColor4f; -layout(location = 1) out vec4 gbufferNormal4f; -layout(location = 2) out vec4 gbufferMaterial4f; - -uniform sampler2D u_diffuseTexture; -uniform sampler2D u_samplerNormalMaterial; - -uniform vec2 u_textureYScale2f; - -void main() { - vec4 diffuseRGBA = texture(u_diffuseTexture, v_texCoord2f) * v_color4f; - if(diffuseRGBA.a < 0.004) { - discard; - } - gbufferColor4f = vec4(diffuseRGBA.rgb, v_lightmap2f.r); - gbufferNormal4f = vec4(0.5, 0.5, 1.0, v_lightmap2f.g); - gbufferMaterial4f = vec4(texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec2 v_texCoord2f; +in vec4 v_color4f; +in vec2 v_lightmap2f; + +layout(location = 0) out vec4 gbufferColor4f; +layout(location = 1) out vec4 gbufferNormal4f; +layout(location = 2) out vec4 gbufferMaterial4f; + +uniform sampler2D u_diffuseTexture; +uniform sampler2D u_samplerNormalMaterial; + +uniform vec2 u_textureYScale2f; + +void main() { + vec4 diffuseRGBA = texture(u_diffuseTexture, v_texCoord2f) * v_color4f; + if(diffuseRGBA.a < 0.004) { + discard; + } + gbufferColor4f = vec4(diffuseRGBA.rgb, v_lightmap2f.r); + gbufferNormal4f = vec4(0.5, 0.5, 1.0, v_lightmap2f.g); + gbufferMaterial4f = vec4(texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt index 9bd03640..3c6ef130 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt @@ -1 +1 @@ -these are just low quality fallback material textures for the default vanilla resource pack when no PBR resource pack is loaded, if you would like to make a PBR resource pack put your _n and _s textures in the "/assets/minecraft/textures/" directory of your zip file, do not modify any files within "/assets/eagler/glsl/deferred/assets_pbr/textures/" because they will not be recognized \ No newline at end of file +these are just low quality fallback material textures for the default vanilla resource pack when no PBR resource pack is loaded, if you would like to make a PBR resource pack put your _n and _s textures in the "/assets/minecraft/textures/" directory of your zip file, do not modify any files within "/assets/eagler/glsl/deferred/assets_pbr/textures/" because they will not be recognized diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh index 08c3531d..c74cebe3 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh @@ -1,57 +1,57 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out float output1f; - -uniform sampler2D u_noiseTexture; - -uniform float u_textureSlice1f; -uniform vec2 u_textureSize2f; -uniform mat4x3 u_sampleOffsetMatrix4f; -uniform vec3 u_cloudMovement3f; - -#define GET_CLOUDS(pos3f, accum, factor, tmp3f)\ - tmp3f.z = floor(pos3f.z);\ - tmp3f.xy = pos3f.xy * 0.015625 + (tmp3f.z * 0.265625);\ - pos3f.x = textureLod(u_noiseTexture, tmp3f.xy, 0.0).x;\ - pos3f.y = textureLod(u_noiseTexture, tmp3f.xy + 0.265625, 0.0).x;\ - accum += mix(pos3f.x, pos3f.y, pos3f.z - tmp3f.z) * factor; - -void main() { - vec3 p = vec3(v_position2f.x, u_textureSlice1f, v_position2f.y) * vec3(u_textureSize2f.x, 1.0, u_textureSize2f.y); - p = u_sampleOffsetMatrix4f * vec4(p, 1.0); - vec3 sampleCoord3f = p + u_cloudMovement3f; - float noise = 0.0; - - vec3 in3f = sampleCoord3f; - GET_CLOUDS(in3f, noise, 0.5, p) - in3f = sampleCoord3f * 2.0 + u_cloudMovement3f; - GET_CLOUDS(in3f, noise, 0.25, p) - in3f = sampleCoord3f * 7.0 - u_cloudMovement3f; - GET_CLOUDS(in3f, noise, 0.125, p) - in3f = (sampleCoord3f + u_cloudMovement3f) * 16.0; - GET_CLOUDS(in3f, noise, 0.0625, p) - - output1f = noise; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out float output1f; + +uniform sampler2D u_noiseTexture; + +uniform float u_textureSlice1f; +uniform vec2 u_textureSize2f; +uniform mat4x3 u_sampleOffsetMatrix4f; +uniform vec3 u_cloudMovement3f; + +#define GET_CLOUDS(pos3f, accum, factor, tmp3f)\ + tmp3f.z = floor(pos3f.z);\ + tmp3f.xy = pos3f.xy * 0.015625 + (tmp3f.z * 0.265625);\ + pos3f.x = textureLod(u_noiseTexture, tmp3f.xy, 0.0).x;\ + pos3f.y = textureLod(u_noiseTexture, tmp3f.xy + 0.265625, 0.0).x;\ + accum += mix(pos3f.x, pos3f.y, pos3f.z - tmp3f.z) * factor; + +void main() { + vec3 p = vec3(v_position2f.x, u_textureSlice1f, v_position2f.y) * vec3(u_textureSize2f.x, 1.0, u_textureSize2f.y); + p = u_sampleOffsetMatrix4f * vec4(p, 1.0); + vec3 sampleCoord3f = p + u_cloudMovement3f; + float noise = 0.0; + + vec3 in3f = sampleCoord3f; + GET_CLOUDS(in3f, noise, 0.5, p) + in3f = sampleCoord3f * 2.0 + u_cloudMovement3f; + GET_CLOUDS(in3f, noise, 0.25, p) + in3f = sampleCoord3f * 7.0 - u_cloudMovement3f; + GET_CLOUDS(in3f, noise, 0.125, p) + in3f = (sampleCoord3f + u_cloudMovement3f) * 16.0; + GET_CLOUDS(in3f, noise, 0.0625, p) + + output1f = noise; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh index 32e99313..2d39db72 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh @@ -1,94 +1,94 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; -precision highp sampler3D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform float u_rainStrength1f; -uniform vec4 u_densityModifier4f; -uniform float u_sampleStep1f; -uniform float u_cloudTimer1f; -uniform vec3 u_cloudOffset3f; -uniform vec3 u_sunDirection3f; -uniform vec3 u_sunColor3f; - -uniform sampler3D u_noiseTexture3D; -uniform sampler2D u_skyIrradianceMap; -#define GET_CLOUDS(pos3f, out1f)\ - if(pos3f == clamp(pos3f, vec3(0.0), vec3(1.0))) {\ - out1f = length(pos3f - clamp(pos3f, vec3(0.05), vec3(0.95)));\ - out1f = smoothstep(0.0, 1.0, max(1.0 - out1f * 15.0, 0.0));\ - out1f *= textureLod(u_noiseTexture3D, pos3f.xzy, 0.0).r;\ - out1f += u_densityModifier4f.w;\ - out1f = max(out1f * out1f * u_densityModifier4f.x + out1f * u_densityModifier4f.y + u_densityModifier4f.z, 0.0);\ - }else out1f = 0.0; - -void main() { - vec2 latLong = v_position2f * 2.0 - 1.0; - float latLongLen = dot(latLong, latLong); - if(latLongLen > 1.025) { - output4f = vec4(0.0); - return; - } - - float mag2 = 2.0 / (latLongLen + 1.0); - vec3 dir; - dir.y = mag2 - 1.0; - dir.xz = latLong * mag2; - - vec3 samplePos = vec3(0.0, -4.5 + u_cloudOffset3f.y * 0.05, 0.0) + dir * u_sampleStep1f * 0.2; - samplePos = samplePos * vec3(0.05, 0.1, 0.05) + vec3(0.5, 0.0, 0.5); - - float sample0, sample1; - GET_CLOUDS(samplePos, sample0) - - if(sample0 < 0.002) { - output4f = vec4(0.0, 0.0, 0.0, 1.0); - return; - } - - output4f.a = exp2(-sample0 * 5.0); - - vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025; - float sunVisibility = sample0; - - GET_CLOUDS((samplePos + sunDirection), sample1) - sunVisibility += sample1; - GET_CLOUDS((samplePos + sunDirection * 2.0), sample1) - sunVisibility += sample1; - GET_CLOUDS((samplePos + sunDirection * 3.0), sample1) - sunVisibility += sample1; - GET_CLOUDS((samplePos + sunDirection * 4.0), sample1) - sunVisibility += sample1; - GET_CLOUDS((samplePos + sunDirection * 5.0), sample1) - sunVisibility += sample1; - - sunVisibility = exp2(-sunVisibility * 50.0); - sunVisibility *= 1.0 - exp2(-sample0 * 1.2); - - vec3 sky = textureLod(u_skyIrradianceMap, v_position2f * vec2(1.0, 0.5) + vec2(0.0, 0.5), 0.0).rgb * 0.05; - float intergal = exp2(-7.33 * sample0) * -9.0 + 9.0; - - output4f.rgb = (u_sunColor3f * sunVisibility + sky) * intergal; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; +precision highp sampler3D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform float u_rainStrength1f; +uniform vec4 u_densityModifier4f; +uniform float u_sampleStep1f; +uniform float u_cloudTimer1f; +uniform vec3 u_cloudOffset3f; +uniform vec3 u_sunDirection3f; +uniform vec3 u_sunColor3f; + +uniform sampler3D u_noiseTexture3D; +uniform sampler2D u_skyIrradianceMap; +#define GET_CLOUDS(pos3f, out1f)\ + if(pos3f == clamp(pos3f, vec3(0.0), vec3(1.0))) {\ + out1f = length(pos3f - clamp(pos3f, vec3(0.05), vec3(0.95)));\ + out1f = smoothstep(0.0, 1.0, max(1.0 - out1f * 15.0, 0.0));\ + out1f *= textureLod(u_noiseTexture3D, pos3f.xzy, 0.0).r;\ + out1f += u_densityModifier4f.w;\ + out1f = max(out1f * out1f * u_densityModifier4f.x + out1f * u_densityModifier4f.y + u_densityModifier4f.z, 0.0);\ + }else out1f = 0.0; + +void main() { + vec2 latLong = v_position2f * 2.0 - 1.0; + float latLongLen = dot(latLong, latLong); + if(latLongLen > 1.025) { + output4f = vec4(0.0); + return; + } + + float mag2 = 2.0 / (latLongLen + 1.0); + vec3 dir; + dir.y = mag2 - 1.0; + dir.xz = latLong * mag2; + + vec3 samplePos = vec3(0.0, -4.5 + u_cloudOffset3f.y * 0.05, 0.0) + dir * u_sampleStep1f * 0.2; + samplePos = samplePos * vec3(0.05, 0.1, 0.05) + vec3(0.5, 0.0, 0.5); + + float sample0, sample1; + GET_CLOUDS(samplePos, sample0) + + if(sample0 < 0.002) { + output4f = vec4(0.0, 0.0, 0.0, 1.0); + return; + } + + output4f.a = exp2(-sample0 * 5.0); + + vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025; + float sunVisibility = sample0; + + GET_CLOUDS((samplePos + sunDirection), sample1) + sunVisibility += sample1; + GET_CLOUDS((samplePos + sunDirection * 2.0), sample1) + sunVisibility += sample1; + GET_CLOUDS((samplePos + sunDirection * 3.0), sample1) + sunVisibility += sample1; + GET_CLOUDS((samplePos + sunDirection * 4.0), sample1) + sunVisibility += sample1; + GET_CLOUDS((samplePos + sunDirection * 5.0), sample1) + sunVisibility += sample1; + + sunVisibility = exp2(-sunVisibility * 50.0); + sunVisibility *= 1.0 - exp2(-sample0 * 1.2); + + vec3 sky = textureLod(u_skyIrradianceMap, v_position2f * vec2(1.0, 0.5) + vec2(0.0, 0.5), 0.0).rgb * 0.05; + float intergal = exp2(-7.33 * sample0) * -9.0 + 9.0; + + output4f.rgb = (u_sunColor3f * sunVisibility + sky) * intergal; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh index d0343f4d..f17753c7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh @@ -1,35 +1,35 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision mediump sampler3D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler3D u_inputTexture; -uniform float u_textureLevel1f; -uniform float u_textureLod1f; -uniform vec2 u_sampleWeights2f; - -void main() { - float objsample = textureLod(u_inputTexture, vec3(v_position2f, u_textureLevel1f), u_textureLod1f).r; - output4f = vec4(objsample * u_sampleWeights2f.x, 0.0, 0.0, objsample * u_sampleWeights2f.y + 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler3D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler3D u_inputTexture; +uniform float u_textureLevel1f; +uniform float u_textureLod1f; +uniform vec2 u_sampleWeights2f; + +void main() { + float objsample = textureLod(u_inputTexture, vec3(v_position2f, u_textureLevel1f), u_textureLod1f).r; + output4f = vec4(objsample * u_sampleWeights2f.x, 0.0, 0.0, objsample * u_sampleWeights2f.y + 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh index 07c0ea58..43161949 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh @@ -1,32 +1,32 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; - -layout(location = 0) in vec2 a_position2f; - -out vec2 v_position2f; - -uniform mat3x2 u_transformMatrix3x2f; - -void main() { - v_position2f = a_position2f * 0.5 + 0.5; - gl_Position = vec4(u_transformMatrix3x2f * vec3(a_position2f, 1.0), 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec2 a_position2f; + +out vec2 v_position2f; + +uniform mat3x2 u_transformMatrix3x2f; + +void main() { + v_position2f = a_position2f * 0.5 + 0.5; + gl_Position = vec4(u_transformMatrix3x2f * vec3(a_position2f, 1.0), 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh index 92168a40..576156c4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh @@ -1,50 +1,50 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) out float occlusionOut1f; - -uniform mat4x3 u_sampleMatrix4x3f; -uniform sampler2D u_cloudsTexture; - -#define SAMPLE_DENSITY(v, a_, f)\ - f = u_sampleMatrix4x3f * v;\ - f.xy = (f.xz / (f.y + 1.0)) * 0.975 * 0.5 + 0.5;\ - if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\ - a_ += textureLod(u_cloudsTexture, f.xy, 0.0).a * 0.125;\ - else\ - a_ += 0.125; - -void main() { - vec3 f; - float accum = 0.0; - - SAMPLE_DENSITY(vec4(0.000, 0.000, 1.000, 1.0), accum, f) - SAMPLE_DENSITY(vec4(0.844, 0.521, 0.126, 1.0), accum, f) - SAMPLE_DENSITY(vec4(-0.187, 0.979, 0.087, 1.0), accum, f) - SAMPLE_DENSITY(vec4(0.402, -0.904, 0.145, 1.0), accum, f) - SAMPLE_DENSITY(vec4(-0.944, -0.316, 0.098, 1.0), accum, f) - SAMPLE_DENSITY(vec4(-0.759, 0.427, 0.491, 1.0), accum, f) - SAMPLE_DENSITY(vec4(0.955, -0.285, 0.076, 1.0), accum, f) - SAMPLE_DENSITY(vec4(-0.322, -0.664, 0.675, 1.0), accum, f) - - occlusionOut1f = clamp(sqrt(accum) * 3.0 - 1.0, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) out float occlusionOut1f; + +uniform mat4x3 u_sampleMatrix4x3f; +uniform sampler2D u_cloudsTexture; + +#define SAMPLE_DENSITY(v, a_, f)\ + f = u_sampleMatrix4x3f * v;\ + f.xy = (f.xz / (f.y + 1.0)) * 0.975 * 0.5 + 0.5;\ + if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\ + a_ += textureLod(u_cloudsTexture, f.xy, 0.0).a * 0.125;\ + else\ + a_ += 0.125; + +void main() { + vec3 f; + float accum = 0.0; + + SAMPLE_DENSITY(vec4(0.000, 0.000, 1.000, 1.0), accum, f) + SAMPLE_DENSITY(vec4(0.844, 0.521, 0.126, 1.0), accum, f) + SAMPLE_DENSITY(vec4(-0.187, 0.979, 0.087, 1.0), accum, f) + SAMPLE_DENSITY(vec4(0.402, -0.904, 0.145, 1.0), accum, f) + SAMPLE_DENSITY(vec4(-0.944, -0.316, 0.098, 1.0), accum, f) + SAMPLE_DENSITY(vec4(-0.759, 0.427, 0.491, 1.0), accum, f) + SAMPLE_DENSITY(vec4(0.955, -0.285, 0.076, 1.0), accum, f) + SAMPLE_DENSITY(vec4(-0.322, -0.664, 0.675, 1.0), accum, f) + + occlusionOut1f = clamp(sqrt(accum) * 3.0 - 1.0, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh index 4fbbc84f..3de01b4e 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh @@ -1,174 +1,174 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_gbufferColorTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_gbufferMaterialTexture; - -uniform sampler2D u_gbufferDepthTexture; - -uniform vec2 u_halfResolutionPixelAlignment2f; - -#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION -uniform sampler2D u_ssaoTexture; -#endif - -#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS -uniform sampler2D u_ssrReflectionTexture; -#endif - -#ifdef COMPILE_ENV_MAP_REFLECTIONS -uniform sampler2D u_environmentMap; -#endif - -uniform sampler2D u_irradianceMap; - -uniform sampler2D u_brdfLUT; -uniform sampler2D u_metalsLUT; - -uniform mat4 u_inverseProjMatrix4f; -uniform mat4 u_inverseViewMatrix4f; - -uniform vec3 u_sunDirection3f; -uniform float u_skyLightFactor1f; - -#if defined(COMPILE_SCREEN_SPACE_REFLECTIONS) || defined(COMPILE_ENV_MAP_REFLECTIONS) -#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR -#endif - -#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl" - -void main() { - vec3 diffuseColor3f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - vec4 materialData4f; - - float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - if(depth < 0.00001) { - discard; - } - - vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); - diffuseColor3f.rgb = sampleVar4f.rgb * sampleVar4f.rgb; - lightmapCoords2f.x = sampleVar4f.a; - sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); - normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; - normalVector3f.xyz = mat3(u_inverseViewMatrix4f) * normalVector3f.xyz; - normalVector3f.xyz = normalize(normalVector3f.xyz); - lightmapCoords2f.y = sampleVar4f.a; - materialData4f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0); - - float shadow = 0.075; - -#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION - vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0); - ao.g = ao.b > 0.0 ? ao.g : 1.0; - shadow = mix(shadow, shadow * ao.g, 0.9); -#endif - - lightmapCoords2f *= lightmapCoords2f; - vec3 irradianceMapSamplePos2f = normalVector3f; - irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; - float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); - dst *= dst; - irradianceMapSamplePos2f.xz *= 0.975; - vec3 skyLight = vec3(sqrt(0.01 + max(-u_sunDirection3f.y, 0.0))); - if(dst < 0.005) { - vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; - }else { - irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); - irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); - skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; - } - - skyLight *= lightmapCoords2f.g * u_skyLightFactor1f; - - vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0; - float emissive = materialData4f.b == 1.0 ? 0.0 : materialData4f.b; - vec3 specular = vec3(0.0); - -#ifdef COMPILE_ENV_MAP_REFLECTIONS - float f = materialData4f.g < 0.06 ? 1.0 : 0.0; - f += materialData4f.r < 0.5 ? 1.0 : 0.0; - while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) { - vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0; - worldPosition4f = u_inverseProjMatrix4f * worldPosition4f; - worldPosition4f.xyz /= worldPosition4f.w; - float posDst = dot(worldPosition4f.xyz, worldPosition4f.xyz); - if(posDst > 25.0) { - break; - } - worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz, 0.0); - vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative - vec3 reflectDir = reflect(viewDir3f, normalVector3f); - reflectDir.xz /= abs(reflectDir.y) + 1.0; - float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); - dst *= dst; - reflectDir.xz = reflectDir.xz * 0.975; - vec4 envMapSample4f; - if(dst < 0.005) { - vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); - }else { - reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); - reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); - envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); - } - if(envMapSample4f.a > 0.0) { - specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, envMapSample4f.rgb, viewDir3f, normalVector3f, materialData4f.rgb); - specular *= 1.0 - sqrt(posDst) * 0.2; - } - break; - } -#endif - -#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS -#ifndef COMPILE_ENV_MAP_REFLECTIONS - float f = materialData4f.g < 0.06 ? 1.0 : 0.0; - f += materialData4f.r < 0.5 ? 1.0 : 0.0; - if(f == 0.0) { -#else - if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) { -#endif - vec4 ssrSample = textureLod(u_ssrReflectionTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0); - if(ssrSample.g > 0.0) { - ssrSample.g -= 0.005; - vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0; - worldPosition4f = u_inverseProjMatrix4f * worldPosition4f; - worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz / worldPosition4f.w, 0.0); - vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative - specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, ssrSample.rgb, viewDir3f, normalVector3f.xyz, materialData4f.rgb); - } - } -#endif - - output4f = vec4((diffuseColor3f.rgb * max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) + specular * 8.0) * shadow, 1.0); - -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_gbufferColorTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_gbufferMaterialTexture; + +uniform sampler2D u_gbufferDepthTexture; + +uniform vec2 u_halfResolutionPixelAlignment2f; + +#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION +uniform sampler2D u_ssaoTexture; +#endif + +#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS +uniform sampler2D u_ssrReflectionTexture; +#endif + +#ifdef COMPILE_ENV_MAP_REFLECTIONS +uniform sampler2D u_environmentMap; +#endif + +uniform sampler2D u_irradianceMap; + +uniform sampler2D u_brdfLUT; +uniform sampler2D u_metalsLUT; + +uniform mat4 u_inverseProjMatrix4f; +uniform mat4 u_inverseViewMatrix4f; + +uniform vec3 u_sunDirection3f; +uniform float u_skyLightFactor1f; + +#if defined(COMPILE_SCREEN_SPACE_REFLECTIONS) || defined(COMPILE_ENV_MAP_REFLECTIONS) +#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR +#endif + +#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl" + +void main() { + vec3 diffuseColor3f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + vec4 materialData4f; + + float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + if(depth < 0.00001) { + discard; + } + + vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); + diffuseColor3f.rgb = sampleVar4f.rgb * sampleVar4f.rgb; + lightmapCoords2f.x = sampleVar4f.a; + sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); + normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; + normalVector3f.xyz = mat3(u_inverseViewMatrix4f) * normalVector3f.xyz; + normalVector3f.xyz = normalize(normalVector3f.xyz); + lightmapCoords2f.y = sampleVar4f.a; + materialData4f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0); + + float shadow = 0.075; + +#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION + vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0); + ao.g = ao.b > 0.0 ? ao.g : 1.0; + shadow = mix(shadow, shadow * ao.g, 0.9); +#endif + + lightmapCoords2f *= lightmapCoords2f; + vec3 irradianceMapSamplePos2f = normalVector3f; + irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; + float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); + dst *= dst; + irradianceMapSamplePos2f.xz *= 0.975; + vec3 skyLight = vec3(sqrt(0.01 + max(-u_sunDirection3f.y, 0.0))); + if(dst < 0.005) { + vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; + }else { + irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); + irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); + skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; + } + + skyLight *= lightmapCoords2f.g * u_skyLightFactor1f; + + vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0; + float emissive = materialData4f.b == 1.0 ? 0.0 : materialData4f.b; + vec3 specular = vec3(0.0); + +#ifdef COMPILE_ENV_MAP_REFLECTIONS + float f = materialData4f.g < 0.06 ? 1.0 : 0.0; + f += materialData4f.r < 0.5 ? 1.0 : 0.0; + while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) { + vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0; + worldPosition4f = u_inverseProjMatrix4f * worldPosition4f; + worldPosition4f.xyz /= worldPosition4f.w; + float posDst = dot(worldPosition4f.xyz, worldPosition4f.xyz); + if(posDst > 25.0) { + break; + } + worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz, 0.0); + vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative + vec3 reflectDir = reflect(viewDir3f, normalVector3f); + reflectDir.xz /= abs(reflectDir.y) + 1.0; + float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); + dst *= dst; + reflectDir.xz = reflectDir.xz * 0.975; + vec4 envMapSample4f; + if(dst < 0.005) { + vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); + }else { + reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); + reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); + envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); + } + if(envMapSample4f.a > 0.0) { + specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, envMapSample4f.rgb, viewDir3f, normalVector3f, materialData4f.rgb); + specular *= 1.0 - sqrt(posDst) * 0.2; + } + break; + } +#endif + +#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS +#ifndef COMPILE_ENV_MAP_REFLECTIONS + float f = materialData4f.g < 0.06 ? 1.0 : 0.0; + f += materialData4f.r < 0.5 ? 1.0 : 0.0; + if(f == 0.0) { +#else + if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) { +#endif + vec4 ssrSample = textureLod(u_ssrReflectionTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0); + if(ssrSample.g > 0.0) { + ssrSample.g -= 0.005; + vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0; + worldPosition4f = u_inverseProjMatrix4f * worldPosition4f; + worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz / worldPosition4f.w, 0.0); + vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative + specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, ssrSample.rgb, viewDir3f, normalVector3f.xyz, materialData4f.rgb); + } + } +#endif + + output4f = vec4((diffuseColor3f.rgb * max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) + specular * 8.0) * shadow, 1.0); + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh index ae6f751d..6c5e04b4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh @@ -1,116 +1,116 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 a_texture2f; -out vec2 v_texture2f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 a_color4f; -out vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -out float v_block1f; -#endif - -#ifdef COMPILE_STATE_WAVING_BLOCKS -uniform mat4 u_modelMatrix4f; -uniform mat4 u_viewMatrix4f; -uniform vec3 u_wavingBlockOffset3f; -uniform vec4 u_wavingBlockParam4f; -#ifndef COMPILE_NORMAL_ATTRIB -uniform float u_blockConstant1f; -#endif -#define DO_COMPILE_STATE_WAVING_BLOCKS -#define FAKE_SIN(valueIn, valueOut)\ - valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; -#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION -#endif - -#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl" - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE -out vec3 v_viewdir3f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; -uniform mat4 u_projectionMat4f; - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { - -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif - -#ifdef COMPILE_COLOR_ATTRIB - v_color4f = a_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); - float blockId = v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - - vec4 pos = vec4(a_position3f, 1.0); - -#ifdef DO_COMPILE_STATE_WAVING_BLOCKS -#ifndef COMPILE_NORMAL_ATTRIB - float blockId = u_blockConstant1f; -#endif -#ifdef COMPILE_LIGHTMAP_ATTRIB - if(v_lightmap2f.y > 0.33) { - COMPUTE_WAVING_BLOCKS(pos, min(v_lightmap2f.y * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) - }else { - pos = u_modelviewMat4f * pos; - } -#else - COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) -#endif -#else - pos = u_modelviewMat4f * pos; -#endif - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE - v_viewdir3f = pos.xyz / pos.w; -#endif - - gl_Position = u_projectionMat4f * pos; - -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 a_color4f; +out vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +out float v_block1f; +#endif + +#ifdef COMPILE_STATE_WAVING_BLOCKS +uniform mat4 u_modelMatrix4f; +uniform mat4 u_viewMatrix4f; +uniform vec3 u_wavingBlockOffset3f; +uniform vec4 u_wavingBlockParam4f; +#ifndef COMPILE_NORMAL_ATTRIB +uniform float u_blockConstant1f; +#endif +#define DO_COMPILE_STATE_WAVING_BLOCKS +#define FAKE_SIN(valueIn, valueOut)\ + valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; +#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION +#endif + +#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl" + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE +out vec3 v_viewdir3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); + float blockId = v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + + vec4 pos = vec4(a_position3f, 1.0); + +#ifdef DO_COMPILE_STATE_WAVING_BLOCKS +#ifndef COMPILE_NORMAL_ATTRIB + float blockId = u_blockConstant1f; +#endif +#ifdef COMPILE_LIGHTMAP_ATTRIB + if(v_lightmap2f.y > 0.33) { + COMPUTE_WAVING_BLOCKS(pos, min(v_lightmap2f.y * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) + }else { + pos = u_modelviewMat4f * pos; + } +#else + COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) +#endif +#else + pos = u_modelviewMat4f * pos; +#endif + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE + v_viewdir3f = pos.xyz / pos.w; +#endif + + gl_Position = u_projectionMat4f * pos; + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh index 13dcf190..72fc106d 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh @@ -1,168 +1,168 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 v_texture2f; -#endif - -uniform vec4 u_color4f; - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -in float v_block1f; -#else -uniform vec3 u_uniformNormal3f; -uniform float u_blockConstant1f; -#endif - -uniform float u_useEnvMap1f; - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -uniform sampler2D u_samplerTexture; -#ifndef COMPILE_TEXTURE_ATTRIB -uniform vec2 u_textureCoords01; -#endif -#endif - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifndef COMPILE_LIGHTMAP_ATTRIB -uniform vec2 u_textureCoords02; -#endif -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST -uniform float u_alphaTestRef1f; -#endif - -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX -uniform vec2 u_textureAnisotropicFix; -#endif - -#ifdef COMPILE_BLEND_ADD -uniform vec4 u_colorBlendSrc4f; -uniform vec4 u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE -uniform sampler2D u_samplerNormalMaterial; -in vec3 v_viewdir3f; -#ifndef COMPILE_TEXTURE_ATTRIB -uniform vec2 u_textureCoords01; -#endif -#else -uniform vec3 u_materialConstants3f; -#endif - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE -mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) { - vec3 dp1 = dFdx(p); - vec3 dp2 = dFdy(p); - vec2 duv1 = dFdx(uv); - vec2 duv2 = dFdy(uv); - vec3 dp2perp = cross(dp2, N); - vec3 dp1perp = cross(N, dp1); - vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; - vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; - float invmax = inversesqrt(max(dot(T,T), dot(B,B))); - return mat3(T * invmax, B * invmax, N); -} -#endif - -layout(location = 0) out vec4 gbufferColor4f; -layout(location = 1) out vec4 gbufferNormal4f; -layout(location = 2) out vec4 gbufferMaterial4f; - -void main() { -#ifdef COMPILE_COLOR_ATTRIB - vec4 color = v_color4f * u_color4f; -#else - vec4 color = u_color4f; -#endif - - vec3 normal; -#ifdef COMPILE_NORMAL_ATTRIB - normal = normalize(v_normal3f); -#else - normal = u_uniformNormal3f; -#endif - -#if defined(COMPILE_ENABLE_TEXTURE2D) || defined(COMPILE_NORMAL_MATERIAL_TEXTURE) - vec2 uv; -#ifdef COMPILE_TEXTURE_ATTRIB -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX - uv = floor(uv * u_textureAnisotropicFix) + 0.5; - uv /= u_textureAnisotropicFix; -#else - uv = v_texture2f; -#endif -#else - uv = u_textureCoords01; -#endif -#ifdef COMPILE_ENABLE_TEXTURE2D - color *= texture(u_samplerTexture, uv); -#endif -#endif - - vec2 lightmap = vec2(0.0, 1.0); - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - lightmap = v_lightmap2f; -#else - lightmap = u_textureCoords02; -#endif -#endif - -#ifdef COMPILE_BLEND_ADD - color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE - vec2 uv2 = vec2(1.0, 0.5) * uv; - vec2 normal2 = texture(u_samplerNormalMaterial, uv2).xy; - mat3 cf; - if(normal2.x + normal2.y > 0.0) { - normal2 *= 2.0; - normal2 -= 1.0; - cf = cotangent_frame(normal, normalize(v_viewdir3f), uv); - normal = cf * vec3(normal2, sqrt(1.0 - dot(normal2, normal2))); - } - uv2.y += 0.5; - vec3 material = texture(u_samplerNormalMaterial, uv2).rgb; -#else - vec3 material = u_materialConstants3f; -#endif - - gbufferColor4f.rgb = color.rgb; - gbufferColor4f.a = lightmap.r; - gbufferNormal4f.rgb = normal * 0.5 + 0.5; - gbufferNormal4f.a = lightmap.g; - gbufferMaterial4f = vec4(material.rgb, u_useEnvMap1f); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +in float v_block1f; +#else +uniform vec3 u_uniformNormal3f; +uniform float u_blockConstant1f; +#endif + +uniform float u_useEnvMap1f; + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#ifndef COMPILE_TEXTURE_ATTRIB +uniform vec2 u_textureCoords01; +#endif +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifndef COMPILE_LIGHTMAP_ATTRIB +uniform vec2 u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif + +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX +uniform vec2 u_textureAnisotropicFix; +#endif + +#ifdef COMPILE_BLEND_ADD +uniform vec4 u_colorBlendSrc4f; +uniform vec4 u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE +uniform sampler2D u_samplerNormalMaterial; +in vec3 v_viewdir3f; +#ifndef COMPILE_TEXTURE_ATTRIB +uniform vec2 u_textureCoords01; +#endif +#else +uniform vec3 u_materialConstants3f; +#endif + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE +mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) { + vec3 dp1 = dFdx(p); + vec3 dp2 = dFdy(p); + vec2 duv1 = dFdx(uv); + vec2 duv2 = dFdy(uv); + vec3 dp2perp = cross(dp2, N); + vec3 dp1perp = cross(N, dp1); + vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; + vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; + float invmax = inversesqrt(max(dot(T,T), dot(B,B))); + return mat3(T * invmax, B * invmax, N); +} +#endif + +layout(location = 0) out vec4 gbufferColor4f; +layout(location = 1) out vec4 gbufferNormal4f; +layout(location = 2) out vec4 gbufferMaterial4f; + +void main() { +#ifdef COMPILE_COLOR_ATTRIB + vec4 color = v_color4f * u_color4f; +#else + vec4 color = u_color4f; +#endif + + vec3 normal; +#ifdef COMPILE_NORMAL_ATTRIB + normal = v_normal3f; +#else + normal = u_uniformNormal3f; +#endif + +#if defined(COMPILE_ENABLE_TEXTURE2D) || defined(COMPILE_NORMAL_MATERIAL_TEXTURE) + vec2 uv; +#ifdef COMPILE_TEXTURE_ATTRIB +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX + uv = floor(uv * u_textureAnisotropicFix) + 0.5; + uv /= u_textureAnisotropicFix; +#else + uv = v_texture2f; +#endif +#else + uv = u_textureCoords01; +#endif +#ifdef COMPILE_ENABLE_TEXTURE2D + color *= texture(u_samplerTexture, uv); +#endif +#endif + + vec2 lightmap = vec2(0.0, 1.0); + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + lightmap = v_lightmap2f; +#else + lightmap = u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_BLEND_ADD + color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE + vec2 uv2 = vec2(1.0, 0.5) * uv; + vec2 normal2 = texture(u_samplerNormalMaterial, uv2).xy; + mat3 cf; + if(normal2.x + normal2.y > 0.0) { + normal2 *= 2.0; + normal2 -= 1.0; + cf = cotangent_frame(normal, normalize(v_viewdir3f), uv); + normal = cf * vec3(normal2, sqrt(1.0 - dot(normal2, normal2))); + } + uv2.y += 0.5; + vec3 material = texture(u_samplerNormalMaterial, uv2).rgb; +#else + vec3 material = u_materialConstants3f; +#endif + + gbufferColor4f.rgb = color.rgb; + gbufferColor4f.a = lightmap.r; + gbufferNormal4f.rgb = normal * 0.5 + 0.5; + gbufferNormal4f.a = lightmap.g; + gbufferMaterial4f = vec4(material.rgb, u_useEnvMap1f); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh index f544f13c..8130c070 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh @@ -1,104 +1,104 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) out vec4 output4f; - -in vec2 v_position2f; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_fogDepthTexture; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -uniform sampler2D u_lightShaftsTexture; -#endif - -#ifdef COMPILE_FOG_ATMOSPHERE -uniform sampler2D u_environmentMap; -uniform vec3 u_sunColorAdd3f; -#endif - -uniform mat4 u_inverseViewProjMatrix4f; - -#ifdef COMPILE_FOG_LINEAR -uniform vec2 u_linearFogParam2f; -#else -uniform float u_expFogDensity1f; -#endif - -uniform vec4 u_fogColorLight4f; -uniform vec4 u_fogColorDark4f; - -void main() { - vec4 fragPos4f = vec4(v_position2f, textureLod(u_fogDepthTexture, v_position2f, 0.0).r, 1.0); - -#ifdef COMPILE_FOG_ATMOSPHERE - if(fragPos4f.z <= 0.0000001) { - discard; - } -#endif - - float solidDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - if(solidDepth != fragPos4f.z) { - discard; - } - - fragPos4f.xyz *= 2.0; - fragPos4f.xyz -= 1.0; - - fragPos4f = u_inverseViewProjMatrix4f * fragPos4f; - fragPos4f.xyz /= fragPos4f.w; - fragPos4f.w = 1.0; - - float l = length(fragPos4f.xyz); -#ifdef COMPILE_FOG_LINEAR - float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x); -#else - float f = 1.0 - exp(-u_expFogDensity1f * l); -#endif - float f2 = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).a; - vec4 fogColor4f = mix(u_fogColorDark4f, u_fogColorLight4f, f2 * f2); - f = clamp(f, 0.0, 1.0) * fogColor4f.a; - -#ifdef COMPILE_FOG_ATMOSPHERE - fragPos4f.xyz /= -l; - fragPos4f.xz /= abs(fragPos4f.y) + 1.0; - fragPos4f.xz *= 0.75; - - vec3 envMapSample3f; - - fragPos4f.xz *= vec2(-0.5, -0.25); - fragPos4f.xz += vec2(0.5, 0.25); - envMapSample3f = textureLod(u_environmentMap, fragPos4f.xz, 0.0).rgb + u_sunColorAdd3f; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS - f2 = textureLod(u_lightShaftsTexture, v_position2f, 0.0).r; - envMapSample3f *= pow(f2, 2.25); - f = (f * 0.85 + 0.2) * f2 + f * (1.0 - f2); -#endif - - output4f = vec4(envMapSample3f * fogColor4f.rgb, f); -#else - output4f = vec4(fogColor4f.rgb, f); -#endif - -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) out vec4 output4f; + +in vec2 v_position2f; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_fogDepthTexture; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +uniform sampler2D u_lightShaftsTexture; +#endif + +#ifdef COMPILE_FOG_ATMOSPHERE +uniform sampler2D u_environmentMap; +uniform vec3 u_sunColorAdd3f; +#endif + +uniform mat4 u_inverseViewProjMatrix4f; + +#ifdef COMPILE_FOG_LINEAR +uniform vec2 u_linearFogParam2f; +#else +uniform float u_expFogDensity1f; +#endif + +uniform vec4 u_fogColorLight4f; +uniform vec4 u_fogColorDark4f; + +void main() { + vec4 fragPos4f = vec4(v_position2f, textureLod(u_fogDepthTexture, v_position2f, 0.0).r, 1.0); + +#ifdef COMPILE_FOG_ATMOSPHERE + if(fragPos4f.z <= 0.0000001) { + discard; + } +#endif + + float solidDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + if(solidDepth != fragPos4f.z) { + discard; + } + + fragPos4f.xyz *= 2.0; + fragPos4f.xyz -= 1.0; + + fragPos4f = u_inverseViewProjMatrix4f * fragPos4f; + fragPos4f.xyz /= fragPos4f.w; + fragPos4f.w = 1.0; + + float l = length(fragPos4f.xyz); +#ifdef COMPILE_FOG_LINEAR + float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x); +#else + float f = 1.0 - exp(-u_expFogDensity1f * l); +#endif + float f2 = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).a; + vec4 fogColor4f = mix(u_fogColorDark4f, u_fogColorLight4f, f2 * f2); + f = clamp(f, 0.0, 1.0) * fogColor4f.a; + +#ifdef COMPILE_FOG_ATMOSPHERE + fragPos4f.xyz /= -l; + fragPos4f.xz /= abs(fragPos4f.y) + 1.0; + fragPos4f.xz *= 0.75; + + vec3 envMapSample3f; + + fragPos4f.xz *= vec2(-0.5, -0.25); + fragPos4f.xz += vec2(0.5, 0.25); + envMapSample3f = textureLod(u_environmentMap, fragPos4f.xz, 0.0).rgb + u_sunColorAdd3f; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS + f2 = textureLod(u_lightShaftsTexture, v_position2f, 0.0).r; + envMapSample3f *= pow(f2, 2.25); + f = (f * 0.85 + 0.2) * f2 + f * (1.0 - f2); +#endif + + output4f = vec4(envMapSample3f * fogColor4f.rgb, f); +#else + output4f = vec4(fogColor4f.rgb, f); +#endif + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh index 9b460d79..86e22927 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh @@ -1,30 +1,30 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec2 a_position2f; - -out vec2 v_position2f; - -void main() { - v_position2f = a_position2f * 0.5 + 0.5; - gl_Position = vec4(a_position2f, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec2 a_position2f; + +out vec2 v_position2f; + +void main() { + v_position2f = a_position2f * 0.5 + 0.5; + gl_Position = vec4(a_position2f, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh index 0a6821ea..94584855 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh @@ -1,61 +1,61 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#if !defined(COMPILE_ENABLE_ALPHA_TEST) && !defined(COMPILE_COLORED_SHADOWS) -#undef COMPILE_ENABLE_TEXTURE2D -#endif - -#ifdef COMPILE_COLORED_SHADOWS -layout(location = 0) out vec4 output4f; -uniform vec4 u_color4f; -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -uniform sampler2D u_samplerTexture; -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 v_texture2f; -#else -uniform vec2 u_textureCoords01; -#endif -#ifdef COMPILE_ENABLE_ALPHA_TEST -uniform float u_alphaTestRef1f; -#endif -#endif - -void main() { -#ifdef COMPILE_COLORED_SHADOWS - vec4 color = u_color4f; -#else - vec4 color = vec4(1.0); -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -#ifdef COMPILE_TEXTURE_ATTRIB - color *= texture(u_samplerTexture, v_texture2f); -#else - color *= texture(u_samplerTexture, u_textureCoords01); -#endif -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif -#endif - -#ifdef COMPILE_COLORED_SHADOWS - output4f = vec4(mix(vec3(1.0), color.rgb, color.a), color.a); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#if !defined(COMPILE_ENABLE_ALPHA_TEST) && !defined(COMPILE_COLORED_SHADOWS) +#undef COMPILE_ENABLE_TEXTURE2D +#endif + +#ifdef COMPILE_COLORED_SHADOWS +layout(location = 0) out vec4 output4f; +uniform vec4 u_color4f; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#else +uniform vec2 u_textureCoords01; +#endif +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif +#endif + +void main() { +#ifdef COMPILE_COLORED_SHADOWS + vec4 color = u_color4f; +#else + vec4 color = vec4(1.0); +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +#ifdef COMPILE_TEXTURE_ATTRIB + color *= texture(u_samplerTexture, v_texture2f); +#else + color *= texture(u_samplerTexture, u_textureCoords01); +#endif +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif +#endif + +#ifdef COMPILE_COLORED_SHADOWS + output4f = vec4(mix(vec3(1.0), color.rgb, color.a), color.a); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh index 67cbe576..e212c80d 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh @@ -1,103 +1,103 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -#if defined(COMPILE_ENABLE_ALPHA_TEST) && defined(COMPILE_ENABLE_TEXTURE2D) -#define DO_SHADOW_ALPHA_TEST -#endif - -#ifdef DO_SHADOW_ALPHA_TEST -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 a_texture2f; -out vec2 v_texture2f; -uniform mat4 u_textureMat4f01; -#endif -#endif - -uniform mat4 u_modelviewProjMat4f; - -#ifdef COMPILE_STATE_WAVING_BLOCKS -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -#else -uniform float u_blockConstant1f; -#endif -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -uniform mat4 u_textureMat4f02; -#else -uniform vec2 u_textureCoords02; -#endif -#endif -uniform mat4 u_modelMatrix4f; -uniform mat4 u_viewMatrix4f; -uniform vec3 u_wavingBlockOffset3f; -uniform vec4 u_wavingBlockParam4f; -#define DO_COMPILE_STATE_WAVING_BLOCKS -#define FAKE_SIN(valueIn, valueOut)\ - valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; -#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION -#endif - -#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl" - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { -#ifdef DO_SHADOW_ALPHA_TEST -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif -#endif -#ifdef DO_COMPILE_STATE_WAVING_BLOCKS - vec4 pos = vec4(a_position3f, 1.0); -#ifdef COMPILE_NORMAL_ATTRIB - float blockId = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); -#else - float blockId = u_blockConstant1f; -#endif -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - mat4x2 texMat4x2 = mat4x2( - u_textureMat4f02[0].yw, - u_textureMat4f02[1].yw, - u_textureMat4f02[2].yw, - u_textureMat4f02[3].yw - ); - vec2 v_lightmapTmp2f = texMat4x2 * vec4(a_lightmap2f, 0.0, 1.0); - v_lightmapTmp2f.x = v_lightmapTmp2f.x / v_lightmapTmp2f.y; -#else - vec2 v_lightmapTmp2f = vec2(u_textureCoords02.y, 0.0); -#endif - if(v_lightmapTmp2f.x > 0.33) { - COMPUTE_WAVING_BLOCKS(pos, min(v_lightmapTmp2f.x * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) - }else { - pos = u_modelviewProjMat4f * pos; - } -#else - COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) -#endif - gl_Position = pos; -#else - gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +#if defined(COMPILE_ENABLE_ALPHA_TEST) && defined(COMPILE_ENABLE_TEXTURE2D) +#define DO_SHADOW_ALPHA_TEST +#endif + +#ifdef DO_SHADOW_ALPHA_TEST +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif +#endif + +uniform mat4 u_modelviewProjMat4f; + +#ifdef COMPILE_STATE_WAVING_BLOCKS +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +#else +uniform float u_blockConstant1f; +#endif +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +uniform mat4 u_textureMat4f02; +#else +uniform vec2 u_textureCoords02; +#endif +#endif +uniform mat4 u_modelMatrix4f; +uniform mat4 u_viewMatrix4f; +uniform vec3 u_wavingBlockOffset3f; +uniform vec4 u_wavingBlockParam4f; +#define DO_COMPILE_STATE_WAVING_BLOCKS +#define FAKE_SIN(valueIn, valueOut)\ + valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; +#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION +#endif + +#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl" + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef DO_SHADOW_ALPHA_TEST +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif +#endif +#ifdef DO_COMPILE_STATE_WAVING_BLOCKS + vec4 pos = vec4(a_position3f, 1.0); +#ifdef COMPILE_NORMAL_ATTRIB + float blockId = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); +#else + float blockId = u_blockConstant1f; +#endif +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + mat4x2 texMat4x2 = mat4x2( + u_textureMat4f02[0].yw, + u_textureMat4f02[1].yw, + u_textureMat4f02[2].yw, + u_textureMat4f02[3].yw + ); + vec2 v_lightmapTmp2f = texMat4x2 * vec4(a_lightmap2f, 0.0, 1.0); + v_lightmapTmp2f.x = v_lightmapTmp2f.x / v_lightmapTmp2f.y; +#else + vec2 v_lightmapTmp2f = vec2(u_textureCoords02.y, 0.0); +#endif + if(v_lightmapTmp2f.x > 0.33) { + COMPUTE_WAVING_BLOCKS(pos, min(v_lightmapTmp2f.x * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) + }else { + pos = u_modelviewProjMat4f * pos; + } +#else + COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f) +#endif + gl_Position = pos; +#else + gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv index 139c9383..60e56e03 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv @@ -1,10 +1,10 @@ -item,damage,red,green,blue,intensity -minecraft:beacon,0,0.4493,0.6007,1.0000,500.0 -minecraft:glowstone,0,1.0000,0.6636,0.3583,10.0 -minecraft:lit_pumpkin,0,1.0000,0.5447,0.2005,10.0 -minecraft:torch,0,1.0000,0.5983,0.2655,10.0 -minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0 -minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0, -minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0, -minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0 -minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0 \ No newline at end of file +item,damage,red,green,blue,intensity +minecraft:beacon,0,0.4493,0.6007,1.0000,500.0 +minecraft:glowstone,0,1.0000,0.6636,0.3583,10.0 +minecraft:lit_pumpkin,0,1.0000,0.5447,0.2005,10.0 +minecraft:torch,0,1.0000,0.5983,0.2655,10.0 +minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0 +minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0, +minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0, +minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0 +minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh index a2bd56f1..9c94d44d 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh @@ -1,471 +1,471 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision highp sampler2DShadow; - -in vec4 v_position4f; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -in vec2 v_positionClip2f; -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 v_texture2f; -#endif - -uniform vec4 u_color4f; - -#ifdef COMPILE_BLEND_ADD -uniform vec4 u_colorBlendSrc4f; -uniform vec4 u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -in float v_block1f; -#else -uniform vec3 u_uniformNormal3f; -uniform float u_blockConstant1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#else -uniform vec2 u_textureCoords02; -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -uniform sampler2D u_samplerTexture; -#ifndef COMPILE_TEXTURE_ATTRIB -uniform vec2 u_textureCoords01; -#endif -#else -#undef COMPILE_NORMAL_MATERIAL_TEXTURE -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN -in vec3 v_objectPosition3f; -uniform ivec4 u_texGenPlane4i; -uniform vec4 u_texGenS4f; -uniform vec4 u_texGenT4f; -uniform vec4 u_texGenR4f; -uniform vec4 u_texGenQ4f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST -uniform float u_alphaTestRef1f; -#endif - -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX -uniform vec2 u_textureAnisotropicFix; -#endif - -uniform mat4 u_inverseViewMatrix4f; - -layout(location = 0) out vec4 output4f; - -#ifdef COMPILE_DYNAMIC_LIGHTS -struct DynamicLight { - mediump vec4 u_lightPosition4f; - mediump vec4 u_lightColor4f; -}; -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - DynamicLight u_dynamicLightArray[12]; -}; -#endif - -layout(std140) uniform u_worldLightingData { - mediump vec4 u_sunDirection4f; - mediump vec4 u_sunColor3f_sky1f; - mediump vec4 u_fogParameters4f; - mediump vec4 u_fogColorLight4f; - mediump vec4 u_fogColorDark4f; - mediump vec4 u_fogColorAddSun4f; - mediump vec4 u_blockSkySunDynamicLightFac4f; -#ifdef COMPILE_SUN_SHADOW_LOD0 - mediump mat4 u_sunShadowMatrixLOD04f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; - mediump mat4 u_sunShadowMatrixLOD24f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif -}; - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE -uniform sampler2D u_samplerNormalMaterial; -#else -uniform vec3 u_materialConstants3f; -#endif - -uniform sampler2D u_metalsLUT; - -#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION -#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH -#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" - -#ifdef COMPILE_PARABOLOID -#undef COMPILE_SUN_SHADOW_SMOOTH -#undef COMPILE_SUN_SHADOW_LOD1 -#undef COMPILE_SUN_SHADOW_LOD2 -#endif - -#ifdef COMPILE_PARABOLOID_ENV_MAP -uniform sampler2D u_environmentMap; -uniform sampler2D u_brdfLUT; -#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR -#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH -#endif - -uniform sampler2D u_irradianceMap; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -uniform sampler2D u_lightShaftsTexture; -#endif - -#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl" - -#ifdef DO_COMPILE_SUN_SHADOWS -uniform sampler2DShadow u_sunShadowDepthTexture; -#ifdef COMPILE_SUN_SHADOW_SMOOTH -const vec2 POISSON_DISK[7] = vec2[]( -vec2(-0.077, 0.995), vec2(0.998, 0.015), -vec2(-0.116, -0.987), vec2(-0.916, 0.359), -vec2(-0.697, -0.511), vec2(0.740, -0.612), -vec2(0.675, 0.682)); -#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 -#define SMOOTH_SHADOW_RADIUS 0.00075 -#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ - tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ - tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ - tmpVec2.y += lod;\ - tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ - accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; -#endif -#endif - -void main() { - vec4 worldPosition4f; - vec4 worldDirection4f; - vec4 diffuseColor4f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - vec3 materialData3f; - float block1f; - - // =========== RESOLVE CONSTANTS ============ // - - worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - worldPosition4f.w = 1.0; - worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); - worldDirection4f.xyz = normalize(worldDirection4f.xyz); - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - lightmapCoords2f = v_lightmap2f; -#else - lightmapCoords2f = u_textureCoords02; -#endif -#else - lightmapCoords2f = vec2(0.0, 1.0); -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - normalVector3f = normalize(v_normal3f); - block1f = v_block1f; -#else - normalVector3f = u_uniformNormal3f; - block1f = u_blockConstant1f; -#endif - - normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); - - // ========= CALCULATE DIFFUSE COLOR ========== // - -#ifdef COMPILE_COLOR_ATTRIB - diffuseColor4f = v_color4f * u_color4f; -#else - diffuseColor4f = u_color4f; -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D - vec2 texCoords2f; -#ifdef COMPILE_ENABLE_TEX_GEN - vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); - vec4 texGenVector; - texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); - texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); - texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); - texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); - texGenVector.xyz = mat4x3( - u_textureMat4f01[0].xyw, - u_textureMat4f01[1].xyw, - u_textureMat4f01[2].xyw, - u_textureMat4f01[3].xyw - ) * texGenVector; - texCoords2f = texGenVector.xy / texGenVector.z; -#else - -#ifdef COMPILE_TEXTURE_ATTRIB -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX - texCoords2f = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; - texCoords2f /= u_textureAnisotropicFix; -#else - texCoords2f = v_texture2f; -#endif -#else - texCoords2f = u_textureCoords01; -#endif -#endif - diffuseColor4f *= texture(u_samplerTexture, texCoords2f); -#endif - -#ifdef COMPILE_BLEND_ADD - diffuseColor4f = diffuseColor4f * u_colorBlendSrc4f + u_colorBlendAdd4f; -#endif - - // ============= ALPHA TEST ============== // - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(diffuseColor4f.a < u_alphaTestRef1f) discard; -#endif - - // ========== RESOLVE MATERIALS =========== // - -#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE - vec2 uv2 = vec2(1.0, 0.5) * texCoords2f; - uv2.y += 0.5; - materialData3f = texture(u_samplerNormalMaterial, uv2).rgb; -#else - materialData3f = u_materialConstants3f; -#endif - - vec3 metalN, metalK; - PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK) - - // ============ SUN LIGHTING ============== // - - diffuseColor4f.rgb *= diffuseColor4f.rgb; - - vec3 lightColor3f = vec3(0.0); - if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && - (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { -#ifdef DO_COMPILE_SUN_SHADOWS - - // ========== SUN SHADOW: LOD0 ============ // - - float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); - float shadowSample = 1.0; - vec4 shadowWorldPos4f = worldPosition4f; - shadowWorldPos4f.xyz += normalVector3f * 0.05; - - vec4 shadowTexPos4f; - vec2 tmpVec2; - for(;;) { - shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); -#ifdef COMPILE_SUN_SHADOW_SMOOTH - shadowSample *= SMOOTH_SHADOW_SAMPLES; - SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); -#endif - break; - } - -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 1.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 2.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - } -#endif - break; - } -#endif - lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); -#ifdef DO_COMPILE_SUN_SHADOWS - lightColor3f *= shadowSample * skyLight; -#endif - lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z; - } - - float f; -#ifdef COMPILE_PARABOLOID_ENV_MAP - - // =========== ENVIRONMENT MAP =========== // - - f = materialData3f.g < 0.06 ? 1.0 : 0.0; - f += materialData3f.r < 0.5 ? 1.0 : 0.0; - while(f == 0.0) { - float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz); - if(dst2 > 16.0) { - break; - } - vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); - reflectDir.xz /= abs(reflectDir.y) + 1.0; - float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); - dst *= dst; - reflectDir.xz = reflectDir.xz * 0.975; - vec4 envMapSample4f; - if(dst < 0.005) { - vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); - }else { - reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); - reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); - envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); - } - if(envMapSample4f.a > 0.0) { - lightColor3f += eaglercraftIBL_Specular(diffuseColor4f.rgb, envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * (1.0 - sqrt(dst2) * 0.25); - } - break; - } - -#endif - - // =========== IRRADIANCE MAP =========== // - - lightmapCoords2f *= lightmapCoords2f; - - vec3 irradianceMapSamplePos2f = normalVector3f; - irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; - float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); - dst *= dst; - irradianceMapSamplePos2f.xz *= 0.975; - vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0))); - if(dst < 0.005) { - vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; - }else { - irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); - irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); - skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; - } - skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w; - -#ifdef COMPILE_DYNAMIC_LIGHTS - - // =========== DYNAMIC LIGHTING =========== // - - vec3 dlightDist3f, dlightDir3f, dlightColor3f; - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this - for(int i = 0; i < safeLightCount; ++i) { - dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz; - dlightDir3f = normalize(dlightDist3f); - dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f; - if(dot(dlightDir3f, normalVector3f) <= 0.0) { - continue; - } - dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); - if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { - continue; - } - lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w; - } - -#endif - - // ============ CACLULATE FOG ============= // - - vec4 fogBlend4f = vec4(0.0); -#ifndef COMPILE_ENABLE_TEX_GEN - while(u_fogParameters4f.x > 0.0) { - float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; - float type = u_fogParameters4f.x - atmos; - fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); - - float l = length(v_position4f.xyz); - if(type == 1.0) { - f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); - }else { - f = 1.0 - exp(-u_fogParameters4f.y * l); - } - - fogBlend4f.a *= clamp(f, 0.0, 1.0); - - if(atmos == 0.0) { - break; - } - - vec3 atmosSamplePos = v_position4f.xyz / -l; - atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0; - atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75; - atmosSamplePos.xz += vec2(0.5, 0.25); - - fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS - fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25); - fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1; -#endif - break; - } -#endif - - // ============ OUTPUT COLOR ============== // - - vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; - skyLight *= u_blockSkySunDynamicLightFac4f.y; - float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b; - diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075; - diffuseColor4f.rgb += lightColor3f; - - diffuseColor4f.rgb = mix(diffuseColor4f.rgb, fogBlend4f.rgb, fogBlend4f.a); - - output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision highp sampler2DShadow; + +in vec4 v_position4f; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +in vec2 v_positionClip2f; +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_BLEND_ADD +uniform vec4 u_colorBlendSrc4f; +uniform vec4 u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +in float v_block1f; +#else +uniform vec3 u_uniformNormal3f; +uniform float u_blockConstant1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#else +uniform vec2 u_textureCoords02; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#ifndef COMPILE_TEXTURE_ATTRIB +uniform vec2 u_textureCoords01; +#endif +#else +#undef COMPILE_NORMAL_MATERIAL_TEXTURE +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +in vec3 v_objectPosition3f; +uniform ivec4 u_texGenPlane4i; +uniform vec4 u_texGenS4f; +uniform vec4 u_texGenT4f; +uniform vec4 u_texGenR4f; +uniform vec4 u_texGenQ4f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif + +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX +uniform vec2 u_textureAnisotropicFix; +#endif + +uniform mat4 u_inverseViewMatrix4f; + +layout(location = 0) out vec4 output4f; + +#ifdef COMPILE_DYNAMIC_LIGHTS +struct DynamicLight { + mediump vec4 u_lightPosition4f; + mediump vec4 u_lightColor4f; +}; +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + DynamicLight u_dynamicLightArray[12]; +}; +#endif + +layout(std140) uniform u_worldLightingData { + mediump vec4 u_sunDirection4f; + mediump vec4 u_sunColor3f_sky1f; + mediump vec4 u_fogParameters4f; + mediump vec4 u_fogColorLight4f; + mediump vec4 u_fogColorDark4f; + mediump vec4 u_fogColorAddSun4f; + mediump vec4 u_blockSkySunDynamicLightFac4f; +#ifdef COMPILE_SUN_SHADOW_LOD0 + mediump mat4 u_sunShadowMatrixLOD04f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; + mediump mat4 u_sunShadowMatrixLOD24f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif +}; + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE +uniform sampler2D u_samplerNormalMaterial; +#else +uniform vec3 u_materialConstants3f; +#endif + +uniform sampler2D u_metalsLUT; + +#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION +#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH +#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" + +#ifdef COMPILE_PARABOLOID +#undef COMPILE_SUN_SHADOW_SMOOTH +#undef COMPILE_SUN_SHADOW_LOD1 +#undef COMPILE_SUN_SHADOW_LOD2 +#endif + +#ifdef COMPILE_PARABOLOID_ENV_MAP +uniform sampler2D u_environmentMap; +uniform sampler2D u_brdfLUT; +#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR +#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH +#endif + +uniform sampler2D u_irradianceMap; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +uniform sampler2D u_lightShaftsTexture; +#endif + +#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl" + +#ifdef DO_COMPILE_SUN_SHADOWS +uniform sampler2DShadow u_sunShadowDepthTexture; +#ifdef COMPILE_SUN_SHADOW_SMOOTH +const vec2 POISSON_DISK[7] = vec2[]( +vec2(-0.077, 0.995), vec2(0.998, 0.015), +vec2(-0.116, -0.987), vec2(-0.916, 0.359), +vec2(-0.697, -0.511), vec2(0.740, -0.612), +vec2(0.675, 0.682)); +#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 +#define SMOOTH_SHADOW_RADIUS 0.00075 +#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ + tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ + tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ + tmpVec2.y += lod;\ + tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ + accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; +#endif +#endif + +void main() { + vec4 worldPosition4f; + vec4 worldDirection4f; + vec4 diffuseColor4f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + vec3 materialData3f; + float block1f; + + // =========== RESOLVE CONSTANTS ============ // + + worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + worldPosition4f.w = 1.0; + worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); + worldDirection4f.xyz = normalize(worldDirection4f.xyz); + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + lightmapCoords2f = v_lightmap2f; +#else + lightmapCoords2f = u_textureCoords02; +#endif +#else + lightmapCoords2f = vec2(0.0, 1.0); +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + normalVector3f = v_normal3f; + block1f = round(v_block1f); +#else + normalVector3f = u_uniformNormal3f; + block1f = u_blockConstant1f; +#endif + + normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); + + // ========= CALCULATE DIFFUSE COLOR ========== // + +#ifdef COMPILE_COLOR_ATTRIB + diffuseColor4f = v_color4f * u_color4f; +#else + diffuseColor4f = u_color4f; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D + vec2 texCoords2f; +#ifdef COMPILE_ENABLE_TEX_GEN + vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); + vec4 texGenVector; + texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); + texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); + texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); + texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); + texGenVector.xyz = mat4x3( + u_textureMat4f01[0].xyw, + u_textureMat4f01[1].xyw, + u_textureMat4f01[2].xyw, + u_textureMat4f01[3].xyw + ) * texGenVector; + texCoords2f = texGenVector.xy / texGenVector.z; +#else + +#ifdef COMPILE_TEXTURE_ATTRIB +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX + texCoords2f = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; + texCoords2f /= u_textureAnisotropicFix; +#else + texCoords2f = v_texture2f; +#endif +#else + texCoords2f = u_textureCoords01; +#endif +#endif + diffuseColor4f *= texture(u_samplerTexture, texCoords2f); +#endif + +#ifdef COMPILE_BLEND_ADD + diffuseColor4f = diffuseColor4f * u_colorBlendSrc4f + u_colorBlendAdd4f; +#endif + + // ============= ALPHA TEST ============== // + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(diffuseColor4f.a < u_alphaTestRef1f) discard; +#endif + + // ========== RESOLVE MATERIALS =========== // + +#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE + vec2 uv2 = vec2(1.0, 0.5) * texCoords2f; + uv2.y += 0.5; + materialData3f = texture(u_samplerNormalMaterial, uv2).rgb; +#else + materialData3f = u_materialConstants3f; +#endif + + vec3 metalN, metalK; + PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK) + + // ============ SUN LIGHTING ============== // + + diffuseColor4f.rgb *= diffuseColor4f.rgb; + + vec3 lightColor3f = vec3(0.0); + if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && + (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { +#ifdef DO_COMPILE_SUN_SHADOWS + + // ========== SUN SHADOW: LOD0 ============ // + + float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); + float shadowSample = 1.0; + vec4 shadowWorldPos4f = worldPosition4f; + shadowWorldPos4f.xyz += normalVector3f * 0.05; + + vec4 shadowTexPos4f; + vec2 tmpVec2; + for(;;) { + shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); +#ifdef COMPILE_SUN_SHADOW_SMOOTH + shadowSample *= SMOOTH_SHADOW_SAMPLES; + SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); +#endif + break; + } + +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 1.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 2.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + } +#endif + break; + } +#endif + lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); +#ifdef DO_COMPILE_SUN_SHADOWS + lightColor3f *= shadowSample * skyLight; +#endif + lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z; + } + + float f; +#ifdef COMPILE_PARABOLOID_ENV_MAP + + // =========== ENVIRONMENT MAP =========== // + + f = materialData3f.g < 0.06 ? 1.0 : 0.0; + f += materialData3f.r < 0.5 ? 1.0 : 0.0; + while(f == 0.0) { + float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz); + if(dst2 > 16.0) { + break; + } + vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); + reflectDir.xz /= abs(reflectDir.y) + 1.0; + float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); + dst *= dst; + reflectDir.xz = reflectDir.xz * 0.975; + vec4 envMapSample4f; + if(dst < 0.005) { + vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); + }else { + reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); + reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); + envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); + } + if(envMapSample4f.a > 0.0) { + lightColor3f += eaglercraftIBL_Specular(diffuseColor4f.rgb, envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * (1.0 - sqrt(dst2) * 0.25); + } + break; + } + +#endif + + // =========== IRRADIANCE MAP =========== // + + lightmapCoords2f *= lightmapCoords2f; + + vec3 irradianceMapSamplePos2f = normalVector3f; + irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0; + float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz); + dst *= dst; + irradianceMapSamplePos2f.xz *= 0.975; + vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0))); + if(dst < 0.005) { + vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb; + }else { + irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25); + irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75); + skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb; + } + skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w; + +#ifdef COMPILE_DYNAMIC_LIGHTS + + // =========== DYNAMIC LIGHTING =========== // + + vec3 dlightDist3f, dlightDir3f, dlightColor3f; + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this + for(int i = 0; i < safeLightCount; ++i) { + dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz; + dlightDir3f = normalize(dlightDist3f); + dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f; + if(dot(dlightDir3f, normalVector3f) <= 0.0) { + continue; + } + dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); + if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { + continue; + } + lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w; + } + +#endif + + // ============ CACLULATE FOG ============= // + + vec4 fogBlend4f = vec4(0.0); +#ifndef COMPILE_ENABLE_TEX_GEN + while(u_fogParameters4f.x > 0.0) { + float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; + float type = u_fogParameters4f.x - atmos; + fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); + + float l = length(v_position4f.xyz); + if(type == 1.0) { + f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); + }else { + f = 1.0 - exp(-u_fogParameters4f.y * l); + } + + fogBlend4f.a *= clamp(f, 0.0, 1.0); + + if(atmos == 0.0) { + break; + } + + vec3 atmosSamplePos = v_position4f.xyz / -l; + atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0; + atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75; + atmosSamplePos.xz += vec2(0.5, 0.25); + + fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS + fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25); + fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1; +#endif + break; + } +#endif + + // ============ OUTPUT COLOR ============== // + + vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; + skyLight *= u_blockSkySunDynamicLightFac4f.y; + float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b; + diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075; + diffuseColor4f.rgb += lightColor3f; + + diffuseColor4f.rgb = mix(diffuseColor4f.rgb, fogBlend4f.rgb, fogBlend4f.a); + + output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh index 17bd131c..5859caf4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh @@ -1,103 +1,103 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -out vec4 v_position4f; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -out vec2 v_positionClip2f; -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 a_texture2f; -out vec2 v_texture2f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN -out vec3 v_objectPosition3f; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 a_color4f; -out vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -out float v_block1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; - -#ifdef COMPILE_PARABOLOID -uniform float u_farPlane1f; -#else -uniform mat4 u_projectionMat4f; -#endif - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { -#ifdef COMPILE_ENABLE_TEX_GEN - v_objectPosition3f = a_position3f; -#endif - v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); - -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif - -#ifdef COMPILE_COLOR_ATTRIB - v_color4f = a_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); - v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - -#ifdef COMPILE_PARABOLOID - vec3 pos = v_position4f.xyz / v_position4f.w; - float dist = pos.z; - pos.xyz = normalize(pos.xyz); - pos.xy /= 1.0 - pos.z; - pos.z = dist / u_farPlane1f + 1.00005; - gl_Position = vec4(pos.xyz, 1.0); -#else - gl_Position = u_projectionMat4f * v_position4f; -#endif - -#ifdef COMPILE_FOG_LIGHT_SHAFTS - v_positionClip2f = gl_Position.xy / gl_Position.w; -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +out vec4 v_position4f; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +out vec2 v_positionClip2f; +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +out vec3 v_objectPosition3f; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 a_color4f; +out vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +out float v_block1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; + +#ifdef COMPILE_PARABOLOID +uniform float u_farPlane1f; +#else +uniform mat4 u_projectionMat4f; +#endif + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef COMPILE_ENABLE_TEX_GEN + v_objectPosition3f = a_position3f; +#endif + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); + v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + +#ifdef COMPILE_PARABOLOID + vec3 pos = v_position4f.xyz / v_position4f.w; + float dist = pos.z; + pos.xyz = normalize(pos.xyz); + pos.xy /= 1.0 - pos.z; + pos.z = dist / u_farPlane1f + 1.00005; + gl_Position = vec4(pos.xyz, 1.0); +#else + gl_Position = u_projectionMat4f * v_position4f; +#endif + +#ifdef COMPILE_FOG_LIGHT_SHAFTS + v_positionClip2f = gl_Position.xy / gl_Position.w; +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh index 7cab95f9..5f0100f7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh @@ -1,308 +1,308 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision highp sampler2DShadow; - -in vec4 v_position4f; - -uniform vec4 u_color4f; - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -in float v_block1f; -#else -uniform vec3 u_uniformNormal3f; -uniform float u_blockConstant1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#else -uniform vec2 u_textureCoords02; -#endif - -uniform mat4 u_inverseViewMatrix4f; - -layout(location = 0) out vec4 output4f; - -#ifdef COMPILE_DYNAMIC_LIGHTS -struct DynamicLight { - mediump vec4 u_lightPosition4f; - mediump vec4 u_lightColor4f; -}; -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - DynamicLight u_dynamicLightArray[12]; -}; -#endif - -layout(std140) uniform u_worldLightingData { - mediump vec4 u_sunDirection4f; - mediump vec4 u_sunColor3f_sky1f; - mediump vec4 u_fogParameters4f; - mediump vec4 u_fogColorLight4f; - mediump vec4 u_fogColorDark4f; - mediump vec4 u_fogColorAddSun4f; - mediump vec4 u_blockSkySunDynamicLightFac4f; -#ifdef COMPILE_SUN_SHADOW_LOD0 - mediump mat4 u_sunShadowMatrixLOD04f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; - mediump mat4 u_sunShadowMatrixLOD24f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif -}; - -uniform sampler2D u_environmentMap; -uniform sampler2D u_brdfLUT; - -#define GLASS_ROUGHNESS 0.15 -#define GLASS_F0 0.4 - -vec3 eaglercraftLighting_Glass(in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) { - float roughness = 1.0 - GLASS_ROUGHNESS * 0.85; - vec3 H = normalize(viewDir + lightDir); - vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); - float NDF = (GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS); - float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; - NDF /= denom * denom * 3.141592; - float gs = GLASS_ROUGHNESS + 1.0; - gs *= gs * 0.125; - vec2 Ndot = NdotHVL.yz; - Ndot /= Ndot * (1.0 - gs) + gs; - NDF *= Ndot.x * Ndot.y; - float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); - vec3 F = vec3(GLASS_F0 + (1.0 - GLASS_F0) * fresnel); - denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; - return (NDF * F / denom) * radiance * NdotHVL.z; -} - -vec3 eaglercraftIBL_Specular_Glass(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) { - float NdotV = dot(normalVec, -viewDir); - float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); - vec3 F = vec3(GLASS_F0 + (max(1.0 - GLASS_ROUGHNESS, GLASS_F0) - GLASS_F0) * fresnel); - vec2 brdf2f = vec2(max(NdotV, 0.0), GLASS_ROUGHNESS); - brdf2f = 1.0 - brdf2f; - brdf2f *= brdf2f; - brdf2f = 1.0 - brdf2f; - brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; - return envMapSample * (F * brdf2f.r + brdf2f.g); -} - -#ifdef DO_COMPILE_SUN_SHADOWS -uniform sampler2DShadow u_sunShadowDepthTexture; -#ifdef COMPILE_SUN_SHADOW_SMOOTH -const vec2 POISSON_DISK[7] = vec2[]( -vec2(-0.077, 0.995), vec2(0.998, 0.015), -vec2(-0.116, -0.987), vec2(-0.916, 0.359), -vec2(-0.697, -0.511), vec2(0.740, -0.612), -vec2(0.675, 0.682)); -#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 -#define SMOOTH_SHADOW_RADIUS 0.00075 -#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ - tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ - tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ - tmpVec2.y += lod;\ - tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ - accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; -#endif -#endif - -void main() { - vec4 worldPosition4f; - vec4 worldDirection4f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - float block1f; - - // =========== RESOLVE CONSTANTS ============ // - - worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - worldPosition4f.w = 1.0; - worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); - worldDirection4f.xyz = normalize(worldDirection4f.xyz); - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - lightmapCoords2f = v_lightmap2f; -#else - lightmapCoords2f = u_textureCoords02; -#endif -#else - lightmapCoords2f = vec2(0.0, 1.0); -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - normalVector3f = normalize(v_normal3f); - block1f = v_block1f; -#else - normalVector3f = u_uniformNormal3f; - block1f = u_blockConstant1f; -#endif - - normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); - - // ============ SUN LIGHTING ============== // - - vec3 lightColor3f = vec3(0.0); - if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && - (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { -#ifdef DO_COMPILE_SUN_SHADOWS - - // ========== SUN SHADOW: LOD0 ============ // - - float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); - float shadowSample = 1.0; - vec4 shadowWorldPos4f = worldPosition4f; - shadowWorldPos4f.xyz += normalVector3f * 0.05; - - vec4 shadowTexPos4f; - vec2 tmpVec2; - for(;;) { - shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); -#ifdef COMPILE_SUN_SHADOW_SMOOTH - shadowSample *= SMOOTH_SHADOW_SAMPLES; - SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); -#endif - break; - } - -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 1.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 2.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - } -#endif - break; - } -#endif - lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); -#ifdef DO_COMPILE_SUN_SHADOWS - lightColor3f *= shadowSample * skyLight; -#endif - lightColor3f = eaglercraftLighting_Glass(lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z; - } - - // =========== ENVIRONMENT MAP =========== // - - for(;;) { - float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz); - if(dst2 > 16.0) { - break; - } - vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); - reflectDir.xz /= abs(reflectDir.y) + 1.0; - float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); - dst *= dst; - reflectDir.xz = reflectDir.xz * 0.975; - vec4 envMapSample4f; - if(dst < 0.005) { - vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); - }else { - reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); - reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); - envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); - } - if(envMapSample4f.a > 0.0) { - lightColor3f += eaglercraftIBL_Specular_Glass(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * (1.0 - sqrt(dst2) * 0.25); - } - break; - } - -#ifdef COMPILE_DYNAMIC_LIGHTS - - // =========== DYNAMIC LIGHTING =========== // - - vec3 dlightDist3f, dlightDir3f, dlightColor3f; - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this - for(int i = 0; i < safeLightCount; ++i) { - dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz; - dlightDir3f = normalize(dlightDist3f); - if(dot(dlightDir3f, normalVector3f) <= 0.0) { - continue; - } - dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); - if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { - continue; - } - lightColor3f += eaglercraftLighting_Glass(dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w; - } - -#endif - - // ============ CACLULATE FOG ============= // - - float fogFade = 0.0; - if(u_fogParameters4f.x > 0.0) { - float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; - float type = u_fogParameters4f.x - atmos; - fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g); - - float f; - float l = length(v_position4f.xyz); - if(type == 1.0) { - f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); - }else { - f = 1.0 - exp(-u_fogParameters4f.y * l); - } - - fogFade *= clamp(f, 0.0, 1.0); - } - - // ============ OUTPUT COLOR ============== // - - output4f = vec4(lightColor3f * (1.0 - fogFade), 0.1); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision highp sampler2DShadow; + +in vec4 v_position4f; + +uniform vec4 u_color4f; + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +in float v_block1f; +#else +uniform vec3 u_uniformNormal3f; +uniform float u_blockConstant1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#else +uniform vec2 u_textureCoords02; +#endif + +uniform mat4 u_inverseViewMatrix4f; + +layout(location = 0) out vec4 output4f; + +#ifdef COMPILE_DYNAMIC_LIGHTS +struct DynamicLight { + mediump vec4 u_lightPosition4f; + mediump vec4 u_lightColor4f; +}; +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + DynamicLight u_dynamicLightArray[12]; +}; +#endif + +layout(std140) uniform u_worldLightingData { + mediump vec4 u_sunDirection4f; + mediump vec4 u_sunColor3f_sky1f; + mediump vec4 u_fogParameters4f; + mediump vec4 u_fogColorLight4f; + mediump vec4 u_fogColorDark4f; + mediump vec4 u_fogColorAddSun4f; + mediump vec4 u_blockSkySunDynamicLightFac4f; +#ifdef COMPILE_SUN_SHADOW_LOD0 + mediump mat4 u_sunShadowMatrixLOD04f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; + mediump mat4 u_sunShadowMatrixLOD24f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif +}; + +uniform sampler2D u_environmentMap; +uniform sampler2D u_brdfLUT; + +#define GLASS_ROUGHNESS 0.15 +#define GLASS_F0 0.4 + +vec3 eaglercraftLighting_Glass(in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) { + float roughness = 1.0 - GLASS_ROUGHNESS * 0.85; + vec3 H = normalize(viewDir + lightDir); + vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); + float NDF = (GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS); + float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; + NDF /= denom * denom * 3.141592; + float gs = GLASS_ROUGHNESS + 1.0; + gs *= gs * 0.125; + vec2 Ndot = NdotHVL.yz; + Ndot /= Ndot * (1.0 - gs) + gs; + NDF *= Ndot.x * Ndot.y; + float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); + vec3 F = vec3(GLASS_F0 + (1.0 - GLASS_F0) * fresnel); + denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; + return (NDF * F / denom) * radiance * NdotHVL.z; +} + +vec3 eaglercraftIBL_Specular_Glass(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) { + float NdotV = dot(normalVec, -viewDir); + float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); + vec3 F = vec3(GLASS_F0 + (max(1.0 - GLASS_ROUGHNESS, GLASS_F0) - GLASS_F0) * fresnel); + vec2 brdf2f = vec2(max(NdotV, 0.0), GLASS_ROUGHNESS); + brdf2f = 1.0 - brdf2f; + brdf2f *= brdf2f; + brdf2f = 1.0 - brdf2f; + brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; + return envMapSample * (F * brdf2f.r + brdf2f.g); +} + +#ifdef DO_COMPILE_SUN_SHADOWS +uniform sampler2DShadow u_sunShadowDepthTexture; +#ifdef COMPILE_SUN_SHADOW_SMOOTH +const vec2 POISSON_DISK[7] = vec2[]( +vec2(-0.077, 0.995), vec2(0.998, 0.015), +vec2(-0.116, -0.987), vec2(-0.916, 0.359), +vec2(-0.697, -0.511), vec2(0.740, -0.612), +vec2(0.675, 0.682)); +#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 +#define SMOOTH_SHADOW_RADIUS 0.00075 +#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ + tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ + tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ + tmpVec2.y += lod;\ + tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ + accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; +#endif +#endif + +void main() { + vec4 worldPosition4f; + vec4 worldDirection4f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + float block1f; + + // =========== RESOLVE CONSTANTS ============ // + + worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + worldPosition4f.w = 1.0; + worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); + worldDirection4f.xyz = normalize(worldDirection4f.xyz); + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + lightmapCoords2f = v_lightmap2f; +#else + lightmapCoords2f = u_textureCoords02; +#endif +#else + lightmapCoords2f = vec2(0.0, 1.0); +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + normalVector3f = normalize(v_normal3f); + block1f = v_block1f; +#else + normalVector3f = u_uniformNormal3f; + block1f = u_blockConstant1f; +#endif + + normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); + + // ============ SUN LIGHTING ============== // + + vec3 lightColor3f = vec3(0.0); + if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && + (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { +#ifdef DO_COMPILE_SUN_SHADOWS + + // ========== SUN SHADOW: LOD0 ============ // + + float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); + float shadowSample = 1.0; + vec4 shadowWorldPos4f = worldPosition4f; + shadowWorldPos4f.xyz += normalVector3f * 0.05; + + vec4 shadowTexPos4f; + vec2 tmpVec2; + for(;;) { + shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); +#ifdef COMPILE_SUN_SHADOW_SMOOTH + shadowSample *= SMOOTH_SHADOW_SAMPLES; + SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); +#endif + break; + } + +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 1.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 2.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + } +#endif + break; + } +#endif + lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); +#ifdef DO_COMPILE_SUN_SHADOWS + lightColor3f *= shadowSample * skyLight; +#endif + lightColor3f = eaglercraftLighting_Glass(lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z; + } + + // =========== ENVIRONMENT MAP =========== // + + for(;;) { + float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz); + if(dst2 > 16.0) { + break; + } + vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); + reflectDir.xz /= abs(reflectDir.y) + 1.0; + float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); + dst *= dst; + reflectDir.xz = reflectDir.xz * 0.975; + vec4 envMapSample4f; + if(dst < 0.005) { + vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); + }else { + reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); + reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); + envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); + } + if(envMapSample4f.a > 0.0) { + lightColor3f += eaglercraftIBL_Specular_Glass(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * (1.0 - sqrt(dst2) * 0.25); + } + break; + } + +#ifdef COMPILE_DYNAMIC_LIGHTS + + // =========== DYNAMIC LIGHTING =========== // + + vec3 dlightDist3f, dlightDir3f, dlightColor3f; + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this + for(int i = 0; i < safeLightCount; ++i) { + dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz; + dlightDir3f = normalize(dlightDist3f); + if(dot(dlightDir3f, normalVector3f) <= 0.0) { + continue; + } + dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); + if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { + continue; + } + lightColor3f += eaglercraftLighting_Glass(dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w; + } + +#endif + + // ============ CACLULATE FOG ============= // + + float fogFade = 0.0; + if(u_fogParameters4f.x > 0.0) { + float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; + float type = u_fogParameters4f.x - atmos; + fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g); + + float f; + float l = length(v_position4f.xyz); + if(type == 1.0) { + f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); + }else { + f = 1.0 - exp(-u_fogParameters4f.y * l); + } + + fogFade *= clamp(f, 0.0, 1.0); + } + + // ============ OUTPUT COLOR ============== // + + output4f = vec4(lightColor3f * (1.0 - fogFade), 0.1); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh index bf0607a3..97681c13 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh @@ -1,54 +1,54 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -out vec4 v_position4f; - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -out float v_block1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; -uniform mat4 u_projectionMat4f; - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { - v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); - v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - - gl_Position = u_projectionMat4f * v_position4f; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +out vec4 v_position4f; + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +out float v_block1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); + v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + + gl_Position = u_projectionMat4f * v_position4f; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh index 754b2247..60f873ea 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh @@ -1,111 +1,111 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_texture0; -uniform sampler2D u_texture1; - -#ifdef DEBUG_VIEW_18 -precision highp sampler3D; -uniform sampler3D u_texture3D0; -uniform float u_fuckU1f; -#endif - -uniform mat4 u_inverseViewMatrix; -uniform vec2 u_depthSliceStartEnd2f; - -void main() { -#ifdef DEBUG_VIEW_0 - output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb, 1.0); -#endif -#ifdef DEBUG_VIEW_1 - vec3 color3f = textureLod(u_texture0, v_position2f, 0.0).rgb; - if(color3f.x == 0.0 && color3f.y == 0.0 && color3f.z == 0.0) { - output4f = vec4(0.0, 0.0, 0.0, 1.0); - }else { - output4f = vec4(normalize(mat3(u_inverseViewMatrix) * (color3f * 2.0 - 1.0)), 1.0); - } -#endif -#ifdef DEBUG_VIEW_2 - output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).a, textureLod(u_texture1, v_position2f, 0.0).a, 0.0, 1.0); -#endif -#ifdef DEBUG_VIEW_3 - vec4 color4f = textureLod(u_texture0, v_position2f, 0.0); - output4f = vec4(color4f.b > 0.99 ? 1.0 : 0.0, color4f.a, 0.0, 1.0); -#endif -#ifdef DEBUG_VIEW_4 - output4f = vec4(vec3(clamp((textureLod(u_texture0, v_position2f, 0.0).r - u_depthSliceStartEnd2f.x) * u_depthSliceStartEnd2f.y, 0.0, 1.0)), 1.0); -#endif -#ifdef DEBUG_VIEW_5 - output4f = vec4(vec3(textureLod(u_texture0, (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x), 0.0).r), 1.0); -#endif -#ifdef DEBUG_VIEW_6 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r), 1.0); -#endif -#ifdef DEBUG_VIEW_7 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0); -#endif -#ifdef DEBUG_VIEW_8 - output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb * 10.0, 1.0); - output4f.xyz /= (output4f.xyz + 1.0); - output4f.xyz = sqrt(output4f.xyz); -#endif -#ifdef DEBUG_VIEW_9 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g), 1.0); -#endif -#ifdef DEBUG_VIEW_10 - vec2 coord = (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x); - vec4 color2 = textureLod(u_texture1, coord, 0.0); - output4f = vec4(mix(color2.rgb, vec3(textureLod(u_texture0, coord, 0.0).r), color2.a), 1.0); -#endif -#ifdef DEBUG_VIEW_11 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a * 0.017), 1.0); -#endif -#ifdef DEBUG_VIEW_12 - output4f = vec4(abs(textureLod(u_texture0, v_position2f, 0.0).rgb) * 0.1, 1.0); -#endif -#ifdef DEBUG_VIEW_13 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g > 0.0 ? 1.0 : 0.0), 1.0); -#endif -#ifdef DEBUG_VIEW_14 - output4f = vec4(textureLod(u_texture0, v_position2f.yx, 0.0).rgb * 2.5, 1.0); - output4f.xyz /= (output4f.xyz + 1.0); - output4f.xyz = sqrt(output4f.xyz); -#endif -#ifdef DEBUG_VIEW_15 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f.yx, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0); -#endif -#ifdef DEBUG_VIEW_16 - output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rg, 0.0, 1.0); -#endif -#ifdef DEBUG_VIEW_17 - output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r) * 10.0, 1.0); - output4f.xyz /= (output4f.xyz + 1.0); - output4f.xyz = sqrt(output4f.xyz); -#endif -#ifdef DEBUG_VIEW_18 - output4f = vec4(vec3(textureLod(u_texture3D0, vec3(v_position2f, u_fuckU1f), 0.0).r), 1.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_texture0; +uniform sampler2D u_texture1; + +#ifdef DEBUG_VIEW_18 +precision highp sampler3D; +uniform sampler3D u_texture3D0; +uniform float u_fuckU1f; +#endif + +uniform mat4 u_inverseViewMatrix; +uniform vec2 u_depthSliceStartEnd2f; + +void main() { +#ifdef DEBUG_VIEW_0 + output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb, 1.0); +#endif +#ifdef DEBUG_VIEW_1 + vec3 color3f = textureLod(u_texture0, v_position2f, 0.0).rgb; + if(color3f.x == 0.0 && color3f.y == 0.0 && color3f.z == 0.0) { + output4f = vec4(0.0, 0.0, 0.0, 1.0); + }else { + output4f = vec4(normalize(mat3(u_inverseViewMatrix) * (color3f * 2.0 - 1.0)), 1.0); + } +#endif +#ifdef DEBUG_VIEW_2 + output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).a, textureLod(u_texture1, v_position2f, 0.0).a, 0.0, 1.0); +#endif +#ifdef DEBUG_VIEW_3 + vec4 color4f = textureLod(u_texture0, v_position2f, 0.0); + output4f = vec4(color4f.b > 0.99 ? 1.0 : 0.0, color4f.a, 0.0, 1.0); +#endif +#ifdef DEBUG_VIEW_4 + output4f = vec4(vec3(clamp((textureLod(u_texture0, v_position2f, 0.0).r - u_depthSliceStartEnd2f.x) * u_depthSliceStartEnd2f.y, 0.0, 1.0)), 1.0); +#endif +#ifdef DEBUG_VIEW_5 + output4f = vec4(vec3(textureLod(u_texture0, (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x), 0.0).r), 1.0); +#endif +#ifdef DEBUG_VIEW_6 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r), 1.0); +#endif +#ifdef DEBUG_VIEW_7 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0); +#endif +#ifdef DEBUG_VIEW_8 + output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb * 10.0, 1.0); + output4f.xyz /= (output4f.xyz + 1.0); + output4f.xyz = sqrt(output4f.xyz); +#endif +#ifdef DEBUG_VIEW_9 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g), 1.0); +#endif +#ifdef DEBUG_VIEW_10 + vec2 coord = (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x); + vec4 color2 = textureLod(u_texture1, coord, 0.0); + output4f = vec4(mix(color2.rgb, vec3(textureLod(u_texture0, coord, 0.0).r), color2.a), 1.0); +#endif +#ifdef DEBUG_VIEW_11 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a * 0.017), 1.0); +#endif +#ifdef DEBUG_VIEW_12 + output4f = vec4(abs(textureLod(u_texture0, v_position2f, 0.0).rgb) * 0.1, 1.0); +#endif +#ifdef DEBUG_VIEW_13 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g > 0.0 ? 1.0 : 0.0), 1.0); +#endif +#ifdef DEBUG_VIEW_14 + output4f = vec4(textureLod(u_texture0, v_position2f.yx, 0.0).rgb * 2.5, 1.0); + output4f.xyz /= (output4f.xyz + 1.0); + output4f.xyz = sqrt(output4f.xyz); +#endif +#ifdef DEBUG_VIEW_15 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f.yx, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0); +#endif +#ifdef DEBUG_VIEW_16 + output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rg, 0.0, 1.0); +#endif +#ifdef DEBUG_VIEW_17 + output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r) * 10.0, 1.0); + output4f.xyz /= (output4f.xyz + 1.0); + output4f.xyz = sqrt(output4f.xyz); +#endif +#ifdef DEBUG_VIEW_18 + output4f = vec4(vec3(textureLod(u_texture3D0, vec3(v_position2f, u_fuckU1f), 0.0).r), 1.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh index 13d15369..9386082f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh @@ -1,29 +1,29 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision highp sampler2D; - -in vec2 v_position2f; - -uniform sampler2D u_depthTexture; - -void main() { - gl_FragDepth = textureLod(u_depthTexture, v_position2f, 0.0).r <= 0.0000001 ? 0.0 : 1.0; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision highp sampler2D; + +in vec2 v_position2f; + +uniform sampler2D u_depthTexture; + +void main() { + gl_FragDepth = textureLod(u_depthTexture, v_position2f, 0.0).r <= 0.0000001 ? 0.0 : 1.0; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh index 69768b9e..b500d0e0 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh @@ -1,70 +1,70 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) out float occlusionOut1f; - -uniform mat3 u_sampleMatrix3f; -uniform sampler2D u_depthBufferTexture; -uniform sampler2D u_cloudsSunOcclusion; - -#define SAMPLE_DEPTH(v, a, f)\ - f = u_sampleMatrix3f * v;\ - f.xy /= f.z;\ - if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\ - a += textureLod(u_depthBufferTexture, f.xy, 0.0).r > 0.000001 ? 0.0 : 0.0417; - -void main() { - vec3 f; - float accum = 0.0; - float cloud = textureLod(u_cloudsSunOcclusion, vec2(0.5, 0.5), 0.0).r; - if(cloud < 0.01) { - occlusionOut1f = 0.0; - return; - } - - SAMPLE_DEPTH(vec3(0.0, 0.0, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.235, -0.962, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.029, 0.996, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.834, -0.509, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.981, -0.086, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.821, 0.478, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.614, 0.563, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.251, -0.578, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.571, -0.491, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.142, 0.494, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.533, -0.036, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.970, -0.035, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.388, 0.918, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.521, 0.067, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.140, -0.471, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.487, 0.692, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.157, 0.331, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.559, -0.760, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.156, -0.956, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.181, -0.267, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.773, 0.272, 1.0), accum, f) - SAMPLE_DEPTH(vec3(0.329, 0.228, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.341, -0.187, 1.0), accum, f) - SAMPLE_DEPTH(vec3(-0.121, 0.689, 1.0), accum, f) - - occlusionOut1f = min(accum * cloud, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) out float occlusionOut1f; + +uniform mat3 u_sampleMatrix3f; +uniform sampler2D u_depthBufferTexture; +uniform sampler2D u_cloudsSunOcclusion; + +#define SAMPLE_DEPTH(v, a, f)\ + f = u_sampleMatrix3f * v;\ + f.xy /= f.z;\ + if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\ + a += textureLod(u_depthBufferTexture, f.xy, 0.0).r > 0.000001 ? 0.0 : 0.0417; + +void main() { + vec3 f; + float accum = 0.0; + float cloud = textureLod(u_cloudsSunOcclusion, vec2(0.5, 0.5), 0.0).r; + if(cloud < 0.01) { + occlusionOut1f = 0.0; + return; + } + + SAMPLE_DEPTH(vec3(0.0, 0.0, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.235, -0.962, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.029, 0.996, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.834, -0.509, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.981, -0.086, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.821, 0.478, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.614, 0.563, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.251, -0.578, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.571, -0.491, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.142, 0.494, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.533, -0.036, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.970, -0.035, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.388, 0.918, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.521, 0.067, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.140, -0.471, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.487, 0.692, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.157, 0.331, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.559, -0.760, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.156, -0.956, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.181, -0.267, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.773, 0.272, 1.0), accum, f) + SAMPLE_DEPTH(vec3(0.329, 0.228, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.341, -0.187, 1.0), accum, f) + SAMPLE_DEPTH(vec3(-0.121, 0.689, 1.0), accum, f) + + occlusionOut1f = min(accum * cloud, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl index 5a065c6b..8c329364 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl @@ -1,122 +1,122 @@ - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING -#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION -#define _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION - -vec3 eaglercraftIBL_NoBlur(in vec3 albedo, in vec3 irradiance, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) { - if(materials.g < 0.25) { - return albedo * irradiance * 0.1; - }else { - float roughness = 1.0 - materials.r * 0.85; - float NdotV = dot(normalVec, -viewDir); - float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); - vec3 kD = vec3(0.05); - vec3 F; - if(materials.g < 0.9) { - F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel); - kD = (1.0 - F) * albedo / 3.141592; - }else if(materials.g < 0.964) { - vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); - vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; - lutUV.x += 0.5; - vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb; - fresnel = 1.0 - fresnel; - mK *= mK; - mK += mN * mN; - vec3 nv = mN * fresnel * 2.0; - fresnel *= fresnel; - vec3 num = mK - nv + fresnel; - vec3 den = mK + nv + fresnel; - vec3 r = num / den; - mK *= fresnel; - mK += 1.0; - num = mK - nv; - den = mK + nv; - r += num / den; - r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); - F = r * r; - }else { - F = (1.0 - albedo) + albedo * fresnel; - kD = vec3(0.05); - } - vec2 brdf2f = vec2(max(NdotV, 0.0), roughness); - brdf2f = 1.0 - brdf2f; - brdf2f *= brdf2f; - brdf2f = 1.0 - brdf2f; - brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; - return kD * albedo * irradiance + envMapSample * (F * brdf2f.r + brdf2f.g); - } -} - -#endif -#endif - -#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR -#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION -#define _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION - -#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH -vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials, vec3 metalN, vec3 metalK) { -#else -vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) { -#endif - float NdotV = dot(normalVec, -viewDir); - float roughness = 1.0 - materials.r * 0.85; - float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); - vec3 F; - if(materials.g < 0.9) { - F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel); - }else if(materials.g < 0.964) { -#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH - vec3 mN = metalN; - vec3 mK = metalK; -#else - vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); - vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; - lutUV.x += 0.5; - vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb; -#endif - fresnel = 1.0 - fresnel; - mK *= mK; - mK += mN * mN; - vec3 nv = mN * fresnel * 2.0; - fresnel *= fresnel; - vec3 num = mK - nv + fresnel; - vec3 den = mK + nv + fresnel; - vec3 r = num / den; - mK *= fresnel; - mK += 1.0; - num = mK - nv; - den = mK + nv; - r += num / den; - r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); - F = r * r; - }else { - F = (1.0 - albedo) + albedo * fresnel; - } - vec2 brdf2f = vec2(max(NdotV, 0.0), roughness); - brdf2f = 1.0 - brdf2f; - brdf2f *= brdf2f; - brdf2f = 1.0 - brdf2f; - brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; - return envMapSample * (F * brdf2f.r + brdf2f.g); -} - -#endif -#endif \ No newline at end of file + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING +#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION +#define _HAS_PBR_IMAGE_BASED_LIGHTING_FUNCTION + +vec3 eaglercraftIBL_NoBlur(in vec3 albedo, in vec3 irradiance, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) { + if(materials.g < 0.25) { + return albedo * irradiance * 0.1; + }else { + float roughness = 1.0 - materials.r * 0.85; + float NdotV = dot(normalVec, -viewDir); + float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); + vec3 kD = vec3(0.05); + vec3 F; + if(materials.g < 0.9) { + F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel); + kD = (1.0 - F) * albedo / 3.141592; + }else if(materials.g < 0.964) { + vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); + vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; + lutUV.x += 0.5; + vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb; + fresnel = 1.0 - fresnel; + mK *= mK; + mK += mN * mN; + vec3 nv = mN * fresnel * 2.0; + fresnel *= fresnel; + vec3 num = mK - nv + fresnel; + vec3 den = mK + nv + fresnel; + vec3 r = num / den; + mK *= fresnel; + mK += 1.0; + num = mK - nv; + den = mK + nv; + r += num / den; + r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); + F = r * r; + }else { + F = (1.0 - albedo) + albedo * fresnel; + kD = vec3(0.05); + } + vec2 brdf2f = vec2(max(NdotV, 0.0), roughness); + brdf2f = 1.0 - brdf2f; + brdf2f *= brdf2f; + brdf2f = 1.0 - brdf2f; + brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; + return kD * albedo * irradiance + envMapSample * (F * brdf2f.r + brdf2f.g); + } +} + +#endif +#endif + +#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR +#ifndef _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION +#define _HAS_PBR_IMAGE_BASED_LIGHTING_SPECULAR_FUNCTION + +#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH +vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials, vec3 metalN, vec3 metalK) { +#else +vec3 eaglercraftIBL_Specular(in vec3 albedo, in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec, in vec3 materials) { +#endif + float NdotV = dot(normalVec, -viewDir); + float roughness = 1.0 - materials.r * 0.85; + float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); + vec3 F; + if(materials.g < 0.9) { + F = vec3(materials.g + (max(1.0 - roughness, materials.g) - materials.g) * fresnel); + }else if(materials.g < 0.964) { +#ifdef LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH + vec3 mN = metalN; + vec3 mK = metalK; +#else + vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); + vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; + lutUV.x += 0.5; + vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb; +#endif + fresnel = 1.0 - fresnel; + mK *= mK; + mK += mN * mN; + vec3 nv = mN * fresnel * 2.0; + fresnel *= fresnel; + vec3 num = mK - nv + fresnel; + vec3 den = mK + nv + fresnel; + vec3 r = num / den; + mK *= fresnel; + mK += 1.0; + num = mK - nv; + den = mK + nv; + r += num / den; + r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); + F = r * r; + }else { + F = (1.0 - albedo) + albedo * fresnel; + } + vec2 brdf2f = vec2(max(NdotV, 0.0), roughness); + brdf2f = 1.0 - brdf2f; + brdf2f *= brdf2f; + brdf2f = 1.0 - brdf2f; + brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; + return envMapSample * (F * brdf2f.r + brdf2f.g); +} + +#endif +#endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl index 3d69bf61..4aefafaa 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl @@ -1,88 +1,88 @@ - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef LIB_INCLUDE_PBR_LIGHTING_FUNCTION -#ifndef _HAS_PBR_LIGHTING_FUNCTION -#define _HAS_PBR_LIGHTING_FUNCTION - -#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH -#define PREFETCH_METALS(albedo, materialG1f, metalN3f, metalK3f)\ - if(materialG1f >= 0.9 && materialG1f < 0.964) {\ - metalK3f.xy = vec2(0.25, (materialG1f - 0.9) * 15.625);\ - metalN3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\ - metalK3f.x += 0.5;\ - metalK3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\ - } -#endif - -#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH -vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials, in vec3 metalN, in vec3 metalK) { -#else -vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials) { -#endif - float roughness = 1.0 - materials.r * 0.85; - vec3 H = normalize(viewDir + lightDir); - vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); - float NDF = roughness * roughness; - NDF *= NDF; - float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; - NDF /= denom * denom * 3.141592; - float gs = roughness + 1.0; - gs *= gs * 0.125; - vec2 Ndot = NdotHVL.yz; - Ndot /= Ndot * (1.0 - gs) + gs; - NDF *= Ndot.x * Ndot.y; - float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); - vec3 kD = vec3(0.03); - vec3 F; - if(materials.g < 0.9) { - F = vec3(materials.g + (1.0 - materials.g) * fresnel); - kD = (1.0 - F) * albedo / 3.141592; - }else if(materials.g < 0.964) { -#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH - vec3 mN = metalN; - vec3 mK = metalK; -#else - vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); - vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; - lutUV.x += 0.5; - vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb * length(albedo); -#endif - fresnel = 1.0 - fresnel; - mK *= mK; - mK += mN * mN; - vec3 nv = mN * fresnel * 2.0; - fresnel *= fresnel; - vec3 num = mK - nv + fresnel; - vec3 den = mK + nv + fresnel; - vec3 r = num / den; - mK *= fresnel; - mK += 1.0; - num = mK - nv; - den = mK + nv; - r += num / den; - r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); - F = r * r; - }else { - F = albedo + (1.0 - albedo) * fresnel; - } - denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; - return (kD + (NDF * F / denom)) * radiance * NdotHVL.z; -} - -#endif -#endif + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef LIB_INCLUDE_PBR_LIGHTING_FUNCTION +#ifndef _HAS_PBR_LIGHTING_FUNCTION +#define _HAS_PBR_LIGHTING_FUNCTION + +#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH +#define PREFETCH_METALS(albedo, materialG1f, metalN3f, metalK3f)\ + if(materialG1f >= 0.9 && materialG1f < 0.964) {\ + metalK3f.xy = vec2(0.25, (materialG1f - 0.9) * 15.625);\ + metalN3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\ + metalK3f.x += 0.5;\ + metalK3f = textureLod(u_metalsLUT, metalK3f.xy, 0.0).rgb;\ + } +#endif + +#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH +vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials, in vec3 metalN, in vec3 metalK) { +#else +vec3 eaglercraftLighting(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec, in vec3 materials) { +#endif + float roughness = 1.0 - materials.r * 0.85; + vec3 H = normalize(viewDir + lightDir); + vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); + float NDF = roughness * roughness; + NDF *= NDF; + float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; + NDF /= denom * denom * 3.141592; + float gs = roughness + 1.0; + gs *= gs * 0.125; + vec2 Ndot = NdotHVL.yz; + Ndot /= Ndot * (1.0 - gs) + gs; + NDF *= Ndot.x * Ndot.y; + float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); + vec3 kD = vec3(0.03); + vec3 F; + if(materials.g < 0.9) { + F = vec3(materials.g + (1.0 - materials.g) * fresnel); + kD = (1.0 - F) * albedo / 3.141592; + }else if(materials.g < 0.964) { +#ifdef LIB_INCLUDE_PBR_LIGHTING_PREFETCH + vec3 mN = metalN; + vec3 mK = metalK; +#else + vec2 lutUV = vec2(0.25, (materials.g - 0.9) * 15.625); + vec3 mN = textureLod(u_metalsLUT, lutUV, 0.0).rgb; + lutUV.x += 0.5; + vec3 mK = textureLod(u_metalsLUT, lutUV, 0.0).rgb * length(albedo); +#endif + fresnel = 1.0 - fresnel; + mK *= mK; + mK += mN * mN; + vec3 nv = mN * fresnel * 2.0; + fresnel *= fresnel; + vec3 num = mK - nv + fresnel; + vec3 den = mK + nv + fresnel; + vec3 r = num / den; + mK *= fresnel; + mK += 1.0; + num = mK - nv; + den = mK + nv; + r += num / den; + r = clamp(r * 0.5, vec3(0.0), vec3(1.0)); + F = r * r; + }else { + F = albedo + (1.0 - albedo) * fresnel; + } + denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; + return (kD + (NDF * F / denom)) * radiance * NdotHVL.z; +} + +#endif +#endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl index e1104d15..6e1921e4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl @@ -1,220 +1,220 @@ - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef LIB_INCLUDE_WAVING_BLOCKS_FUNCTION -#ifndef _HAS_INCLUDED_WAVING_BLOCKS -#define _HAS_INCLUDED_WAVING_BLOCKS - -#define _WAVING_BLOCK_TYPE_LEAF_BLOCK 1 -#define _WAVING_BLOCK_TYPE_LEAF_BLOCK_F 1.0 -#define _WAVING_BLOCK_TYPE_TALL_GRASS 2 -#define _WAVING_BLOCK_TYPE_TALL_GRASS_F 2.0 -#define _WAVING_BLOCK_TYPE_CROPS 3 -#define _WAVING_BLOCK_TYPE_CROPS_F 3.0 -#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM 4 -#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM_F 4.0 -#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP 5 -#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP_F 5.0 -#define _WAVING_BLOCK_TYPE_PLANT 6 -#define _WAVING_BLOCK_TYPE_PLANT_F 6.0 -#define _WAVING_BLOCK_TYPE_SUGARCANE 7 -#define _WAVING_BLOCK_TYPE_SUGARCANE_F 7.0 -#define _WAVING_BLOCK_TYPE_VINES 8 -#define _WAVING_BLOCK_TYPE_VINES_F 8.0 -#define _WAVING_BLOCK_TYPE_WATER_STILL 9 -#define _WAVING_BLOCK_TYPE_WATER_STILL_F 9.0 -#define _WAVING_BLOCK_TYPE_WATER_FLOW 10 -#define _WAVING_BLOCK_TYPE_WATER_FLOW_F 10.0 -#define _WAVING_BLOCK_TYPE_LILYPAD 11 -#define _WAVING_BLOCK_TYPE_LILYPAD_F 11.0 -#define _WAVING_BLOCK_TYPE_FIRE_FLOOR 12 -#define _WAVING_BLOCK_TYPE_FIRE_FLOOR_F 12.0 -#define _WAVING_BLOCK_TYPE_FIRE_WALL 13 -#define _WAVING_BLOCK_TYPE_FIRE_WALL_F 13.0 - -// ignore wall fire for now, they clip -#define _WAVING_BLOCK_MIN _WAVING_BLOCK_TYPE_LEAF_BLOCK_F -#define _WAVING_BLOCK_MAX _WAVING_BLOCK_TYPE_FIRE_FLOOR_F - -#ifndef FAKE_SIN -#error the FAKE_SIN function must be defined to use waving blocks -#endif - -#define _WAVING_BLOCK_COORD_DERIVE_HACK 0.001 -#define _WAVING_BLOCK_COORD_DERIVE_HACK_05 0.0005 -#define _WAVING_BLOCK_COORD_DERIVE_HACK_INV 1000.0 - -vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 amp1, in float timer) { - float fac, fac2; - fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027)); - FAKE_SIN(fac, fac2) - fac2 *= 0.04; - fac2 += 0.04; - vec3 vf0, d0; - vf0 = timer * vec3(0.0127, 0.0089, 0.0114); - FAKE_SIN(vf0, d0); - d0.xyz += d0.yzx; - d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015); - d0.y += pos.z; - d0.xz += pos.y; - d0.xz += pos.zx; - d0.xz -= pos.xz; - vec3 ret; - FAKE_SIN(d0, ret) - ret *= fac2; - return ret * amp1; -} - -vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 vf_a, in vec3 vf_b, in vec3 amp1, in vec3 amp2, in float timer) { - float fac, fac2; - fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027)); - FAKE_SIN(fac, fac2) - fac2 *= 0.04; - fac2 += 0.04; - vec3 vf0, d0; - vf0 = timer * vec3(0.0127, 0.0089, 0.0114); - FAKE_SIN(vf0, d0); - d0.xyz += d0.yzx; - d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015); - d0.y += pos.z; - d0.xz += pos.y; - d0.xz += pos.zx; - d0.xz -= pos.xz; - vec3 ret; - FAKE_SIN(d0, ret) - ret *= fac2; - vec3 move = ret * amp1; - vec3 pos2 = move + pos; - fac = dot(vec4(pos2, timer), vec4(0.5, 0.5, 0.5, 0.0027)); - FAKE_SIN(fac, fac2) - fac2 *= 0.04; - fac2 += 0.04; - vf0 = timer * vf_a; - FAKE_SIN(vf0, d0); - d0.xyz += d0.yzx; - d0.xyz += timer * vf_b; - d0.y += pos2.z; - d0.xz += pos2.y; - d0.xz += pos2.zx; - d0.xz -= pos2.xz; - FAKE_SIN(d0, ret) - ret *= fac2; - move += ret * amp2; - return move; -} - -vec3 _computeWavingBlockById(in vec3 realPos, in vec3 referencePos, in vec4 wavingBlockParam, in float type) { - int typeInt = int(type); - highp float refY, fractY1, fractY2; - refY = referencePos.y; - switch(typeInt) { - case _WAVING_BLOCK_TYPE_CROPS: - refY += 0.0625625; - case _WAVING_BLOCK_TYPE_TALL_GRASS: - case _WAVING_BLOCK_TYPE_PLANT: - case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM: - case _WAVING_BLOCK_TYPE_FIRE_FLOOR: - // check if it is the bottom half of the block, - // if vertex is at Y = 0.0 then don't offset - fractY1 = fract(refY + _WAVING_BLOCK_COORD_DERIVE_HACK_05); - fractY2 = fract(refY - _WAVING_BLOCK_COORD_DERIVE_HACK_05); - if(fractY2 > fractY1) { - return vec3(0.0); - } - default: - break; - } - vec3 ret = vec3(0.0); - switch(typeInt) { - case _WAVING_BLOCK_TYPE_LEAF_BLOCK: - ret = _computeWavingBlockNoise( - referencePos, - vec3(0.0040, 0.0064, 0.0043), - vec3(0.0035, 0.0037, 0.0041), - vec3(1.0, 0.2, 1.0), - vec3(0.5, 0.1, 0.5), - wavingBlockParam.y); - break; - case _WAVING_BLOCK_TYPE_TALL_GRASS: - case _WAVING_BLOCK_TYPE_CROPS: - ret = _computeWavingBlockNoise( - referencePos, - vec3(1.0, 0.2, 1.0), - wavingBlockParam.y); - break; - case _WAVING_BLOCK_TYPE_PLANT: - case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM: - case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP: - ret = _computeWavingBlockNoise( - referencePos, - vec3(0.0041, 0.007, 0.0044), - vec3(0.0038, 0.024, 0.0), - vec3(0.8, 0.0, 0.8), - vec3(0.4, 0.0, 0.4), - wavingBlockParam.y); - break; - case _WAVING_BLOCK_TYPE_SUGARCANE: - ret = _computeWavingBlockNoise( - referencePos, - vec3(0.3, 0.0, 0.3), - wavingBlockParam.y); - break; - case _WAVING_BLOCK_TYPE_VINES: - ret = _computeWavingBlockNoise( - referencePos, - vec3(0.0040, 0.0064, 0.0043), - vec3(0.0035, 0.0037, 0.0041), - vec3(0.5, 0.3, 0.5), - vec3(0.25, 0.2, 0.25), - wavingBlockParam.y); - break; - case _WAVING_BLOCK_TYPE_WATER_STILL: - - break; - case _WAVING_BLOCK_TYPE_WATER_FLOW: - - break; - case _WAVING_BLOCK_TYPE_FIRE_FLOOR: - ret = _computeWavingBlockNoise( - referencePos, - vec3(0.0105, 0.0096, 0.0087), - vec3(0.0063, 0.0097, 0.0156), - vec3(1.2, 0.4, 1.2), - vec3(0.8, 0.8, 0.8), - wavingBlockParam.y); - break; - default: - break; - } - return ret; -} - -#define COMPUTE_WAVING_BLOCKS(pos4f, amount, range, block1f, modelMatrix, viewMatrix, modelViewMatrix, wavingBlockOffset, wavingBlockParam)\ - if(block1f >= _WAVING_BLOCK_MIN && block1f <= _WAVING_BLOCK_MAX) {\ - pos4f = modelMatrix * pos4f;\ - pos4f.xyz /= pos4f.w;\ - pos4f.w = 1.0;\ - if(dot(pos4f.xyz, pos4f.xyz) < range * range) {\ - pos4f.xyz += _computeWavingBlockById(pos4f.xyz, pos4f.xyz + wavingBlockOffset, wavingBlockParam, block1f) * amount * 0.5;\ - }\ - pos4f = viewMatrix * pos4f;\ - }else {\ - pos4f = modelViewMatrix * pos4f;\ - } - -#endif -#endif + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef LIB_INCLUDE_WAVING_BLOCKS_FUNCTION +#ifndef _HAS_INCLUDED_WAVING_BLOCKS +#define _HAS_INCLUDED_WAVING_BLOCKS + +#define _WAVING_BLOCK_TYPE_LEAF_BLOCK 1 +#define _WAVING_BLOCK_TYPE_LEAF_BLOCK_F 1.0 +#define _WAVING_BLOCK_TYPE_TALL_GRASS 2 +#define _WAVING_BLOCK_TYPE_TALL_GRASS_F 2.0 +#define _WAVING_BLOCK_TYPE_CROPS 3 +#define _WAVING_BLOCK_TYPE_CROPS_F 3.0 +#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM 4 +#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM_F 4.0 +#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP 5 +#define _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP_F 5.0 +#define _WAVING_BLOCK_TYPE_PLANT 6 +#define _WAVING_BLOCK_TYPE_PLANT_F 6.0 +#define _WAVING_BLOCK_TYPE_SUGARCANE 7 +#define _WAVING_BLOCK_TYPE_SUGARCANE_F 7.0 +#define _WAVING_BLOCK_TYPE_VINES 8 +#define _WAVING_BLOCK_TYPE_VINES_F 8.0 +#define _WAVING_BLOCK_TYPE_WATER_STILL 9 +#define _WAVING_BLOCK_TYPE_WATER_STILL_F 9.0 +#define _WAVING_BLOCK_TYPE_WATER_FLOW 10 +#define _WAVING_BLOCK_TYPE_WATER_FLOW_F 10.0 +#define _WAVING_BLOCK_TYPE_LILYPAD 11 +#define _WAVING_BLOCK_TYPE_LILYPAD_F 11.0 +#define _WAVING_BLOCK_TYPE_FIRE_FLOOR 12 +#define _WAVING_BLOCK_TYPE_FIRE_FLOOR_F 12.0 +#define _WAVING_BLOCK_TYPE_FIRE_WALL 13 +#define _WAVING_BLOCK_TYPE_FIRE_WALL_F 13.0 + +// ignore wall fire for now, they clip +#define _WAVING_BLOCK_MIN _WAVING_BLOCK_TYPE_LEAF_BLOCK_F +#define _WAVING_BLOCK_MAX _WAVING_BLOCK_TYPE_FIRE_FLOOR_F + +#ifndef FAKE_SIN +#error the FAKE_SIN function must be defined to use waving blocks +#endif + +#define _WAVING_BLOCK_COORD_DERIVE_HACK 0.001 +#define _WAVING_BLOCK_COORD_DERIVE_HACK_05 0.0005 +#define _WAVING_BLOCK_COORD_DERIVE_HACK_INV 1000.0 + +vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 amp1, in float timer) { + float fac, fac2; + fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027)); + FAKE_SIN(fac, fac2) + fac2 *= 0.04; + fac2 += 0.04; + vec3 vf0, d0; + vf0 = timer * vec3(0.0127, 0.0089, 0.0114); + FAKE_SIN(vf0, d0); + d0.xyz += d0.yzx; + d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015); + d0.y += pos.z; + d0.xz += pos.y; + d0.xz += pos.zx; + d0.xz -= pos.xz; + vec3 ret; + FAKE_SIN(d0, ret) + ret *= fac2; + return ret * amp1; +} + +vec3 _computeWavingBlockNoise(in vec3 pos, in vec3 vf_a, in vec3 vf_b, in vec3 amp1, in vec3 amp2, in float timer) { + float fac, fac2; + fac = dot(vec4(pos, timer), vec4(0.5, 0.5, 0.5, 0.0027)); + FAKE_SIN(fac, fac2) + fac2 *= 0.04; + fac2 += 0.04; + vec3 vf0, d0; + vf0 = timer * vec3(0.0127, 0.0089, 0.0114); + FAKE_SIN(vf0, d0); + d0.xyz += d0.yzx; + d0.xyz += timer * vec3(0.0063, 0.0224, 0.0015); + d0.y += pos.z; + d0.xz += pos.y; + d0.xz += pos.zx; + d0.xz -= pos.xz; + vec3 ret; + FAKE_SIN(d0, ret) + ret *= fac2; + vec3 move = ret * amp1; + vec3 pos2 = move + pos; + fac = dot(vec4(pos2, timer), vec4(0.5, 0.5, 0.5, 0.0027)); + FAKE_SIN(fac, fac2) + fac2 *= 0.04; + fac2 += 0.04; + vf0 = timer * vf_a; + FAKE_SIN(vf0, d0); + d0.xyz += d0.yzx; + d0.xyz += timer * vf_b; + d0.y += pos2.z; + d0.xz += pos2.y; + d0.xz += pos2.zx; + d0.xz -= pos2.xz; + FAKE_SIN(d0, ret) + ret *= fac2; + move += ret * amp2; + return move; +} + +vec3 _computeWavingBlockById(in vec3 realPos, in vec3 referencePos, in vec4 wavingBlockParam, in float type) { + int typeInt = int(type); + highp float refY, fractY1, fractY2; + refY = referencePos.y; + switch(typeInt) { + case _WAVING_BLOCK_TYPE_CROPS: + refY += 0.0625625; + case _WAVING_BLOCK_TYPE_TALL_GRASS: + case _WAVING_BLOCK_TYPE_PLANT: + case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM: + case _WAVING_BLOCK_TYPE_FIRE_FLOOR: + // check if it is the bottom half of the block, + // if vertex is at Y = 0.0 then don't offset + fractY1 = fract(refY + _WAVING_BLOCK_COORD_DERIVE_HACK_05); + fractY2 = fract(refY - _WAVING_BLOCK_COORD_DERIVE_HACK_05); + if(fractY2 > fractY1) { + return vec3(0.0); + } + default: + break; + } + vec3 ret = vec3(0.0); + switch(typeInt) { + case _WAVING_BLOCK_TYPE_LEAF_BLOCK: + ret = _computeWavingBlockNoise( + referencePos, + vec3(0.0040, 0.0064, 0.0043), + vec3(0.0035, 0.0037, 0.0041), + vec3(1.0, 0.2, 1.0), + vec3(0.5, 0.1, 0.5), + wavingBlockParam.y); + break; + case _WAVING_BLOCK_TYPE_TALL_GRASS: + case _WAVING_BLOCK_TYPE_CROPS: + ret = _computeWavingBlockNoise( + referencePos, + vec3(1.0, 0.2, 1.0), + wavingBlockParam.y); + break; + case _WAVING_BLOCK_TYPE_PLANT: + case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_BOTTOM: + case _WAVING_BLOCK_TYPE_DOUBLE_PLANT_TOP: + ret = _computeWavingBlockNoise( + referencePos, + vec3(0.0041, 0.007, 0.0044), + vec3(0.0038, 0.024, 0.0), + vec3(0.8, 0.0, 0.8), + vec3(0.4, 0.0, 0.4), + wavingBlockParam.y); + break; + case _WAVING_BLOCK_TYPE_SUGARCANE: + ret = _computeWavingBlockNoise( + referencePos, + vec3(0.3, 0.0, 0.3), + wavingBlockParam.y); + break; + case _WAVING_BLOCK_TYPE_VINES: + ret = _computeWavingBlockNoise( + referencePos, + vec3(0.0040, 0.0064, 0.0043), + vec3(0.0035, 0.0037, 0.0041), + vec3(0.5, 0.3, 0.5), + vec3(0.25, 0.2, 0.25), + wavingBlockParam.y); + break; + case _WAVING_BLOCK_TYPE_WATER_STILL: + + break; + case _WAVING_BLOCK_TYPE_WATER_FLOW: + + break; + case _WAVING_BLOCK_TYPE_FIRE_FLOOR: + ret = _computeWavingBlockNoise( + referencePos, + vec3(0.0105, 0.0096, 0.0087), + vec3(0.0063, 0.0097, 0.0156), + vec3(1.2, 0.4, 1.2), + vec3(0.8, 0.8, 0.8), + wavingBlockParam.y); + break; + default: + break; + } + return ret; +} + +#define COMPUTE_WAVING_BLOCKS(pos4f, amount, range, block1f, modelMatrix, viewMatrix, modelViewMatrix, wavingBlockOffset, wavingBlockParam)\ + if(block1f >= _WAVING_BLOCK_MIN && block1f <= _WAVING_BLOCK_MAX) {\ + pos4f = modelMatrix * pos4f;\ + pos4f.xyz /= pos4f.w;\ + pos4f.w = 1.0;\ + if(dot(pos4f.xyz, pos4f.xyz) < range * range) {\ + pos4f.xyz += _computeWavingBlockById(pos4f.xyz, pos4f.xyz + wavingBlockOffset, wavingBlockParam, block1f) * amount * 0.5;\ + }\ + pos4f = viewMatrix * pos4f;\ + }else {\ + pos4f = modelViewMatrix * pos4f;\ + } + +#endif +#endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh index e0d71711..85a15097 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh @@ -1,160 +1,160 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; -precision highp sampler2DShadow; - -in vec2 v_position2f; - -layout(location = 0) out float output1f; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2DShadow u_sunShadowDepthTexture; -uniform sampler2D u_ditherTexture; - -uniform mat4 u_inverseViewProjMatrix4f; - -uniform vec2 u_ditherScale2f; -uniform vec3 u_eyePosition3f; -uniform float u_sampleStep1f; - -#define SAMPLES_PER_STEP 8.0 -#define SAMPLES_PER_STEP_1 0.125 - -#ifdef COMPILE_SUN_SHADOW_LOD0 -uniform mat4 u_sunShadowMatrixLOD04f; -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 -uniform mat4 u_sunShadowMatrixLOD04f; -uniform mat4 u_sunShadowMatrixLOD14f; -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 -uniform mat4 u_sunShadowMatrixLOD04f; -uniform mat4 u_sunShadowMatrixLOD14f; -uniform mat4 u_sunShadowMatrixLOD24f; -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif - -float shadow(in vec3 coords) { - vec4 shadowSpacePosition = u_sunShadowMatrixLOD04f * vec4(coords, 1.0); - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; - return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); - } -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowSpacePosition = u_sunShadowMatrixLOD14f * vec4(coords, 1.0); - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSpacePosition.y += 1.0; - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; - return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); - } -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowSpacePosition = u_sunShadowMatrixLOD24f * vec4(coords, 1.0); - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSpacePosition.y += 2.0; - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; - return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); - } -#endif - return -1.0; -} - -#define STEP2DST(stepNum) (stepNum * stepNum * 0.06 + stepNum * 0.05) - -void main() { - output1f = 0.0; - float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - if(depth < 0.00001) { - return; - } - - vec4 fragPos4f = vec4(v_position2f, depth, 1.0); - fragPos4f.xyz *= 2.0; - fragPos4f.xyz -= 1.0; - - fragPos4f = u_inverseViewProjMatrix4f * fragPos4f; - fragPos4f.xyz /= fragPos4f.w; - fragPos4f.w = 1.0; - fragPos4f.xyz -= u_eyePosition3f; - - float viewDist = length(fragPos4f.xyz); - fragPos4f.xyz /= viewDist; - float sampleNum = textureLod(u_ditherTexture, u_ditherScale2f * v_position2f, 0.0).r; - sampleNum += u_sampleStep1f * SAMPLES_PER_STEP + 1.0; - - float cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - - sampleNum += 1.0; - cloudSample = STEP2DST(sampleNum); - if(cloudSample > viewDist) return; - cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); - if(cloudSample < 0.0) return; - output1f += cloudSample * SAMPLES_PER_STEP_1; - -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; +precision highp sampler2DShadow; + +in vec2 v_position2f; + +layout(location = 0) out float output1f; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2DShadow u_sunShadowDepthTexture; +uniform sampler2D u_ditherTexture; + +uniform mat4 u_inverseViewProjMatrix4f; + +uniform vec2 u_ditherScale2f; +uniform vec3 u_eyePosition3f; +uniform float u_sampleStep1f; + +#define SAMPLES_PER_STEP 8.0 +#define SAMPLES_PER_STEP_1 0.125 + +#ifdef COMPILE_SUN_SHADOW_LOD0 +uniform mat4 u_sunShadowMatrixLOD04f; +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 +uniform mat4 u_sunShadowMatrixLOD04f; +uniform mat4 u_sunShadowMatrixLOD14f; +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 +uniform mat4 u_sunShadowMatrixLOD04f; +uniform mat4 u_sunShadowMatrixLOD14f; +uniform mat4 u_sunShadowMatrixLOD24f; +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif + +float shadow(in vec3 coords) { + vec4 shadowSpacePosition = u_sunShadowMatrixLOD04f * vec4(coords, 1.0); + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; + return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); + } +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowSpacePosition = u_sunShadowMatrixLOD14f * vec4(coords, 1.0); + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSpacePosition.y += 1.0; + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; + return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); + } +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowSpacePosition = u_sunShadowMatrixLOD24f * vec4(coords, 1.0); + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSpacePosition.y += 2.0; + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; + return textureLod(u_sunShadowDepthTexture, shadowSpacePosition.xyz, 0.0); + } +#endif + return -1.0; +} + +#define STEP2DST(stepNum) (stepNum * stepNum * 0.06 + stepNum * 0.05) + +void main() { + output1f = 0.0; + float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + if(depth < 0.00001) { + return; + } + + vec4 fragPos4f = vec4(v_position2f, depth, 1.0); + fragPos4f.xyz *= 2.0; + fragPos4f.xyz -= 1.0; + + fragPos4f = u_inverseViewProjMatrix4f * fragPos4f; + fragPos4f.xyz /= fragPos4f.w; + fragPos4f.w = 1.0; + fragPos4f.xyz -= u_eyePosition3f; + + float viewDist = length(fragPos4f.xyz); + fragPos4f.xyz /= viewDist; + float sampleNum = textureLod(u_ditherTexture, u_ditherScale2f * v_position2f, 0.0).r; + sampleNum += u_sampleStep1f * SAMPLES_PER_STEP + 1.0; + + float cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + + sampleNum += 1.0; + cloudSample = STEP2DST(sampleNum); + if(cloudSample > viewDist) return; + cloudSample = shadow(u_eyePosition3f + fragPos4f.xyz * cloudSample); + if(cloudSample < 0.0) return; + output1f += cloudSample * SAMPLES_PER_STEP_1; + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh index 0f37e378..47035320 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh @@ -1,29 +1,29 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec3 a_position3f; - -uniform mat4 u_modelViewProjMatrix4f; - -void main() { - gl_Position = u_modelViewProjMatrix4f * vec4(a_position3f, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec3 a_position3f; + +uniform mat4 u_modelViewProjMatrix4f; + +void main() { + gl_Position = u_modelViewProjMatrix4f * vec4(a_position3f, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh index 1fcbd0ae..a771f2e8 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh @@ -1,88 +1,88 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_gbufferColorTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_gbufferMaterialTexture; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_metalsLUT; - -uniform mat4 u_inverseProjectionMatrix4f; -uniform mat4 u_inverseViewMatrix4f; - -uniform vec2 u_viewportSize2f; -uniform vec3 u_lightPosition3f; -uniform vec3 u_lightColor3f; - -#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION -#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" - -void main() { - vec2 v_position2f = gl_FragCoord.xy * u_viewportSize2f; - vec3 diffuseColor3f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - vec3 materialData3f; - - float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - if(depth < 0.00001) { - discard; - } - - vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); - worldSpacePosition.xyz *= 2.0; - worldSpacePosition.xyz -= 1.0; - worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition; - vec4 worldSpacePosition2 = worldSpacePosition; - worldSpacePosition = u_inverseViewMatrix4f * worldSpacePosition; - vec3 lightDist = (worldSpacePosition.xyz / worldSpacePosition.w) - u_lightPosition3f; - vec3 color3f = u_lightColor3f / dot(lightDist, lightDist); - - if(color3f.r + color3f.g + color3f.b < 0.025) { - discard; - } - - vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); - diffuseColor3f.rgb = sampleVar4f.rgb; - lightmapCoords2f.x = sampleVar4f.a; - sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); - normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; - lightmapCoords2f.y = sampleVar4f.a; - materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb; - - vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); - - vec3 lightDir3f = normalize(lightDist); - lightDir3f = materialData3f.b == 1.0 ? worldSpaceNormal : -lightDir3f; - - if(dot(lightDir3f, worldSpaceNormal) <= 0.0) { - discard; - } - - diffuseColor3f *= diffuseColor3f; - worldSpacePosition2 = u_inverseViewMatrix4f * vec4(worldSpacePosition2.xyz / worldSpacePosition2.w, 0.0); - worldSpacePosition2.xyz = normalize(worldSpacePosition2.xyz); - output4f = vec4(eaglercraftLighting(diffuseColor3f, color3f, -worldSpacePosition2.xyz, lightDir3f, worldSpaceNormal, materialData3f), 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_gbufferColorTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_gbufferMaterialTexture; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_metalsLUT; + +uniform mat4 u_inverseProjectionMatrix4f; +uniform mat4 u_inverseViewMatrix4f; + +uniform vec2 u_viewportSize2f; +uniform vec3 u_lightPosition3f; +uniform vec3 u_lightColor3f; + +#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION +#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" + +void main() { + vec2 v_position2f = gl_FragCoord.xy * u_viewportSize2f; + vec3 diffuseColor3f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + vec3 materialData3f; + + float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + if(depth < 0.00001) { + discard; + } + + vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); + worldSpacePosition.xyz *= 2.0; + worldSpacePosition.xyz -= 1.0; + worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition; + vec4 worldSpacePosition2 = worldSpacePosition; + worldSpacePosition = u_inverseViewMatrix4f * worldSpacePosition; + vec3 lightDist = (worldSpacePosition.xyz / worldSpacePosition.w) - u_lightPosition3f; + vec3 color3f = u_lightColor3f / dot(lightDist, lightDist); + + if(color3f.r + color3f.g + color3f.b < 0.025) { + discard; + } + + vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); + diffuseColor3f.rgb = sampleVar4f.rgb; + lightmapCoords2f.x = sampleVar4f.a; + sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); + normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; + lightmapCoords2f.y = sampleVar4f.a; + materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb; + + vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); + + vec3 lightDir3f = normalize(lightDist); + lightDir3f = materialData3f.b == 1.0 ? worldSpaceNormal : -lightDir3f; + + if(dot(lightDir3f, worldSpaceNormal) <= 0.0) { + discard; + } + + diffuseColor3f *= diffuseColor3f; + worldSpacePosition2 = u_inverseViewMatrix4f * vec4(worldSpacePosition2.xyz / worldSpacePosition2.w, 0.0); + worldSpacePosition2.xyz = normalize(worldSpacePosition2.xyz); + output4f = vec4(eaglercraftLighting(diffuseColor3f, color3f, -worldSpacePosition2.xyz, lightDir3f, worldSpaceNormal, materialData3f), 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh index 0659f27c..0edbba49 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh @@ -1,102 +1,102 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_gbufferColorTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_gbufferMaterialTexture; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_metalsLUT; - -uniform mat4 u_inverseViewMatrix4f; -uniform mat4 u_inverseProjectionMatrix4f; - -#ifdef COMPILE_SUN_SHADOW -uniform sampler2D u_sunShadowTexture; -#endif - -uniform vec3 u_sunDirection3f; -uniform vec3 u_sunColor3f; - -#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION -#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" - -void main() { - vec3 diffuseColor3f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - vec3 materialData3f; - -#ifdef COMPILE_SUN_SHADOW -#ifdef COMPILE_COLORED_SHADOW - vec4 shadow = textureLod(u_sunShadowTexture, v_position2f, 0.0); - if(shadow.a < 0.05) { - discard; - } -#else - vec3 shadow = vec3(textureLod(u_sunShadowTexture, v_position2f, 0.0).r); - if(shadow.r < 0.05) { - discard; - } -#endif -#endif - - vec4 sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); - -#ifndef COMPILE_SUN_SHADOW - vec3 shadow = vec3(sampleVar4f.a, 0.0, 0.0); - if(shadow.r < 0.5) { - discard; - } - shadow = vec3(max(shadow.r * 2.0 - 1.0, 0.0)); -#endif - - normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; - lightmapCoords2f.y = sampleVar4f.a; - - float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - -#ifndef COMPILE_SUN_SHADOW - if(depth < 0.00001) { - discard; - } -#endif - - sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); - diffuseColor3f.rgb = sampleVar4f.rgb; - lightmapCoords2f.x = sampleVar4f.a; - materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb; - - vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); - vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); - worldSpacePosition.xyz *= 2.0; - worldSpacePosition.xyz -= 1.0; - worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition; - worldSpacePosition = u_inverseViewMatrix4f * vec4(worldSpacePosition.xyz / worldSpacePosition.w, 0.0); - - diffuseColor3f *= diffuseColor3f; - output4f = vec4(eaglercraftLighting(diffuseColor3f, u_sunColor3f * shadow.rgb, normalize(-worldSpacePosition.xyz), u_sunDirection3f, worldSpaceNormal, materialData3f), 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_gbufferColorTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_gbufferMaterialTexture; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_metalsLUT; + +uniform mat4 u_inverseViewMatrix4f; +uniform mat4 u_inverseProjectionMatrix4f; + +#ifdef COMPILE_SUN_SHADOW +uniform sampler2D u_sunShadowTexture; +#endif + +uniform vec3 u_sunDirection3f; +uniform vec3 u_sunColor3f; + +#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION +#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl" + +void main() { + vec3 diffuseColor3f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + vec3 materialData3f; + +#ifdef COMPILE_SUN_SHADOW +#ifdef COMPILE_COLORED_SHADOW + vec4 shadow = textureLod(u_sunShadowTexture, v_position2f, 0.0); + if(shadow.a < 0.05) { + discard; + } +#else + vec3 shadow = vec3(textureLod(u_sunShadowTexture, v_position2f, 0.0).r); + if(shadow.r < 0.05) { + discard; + } +#endif +#endif + + vec4 sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); + +#ifndef COMPILE_SUN_SHADOW + vec3 shadow = vec3(sampleVar4f.a, 0.0, 0.0); + if(shadow.r < 0.5) { + discard; + } + shadow = vec3(max(shadow.r * 2.0 - 1.0, 0.0)); +#endif + + normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0; + lightmapCoords2f.y = sampleVar4f.a; + + float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + +#ifndef COMPILE_SUN_SHADOW + if(depth < 0.00001) { + discard; + } +#endif + + sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0); + diffuseColor3f.rgb = sampleVar4f.rgb; + lightmapCoords2f.x = sampleVar4f.a; + materialData3f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0).rgb; + + vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); + vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); + worldSpacePosition.xyz *= 2.0; + worldSpacePosition.xyz -= 1.0; + worldSpacePosition = u_inverseProjectionMatrix4f * worldSpacePosition; + worldSpacePosition = u_inverseViewMatrix4f * vec4(worldSpacePosition.xyz / worldSpacePosition.w, 0.0); + + diffuseColor3f *= diffuseColor3f; + output4f = vec4(eaglercraftLighting(diffuseColor3f, u_sunColor3f * shadow.rgb, normalize(-worldSpacePosition.xyz), u_sunDirection3f, worldSpaceNormal, materialData3f), 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv index 22a7866e..1c4f7a26 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv @@ -1,583 +1,583 @@ -textureId,smoothness,reflectance,emission -blocks/anvil_base,158,230,0 -blocks/anvil_top_damaged_0,150,230,0 -blocks/anvil_top_damaged_1,143,230,0 -blocks/anvil_top_damaged_2,158,230,0 -blocks/beacon,158,16,200 -blocks/bed_feet_end,31,10,0 -blocks/bed_feet_side,28,9,0 -blocks/bed_feet_top,61,13,0 -blocks/bed_head_end,31,10,0 -blocks/bed_head_side,31,9,0 -blocks/bed_head_top,80,13,0 -blocks/bedrock,46,5,0 -blocks/bookshelf,64,13,0 -blocks/brewing_stand,130,47,0 -blocks/brewing_stand_base,149,10,0 -blocks/brick,37,8,0 -blocks/cactus_bottom,60,7,0 -blocks/cactus_side,71,7,0 -blocks/cactus_top,71,7,0 -blocks/cake_bottom,64,4,0 -blocks/cake_inner,29,3,0 -blocks/cake_side,43,3,0 -blocks/cake_top,127,10,0 -blocks/carrots_stage_0,71,7,0 -blocks/carrots_stage_1,71,7,0 -blocks/carrots_stage_2,71,7,0 -blocks/carrots_stage_3,71,7,0 -blocks/cauldron_bottom,38,230,0 -blocks/cauldron_inner,122,230,0 -blocks/cauldron_side,110,230,0 -blocks/cauldron_top,76,230,0 -blocks/clay,133,13,0 -blocks/coal_block,155,20,0 -blocks/coal_ore,84,10,0 -blocks/coarse_dirt,50,4,0 -blocks/cobblestone,83,10,0 -blocks/cobblestone_mossy,117,8,0 -blocks/cocoa_stage_0,133,8,0 -blocks/cocoa_stage_1,146,8,0 -blocks/cocoa_stage_2,156,8,0 -blocks/command_block,136,99,8 -blocks/comparator_off,115,5,0 -blocks/comparator_on,115,5,14 -blocks/crafting_table_front,113,29,0 -blocks/crafting_table_side,104,20,0 -blocks/crafting_table_top,97,14,0 -blocks/daylight_detector_inverted_top,95,6,0 -blocks/daylight_detector_side,70,5,0 -blocks/daylight_detector_top,95,6,0 -blocks/deadbush,18,10,0 -blocks/diamond_block,235,150,0 -blocks/diamond_ore,90,25,0 -blocks/dirt,50,4,0 -blocks/dirt_podzol_side,27,1,0 -blocks/dirt_podzol_top,47,15,0 -blocks/dispenser_front_horizontal,138,9,0 -blocks/dispenser_front_vertical,114,9,0 -blocks/door_acacia_lower,92,2,0 -blocks/door_acacia_upper,91,5,0 -blocks/door_birch_lower,79,14,0 -blocks/door_birch_upper,110,14,0 -blocks/door_dark_oak_lower,88,3,0 -blocks/door_dark_oak_upper,87,4,0 -blocks/door_iron_lower,214,230,0 -blocks/door_iron_upper,214,230,0 -blocks/door_jungle_lower,56,2,0 -blocks/door_jungle_upper,58,5,0 -blocks/door_spruce_lower,57,16,0 -blocks/door_spruce_upper,58,17,0 -blocks/door_wood_lower,70,2,0 -blocks/door_wood_upper,74,6,0 -blocks/double_plant_fern_bottom,71,7,0 -blocks/double_plant_fern_top,71,7,0 -blocks/double_plant_grass_bottom,71,7,0 -blocks/double_plant_grass_top,71,7,0 -blocks/double_plant_paeonia_bottom,71,7,0 -blocks/double_plant_paeonia_top,71,7,0 -blocks/double_plant_rose_bottom,71,7,0 -blocks/double_plant_rose_top,71,7,0 -blocks/double_plant_sunflower_back,71,7,0 -blocks/double_plant_sunflower_bottom,71,7,0 -blocks/double_plant_sunflower_front,71,7,0 -blocks/double_plant_sunflower_top,71,7,0 -blocks/double_plant_syringa_bottom,71,7,0 -blocks/double_plant_syringa_top,71,7,0 -blocks/dragon_egg,45,15,16 -blocks/dropper_front_horizontal,138,9,0 -blocks/dropper_front_vertical,112,9,0 -blocks/emerald_block,228,130,0 -blocks/emerald_ore,93,26,0 -blocks/enchanting_table_bottom,210,120,0 -blocks/enchanting_table_side,199,8,0 -blocks/enchanting_table_top,118,16,0 -blocks/end_stone,107,15,0 -blocks/endframe_eye,144,37,46 -blocks/endframe_side,141,19,0 -blocks/endframe_top,144,13,0 -blocks/farmland_dry,60,5,0 -blocks/farmland_wet,41,40,0 -blocks/fern,71,7,0 -blocks/fire_layer_0,30,5,162 -blocks/fire_layer_1,30,5,159 -blocks/flower_allium,71,7,0 -blocks/flower_blue_orchid,71,7,0 -blocks/flower_dandelion,71,7,0 -blocks/flower_houstonia,71,7,0 -blocks/flower_oxeye_daisy,71,7,0 -blocks/flower_pot,59,5,0 -blocks/flower_rose,71,7,0 -blocks/flower_tulip_orange,71,7,0 -blocks/flower_tulip_pink,71,7,0 -blocks/flower_tulip_red,71,7,0 -blocks/flower_tulip_white,71,7,0 -blocks/furnace_front_off,102,6,0 -blocks/furnace_front_on,102,7,25 -blocks/furnace_side,140,10,0 -blocks/furnace_top,114,10,0 -blocks/glass,210,100,0 -blocks/glass_black,230,100,0 -blocks/glass_blue,230,100,0 -blocks/glass_brown,230,100,0 -blocks/glass_cyan,230,100,0 -blocks/glass_gray,230,100,0 -blocks/glass_green,230,100,0 -blocks/glass_light_blue,230,100,0 -blocks/glass_lime,230,100,0 -blocks/glass_magenta,230,100,0 -blocks/glass_orange,230,100,0 -blocks/glass_pane_top,230,100,0 -blocks/glass_pane_top_black,230,100,0 -blocks/glass_pane_top_blue,230,100,0 -blocks/glass_pane_top_brown,230,100,0 -blocks/glass_pane_top_cyan,230,100,0 -blocks/glass_pane_top_gray,230,100,0 -blocks/glass_pane_top_green,230,100,0 -blocks/glass_pane_top_light_blue,230,100,0 -blocks/glass_pane_top_lime,230,100,0 -blocks/glass_pane_top_magenta,230,100,0 -blocks/glass_pane_top_orange,230,100,0 -blocks/glass_pane_top_pink,230,100,0 -blocks/glass_pane_top_purple,230,100,0 -blocks/glass_pane_top_red,230,100,0 -blocks/glass_pane_top_silver,230,100,0 -blocks/glass_pane_top_white,230,100,0 -blocks/glass_pane_top_yellow,230,100,0 -blocks/glass_pink,230,100,0 -blocks/glass_purple,230,100,0 -blocks/glass_red,230,100,0 -blocks/glass_silver,230,100,0 -blocks/glass_white,230,100,0 -blocks/glass_yellow,230,100,0 -blocks/glowstone,194,60,150 -blocks/gold_block,218,231,0 -blocks/gold_ore,96,37,0 -blocks/grass_side,50,4,0 -blocks/grass_side_overlay,12,5,0 -blocks/grass_side_snowed,146,15,0 -blocks/grass_top,12,5,0 -blocks/gravel,68,5,0 -blocks/hardened_clay,59,5,0 -blocks/hardened_clay_stained_black,59,5,0 -blocks/hardened_clay_stained_blue,59,5,0 -blocks/hardened_clay_stained_brown,59,5,0 -blocks/hardened_clay_stained_cyan,59,5,0 -blocks/hardened_clay_stained_gray,59,5,0 -blocks/hardened_clay_stained_green,59,5,0 -blocks/hardened_clay_stained_light_blue,59,5,0 -blocks/hardened_clay_stained_lime,59,5,0 -blocks/hardened_clay_stained_magenta,59,5,0 -blocks/hardened_clay_stained_orange,59,5,0 -blocks/hardened_clay_stained_pink,59,5,0 -blocks/hardened_clay_stained_purple,59,5,0 -blocks/hardened_clay_stained_red,59,5,0 -blocks/hardened_clay_stained_silver,59,5,0 -blocks/hardened_clay_stained_white,59,5,0 -blocks/hardened_clay_stained_yellow,59,5,0 -blocks/hay_block_side,112,12,0 -blocks/hay_block_top,114,13,0 -blocks/hopper_inside,71,230,0 -blocks/hopper_outside,173,230,0 -blocks/hopper_top,105,230,0 -blocks/ice,180,70,0 -blocks/ice_packed,168,40,0 -blocks/iron_bars,64,230,0 -blocks/iron_block,232,230,0 -blocks/iron_ore,95,15,0 -blocks/iron_trapdoor,214,230,0 -blocks/itemframe_background,0,0,0 -blocks/jukebox_side,89,13,0 -blocks/jukebox_top,83,13,0 -blocks/ladder,30,6,0 -blocks/lapis_block,222,20,0 -blocks/lapis_ore,96,10,0 -blocks/lava_flow,30,15,200 -blocks/lava_still,30,15,200 -blocks/leaves_acacia,60,10,0 -blocks/leaves_big_oak,105,4,0 -blocks/leaves_birch,73,5,0 -blocks/leaves_jungle,71,7,0 -blocks/leaves_oak,77,6,0 -blocks/leaves_spruce,59,6,0 -blocks/lever,97,10,0 -blocks/log_acacia,15,10,0 -blocks/log_acacia_top,9,10,0 -blocks/log_big_oak,26,10,0 -blocks/log_big_oak_top,20,10,0 -blocks/log_birch,24,5,0 -blocks/log_birch_top,20,10,0 -blocks/log_jungle,14,10,0 -blocks/log_jungle_top,20,10,0 -blocks/log_oak,18,10,0 -blocks/log_oak_top,20,10,0 -blocks/log_spruce,23,10,0 -blocks/log_spruce_top,21,10,0 -blocks/melon_side,156,14,0 -blocks/melon_stem_connected,18,10,0 -blocks/melon_stem_disconnected,18,10,0 -blocks/melon_top,153,14,0 -blocks/mob_spawner,71,230,0 -blocks/mushroom_block_inside,151,10,0 -blocks/mushroom_block_skin_brown,96,10,0 -blocks/mushroom_block_skin_red,148,10,0 -blocks/mushroom_block_skin_stem,142,10,0 -blocks/mushroom_brown,96,10,0 -blocks/mushroom_red,148,10,0 -blocks/mycelium_side,63,15,0 -blocks/mycelium_top,70,15,0 -blocks/nether_brick,37,15,0 -blocks/nether_wart_stage_0,11,5,0 -blocks/nether_wart_stage_1,30,5,0 -blocks/nether_wart_stage_2,39,5,0 -blocks/netherrack,20,10,0 -blocks/noteblock,89,13,0 -blocks/obsidian,210,120,0 -blocks/piston_bottom,80,4,0 -blocks/piston_inner,87,4,0 -blocks/piston_side,104,22,0 -blocks/piston_top_normal,109,25,0 -blocks/piston_top_sticky,116,28,0 -blocks/planks_acacia,92,11,0 -blocks/planks_big_oak,92,11,0 -blocks/planks_birch,92,11,0 -blocks/planks_jungle,92,11,0 -blocks/planks_oak,92,11,0 -blocks/planks_spruce,92,11,0 -blocks/portal,71,7,120 -blocks/potatoes_stage_0,71,7,0 -blocks/potatoes_stage_1,71,7,0 -blocks/potatoes_stage_2,71,7,0 -blocks/potatoes_stage_3,71,7,0 -blocks/prismarine_bricks,230,20,0 -blocks/prismarine_dark,194,26,0 -blocks/prismarine_rough,115,33,0 -blocks/pumpkin_face_off,56,15,0 -blocks/pumpkin_face_on,56,15,74 -blocks/pumpkin_side,52,15,0 -blocks/pumpkin_stem_connected,18,10,0 -blocks/pumpkin_stem_disconnected,18,10,0 -blocks/pumpkin_top,130,15,0 -blocks/quartz_block_bottom,220,60,0 -blocks/quartz_block_chiseled,220,60,0 -blocks/quartz_block_chiseled_top,220,60,0 -blocks/quartz_block_lines,220,60,0 -blocks/quartz_block_lines_top,220,60,0 -blocks/quartz_block_side,220,60,0 -blocks/quartz_block_top,220,60,0 -blocks/quartz_ore,45,10,0 -blocks/rail_activator,84,50,0 -blocks/rail_activator_powered,84,50,32 -blocks/rail_detector,102,62,0 -blocks/rail_detector_powered,102,62,32 -blocks/rail_golden,112,75,0 -blocks/rail_golden_powered,112,75,48 -blocks/rail_normal,85,50,0 -blocks/rail_normal_turned,85,50,0 -blocks/red_sand,32,2,0 -blocks/red_sandstone_bottom,52,10,0 -blocks/red_sandstone_carved,90,10,0 -blocks/red_sandstone_normal,43,10,0 -blocks/red_sandstone_smooth,90,10,0 -blocks/red_sandstone_top,128,15,0 -blocks/redstone_block,184,15,0 -blocks/redstone_dust_cross,100,5,0 -blocks/redstone_dust_cross_overlay,100,5,0 -blocks/redstone_dust_line,100,5,0 -blocks/redstone_dust_line_overlay,100,5,0 -blocks/redstone_lamp_off,191,20,0 -blocks/redstone_lamp_on,191,20,132 -blocks/redstone_ore,88,10,0 -blocks/redstone_torch_off,135,9,0 -blocks/redstone_torch_on,135,9,64 -blocks/reeds,71,7,0 -blocks/repeater_off,151,5,0 -blocks/repeater_on,151,5,32 -blocks/sand,46,8,0 -blocks/sandstone_bottom,52,8,0 -blocks/sandstone_carved,113,10,0 -blocks/sandstone_normal,43,10,0 -blocks/sandstone_smooth,90,10,0 -blocks/sandstone_top,128,15,0 -blocks/sapling_acacia,71,7,0 -blocks/sapling_birch,71,7,0 -blocks/sapling_jungle,71,7,0 -blocks/sapling_oak,71,7,0 -blocks/sapling_roofed_oak,71,7,0 -blocks/sapling_spruce,71,7,0 -blocks/sea_lantern,194,60,80 -blocks/slime,209,0,0 -blocks/snow,146,15,0 -blocks/soul_sand,35,15,0 -blocks/sponge,38,11,0 -blocks/sponge_wet,240,16,0 -blocks/stone,77,10,0 -blocks/stone_andesite,50,9,0 -blocks/stone_andesite_smooth,230,20,0 -blocks/stone_diorite,54,9,0 -blocks/stone_diorite_smooth,230,20,0 -blocks/stone_granite,38,9,0 -blocks/stone_granite_smooth,230,20,0 -blocks/stone_slab_side,120,20,0 -blocks/stone_slab_top,120,20,0 -blocks/stonebrick,70,10,0 -blocks/stonebrick_carved,58,10,0 -blocks/stonebrick_cracked,37,10,0 -blocks/stonebrick_mossy,53,9,0 -blocks/tallgrass,71,7,0 -blocks/tnt_bottom,78,5,0 -blocks/tnt_side,94,15,0 -blocks/tnt_top,61,5,0 -blocks/torch_on,135,9,128 -blocks/trapdoor,43,5,0 -blocks/trip_wire,230,20,0 -blocks/trip_wire_source,132,142,0 -blocks/vine,116,13,0 -blocks/water_flow,220,40,0 -blocks/water_still,220,40,0 -blocks/waterlily,78,15,0 -blocks/web,230,20,0 -blocks/wheat_stage_0,71,7,0 -blocks/wheat_stage_1,71,7,0 -blocks/wheat_stage_2,71,7,0 -blocks/wheat_stage_3,71,7,0 -blocks/wheat_stage_4,71,7,0 -blocks/wheat_stage_5,71,7,0 -blocks/wheat_stage_6,71,7,0 -blocks/wheat_stage_7,71,7,0 -blocks/wool_colored_black,50,10,0 -blocks/wool_colored_blue,50,10,0 -blocks/wool_colored_brown,50,10,0 -blocks/wool_colored_cyan,50,10,0 -blocks/wool_colored_gray,50,10,0 -blocks/wool_colored_green,50,10,0 -blocks/wool_colored_light_blue,50,10,0 -blocks/wool_colored_lime,50,10,0 -blocks/wool_colored_magenta,50,10,0 -blocks/wool_colored_orange,50,10,0 -blocks/wool_colored_pink,50,10,0 -blocks/wool_colored_purple,50,10,0 -blocks/wool_colored_red,50,10,0 -blocks/wool_colored_silver,50,10,0 -blocks/wool_colored_white,50,10,0 -blocks/wool_colored_yellow,50,10,0 -default,64,2,0 -items/apple,90,25,0 -items/apple_golden,150,231,0 -items/arrow,64,2,0 -items/barrier,64,2,0 -items/bed,80,15,0 -items/beef_cooked,70,10,0 -items/beef_raw,50,20,0 -items/blaze_powder,64,15,30 -items/blaze_rod,75,20,30 -items/boat,90,11,0 -items/bone,110,40,0 -items/book_enchanted,64,10,0 -items/book_normal,64,10,0 -items/book_writable,64,10,0 -items/book_written,64,10,0 -items/bow_pulling_0,80,15,0 -items/bow_pulling_1,80,15,0 -items/bow_pulling_2,80,15,0 -items/bow_standby,80,15,0 -items/bowl,90,10,0 -items/bread,75,5,0 -items/brewing_stand,64,10,0 -items/brick,40,8,0 -items/bucket_empty,110,230,0 -items/bucket_lava,110,230,0 -items/bucket_milk,110,230,0 -items/bucket_water,110,230,32 -items/cake,70,10,0 -items/carrot,64,5,0 -items/carrot_golden,90,231,0 -items/carrot_on_a_stick,80,10,0 -items/cauldron,75,230,0 -items/chainmail_boots,100,230,0 -items/chainmail_chestplate,100,230,0 -items/chainmail_helmet,100,230,0 -items/chainmail_leggings,100,230,0 -items/charcoal,130,20,0 -items/chicken_cooked,64,20,0 -items/chicken_raw,50,20,0 -items/clay_ball,120,13,0 -items/clock,90,230,0 -items/coal,130,20,0 -items/comparator,115,5,0 -items/compass,80,230,0 -items/cookie,64,5,0 -items/diamond,200,120,0 -items/diamond_axe,80,10,0 -items/diamond_boots,200,120,0 -items/diamond_chestplate,200,120,0 -items/diamond_helmet,200,120,0 -items/diamond_hoe,80,10,0 -items/diamond_horse_armor,200,120,0 -items/diamond_leggings,200,120,0 -items/diamond_pickaxe,80,10,0 -items/diamond_shovel,80,10,0 -items/diamond_sword,80,10,0 -items/door_acacia,66,25,0 -items/door_birch,66,25,0 -items/door_dark_oak,66,25,0 -items/door_iron,200,230,0 -items/door_jungle,66,25,0 -items/door_spruce,66,25,0 -items/door_wood,66,25,0 -items/dye_powder_black,64,5,0 -items/dye_powder_blue,64,5,0 -items/dye_powder_brown,64,5,0 -items/dye_powder_cyan,64,5,0 -items/dye_powder_gray,64,5,0 -items/dye_powder_green,64,5,0 -items/dye_powder_light_blue,64,5,0 -items/dye_powder_lime,64,5,0 -items/dye_powder_magenta,64,5,0 -items/dye_powder_orange,64,5,0 -items/dye_powder_pink,64,5,0 -items/dye_powder_purple,64,5,0 -items/dye_powder_red,64,5,0 -items/dye_powder_silver,64,5,0 -items/dye_powder_white,64,5,0 -items/dye_powder_yellow,64,5,0 -items/egg,75,15,0 -items/emerald,228,130,0 -items/ender_eye,80,10,40 -items/ender_pearl,80,10,0 -items/experience_bottle,210,100,0 -items/feather,64,10,0 -items/fireball,64,5,40 -items/fireworks,80,20,0 -items/fireworks_charge,70,15,0 -items/fireworks_charge_overlay,70,15,0 -items/fish_clownfish_raw,90,25,0 -items/fish_cod_cooked,70,10,0 -items/fish_cod_raw,90,25,0 -items/fish_pufferfish_raw,90,25,0 -items/fish_salmon_cooked,70,10,0 -items/fish_salmon_raw,90,25,0 -items/fishing_rod_cast,80,10,0 -items/fishing_rod_uncast,80,10,0 -items/flint,110,30,0 -items/flint_and_steel,90,230,0 -items/flower_pot,80,5,0 -items/ghast_tear,120,50,0 -items/glowstone_dust,120,20,70 -items/gold_axe,80,10,0 -items/gold_boots,200,231,0 -items/gold_chestplate,200,231,0 -items/gold_helmet,200,231,0 -items/gold_hoe,80,10,0 -items/gold_horse_armor,200,231,0 -items/gold_ingot,200,231,0 -items/gold_leggings,200,231,0 -items/gold_nugget,200,231,0 -items/gold_pickaxe,80,10,0 -items/gold_shovel,80,10,0 -items/gold_sword,80,10,0 -items/gunpowder,64,15,0 -items/hopper,90,230,0 -items/iron_axe,80,10,0 -items/iron_boots,200,230,0 -items/iron_chestplate,200,230,0 -items/iron_helmet,200,230,0 -items/iron_hoe,80,10,0 -items/iron_horse_armor,200,230,0 -items/iron_ingot,200,230,0 -items/iron_leggings,200,230,0 -items/iron_pickaxe,80,10,0 -items/iron_shovel,80,10,0 -items/iron_sword,80,10,0 -items/item_frame,70,20,0 -items/lead,64,5,0 -items/leather,70,15,0 -items/leather_boots,70,15,0 -items/leather_boots_overlay,70,15,0 -items/leather_chestplate,70,15,0 -items/leather_chestplate_overlay,70,15,0 -items/leather_helmet,70,15,0 -items/leather_helmet_overlay,70,15,0 -items/leather_leggings,70,15,0 -items/leather_leggings_overlay,70,15,0 -items/magma_cream,90,20,32 -items/map_empty,64,10,0 -items/map_filled,64,10,0 -items/melon,90,15,0 -items/melon_speckled,90,25,20 -items/minecart_chest,110,230,0 -items/minecart_command_block,110,230,0 -items/minecart_furnace,110,230,0 -items/minecart_hopper,110,230,0 -items/minecart_normal,110,230,0 -items/minecart_tnt,110,230,0 -items/mushroom_stew,90,10,0 -items/mutton_cooked,70,10,0 -items/mutton_raw,50,20,0 -items/name_tag,64,5,0 -items/nether_star,90,20,50 -items/nether_wart,45,20,0 -items/netherbrick,37,15,0 -items/painting,70,20,0 -items/paper,64,10,0 -items/porkchop_cooked,70,10,0 -items/porkchop_raw,50,20,0 -items/potato,60,10,0 -items/potato_baked,60,10,0 -items/potato_poisonous,60,5,0 -items/potion_bottle_drinkable,210,100,0 -items/potion_bottle_empty,210,100,0 -items/potion_bottle_splash,210,100,0 -items/potion_overlay,210,100,0 -items/prismarine_crystals,230,90,0 -items/prismarine_shard,230,20,0 -items/pumpkin_pie,90,25,0 -items/quartz,220,60,0 -items/rabbit_cooked,70,10,0 -items/rabbit_foot,64,5,0 -items/rabbit_hide,70,15,0 -items/rabbit_raw,50,20,0 -items/rabbit_stew,90,10,0 -items/record_11,135,40,0 -items/record_13,135,40,0 -items/record_blocks,135,40,0 -items/record_cat,135,40,0 -items/record_chirp,135,40,0 -items/record_far,135,40,0 -items/record_mall,135,40,0 -items/record_mellohi,135,40,0 -items/record_stal,135,40,0 -items/record_strad,135,40,0 -items/record_wait,135,40,0 -items/record_ward,135,40,0 -items/redstone_dust,70,10,0 -items/reeds,70,7,0 -items/repeater,115,5,0 -items/rotten_flesh,70,15,0 -items/saddle,70,15,0 -items/seeds_melon,64,5,0 -items/seeds_pumpkin,64,5,0 -items/seeds_wheat,64,5,0 -items/shears,90,230,0 -items/sign,90,15,0 -items/slimeball,150,50,0 -items/snowball,130,20,0 -items/spawn_egg,75,15,0 -items/spawn_egg_overlay,75,15,0 -items/spider_eye,100,30,0 -items/spider_eye_fermented,100,40,0 -items/stick,80,10,0 -items/stone_axe,80,10,0 -items/stone_hoe,80,10,0 -items/stone_pickaxe,80,10,0 -items/stone_shovel,80,10,0 -items/stone_sword,80,10,0 -items/string,80,25,0 -items/sugar,100,30,0 -items/wheat,110,15,0 -items/wood_axe,80,10,0 -items/wood_hoe,80,10,0 -items/wood_pickaxe,80,10,0 -items/wood_shovel,80,10,0 -items/wood_sword,80,10,0 -items/wooden_armorstand,80,10,0 +textureId,smoothness,reflectance,emission +blocks/anvil_base,158,230,0 +blocks/anvil_top_damaged_0,150,230,0 +blocks/anvil_top_damaged_1,143,230,0 +blocks/anvil_top_damaged_2,158,230,0 +blocks/beacon,158,16,200 +blocks/bed_feet_end,31,10,0 +blocks/bed_feet_side,28,9,0 +blocks/bed_feet_top,61,13,0 +blocks/bed_head_end,31,10,0 +blocks/bed_head_side,31,9,0 +blocks/bed_head_top,80,13,0 +blocks/bedrock,46,5,0 +blocks/bookshelf,64,13,0 +blocks/brewing_stand,130,47,0 +blocks/brewing_stand_base,149,10,0 +blocks/brick,37,8,0 +blocks/cactus_bottom,60,7,0 +blocks/cactus_side,71,7,0 +blocks/cactus_top,71,7,0 +blocks/cake_bottom,64,4,0 +blocks/cake_inner,29,3,0 +blocks/cake_side,43,3,0 +blocks/cake_top,127,10,0 +blocks/carrots_stage_0,71,7,0 +blocks/carrots_stage_1,71,7,0 +blocks/carrots_stage_2,71,7,0 +blocks/carrots_stage_3,71,7,0 +blocks/cauldron_bottom,38,230,0 +blocks/cauldron_inner,122,230,0 +blocks/cauldron_side,110,230,0 +blocks/cauldron_top,76,230,0 +blocks/clay,133,13,0 +blocks/coal_block,155,20,0 +blocks/coal_ore,84,10,0 +blocks/coarse_dirt,50,4,0 +blocks/cobblestone,83,10,0 +blocks/cobblestone_mossy,117,8,0 +blocks/cocoa_stage_0,133,8,0 +blocks/cocoa_stage_1,146,8,0 +blocks/cocoa_stage_2,156,8,0 +blocks/command_block,136,99,8 +blocks/comparator_off,115,5,0 +blocks/comparator_on,115,5,14 +blocks/crafting_table_front,113,29,0 +blocks/crafting_table_side,104,20,0 +blocks/crafting_table_top,97,14,0 +blocks/daylight_detector_inverted_top,95,6,0 +blocks/daylight_detector_side,70,5,0 +blocks/daylight_detector_top,95,6,0 +blocks/deadbush,18,10,0 +blocks/diamond_block,235,150,0 +blocks/diamond_ore,90,25,0 +blocks/dirt,50,4,0 +blocks/dirt_podzol_side,27,1,0 +blocks/dirt_podzol_top,47,15,0 +blocks/dispenser_front_horizontal,138,9,0 +blocks/dispenser_front_vertical,114,9,0 +blocks/door_acacia_lower,92,2,0 +blocks/door_acacia_upper,91,5,0 +blocks/door_birch_lower,79,14,0 +blocks/door_birch_upper,110,14,0 +blocks/door_dark_oak_lower,88,3,0 +blocks/door_dark_oak_upper,87,4,0 +blocks/door_iron_lower,214,230,0 +blocks/door_iron_upper,214,230,0 +blocks/door_jungle_lower,56,2,0 +blocks/door_jungle_upper,58,5,0 +blocks/door_spruce_lower,57,16,0 +blocks/door_spruce_upper,58,17,0 +blocks/door_wood_lower,70,2,0 +blocks/door_wood_upper,74,6,0 +blocks/double_plant_fern_bottom,71,7,0 +blocks/double_plant_fern_top,71,7,0 +blocks/double_plant_grass_bottom,71,7,0 +blocks/double_plant_grass_top,71,7,0 +blocks/double_plant_paeonia_bottom,71,7,0 +blocks/double_plant_paeonia_top,71,7,0 +blocks/double_plant_rose_bottom,71,7,0 +blocks/double_plant_rose_top,71,7,0 +blocks/double_plant_sunflower_back,71,7,0 +blocks/double_plant_sunflower_bottom,71,7,0 +blocks/double_plant_sunflower_front,71,7,0 +blocks/double_plant_sunflower_top,71,7,0 +blocks/double_plant_syringa_bottom,71,7,0 +blocks/double_plant_syringa_top,71,7,0 +blocks/dragon_egg,45,15,16 +blocks/dropper_front_horizontal,138,9,0 +blocks/dropper_front_vertical,112,9,0 +blocks/emerald_block,228,130,0 +blocks/emerald_ore,93,26,0 +blocks/enchanting_table_bottom,210,120,0 +blocks/enchanting_table_side,199,8,0 +blocks/enchanting_table_top,118,16,0 +blocks/end_stone,107,15,0 +blocks/endframe_eye,144,37,46 +blocks/endframe_side,141,19,0 +blocks/endframe_top,144,13,0 +blocks/farmland_dry,60,5,0 +blocks/farmland_wet,41,40,0 +blocks/fern,71,7,0 +blocks/fire_layer_0,30,5,162 +blocks/fire_layer_1,30,5,159 +blocks/flower_allium,71,7,0 +blocks/flower_blue_orchid,71,7,0 +blocks/flower_dandelion,71,7,0 +blocks/flower_houstonia,71,7,0 +blocks/flower_oxeye_daisy,71,7,0 +blocks/flower_pot,59,5,0 +blocks/flower_rose,71,7,0 +blocks/flower_tulip_orange,71,7,0 +blocks/flower_tulip_pink,71,7,0 +blocks/flower_tulip_red,71,7,0 +blocks/flower_tulip_white,71,7,0 +blocks/furnace_front_off,102,6,0 +blocks/furnace_front_on,102,7,25 +blocks/furnace_side,140,10,0 +blocks/furnace_top,114,10,0 +blocks/glass,210,100,0 +blocks/glass_black,230,100,0 +blocks/glass_blue,230,100,0 +blocks/glass_brown,230,100,0 +blocks/glass_cyan,230,100,0 +blocks/glass_gray,230,100,0 +blocks/glass_green,230,100,0 +blocks/glass_light_blue,230,100,0 +blocks/glass_lime,230,100,0 +blocks/glass_magenta,230,100,0 +blocks/glass_orange,230,100,0 +blocks/glass_pane_top,230,100,0 +blocks/glass_pane_top_black,230,100,0 +blocks/glass_pane_top_blue,230,100,0 +blocks/glass_pane_top_brown,230,100,0 +blocks/glass_pane_top_cyan,230,100,0 +blocks/glass_pane_top_gray,230,100,0 +blocks/glass_pane_top_green,230,100,0 +blocks/glass_pane_top_light_blue,230,100,0 +blocks/glass_pane_top_lime,230,100,0 +blocks/glass_pane_top_magenta,230,100,0 +blocks/glass_pane_top_orange,230,100,0 +blocks/glass_pane_top_pink,230,100,0 +blocks/glass_pane_top_purple,230,100,0 +blocks/glass_pane_top_red,230,100,0 +blocks/glass_pane_top_silver,230,100,0 +blocks/glass_pane_top_white,230,100,0 +blocks/glass_pane_top_yellow,230,100,0 +blocks/glass_pink,230,100,0 +blocks/glass_purple,230,100,0 +blocks/glass_red,230,100,0 +blocks/glass_silver,230,100,0 +blocks/glass_white,230,100,0 +blocks/glass_yellow,230,100,0 +blocks/glowstone,194,60,150 +blocks/gold_block,218,231,0 +blocks/gold_ore,96,37,0 +blocks/grass_side,50,4,0 +blocks/grass_side_overlay,12,5,0 +blocks/grass_side_snowed,146,15,0 +blocks/grass_top,12,5,0 +blocks/gravel,68,5,0 +blocks/hardened_clay,59,5,0 +blocks/hardened_clay_stained_black,59,5,0 +blocks/hardened_clay_stained_blue,59,5,0 +blocks/hardened_clay_stained_brown,59,5,0 +blocks/hardened_clay_stained_cyan,59,5,0 +blocks/hardened_clay_stained_gray,59,5,0 +blocks/hardened_clay_stained_green,59,5,0 +blocks/hardened_clay_stained_light_blue,59,5,0 +blocks/hardened_clay_stained_lime,59,5,0 +blocks/hardened_clay_stained_magenta,59,5,0 +blocks/hardened_clay_stained_orange,59,5,0 +blocks/hardened_clay_stained_pink,59,5,0 +blocks/hardened_clay_stained_purple,59,5,0 +blocks/hardened_clay_stained_red,59,5,0 +blocks/hardened_clay_stained_silver,59,5,0 +blocks/hardened_clay_stained_white,59,5,0 +blocks/hardened_clay_stained_yellow,59,5,0 +blocks/hay_block_side,112,12,0 +blocks/hay_block_top,114,13,0 +blocks/hopper_inside,71,230,0 +blocks/hopper_outside,173,230,0 +blocks/hopper_top,105,230,0 +blocks/ice,180,70,0 +blocks/ice_packed,168,40,0 +blocks/iron_bars,64,230,0 +blocks/iron_block,232,230,0 +blocks/iron_ore,95,15,0 +blocks/iron_trapdoor,214,230,0 +blocks/itemframe_background,0,0,0 +blocks/jukebox_side,89,13,0 +blocks/jukebox_top,83,13,0 +blocks/ladder,30,6,0 +blocks/lapis_block,222,20,0 +blocks/lapis_ore,96,10,0 +blocks/lava_flow,30,15,200 +blocks/lava_still,30,15,200 +blocks/leaves_acacia,60,10,0 +blocks/leaves_big_oak,105,4,0 +blocks/leaves_birch,73,5,0 +blocks/leaves_jungle,71,7,0 +blocks/leaves_oak,77,6,0 +blocks/leaves_spruce,59,6,0 +blocks/lever,97,10,0 +blocks/log_acacia,15,10,0 +blocks/log_acacia_top,9,10,0 +blocks/log_big_oak,26,10,0 +blocks/log_big_oak_top,20,10,0 +blocks/log_birch,24,5,0 +blocks/log_birch_top,20,10,0 +blocks/log_jungle,14,10,0 +blocks/log_jungle_top,20,10,0 +blocks/log_oak,18,10,0 +blocks/log_oak_top,20,10,0 +blocks/log_spruce,23,10,0 +blocks/log_spruce_top,21,10,0 +blocks/melon_side,156,14,0 +blocks/melon_stem_connected,18,10,0 +blocks/melon_stem_disconnected,18,10,0 +blocks/melon_top,153,14,0 +blocks/mob_spawner,71,230,0 +blocks/mushroom_block_inside,151,10,0 +blocks/mushroom_block_skin_brown,96,10,0 +blocks/mushroom_block_skin_red,148,10,0 +blocks/mushroom_block_skin_stem,142,10,0 +blocks/mushroom_brown,96,10,0 +blocks/mushroom_red,148,10,0 +blocks/mycelium_side,63,15,0 +blocks/mycelium_top,70,15,0 +blocks/nether_brick,37,15,0 +blocks/nether_wart_stage_0,11,5,0 +blocks/nether_wart_stage_1,30,5,0 +blocks/nether_wart_stage_2,39,5,0 +blocks/netherrack,20,10,0 +blocks/noteblock,89,13,0 +blocks/obsidian,210,120,0 +blocks/piston_bottom,80,4,0 +blocks/piston_inner,87,4,0 +blocks/piston_side,104,22,0 +blocks/piston_top_normal,109,25,0 +blocks/piston_top_sticky,116,28,0 +blocks/planks_acacia,92,11,0 +blocks/planks_big_oak,92,11,0 +blocks/planks_birch,92,11,0 +blocks/planks_jungle,92,11,0 +blocks/planks_oak,92,11,0 +blocks/planks_spruce,92,11,0 +blocks/portal,71,7,120 +blocks/potatoes_stage_0,71,7,0 +blocks/potatoes_stage_1,71,7,0 +blocks/potatoes_stage_2,71,7,0 +blocks/potatoes_stage_3,71,7,0 +blocks/prismarine_bricks,230,20,0 +blocks/prismarine_dark,194,26,0 +blocks/prismarine_rough,115,33,0 +blocks/pumpkin_face_off,56,15,0 +blocks/pumpkin_face_on,56,15,74 +blocks/pumpkin_side,52,15,0 +blocks/pumpkin_stem_connected,18,10,0 +blocks/pumpkin_stem_disconnected,18,10,0 +blocks/pumpkin_top,130,15,0 +blocks/quartz_block_bottom,220,60,0 +blocks/quartz_block_chiseled,220,60,0 +blocks/quartz_block_chiseled_top,220,60,0 +blocks/quartz_block_lines,220,60,0 +blocks/quartz_block_lines_top,220,60,0 +blocks/quartz_block_side,220,60,0 +blocks/quartz_block_top,220,60,0 +blocks/quartz_ore,45,10,0 +blocks/rail_activator,84,50,0 +blocks/rail_activator_powered,84,50,32 +blocks/rail_detector,102,62,0 +blocks/rail_detector_powered,102,62,32 +blocks/rail_golden,112,75,0 +blocks/rail_golden_powered,112,75,48 +blocks/rail_normal,85,50,0 +blocks/rail_normal_turned,85,50,0 +blocks/red_sand,32,2,0 +blocks/red_sandstone_bottom,52,10,0 +blocks/red_sandstone_carved,90,10,0 +blocks/red_sandstone_normal,43,10,0 +blocks/red_sandstone_smooth,90,10,0 +blocks/red_sandstone_top,128,15,0 +blocks/redstone_block,184,15,0 +blocks/redstone_dust_cross,100,5,0 +blocks/redstone_dust_cross_overlay,100,5,0 +blocks/redstone_dust_line,100,5,0 +blocks/redstone_dust_line_overlay,100,5,0 +blocks/redstone_lamp_off,191,20,0 +blocks/redstone_lamp_on,191,20,132 +blocks/redstone_ore,88,10,0 +blocks/redstone_torch_off,135,9,0 +blocks/redstone_torch_on,135,9,64 +blocks/reeds,71,7,0 +blocks/repeater_off,151,5,0 +blocks/repeater_on,151,5,32 +blocks/sand,46,8,0 +blocks/sandstone_bottom,52,8,0 +blocks/sandstone_carved,113,10,0 +blocks/sandstone_normal,43,10,0 +blocks/sandstone_smooth,90,10,0 +blocks/sandstone_top,128,15,0 +blocks/sapling_acacia,71,7,0 +blocks/sapling_birch,71,7,0 +blocks/sapling_jungle,71,7,0 +blocks/sapling_oak,71,7,0 +blocks/sapling_roofed_oak,71,7,0 +blocks/sapling_spruce,71,7,0 +blocks/sea_lantern,194,60,80 +blocks/slime,209,0,0 +blocks/snow,146,15,0 +blocks/soul_sand,35,15,0 +blocks/sponge,38,11,0 +blocks/sponge_wet,240,16,0 +blocks/stone,77,10,0 +blocks/stone_andesite,50,9,0 +blocks/stone_andesite_smooth,230,20,0 +blocks/stone_diorite,54,9,0 +blocks/stone_diorite_smooth,230,20,0 +blocks/stone_granite,38,9,0 +blocks/stone_granite_smooth,230,20,0 +blocks/stone_slab_side,120,20,0 +blocks/stone_slab_top,120,20,0 +blocks/stonebrick,70,10,0 +blocks/stonebrick_carved,58,10,0 +blocks/stonebrick_cracked,37,10,0 +blocks/stonebrick_mossy,53,9,0 +blocks/tallgrass,71,7,0 +blocks/tnt_bottom,78,5,0 +blocks/tnt_side,94,15,0 +blocks/tnt_top,61,5,0 +blocks/torch_on,135,9,128 +blocks/trapdoor,43,5,0 +blocks/trip_wire,230,20,0 +blocks/trip_wire_source,132,142,0 +blocks/vine,116,13,0 +blocks/water_flow,220,40,0 +blocks/water_still,220,40,0 +blocks/waterlily,78,15,0 +blocks/web,230,20,0 +blocks/wheat_stage_0,71,7,0 +blocks/wheat_stage_1,71,7,0 +blocks/wheat_stage_2,71,7,0 +blocks/wheat_stage_3,71,7,0 +blocks/wheat_stage_4,71,7,0 +blocks/wheat_stage_5,71,7,0 +blocks/wheat_stage_6,71,7,0 +blocks/wheat_stage_7,71,7,0 +blocks/wool_colored_black,50,10,0 +blocks/wool_colored_blue,50,10,0 +blocks/wool_colored_brown,50,10,0 +blocks/wool_colored_cyan,50,10,0 +blocks/wool_colored_gray,50,10,0 +blocks/wool_colored_green,50,10,0 +blocks/wool_colored_light_blue,50,10,0 +blocks/wool_colored_lime,50,10,0 +blocks/wool_colored_magenta,50,10,0 +blocks/wool_colored_orange,50,10,0 +blocks/wool_colored_pink,50,10,0 +blocks/wool_colored_purple,50,10,0 +blocks/wool_colored_red,50,10,0 +blocks/wool_colored_silver,50,10,0 +blocks/wool_colored_white,50,10,0 +blocks/wool_colored_yellow,50,10,0 +default,64,2,0 +items/apple,90,25,0 +items/apple_golden,150,231,0 +items/arrow,64,2,0 +items/barrier,64,2,0 +items/bed,80,15,0 +items/beef_cooked,70,10,0 +items/beef_raw,50,20,0 +items/blaze_powder,64,15,30 +items/blaze_rod,75,20,30 +items/boat,90,11,0 +items/bone,110,40,0 +items/book_enchanted,64,10,0 +items/book_normal,64,10,0 +items/book_writable,64,10,0 +items/book_written,64,10,0 +items/bow_pulling_0,80,15,0 +items/bow_pulling_1,80,15,0 +items/bow_pulling_2,80,15,0 +items/bow_standby,80,15,0 +items/bowl,90,10,0 +items/bread,75,5,0 +items/brewing_stand,64,10,0 +items/brick,40,8,0 +items/bucket_empty,110,230,0 +items/bucket_lava,110,230,0 +items/bucket_milk,110,230,0 +items/bucket_water,110,230,32 +items/cake,70,10,0 +items/carrot,64,5,0 +items/carrot_golden,90,231,0 +items/carrot_on_a_stick,80,10,0 +items/cauldron,75,230,0 +items/chainmail_boots,100,230,0 +items/chainmail_chestplate,100,230,0 +items/chainmail_helmet,100,230,0 +items/chainmail_leggings,100,230,0 +items/charcoal,130,20,0 +items/chicken_cooked,64,20,0 +items/chicken_raw,50,20,0 +items/clay_ball,120,13,0 +items/clock,90,230,0 +items/coal,130,20,0 +items/comparator,115,5,0 +items/compass,80,230,0 +items/cookie,64,5,0 +items/diamond,200,120,0 +items/diamond_axe,80,10,0 +items/diamond_boots,200,120,0 +items/diamond_chestplate,200,120,0 +items/diamond_helmet,200,120,0 +items/diamond_hoe,80,10,0 +items/diamond_horse_armor,200,120,0 +items/diamond_leggings,200,120,0 +items/diamond_pickaxe,80,10,0 +items/diamond_shovel,80,10,0 +items/diamond_sword,80,10,0 +items/door_acacia,66,25,0 +items/door_birch,66,25,0 +items/door_dark_oak,66,25,0 +items/door_iron,200,230,0 +items/door_jungle,66,25,0 +items/door_spruce,66,25,0 +items/door_wood,66,25,0 +items/dye_powder_black,64,5,0 +items/dye_powder_blue,64,5,0 +items/dye_powder_brown,64,5,0 +items/dye_powder_cyan,64,5,0 +items/dye_powder_gray,64,5,0 +items/dye_powder_green,64,5,0 +items/dye_powder_light_blue,64,5,0 +items/dye_powder_lime,64,5,0 +items/dye_powder_magenta,64,5,0 +items/dye_powder_orange,64,5,0 +items/dye_powder_pink,64,5,0 +items/dye_powder_purple,64,5,0 +items/dye_powder_red,64,5,0 +items/dye_powder_silver,64,5,0 +items/dye_powder_white,64,5,0 +items/dye_powder_yellow,64,5,0 +items/egg,75,15,0 +items/emerald,228,130,0 +items/ender_eye,80,10,40 +items/ender_pearl,80,10,0 +items/experience_bottle,210,100,0 +items/feather,64,10,0 +items/fireball,64,5,40 +items/fireworks,80,20,0 +items/fireworks_charge,70,15,0 +items/fireworks_charge_overlay,70,15,0 +items/fish_clownfish_raw,90,25,0 +items/fish_cod_cooked,70,10,0 +items/fish_cod_raw,90,25,0 +items/fish_pufferfish_raw,90,25,0 +items/fish_salmon_cooked,70,10,0 +items/fish_salmon_raw,90,25,0 +items/fishing_rod_cast,80,10,0 +items/fishing_rod_uncast,80,10,0 +items/flint,110,30,0 +items/flint_and_steel,90,230,0 +items/flower_pot,80,5,0 +items/ghast_tear,120,50,0 +items/glowstone_dust,120,20,70 +items/gold_axe,80,10,0 +items/gold_boots,200,231,0 +items/gold_chestplate,200,231,0 +items/gold_helmet,200,231,0 +items/gold_hoe,80,10,0 +items/gold_horse_armor,200,231,0 +items/gold_ingot,200,231,0 +items/gold_leggings,200,231,0 +items/gold_nugget,200,231,0 +items/gold_pickaxe,80,10,0 +items/gold_shovel,80,10,0 +items/gold_sword,80,10,0 +items/gunpowder,64,15,0 +items/hopper,90,230,0 +items/iron_axe,80,10,0 +items/iron_boots,200,230,0 +items/iron_chestplate,200,230,0 +items/iron_helmet,200,230,0 +items/iron_hoe,80,10,0 +items/iron_horse_armor,200,230,0 +items/iron_ingot,200,230,0 +items/iron_leggings,200,230,0 +items/iron_pickaxe,80,10,0 +items/iron_shovel,80,10,0 +items/iron_sword,80,10,0 +items/item_frame,70,20,0 +items/lead,64,5,0 +items/leather,70,15,0 +items/leather_boots,70,15,0 +items/leather_boots_overlay,70,15,0 +items/leather_chestplate,70,15,0 +items/leather_chestplate_overlay,70,15,0 +items/leather_helmet,70,15,0 +items/leather_helmet_overlay,70,15,0 +items/leather_leggings,70,15,0 +items/leather_leggings_overlay,70,15,0 +items/magma_cream,90,20,32 +items/map_empty,64,10,0 +items/map_filled,64,10,0 +items/melon,90,15,0 +items/melon_speckled,90,25,20 +items/minecart_chest,110,230,0 +items/minecart_command_block,110,230,0 +items/minecart_furnace,110,230,0 +items/minecart_hopper,110,230,0 +items/minecart_normal,110,230,0 +items/minecart_tnt,110,230,0 +items/mushroom_stew,90,10,0 +items/mutton_cooked,70,10,0 +items/mutton_raw,50,20,0 +items/name_tag,64,5,0 +items/nether_star,90,20,50 +items/nether_wart,45,20,0 +items/netherbrick,37,15,0 +items/painting,70,20,0 +items/paper,64,10,0 +items/porkchop_cooked,70,10,0 +items/porkchop_raw,50,20,0 +items/potato,60,10,0 +items/potato_baked,60,10,0 +items/potato_poisonous,60,5,0 +items/potion_bottle_drinkable,210,100,0 +items/potion_bottle_empty,210,100,0 +items/potion_bottle_splash,210,100,0 +items/potion_overlay,210,100,0 +items/prismarine_crystals,230,90,0 +items/prismarine_shard,230,20,0 +items/pumpkin_pie,90,25,0 +items/quartz,220,60,0 +items/rabbit_cooked,70,10,0 +items/rabbit_foot,64,5,0 +items/rabbit_hide,70,15,0 +items/rabbit_raw,50,20,0 +items/rabbit_stew,90,10,0 +items/record_11,135,40,0 +items/record_13,135,40,0 +items/record_blocks,135,40,0 +items/record_cat,135,40,0 +items/record_chirp,135,40,0 +items/record_far,135,40,0 +items/record_mall,135,40,0 +items/record_mellohi,135,40,0 +items/record_stal,135,40,0 +items/record_strad,135,40,0 +items/record_wait,135,40,0 +items/record_ward,135,40,0 +items/redstone_dust,70,10,0 +items/reeds,70,7,0 +items/repeater,115,5,0 +items/rotten_flesh,70,15,0 +items/saddle,70,15,0 +items/seeds_melon,64,5,0 +items/seeds_pumpkin,64,5,0 +items/seeds_wheat,64,5,0 +items/shears,90,230,0 +items/sign,90,15,0 +items/slimeball,150,50,0 +items/snowball,130,20,0 +items/spawn_egg,75,15,0 +items/spawn_egg_overlay,75,15,0 +items/spider_eye,100,30,0 +items/spider_eye_fermented,100,40,0 +items/stick,80,10,0 +items/stone_axe,80,10,0 +items/stone_hoe,80,10,0 +items/stone_pickaxe,80,10,0 +items/stone_shovel,80,10,0 +items/stone_sword,80,10,0 +items/string,80,25,0 +items/sugar,100,30,0 +items/wheat,110,15,0 +items/wood_axe,80,10,0 +items/wood_hoe,80,10,0 +items/wood_pickaxe,80,10,0 +items/wood_shovel,80,10,0 +items/wood_sword,80,10,0 +items/wooden_armorstand,80,10,0 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv index 141cd71e..5739d3b8 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv @@ -1,9 +1,9 @@ -Metal,ID,Nr,Ng,Nb,Kr,Kg,Kb -Iron,230,2.9114,2.9497,2.5845,3.0893,2.9318,2.7670 -Gold,231,0.18299,0.42108,1.3734,3.4242,2.3459,1.7704 -Aluminum,232,1.3456,0.96521,0.61722,7.4746,6.3995,5.3031 -Chrome,233,3.1071,3.1812,2.3230,3.3314,3.3291,3.1350 -Copper,234,0.27105,0.67693,1.3164,3.6092,2.6248,2.2921 -Lead,235,1.9100,1.8300,1.4400,3.5100,3.4000,3.1800 -Platinum,236,2.3757,2.0847,1.8453,4.2655,3.7153,3.1365 -Silver,237,0.15943,0.14512,0.13547,3.9291,3.1900,2.3808 \ No newline at end of file +Metal,ID,Nr,Ng,Nb,Kr,Kg,Kb +Iron,230,2.9114,2.9497,2.5845,3.0893,2.9318,2.7670 +Gold,231,0.18299,0.42108,1.3734,3.4242,2.3459,1.7704 +Aluminum,232,1.3456,0.96521,0.61722,7.4746,6.3995,5.3031 +Chrome,233,3.1071,3.1812,2.3230,3.3314,3.3291,3.1350 +Copper,234,0.27105,0.67693,1.3164,3.6092,2.6248,2.2921 +Lead,235,1.9100,1.8300,1.4400,3.5100,3.4000,3.1800 +Platinum,236,2.3757,2.0847,1.8453,4.2655,3.7153,3.1365 +Silver,237,0.15943,0.14512,0.13547,3.9291,3.1900,2.3808 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh index 501da6c3..190b5cc2 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh @@ -1,52 +1,52 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; -in vec3 v_position3f; - -layout(location = 0) out vec4 output4f; - -uniform vec3 u_moonColor3f; -uniform vec3 u_lightDir3f; - -uniform sampler2D u_moonTextures; -uniform sampler2D u_cloudsTexture; - -void main() { - gl_FragDepth = 0.0; - vec4 color4f = texture(u_moonTextures, v_position2f); - if(color4f.a < 0.99) { - discard; - } - vec3 moonNormal3f; - moonNormal3f.xy = color4f.rg * 2.0 - 1.0; - moonNormal3f.z = sqrt(1.0 - dot(moonNormal3f.xy, moonNormal3f.xy)); - float NdotV = dot(moonNormal3f, u_lightDir3f); - output4f = vec4(u_moonColor3f * (color4f.b * color4f.b * mix(max(NdotV, 0.0), max(NdotV + 0.45, 0.0) * 0.5f, max(u_lightDir3f.z * u_lightDir3f.z * -u_lightDir3f.z, 0.0))), 0.0); - vec3 viewDir = normalize(v_position3f); - if(viewDir.y < 0.01) { - return; - } - vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5; - vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0); - output4f.rgb = mix(output4f.rgb, output4f.rgb * max(cloudSample.a * 1.25 - 0.25, 0.0), smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0))); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; +in vec3 v_position3f; + +layout(location = 0) out vec4 output4f; + +uniform vec3 u_moonColor3f; +uniform vec3 u_lightDir3f; + +uniform sampler2D u_moonTextures; +uniform sampler2D u_cloudsTexture; + +void main() { + gl_FragDepth = 0.0; + vec4 color4f = texture(u_moonTextures, v_position2f); + if(color4f.a < 0.99) { + discard; + } + vec3 moonNormal3f; + moonNormal3f.xy = color4f.rg * 2.0 - 1.0; + moonNormal3f.z = sqrt(1.0 - dot(moonNormal3f.xy, moonNormal3f.xy)); + float NdotV = dot(moonNormal3f, u_lightDir3f); + output4f = vec4(u_moonColor3f * (color4f.b * color4f.b * mix(max(NdotV, 0.0), max(NdotV + 0.45, 0.0) * 0.5f, max(u_lightDir3f.z * u_lightDir3f.z * -u_lightDir3f.z, 0.0))), 0.0); + vec3 viewDir = normalize(v_position3f); + if(viewDir.y < 0.01) { + return; + } + vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5; + vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0); + output4f.rgb = mix(output4f.rgb, output4f.rgb * max(cloudSample.a * 1.25 - 0.25, 0.0), smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0))); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh index 3adeb498..84b61f9f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh @@ -1,37 +1,37 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec2 a_position2f; - -out vec2 v_position2f; -out vec3 v_position3f; - -uniform mat4 u_modelMatrix4f; -uniform mat4 u_viewMatrix4f; -uniform mat4 u_projMatrix4f; - -void main() { - v_position2f = a_position2f * 0.5 + 0.5; - v_position3f = (u_modelMatrix4f * vec4(a_position2f, -13.0, 1.0)).xyz; - gl_Position = u_viewMatrix4f * vec4(v_position3f, 0.0); - gl_Position = u_projMatrix4f * vec4(gl_Position.xyz, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec2 a_position2f; + +out vec2 v_position2f; +out vec3 v_position3f; + +uniform mat4 u_modelMatrix4f; +uniform mat4 u_viewMatrix4f; +uniform mat4 u_projMatrix4f; + +void main() { + v_position2f = a_position2f * 0.5 + 0.5; + v_position3f = (u_modelMatrix4f * vec4(a_position2f, -13.0, 1.0)).xyz; + gl_Position = u_viewMatrix4f * vec4(v_position3f, 0.0); + gl_Position = u_projMatrix4f * vec4(gl_Position.xyz, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png index 8382136f..9ae55c5a 100644 Binary files a/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png and b/desktopRuntime/resources/assets/eagler/glsl/deferred/particles_s.png differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh index 6fb6f4cc..6ba0ac74 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh @@ -1,50 +1,50 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_inputTexture; - -uniform vec2 u_sampleOffset2f; -uniform vec4 u_outputSize4f; - -void main() { - vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw; - vec4 accum = textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 7.0, 0.0) * 0.0005; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 6.0, 0.0) * 0.0024; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 5.0, 0.0) * 0.0092; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 4.0, 0.0) * 0.0278; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 3.0, 0.0) * 0.0656; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 2.0, 0.0) * 0.1210; - accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f, 0.0) * 0.1747; - accum += textureLod(u_inputTexture, alignedUV, 0.0) * 0.1974; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f, 0.0) * 0.1747; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 2.0, 0.0) * 0.1210; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 3.0, 0.0) * 0.0656; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 4.0, 0.0) * 0.0278; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 5.0, 0.0) * 0.0092; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 6.0, 0.0) * 0.0024; - accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 7.0, 0.0) * 0.0005; - output4f = accum; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; + +uniform vec2 u_sampleOffset2f; +uniform vec4 u_outputSize4f; + +void main() { + vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw; + vec4 accum = textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 7.0, 0.0) * 0.0005; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 6.0, 0.0) * 0.0024; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 5.0, 0.0) * 0.0092; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 4.0, 0.0) * 0.0278; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 3.0, 0.0) * 0.0656; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f * 2.0, 0.0) * 0.1210; + accum += textureLod(u_inputTexture, alignedUV - u_sampleOffset2f, 0.0) * 0.1747; + accum += textureLod(u_inputTexture, alignedUV, 0.0) * 0.1974; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f, 0.0) * 0.1747; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 2.0, 0.0) * 0.1210; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 3.0, 0.0) * 0.0656; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 4.0, 0.0) * 0.0278; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 5.0, 0.0) * 0.0092; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 6.0, 0.0) * 0.0024; + accum += textureLod(u_inputTexture, alignedUV + u_sampleOffset2f * 7.0, 0.0) * 0.0005; + output4f = accum; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh index 685586f0..e232ea82 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh @@ -1,50 +1,50 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_lightingHDRFramebufferTexture; -uniform sampler2D u_framebufferLumaAvgInput; -uniform sampler2D u_gbufferMaterialTexture; -uniform sampler2D u_gbufferDepthTexture; - -uniform vec4 u_outputSize4f; - -void main() { - float exposure = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r; - float emission = 0.0; - vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw; - vec4 inputColor = textureLod(u_lightingHDRFramebufferTexture, alignedUV, 0.0); - if(inputColor.a > 0.0) { - emission = textureLod(u_gbufferMaterialTexture, alignedUV, 0.0).b; - }else { - emission = textureLod(u_gbufferDepthTexture, alignedUV, 0.0).r <= 0.0000001 ? 10.0 : 0.0; - } - float f = dot(inputColor.rgb, vec3(0.2126, 0.7152, 0.0722)) * (5.0 + emission * 15.0); - if(f > 2.0 + exposure) { - output4f = vec4(min(inputColor.rgb, vec3(5.0)) * (0.75 + exposure * 1.5) * min(f - 2.0 - exposure, 1.0), 1.0); - }else { - output4f = vec4(0.0); - } -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_lightingHDRFramebufferTexture; +uniform sampler2D u_framebufferLumaAvgInput; +uniform sampler2D u_gbufferMaterialTexture; +uniform sampler2D u_gbufferDepthTexture; + +uniform vec4 u_outputSize4f; + +void main() { + float exposure = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r; + float emission = 0.0; + vec2 alignedUV = (floor(v_position2f * u_outputSize4f.xy) + 0.5) * u_outputSize4f.zw; + vec4 inputColor = textureLod(u_lightingHDRFramebufferTexture, alignedUV, 0.0); + if(inputColor.a > 0.0) { + emission = textureLod(u_gbufferMaterialTexture, alignedUV, 0.0).b; + }else { + emission = textureLod(u_gbufferDepthTexture, alignedUV, 0.0).r <= 0.0000001 ? 10.0 : 0.0; + } + float f = dot(inputColor.rgb, vec3(0.2126, 0.7152, 0.0722)) * (5.0 + emission * 15.0); + if(f > 2.0 + exposure) { + output4f = vec4(min(inputColor.rgb, vec3(5.0)) * (0.75 + exposure * 1.5) * min(f - 2.0 - exposure, 1.0), 1.0); + }else { + output4f = vec4(0.0); + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh index 33123060..db383320 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh @@ -1,46 +1,46 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out float exposureOut1f; - -uniform sampler2D u_inputTexture; -uniform vec4 u_sampleOffset4f; - -#ifdef CALCULATE_LUMINANCE -#define TAKE_SAMPLE(samplerIn, posIn) dot(textureLod(samplerIn, posIn, 0.0).rgb, vec3(0.299, 0.587, 0.114)) -#else -#define TAKE_SAMPLE(samplerIn, posIn) textureLod(samplerIn, posIn, 0.0).r -#endif - -void main() { - - vec2 pixelPos = floor(v_position2f / u_sampleOffset4f.xy); - - float a = min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.25)) * u_sampleOffset4f.zw), 250.0); - a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.25)) * u_sampleOffset4f.zw), 250.0); - a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.75)) * u_sampleOffset4f.zw), 250.0); - a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.75)) * u_sampleOffset4f.zw), 250.0); - - exposureOut1f = a * 0.25; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out float exposureOut1f; + +uniform sampler2D u_inputTexture; +uniform vec4 u_sampleOffset4f; + +#ifdef CALCULATE_LUMINANCE +#define TAKE_SAMPLE(samplerIn, posIn) dot(textureLod(samplerIn, posIn, 0.0).rgb, vec3(0.299, 0.587, 0.114)) +#else +#define TAKE_SAMPLE(samplerIn, posIn) textureLod(samplerIn, posIn, 0.0).r +#endif + +void main() { + + vec2 pixelPos = floor(v_position2f / u_sampleOffset4f.xy); + + float a = min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.25)) * u_sampleOffset4f.zw), 250.0); + a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.25)) * u_sampleOffset4f.zw), 250.0); + a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.75, 0.75)) * u_sampleOffset4f.zw), 250.0); + a += min(TAKE_SAMPLE(u_inputTexture, (pixelPos + vec2(0.25, 0.75)) * u_sampleOffset4f.zw), 250.0); + + exposureOut1f = a * 0.25; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh index 2694fadc..81f27884 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh @@ -1,42 +1,42 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out float exposureOut1f; - -uniform sampler2D u_inputTexture; -uniform vec2 u_inputSize2f; - -void main() { - - float a = 0.0; - float b = 0.0; - for(vec2 v = vec2(0.0, u_inputSize2f * 0.5); v.y < 1.0; v.y += u_inputSize2f.y) { - for(v.x = u_inputSize2f.x * 0.5; v.x < 1.0; v.x += u_inputSize2f.x) { - a += textureLod(u_inputTexture, v, 0.0).r * (1.0 - length(v - 0.5)); - b += 1.0; - } - } - - exposureOut1f = a / b; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out float exposureOut1f; + +uniform sampler2D u_inputTexture; +uniform vec2 u_inputSize2f; + +void main() { + + float a = 0.0; + float b = 0.0; + for(vec2 v = vec2(0.0, u_inputSize2f * 0.5); v.y < 1.0; v.y += u_inputSize2f.y) { + for(v.x = u_inputSize2f.x * 0.5; v.x < 1.0; v.x += u_inputSize2f.x) { + a += textureLod(u_inputTexture, v, 0.0).r * (1.0 - length(v - 0.5)); + b += 1.0; + } + } + + exposureOut1f = a / b; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh index a480730d..1c47e530 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh @@ -1,275 +1,275 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * This file was modified by lax1dude to remove dead code - * - * Original: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 - * - */ - -/* - * ============================================================================ - * - * - * NVIDIA FXAA 3.11 by TIMOTHY LOTTES - * - * - * ------------------------------------------------------------------------------ - * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. - * ------------------------------------------------------------------------------ - * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED - * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS - * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA - * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR - * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR - * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, - * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE - * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGES. - * - */ - - -precision lowp int; -precision mediump float; -precision mediump sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_screenTexture; -uniform vec2 u_screenSize2f; - -#ifndef FXAA_GREEN_AS_LUMA - // For those using non-linear color, - // and either not able to get luma in alpha, or not wanting to, - // this enables FXAA to run using green as a proxy for luma. - // So with this enabled, no need to pack luma in alpha. - // - // This will turn off AA on anything which lacks some amount of green. - // Pure red and blue or combination of only R and B, will get no AA. - // - // Might want to lower the settings for both, - // fxaaConsoleEdgeThresholdMin - // fxaaQualityEdgeThresholdMin - // In order to insure AA does not get turned off on colors - // which contain a minor amount of green. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_GREEN_AS_LUMA 0 -#endif - -#ifndef FXAA_DISCARD - // 1 = Use discard on pixels which don't need AA. - // 0 = Return unchanged color on pixels which don't need AA. - #define FXAA_DISCARD 0 -#endif - -/*============================================================================ - API PORTING -============================================================================*/ - #define FxaaBool bool - #define FxaaDiscard discard - #define FxaaFloat float - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaHalf float - #define FxaaHalf2 vec2 - #define FxaaHalf3 vec3 - #define FxaaHalf4 vec4 - #define FxaaInt2 ivec2 - #define FxaaSat(x) clamp(x, 0.0, 1.0) - #define FxaaTex sampler2D -/*--------------------------------------------------------------------------*/ - - #define FxaaTexTop(t, p) textureLod(t, p, 0.0) - #define FxaaLuma(rgba) rgba.a - -/*============================================================================ - FXAA3 CONSOLE - PC VERSION -============================================================================*/ -/*--------------------------------------------------------------------------*/ -FxaaFloat4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - // - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy} = center of pixel - FxaaFloat2 pos, - // - // Used only for FXAA Console, and not used on the 360 version. - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy__} = upper left of pixel - // {__zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - // - // Input color texture. - // {rgb_} = color in linear or perceptual color space - // if (FXAA_GREEN_AS_LUMA == 0) - // {___a} = luma in perceptual color space (not linear) - FxaaTex tex, - // - // Only used on FXAA Console. - // This must be from a constant/uniform. - // This effects sub-pixel AA quality and inversely sharpness. - // Where N ranges between, - // N = 0.50 (default) - // N = 0.33 (sharper) - // {x___} = -N/screenWidthInPixels - // {_y__} = -N/screenHeightInPixels - // {__z_} = N/screenWidthInPixels - // {___w} = N/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt, - // - // Only used on FXAA Console. - // Not used on 360, but used on PS3 and PC. - // This must be from a constant/uniform. - // {x___} = -2.0/screenWidthInPixels - // {_y__} = -2.0/screenHeightInPixels - // {__z_} = 2.0/screenWidthInPixels - // {___w} = 2.0/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. - // Due to the PS3 being ALU bound, - // there are only three safe values here: 2 and 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // For all other platforms can be a non-power of two. - // 8.0 is sharper (default!!!) - // 4.0 is softer - // 2.0 is really soft (good only for vector graphics inputs) - FxaaFloat fxaaConsoleEdgeSharpness, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. - // Due to the PS3 being ALU bound, - // there are only two safe values here: 1/4 and 1/8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // The console setting has a different mapping than the quality setting. - // Other platforms can use other values. - // 0.125 leaves less aliasing, but is softer (default!!!) - // 0.25 leaves more aliasing, and is sharper - FxaaFloat fxaaConsoleEdgeThreshold, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // The console setting has a different mapping than the quality setting. - // This does not apply to PS3, - // PS3 was simplified to avoid more shader instructions. - // 0.06 - faster but more aliasing in darks - // 0.05 - default - // 0.04 - slower and less aliasing in darks - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaConsoleEdgeThresholdMin -) { -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); - FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); - FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); - FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); - FxaaFloat lumaM = FxaaLuma(rgbyM); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); - lumaNe += 1.0/384.0; - FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); - FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); - FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMinM = min(lumaMin, lumaM); - FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - FxaaFloat lumaMaxM = max(lumaMax, lumaM); - FxaaFloat dirSwMinusNe = lumaSw - lumaNe; - FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; - FxaaFloat dirSeMinusNw = lumaSe - lumaNw; - if(lumaMaxSubMinM < lumaMaxScaledClamped) - { - #if (FXAA_DISCARD == 1) - FxaaDiscard; - #else - return rgbyM; - #endif - } -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir; - dir.x = dirSwMinusNe + dirSeMinusNw; - dir.y = dirSwMinusNe - dirSeMinusNw; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir1 = normalize(dir.xy); - FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); - FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); -/*--------------------------------------------------------------------------*/ - FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; - FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw; - FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x); - FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; - FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); -/*--------------------------------------------------------------------------*/ - float lumaB = FxaaLuma(rgbyB); - if((lumaB < lumaMin) || (lumaB > lumaMax)) rgbyB.xyz = rgbyA.xyz * 0.5; - return rgbyB; -} -/*==========================================================================*/ - -#define edgeSharpness 3.0 -#define edgeThreshold 0.15 -#define edgeThresholdMin 0.05 - -void main(){ - vec2 screenSize05 = 0.5 * u_screenSize2f; - - vec4 posPos; - posPos.xy = v_position2f; - posPos.zw = v_position2f + u_screenSize2f; - - vec4 rcpFrameOpt; - rcpFrameOpt.xy = -screenSize05; - rcpFrameOpt.zw = screenSize05; - - output4f = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * This file was modified by lax1dude to remove dead code + * + * Original: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 + * + */ + +/* + * ============================================================================ + * + * + * NVIDIA FXAA 3.11 by TIMOTHY LOTTES + * + * + * ------------------------------------------------------------------------------ + * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. + * ------------------------------------------------------------------------------ + * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED + * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS + * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA + * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR + * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, + * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE + * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGES. + * + */ + + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_screenTexture; +uniform vec2 u_screenSize2f; + +#ifndef FXAA_GREEN_AS_LUMA + // For those using non-linear color, + // and either not able to get luma in alpha, or not wanting to, + // this enables FXAA to run using green as a proxy for luma. + // So with this enabled, no need to pack luma in alpha. + // + // This will turn off AA on anything which lacks some amount of green. + // Pure red and blue or combination of only R and B, will get no AA. + // + // Might want to lower the settings for both, + // fxaaConsoleEdgeThresholdMin + // fxaaQualityEdgeThresholdMin + // In order to insure AA does not get turned off on colors + // which contain a minor amount of green. + // + // 1 = On. + // 0 = Off. + // + #define FXAA_GREEN_AS_LUMA 0 +#endif + +#ifndef FXAA_DISCARD + // 1 = Use discard on pixels which don't need AA. + // 0 = Return unchanged color on pixels which don't need AA. + #define FXAA_DISCARD 0 +#endif + +/*============================================================================ + API PORTING +============================================================================*/ + #define FxaaBool bool + #define FxaaDiscard discard + #define FxaaFloat float + #define FxaaFloat2 vec2 + #define FxaaFloat3 vec3 + #define FxaaFloat4 vec4 + #define FxaaHalf float + #define FxaaHalf2 vec2 + #define FxaaHalf3 vec3 + #define FxaaHalf4 vec4 + #define FxaaInt2 ivec2 + #define FxaaSat(x) clamp(x, 0.0, 1.0) + #define FxaaTex sampler2D +/*--------------------------------------------------------------------------*/ + + #define FxaaTexTop(t, p) textureLod(t, p, 0.0) + #define FxaaLuma(rgba) rgba.a + +/*============================================================================ + FXAA3 CONSOLE - PC VERSION +============================================================================*/ +/*--------------------------------------------------------------------------*/ +FxaaFloat4 FxaaPixelShader( + // See FXAA Quality FxaaPixelShader() source for docs on Inputs! + // + // Use noperspective interpolation here (turn off perspective interpolation). + // {xy} = center of pixel + FxaaFloat2 pos, + // + // Used only for FXAA Console, and not used on the 360 version. + // Use noperspective interpolation here (turn off perspective interpolation). + // {xy__} = upper left of pixel + // {__zw} = lower right of pixel + FxaaFloat4 fxaaConsolePosPos, + // + // Input color texture. + // {rgb_} = color in linear or perceptual color space + // if (FXAA_GREEN_AS_LUMA == 0) + // {___a} = luma in perceptual color space (not linear) + FxaaTex tex, + // + // Only used on FXAA Console. + // This must be from a constant/uniform. + // This effects sub-pixel AA quality and inversely sharpness. + // Where N ranges between, + // N = 0.50 (default) + // N = 0.33 (sharper) + // {x___} = -N/screenWidthInPixels + // {_y__} = -N/screenHeightInPixels + // {__z_} = N/screenWidthInPixels + // {___w} = N/screenHeightInPixels + FxaaFloat4 fxaaConsoleRcpFrameOpt, + // + // Only used on FXAA Console. + // Not used on 360, but used on PS3 and PC. + // This must be from a constant/uniform. + // {x___} = -2.0/screenWidthInPixels + // {_y__} = -2.0/screenHeightInPixels + // {__z_} = 2.0/screenWidthInPixels + // {___w} = 2.0/screenHeightInPixels + FxaaFloat4 fxaaConsoleRcpFrameOpt2, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. + // It is here now to allow easier tuning. + // This does not effect PS3, as this needs to be compiled in. + // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. + // Due to the PS3 being ALU bound, + // there are only three safe values here: 2 and 4 and 8. + // These options use the shaders ability to a free *|/ by 2|4|8. + // For all other platforms can be a non-power of two. + // 8.0 is sharper (default!!!) + // 4.0 is softer + // 2.0 is really soft (good only for vector graphics inputs) + FxaaFloat fxaaConsoleEdgeSharpness, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. + // It is here now to allow easier tuning. + // This does not effect PS3, as this needs to be compiled in. + // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. + // Due to the PS3 being ALU bound, + // there are only two safe values here: 1/4 and 1/8. + // These options use the shaders ability to a free *|/ by 2|4|8. + // The console setting has a different mapping than the quality setting. + // Other platforms can use other values. + // 0.125 leaves less aliasing, but is softer (default!!!) + // 0.25 leaves more aliasing, and is sharper + FxaaFloat fxaaConsoleEdgeThreshold, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. + // It is here now to allow easier tuning. + // Trims the algorithm from processing darks. + // The console setting has a different mapping than the quality setting. + // This does not apply to PS3, + // PS3 was simplified to avoid more shader instructions. + // 0.06 - faster but more aliasing in darks + // 0.05 - default + // 0.04 - slower and less aliasing in darks + // Special notes when using FXAA_GREEN_AS_LUMA, + // Likely want to set this to zero. + // As colors that are mostly not-green + // will appear very dark in the green channel! + // Tune by looking at mostly non-green content, + // then start at zero and increase until aliasing is a problem. + FxaaFloat fxaaConsoleEdgeThresholdMin +) { +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); + FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); + FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); + FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); +/*--------------------------------------------------------------------------*/ + FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); + FxaaFloat lumaM = FxaaLuma(rgbyM); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); + lumaNe += 1.0/384.0; + FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); + FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); + FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMinM = min(lumaMin, lumaM); + FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); + FxaaFloat lumaMaxM = max(lumaMax, lumaM); + FxaaFloat dirSwMinusNe = lumaSw - lumaNe; + FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; + FxaaFloat dirSeMinusNw = lumaSe - lumaNw; + if(lumaMaxSubMinM < lumaMaxScaledClamped) + { + #if (FXAA_DISCARD == 1) + FxaaDiscard; + #else + return rgbyM; + #endif + } +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir; + dir.x = dirSwMinusNe + dirSeMinusNw; + dir.y = dirSwMinusNe - dirSeMinusNw; +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir1 = normalize(dir.xy); + FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); + FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); +/*--------------------------------------------------------------------------*/ + FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; + FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw; + FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x); + FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x); +/*--------------------------------------------------------------------------*/ + FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; + FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); +/*--------------------------------------------------------------------------*/ + float lumaB = FxaaLuma(rgbyB); + if((lumaB < lumaMin) || (lumaB > lumaMax)) rgbyB.xyz = rgbyA.xyz * 0.5; + return rgbyB; +} +/*==========================================================================*/ + +#define edgeSharpness 3.0 +#define edgeThreshold 0.15 +#define edgeThresholdMin 0.05 + +void main(){ + vec2 screenSize05 = 0.5 * u_screenSize2f; + + vec4 posPos; + posPos.xy = v_position2f; + posPos.zw = v_position2f + u_screenSize2f; + + vec4 rcpFrameOpt; + rcpFrameOpt.xy = -screenSize05; + rcpFrameOpt.zw = screenSize05; + + output4f = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh index e21b52ed..3e37d9eb 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh @@ -1,40 +1,40 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_inputTexture; - -vec2 distortUV(in vec2 uv, in float k){ - vec2 t = uv - 0.5; - return dot(t, t) * k * t + t + 0.5; -} - -#define DISTORT_AMOUNT -0.05 - -void main() { - output4f = vec4(textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT + 0.01), 0.0).r, - textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT), 0.0).ga, - textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT - 0.01), 0.0).b).rgab; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; + +vec2 distortUV(in vec2 uv, in float k){ + vec2 t = uv - 0.5; + return dot(t, t) * k * t + t + 0.5; +} + +#define DISTORT_AMOUNT -0.05 + +void main() { + output4f = vec4(textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT + 0.01), 0.0).r, + textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT), 0.0).ga, + textureLod(u_inputTexture, distortUV(v_position2f, DISTORT_AMOUNT - 0.01), 0.0).b).rgab; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh index 43a98f83..ad41fede 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh @@ -1,36 +1,36 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision mediump sampler2D; - -layout(location = 0) out vec4 output4f; - -in vec2 v_texcoord2f; -in vec3 v_color3f; -in float v_occlusion1f; - -uniform sampler2D u_flareTexture; - -uniform vec3 u_flareColor3f; - -void main() { - vec3 color3f = vec3(texture(u_flareTexture, v_texcoord2f).r); - output4f = vec4(color3f * color3f * v_color3f * v_occlusion1f * u_flareColor3f, 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +layout(location = 0) out vec4 output4f; + +in vec2 v_texcoord2f; +in vec3 v_color3f; +in float v_occlusion1f; + +uniform sampler2D u_flareTexture; + +uniform vec3 u_flareColor3f; + +void main() { + vec3 color3f = vec3(texture(u_flareTexture, v_texcoord2f).r); + output4f = vec4(color3f * color3f * v_color3f * v_occlusion1f * u_flareColor3f, 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh index 9aaebe41..556bb310 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh @@ -1,67 +1,67 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec2 a_position2f; - -layout(location = 1) in vec2 e_elementOffsetScale; -layout(location = 2) in vec4 e_elementTexture4f; -layout(location = 3) in vec3 e_elementColor3f; - -out vec2 v_texcoord2f; -out vec3 v_color3f; -out float v_occlusion1f; - -uniform sampler2D u_exposureValue; -uniform sampler2D u_sunOcclusionValue; - -uniform vec2 u_sunPosition2f; -uniform float u_aspectRatio1f; -uniform float u_baseScale1f; - -#define FAKE_SIN(valueIn, valueOut)\ - valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; - -void main() { - v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0); - if(v_occlusion1f == 0.0) { - gl_Position = vec4(-10.0, -10.0, -10.0, 1.0); - return; - } - - v_texcoord2f = e_elementTexture4f.xy + (a_position2f * 0.5 + 0.5) * e_elementTexture4f.zw; - - float r = textureLod(u_exposureValue, vec2(0.5, 0.5), 0.0).r * 7.5; - - mat2 rotationMatrix; - FAKE_SIN(vec2(r + 1.570795, r), rotationMatrix[0]) - rotationMatrix[1].x = -rotationMatrix[0].y; - rotationMatrix[1].y = rotationMatrix[0].x; - - vec2 transformedVertex = rotationMatrix * (a_position2f * u_baseScale1f * e_elementOffsetScale.y / (4.0 + r * 0.75)); - transformedVertex.x *= u_aspectRatio1f; - transformedVertex += u_sunPosition2f * (1.0 - e_elementOffsetScale.x); - - v_color3f = e_elementColor3f * (0.05 + dot(u_sunPosition2f, u_sunPosition2f)); - - gl_Position = vec4(transformedVertex, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec2 a_position2f; + +layout(location = 1) in vec2 e_elementOffsetScale; +layout(location = 2) in vec4 e_elementTexture4f; +layout(location = 3) in vec3 e_elementColor3f; + +out vec2 v_texcoord2f; +out vec3 v_color3f; +out float v_occlusion1f; + +uniform sampler2D u_exposureValue; +uniform sampler2D u_sunOcclusionValue; + +uniform vec2 u_sunPosition2f; +uniform float u_aspectRatio1f; +uniform float u_baseScale1f; + +#define FAKE_SIN(valueIn, valueOut)\ + valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; + +void main() { + v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0); + if(v_occlusion1f == 0.0) { + gl_Position = vec4(-10.0, -10.0, -10.0, 1.0); + return; + } + + v_texcoord2f = e_elementTexture4f.xy + (a_position2f * 0.5 + 0.5) * e_elementTexture4f.zw; + + float r = textureLod(u_exposureValue, vec2(0.5, 0.5), 0.0).r * 7.5; + + mat2 rotationMatrix; + FAKE_SIN(vec2(r + 1.570795, r), rotationMatrix[0]) + rotationMatrix[1].x = -rotationMatrix[0].y; + rotationMatrix[1].y = rotationMatrix[0].x; + + vec2 transformedVertex = rotationMatrix * (a_position2f * u_baseScale1f * e_elementOffsetScale.y / (4.0 + r * 0.75)); + transformedVertex.x *= u_aspectRatio1f; + transformedVertex += u_sunPosition2f * (1.0 - e_elementOffsetScale.x); + + v_color3f = e_elementColor3f * (0.05 + dot(u_sunPosition2f, u_sunPosition2f)); + + gl_Position = vec4(transformedVertex, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh index 14589940..e93341bd 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh @@ -1,36 +1,36 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision mediump sampler2D; - -layout(location = 0) out vec4 output4f; - -in vec2 v_texcoord2f; -in float v_occlusion1f; - -uniform sampler2D u_flareTexture; - -uniform vec3 u_flareColor3f; - -void main() { - vec3 color = vec3(texture(u_flareTexture, v_texcoord2f).r); - color = length(u_flareColor3f * color) * vec3(0.0, 0.05, 0.3) + u_flareColor3f * color * color * color; - output4f = vec4(color * v_occlusion1f, 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +layout(location = 0) out vec4 output4f; + +in vec2 v_texcoord2f; +in float v_occlusion1f; + +uniform sampler2D u_flareTexture; + +uniform vec3 u_flareColor3f; + +void main() { + vec3 color = vec3(texture(u_flareTexture, v_texcoord2f).r); + color = length(u_flareColor3f * color) * vec3(0.0, 0.05, 0.3) + u_flareColor3f * color * color * color; + output4f = vec4(color * v_occlusion1f, 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh index d01f487f..02d31989 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh @@ -1,42 +1,42 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec2 a_position2f; -layout(location = 1) in vec2 a_texcoord2f; - -out vec2 v_texcoord2f; -out float v_occlusion1f; - -uniform sampler2D u_sunOcclusionValue; - -uniform mat3 u_sunFlareMatrix3f; - -void main() { - v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0); - if(v_occlusion1f == 0.0) { - gl_Position = vec4(-10.0, -10.0, -10.0, 1.0); - return; - } - v_texcoord2f = a_texcoord2f; - vec3 pos3f = u_sunFlareMatrix3f * vec3(a_position2f, 1.0); - gl_Position = vec4(pos3f.x, pos3f.y, 0.0, pos3f.z); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec2 a_position2f; +layout(location = 1) in vec2 a_texcoord2f; + +out vec2 v_texcoord2f; +out float v_occlusion1f; + +uniform sampler2D u_sunOcclusionValue; + +uniform mat3 u_sunFlareMatrix3f; + +void main() { + v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0); + if(v_occlusion1f == 0.0) { + gl_Position = vec4(-10.0, -10.0, -10.0, 1.0); + return; + } + v_texcoord2f = a_texcoord2f; + vec3 pos3f = u_sunFlareMatrix3f * vec3(a_position2f, 1.0); + gl_Position = vec4(pos3f.x, pos3f.y, 0.0, pos3f.z); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh index 3064179e..ccbf6ba6 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh @@ -1,57 +1,57 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_lightingHDRFramebufferTexture; -uniform sampler2D u_framebufferLumaAvgInput; -uniform sampler2D u_ditherTexture; -uniform vec3 u_exposure3f; -uniform vec2 u_ditherScale2f; - -void main() { - float lumaHDR = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r; - vec3 input3f = textureLod(u_lightingHDRFramebufferTexture, v_position2f, 0.0).rgb; - - input3f /= (0.07 + clamp(lumaHDR * 6.0, 0.2, 4.0)); - - input3f *= u_exposure3f; - - // ACES, modified to approximate gamma correction - const float a = 1.22; - const float b = 1.78; - const float c = 1.22; - const float d = 1.79; - const float e = 0.29; - - input3f = clamp((input3f * (a * input3f + b)) / (input3f * (c * input3f + d) + e), 0.0, 1.0); - - // desaturate a bit, makes it look like less of a cartoon - float sat = 0.8; - float luma = dot(input3f, vec3(0.299, 0.587, 0.114)); - input3f = (input3f - luma) * sat + luma; - input3f += textureLod(u_ditherTexture, v_position2f * u_ditherScale2f, 0.0).r / 255.0; - - output4f = vec4(clamp(input3f, 0.0, 1.0), luma); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_lightingHDRFramebufferTexture; +uniform sampler2D u_framebufferLumaAvgInput; +uniform sampler2D u_ditherTexture; +uniform vec3 u_exposure3f; +uniform vec2 u_ditherScale2f; + +void main() { + float lumaHDR = textureLod(u_framebufferLumaAvgInput, vec2(0.5), 0.0).r; + vec3 input3f = textureLod(u_lightingHDRFramebufferTexture, v_position2f, 0.0).rgb; + + input3f /= (0.07 + clamp(lumaHDR * 6.0, 0.2, 4.0)); + + input3f *= u_exposure3f; + + // ACES, modified to approximate gamma correction + const float a = 1.22; + const float b = 1.78; + const float c = 1.22; + const float d = 1.79; + const float e = 0.29; + + input3f = clamp((input3f * (a * input3f + b)) / (input3f * (c * input3f + d) + e), 0.0, 1.0); + + // desaturate a bit, makes it look like less of a cartoon + float sat = 0.8; + float luma = dot(input3f, vec3(0.299, 0.587, 0.114)); + input3f = (input3f - luma) * sat + luma; + input3f += textureLod(u_ditherTexture, v_position2f * u_ditherScale2f, 0.0).r / 255.0; + + output4f = vec4(clamp(input3f, 0.0, 1.0), luma); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png index fe8d59c2..ad3b65d7 100644 Binary files a/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png and b/desktopRuntime/resources/assets/eagler/glsl/deferred/rain.png differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh index 323935af..a0c477d7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh @@ -1,201 +1,201 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 realisticWaterReflectionOutput4f; -layout(location = 1) out vec4 realisticWaterHitVectorOutput4f; -layout(location = 2) out vec4 realisticWaterRefraction4f; - -uniform sampler2D u_gbufferColorTexture4f; -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_realisticWaterMaskNormal; -uniform sampler2D u_realisticWaterDepthTexture; -uniform sampler2D u_lastFrameReflectionInput4f; -uniform sampler2D u_lastFrameHitVectorInput4f; -uniform sampler2D u_lastFrameColorTexture; -uniform sampler2D u_lastFrameDepthTexture; - -uniform mat4 u_inverseProjectionMatrix4f; -uniform mat4 u_inverseViewProjMatrix4f; -uniform mat4 u_reprojectionMatrix4f; -uniform mat4 u_lastInverseProjMatrix4f; -uniform mat4 u_reprojectionInverseViewMatrix4f; -uniform mat4 u_projectionMatrix4f; -uniform mat4 u_viewToPreviousProjMatrix4f; - -// x = near plane -// y = far plane -// z = near plane * 2 -// w = far plane - near plane -uniform vec4 u_nearFarPlane4f; - -uniform vec4 u_pixelAlignment4f; - -uniform vec4 u_refractFogColor4f; - -#define reprojDepthLimit 0.25 - -#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w)) - -#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw) - -void main() { - vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); - realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - realisticWaterRefraction4f = vec4(0.0, 0.0, 0.0, 0.0); - vec4 waterSurfaceNormal4f = textureLod(u_realisticWaterMaskNormal, v_position2f2, 0.0); - - if(waterSurfaceNormal4f.a <= 0.0) { - return; - } - - float gbufferDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; - - if(gbufferDepth < 0.000001) { - return; - } - - vec4 gbufferDepthClipSpace4f = vec4(v_position2f2, gbufferDepth, 1.0); - gbufferDepthClipSpace4f.xyz *= 2.0; - gbufferDepthClipSpace4f.xyz -= 1.0; - vec2 gbufferDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * gbufferDepthClipSpace4f; - gbufferDepthView.x /= gbufferDepthView.y; - - float waterSurfaceDepth = textureLod(u_realisticWaterDepthTexture, v_position2f2, 0.0).r; - vec4 waterSurfaceDepthClipSpace4f = vec4(gbufferDepthClipSpace4f.xy, waterSurfaceDepth * 2.0 - 1.0, 1.0); - vec2 waterDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * waterSurfaceDepthClipSpace4f; - waterDepthView.x /= waterDepthView.y; - - float fog = clamp(1.25 - 1.0 / exp((waterDepthView.x - gbufferDepthView.x) * 0.05), 0.0, 1.0); - - vec3 refractColor3f = textureLod(u_gbufferColorTexture4f, v_position2f2, 0.0).rgb; - refractColor3f *= mix(vec3(1.0), vec3(0.02, 0.025, 0.12), min(fog + 0.1, 1.0)); - vec3 fogColor3f = u_refractFogColor4f.rgb * (waterSurfaceNormal4f.a * u_refractFogColor4f.a * 0.95 + 0.05); - realisticWaterRefraction4f = vec4(mix(refractColor3f, fogColor3f, fog), 1.0); - - vec4 fragPos4f = u_inverseViewProjMatrix4f * waterSurfaceDepthClipSpace4f; - fragPos4f.xyz /= fragPos4f.w; - fragPos4f.w = 1.0; - vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f; - vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0); - reprojPos4f = reprojClipPos4f; - reprojPos4f.xyz *= 0.5; - reprojPos4f.xyz += 0.5; - reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); - if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_lastFrameDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) { - realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0); - return; - } - - vec4 lastFrameHitVector4f = textureLod(u_lastFrameHitVectorInput4f, reprojPos4f.xy, 0.0); - if(lastFrameHitVector4f.g <= 0.0) { - realisticWaterReflectionOutput4f = textureLod(u_lastFrameReflectionInput4f, reprojPos4f.xy, 0.0); - realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a); - return; - } - - realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0); - - lastFrameHitVector4f.g -= 0.004; - - vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0); - lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w; - lastFrameFragPosView4f.w = 1.0; - vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0); - - vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f; - thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w; - thisFrameHitPos4f.w = 1.0; - - vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f; - thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; - thisFrameHitPosProj4f.w = 1.0; - vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; - - if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { - return; - } - - float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; - vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); - thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; - - if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) { - return; - } - - waterSurfaceNormal4f.xyz *= 2.0; - waterSurfaceNormal4f.xyz -= 1.0; - - vec3 lastFrameHitPosNormal3f = textureLod(u_realisticWaterMaskNormal, thisFrameHitPosProjTex3f.xy, 0.0).rgb; - lastFrameHitPosNormal3f *= 2.0; - lastFrameHitPosNormal3f -= 1.0; - - vec4 fragPosView4f = u_inverseProjectionMatrix4f * waterSurfaceDepthClipSpace4f; - fragPosView4f.xyz /= fragPosView4f.w; - fragPosView4f.w = 1.0; - - vec3 rayOrigin = fragPosView4f.xyz; - vec3 planePos = thisFrameHitPos4f.xyz; - vec3 planeNormal = lastFrameHitPosNormal3f; - - vec3 newRayDirection = reflect(normalize(rayOrigin), waterSurfaceNormal4f.xyz); - - float dist = dot(planeNormal, newRayDirection); - if(dist > 0.9) { - return; - } - - dist = dot(planeNormal, planePos - rayOrigin) / dist; - if(dist < 0.0) { - return; - } - - realisticWaterHitVectorOutput4f = vec4(newRayDirection * dist, 1.0); - realisticWaterHitVectorOutput4f.y += 0.004; - - thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0); - thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; - thisFrameHitPosProj4f.w = 1.0; - thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; - - if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { - return; - } - - fragDepthSample = textureLod(u_lastFrameDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; - - vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f; - thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y; - - thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); - thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; - - if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) { - realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - return; - } - - realisticWaterReflectionOutput4f = vec4(textureLod(u_lastFrameColorTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 realisticWaterReflectionOutput4f; +layout(location = 1) out vec4 realisticWaterHitVectorOutput4f; +layout(location = 2) out vec4 realisticWaterRefraction4f; + +uniform sampler2D u_gbufferColorTexture4f; +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_realisticWaterMaskNormal; +uniform sampler2D u_realisticWaterDepthTexture; +uniform sampler2D u_lastFrameReflectionInput4f; +uniform sampler2D u_lastFrameHitVectorInput4f; +uniform sampler2D u_lastFrameColorTexture; +uniform sampler2D u_lastFrameDepthTexture; + +uniform mat4 u_inverseProjectionMatrix4f; +uniform mat4 u_inverseViewProjMatrix4f; +uniform mat4 u_reprojectionMatrix4f; +uniform mat4 u_lastInverseProjMatrix4f; +uniform mat4 u_reprojectionInverseViewMatrix4f; +uniform mat4 u_projectionMatrix4f; +uniform mat4 u_viewToPreviousProjMatrix4f; + +// x = near plane +// y = far plane +// z = near plane * 2 +// w = far plane - near plane +uniform vec4 u_nearFarPlane4f; + +uniform vec4 u_pixelAlignment4f; + +uniform vec4 u_refractFogColor4f; + +#define reprojDepthLimit 0.25 + +#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w)) + +#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw) + +void main() { + vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); + realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + realisticWaterRefraction4f = vec4(0.0, 0.0, 0.0, 0.0); + vec4 waterSurfaceNormal4f = textureLod(u_realisticWaterMaskNormal, v_position2f2, 0.0); + + if(waterSurfaceNormal4f.a <= 0.0) { + return; + } + + float gbufferDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; + + if(gbufferDepth < 0.000001) { + return; + } + + vec4 gbufferDepthClipSpace4f = vec4(v_position2f2, gbufferDepth, 1.0); + gbufferDepthClipSpace4f.xyz *= 2.0; + gbufferDepthClipSpace4f.xyz -= 1.0; + vec2 gbufferDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * gbufferDepthClipSpace4f; + gbufferDepthView.x /= gbufferDepthView.y; + + float waterSurfaceDepth = textureLod(u_realisticWaterDepthTexture, v_position2f2, 0.0).r; + vec4 waterSurfaceDepthClipSpace4f = vec4(gbufferDepthClipSpace4f.xy, waterSurfaceDepth * 2.0 - 1.0, 1.0); + vec2 waterDepthView = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * waterSurfaceDepthClipSpace4f; + waterDepthView.x /= waterDepthView.y; + + float fog = clamp(1.25 - 1.0 / exp((waterDepthView.x - gbufferDepthView.x) * 0.05), 0.0, 1.0); + + vec3 refractColor3f = textureLod(u_gbufferColorTexture4f, v_position2f2, 0.0).rgb; + refractColor3f *= mix(vec3(1.0), vec3(0.02, 0.025, 0.12), min(fog + 0.1, 1.0)); + vec3 fogColor3f = u_refractFogColor4f.rgb * (waterSurfaceNormal4f.a * u_refractFogColor4f.a * 0.95 + 0.05); + realisticWaterRefraction4f = vec4(mix(refractColor3f, fogColor3f, fog), 1.0); + + vec4 fragPos4f = u_inverseViewProjMatrix4f * waterSurfaceDepthClipSpace4f; + fragPos4f.xyz /= fragPos4f.w; + fragPos4f.w = 1.0; + vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f; + vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0); + reprojPos4f = reprojClipPos4f; + reprojPos4f.xyz *= 0.5; + reprojPos4f.xyz += 0.5; + reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); + if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_lastFrameDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) { + realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0); + return; + } + + vec4 lastFrameHitVector4f = textureLod(u_lastFrameHitVectorInput4f, reprojPos4f.xy, 0.0); + if(lastFrameHitVector4f.g <= 0.0) { + realisticWaterReflectionOutput4f = textureLod(u_lastFrameReflectionInput4f, reprojPos4f.xy, 0.0); + realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a); + return; + } + + realisticWaterReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0); + + lastFrameHitVector4f.g -= 0.004; + + vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0); + lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w; + lastFrameFragPosView4f.w = 1.0; + vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0); + + vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f; + thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w; + thisFrameHitPos4f.w = 1.0; + + vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f; + thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; + thisFrameHitPosProj4f.w = 1.0; + vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; + + if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { + return; + } + + float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; + vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); + thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; + + if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) { + return; + } + + waterSurfaceNormal4f.xyz *= 2.0; + waterSurfaceNormal4f.xyz -= 1.0; + + vec3 lastFrameHitPosNormal3f = textureLod(u_realisticWaterMaskNormal, thisFrameHitPosProjTex3f.xy, 0.0).rgb; + lastFrameHitPosNormal3f *= 2.0; + lastFrameHitPosNormal3f -= 1.0; + + vec4 fragPosView4f = u_inverseProjectionMatrix4f * waterSurfaceDepthClipSpace4f; + fragPosView4f.xyz /= fragPosView4f.w; + fragPosView4f.w = 1.0; + + vec3 rayOrigin = fragPosView4f.xyz; + vec3 planePos = thisFrameHitPos4f.xyz; + vec3 planeNormal = lastFrameHitPosNormal3f; + + vec3 newRayDirection = reflect(normalize(rayOrigin), waterSurfaceNormal4f.xyz); + + float dist = dot(planeNormal, newRayDirection); + if(dist > 0.9) { + return; + } + + dist = dot(planeNormal, planePos - rayOrigin) / dist; + if(dist < 0.0) { + return; + } + + realisticWaterHitVectorOutput4f = vec4(newRayDirection * dist, 1.0); + realisticWaterHitVectorOutput4f.y += 0.004; + + thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0); + thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; + thisFrameHitPosProj4f.w = 1.0; + thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; + + if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { + return; + } + + fragDepthSample = textureLod(u_lastFrameDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; + + vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f; + thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y; + + thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); + thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; + + if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) { + realisticWaterHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + + realisticWaterReflectionOutput4f = vec4(textureLod(u_lastFrameColorTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh index 58724b36..e9d318f7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh @@ -1,37 +1,37 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -layout(location = 0) out vec4 output4f; - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#else -uniform vec2 u_textureCoords02; -#endif - -void main() { -#ifdef COMPILE_NORMAL_ATTRIB - output4f = vec4(v_normal3f * 0.5 + 0.5, 1.0); -#else - output4f = vec4(0.0, 1.0, 0.0, 1.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +layout(location = 0) out vec4 output4f; + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#else +uniform vec2 u_textureCoords02; +#endif + +void main() { +#ifdef COMPILE_NORMAL_ATTRIB + output4f = vec4(v_normal3f * 0.5 + 0.5, 1.0); +#else + output4f = vec4(0.0, 1.0, 0.0, 1.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh index 0180d4e2..4d2ffd8f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh @@ -1,46 +1,46 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; -uniform mat4 u_modelviewProjMat4f; - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); -#endif -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_modelviewProjMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); +#endif +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp index 324756b7..76922a1f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp @@ -1 +1 @@ -_[_]a_gaqa|bcfjpw}qeZSPQU\xcngihggjfpexfinv~slikq||sommpu{zmb^^\|[tZmYfYbY_[_]a_gajtpnslwo|tzz{qvhr_qVqQrNtPvTw[wdukqpout~|z{uxrvpuptqrrnqgobjbdfan`vafnw{qicaae{jtpnslwomkonqpvrqonmorw~|od[VUYajsvwpwmtmqomtk{knt~~tjdbelwwqnmosx|spon|lvkrjoimjmkonqpvrkzruvtzx~xuskqbq[sXuXw\yczjyqvutyx~yywvwuzv|w~yz|yuvnongqaw]~^bis~yne_^`ekzruvtzxyz|}~yuqoprxvj`ZXZakvytqzpurquoyp}v{ria\\`hsytqpruy}}z~w|uztytxvyyz|}s{{uylyezb}bfmu|~wxsuttwu|y}ywwnye}_]^dmwtjb^_cjs{ztomn}stykaZVW\eq}~yuystsrtsvywvrjb[WX\ep|yurqrsuwvusrsuy~{rmjlqxwwoplnnpstzz}w}ld_^ahpwymea`dku}vrozoosfy_YTSV]gr~~}xysvrustytsoha[XX\cmw|wtrrrsttrqrty~~wsrty}u{kqdjcifllsu|~~sjdb}dziupmwfaaemxyu|sntbw[|VRPQV]gr}yso{nxqwwvuqke`]]_dkrz|yvuttuvutstw|{xwy}wphx`lZfYf]kdsm}xxo|iyguipmjtdz__ckw{xsxezY}SPOPSX`hqy}wqlij}m|u{yvrmifeegko~s{vyzx~xxyzzzxxxz}{{}yrkd^xWkReReUj\sfq|{~synsmmogtbz]\`ht~{~{n}_TPPRUY^djpvyyuoiecdir}}zwtqonmm{mzmzmzmzo{s}x~~~}||~}}~wnga\WzRmOfNfQkWu_it~|~uwrpsivb{][]do}|zz{}k^USVZ^cgknqstsnga^]`foz}{xuyqvnwjye{a}achq{~}}~zyz}~}~wme_[XVSpQiOhPmTvZcmwzuwtovg{`\\akxyvvxz|laZ[`fkorttsrqoib\XX\dnyz}twsqvhy_}XTUZcp~{yz|snmot{}||~ynd]ZXYZZuWmUlTpUxX^gpz{usytqxi~c`bju|xrppt{zphdgnu{~|xtqng_YVV[cny~ws~suwj{]RKINXfv}wsru|xvkc`bhpy}zxwz}pe]YXZ^bd{cr_p[sYyY\cku}upo|rtwmhgktqz~tnklpww~qpt|zvqj}ay[xWyX|\eo{yuwz{m]OFCGQ`pxpkikqz~ttyfr\nVnVqZxdo{~yustxvj`ZX[`gnrpvkseu`z]^bis~wojjmztt{ppvjtunjjlq~wz}z~{wrqinbm^n]rawi|t~q`QGDGQ`q}wogcadjtuzurhi\cS_P`RdZleus{urrvsh_\\air{~vxspuizdcekttkfehm|ty{y~zudnz|slihjmprqorw|yq|ksgkfggfjjnqs{vvx~yhYNJLzUucqrqoib]YY]dnz|wqyloed^ZYTWSYW^`fnp|y|wvy}qg`^`gp{~vszurzmklqy~rhb_`diosssuzwqylo]gs~ypiecbbb`_bipw}~woizesdpephslzpsst{teY{SsSkYecap`}_[VQOPU]gs~pf}`w]oXfU^S[S\Wb]lfzow~vld_^bis~}vuw{|wuvzymb[WVY^chijmsx}}pf}`w]oValxtjb]YVTQPU]gqy~xpj~gyfwgyj|nrttu{rxeo]eZ]\VcRmRwROKHGINValxaW}RyQsPlPgQfUh[obzjryxnf`]^bjs}|xx{}sg\SNLNSY_bdiou{|~naW}RyQsR\gtxlaYSNJGFLVamw|tnk}j~losvyxx~w~mqcgYaQ`KdHiIpJ{HECCEJR\gtULI}JyLuPrUr\uc|jqx|wogb^\^birz|{}xnbVLFDFKSZ_cipv{paULI}JyQZerzmbYQKGCCIT`myys~qpruy}~}}vmc{XpPiIeEeDgFkHsGEDDEJQZerMGFIOV}^~gov{}zvqlgc`^^`ciov|}|~uj^RG@>@FOY`fmtzteWMGFIS[es{od[TOKGGMWdq}}}{x}vvx|~|{{zvnd[RxKpFkEhFgJiMnMzLJIJMS[esKHJOXblv}|wrnjgdcbaabc~fyjvnusvwyz}~ui]PE>;>EP[elt{xi\RKHJOY`iwzpha\XUQQV`lw|xw|zz{}|ywvvwwuph_VOKwIqKmOjTiXmXvWUSSTY`iwOPT[eq}xpida`acefhiujmkhlfnhpnsvv}{wk_RF>lv_Vq~ovPmI]jL|hndjnfZh_]r~|{wtaejvkljOMrKkQvfkwarrg\OhlM`}jkteimomjgsmsz{{nuZ{OQ[gjtgrewg}o}vg_^ciifirvpqpnkiglvl\Zgw|u~wf^`}jkteimciN`unzmvZq[ff{”w{FoAzccRY~WwJ\bLel`oghv}qfvdpv~ZqUw}_R}ThKrTdnk}fmciN`unguss{lx\}Xaqtxuolqoilv}wpory~~~o\RVh{xuna_guzw]g]sa[mWd]zo_{c~uieqTdXlws^]KrK~tfwjszww{wy}~uf\]j}zoszuy~z~sr{wompty~zpfYKHSizyun|a^fw{vT7w@j|xvwvwpou]LenWlVvzka^zib_LgJy_{`:5SWRPDacztqe_LclsYNfca{{wtofacn~rho}x}tmqwx}pnrvywpdWMD>BTn}wrkd}[~W]odvyqfR7rCirvpaKuKZb~Tzd~xmfI{^xXpJmeud;6RSeNW^]ULfL]qnw}jOnWc]dvyqٰ|snonklqz{mciz|w{~qmktmosq{yxk[LC>=}E}X}sztld\WSVcwwzq\YWWphaljbzuytMhMr|uZ_}msynon|pf~gwzqzomtz}yzv{s}t{}nb|euurwymubl_kdtox}o_RMtJlHiOk^pusof^XVZan~{{`d{|[d[jyli\Qgduwvthcgupxdou\hr^_ykZYK{M`oL^vhXr~o|Z^{{`dumn{utyxrxu~gycrkn|r}nm]dWf\riuyngzekb`]]]bdktsqic`cku||wi^zk]dzkr_bT[twqahu`h~e]m{_|{[QsskYpIM^}wL`y}isJXyvr{~|yo]ewi^z|zw{~|twvmioss|zndudolqykm[bW``iqv~}~p{epcgjfvo~xrputu}|zwyle_|bkyQwPukwy]tb^t\uzquyluvbVeZrre}l`m\cyqwfzhrolqtnkhklxhyfjvypuwev[nZo`}dm~npech^vbjprv}yyslo}}omqqwfzhrolaPVb]O`jPY`iDVuY]gZudScvxp_sH~UUToum[^p}{VQ]nvnlxoaY`W{aPVifUiQgWg\r^^\\\]cqxlht~wdjQcHfHuKUgxy~m{ecfkljnxzypfdifUiQgWg~_OVgdWkvumL__rZxfPWbfmX|{t`l~rdV~RvEIns{[_hRTqtXcOxt~_OVkXR^GcLjTw[^]YUWcwyncev{uhb\KX?_>nAKZirtoklptupifm~sbXkXR^GcLjwlqtfl[Wzuahpxftc\[ZVWhu}a]kp~l{prUiTwxP^[PiSu]gmkbXYezykbi}}tjz[^QJQB\EmLS^glmknxzk_y_xnt]PxP^[PiSuuyU\mmuZqY\x\~x|rWa||ohKl\szb\nsvzRCNweKJth{dco|WH\y{mVfMj`vqmqYjVY\SlmuyOw`guhs~rc^eusmvtfrW[OPSPaZsekprqppy}lfXYQ][oswwqYKOw`guhcIWr{n^e]_x}iznl{YJfwiweKdRfhgv\L`|fvqPbsjQwRen_j}vZZ}}|XgWquucVQ\XhymcQg}maajxpj`ZXW]amrhgQOFEONff|{|smqiRIQghuZaijUuUiutnRQr~xzRP__OsPSsS`uft]i^uhuZQlvvue]_fjo|t~do]hbnr||okuzwcbLLCBLHd\~sx~muewh{zxssyp[HDQlzsq\_zXUEAQbp}|{}fwdz|es{Ncgbz~wGk:lahkXeav{stRWtpv[mzsq\_Pn|xma\\Z^mue_xdus|wh]]l}ugfOTEHLHbS{cljaU|N{Q~c|x|ubN>>PniTXpFWVKSqyWNnqe\^yzqluoOl>b_khap}X`{kyxiTXNmƦȣujc^WWdvwf^czr}ub~V{T\ozwnrUfHZMR`RxY^ZRIDGXn||p^I::Nm[XXX~{{qfNMxUqYtosu}{_vYTUquw}VxZuu]{a[XLjūȮ{uqla[cryh`axoyy`sOgLfUpf~}~xv|t[}MsOga]x[]XRMKP_twdN<;LjwxTn\wxhapmUvijepQgfMrjcx]buIX{pUZicVW\YmurUG~Zx~aOv^Zn]eTbXxCr\^b\[xh|p^_Vc^wxTKf}rhjwtgad{nswjsP]CRIV]gux|urtt\ORdqzjiea_aftrZD>KfkXT}uswewOKSove{en^LUTO]e[^vvUsX]jOadUviwpYXvss^t[qW^ga^nQigJr`YjW`iomwmcsiekXpLvevzy{~srsd{^bpw{dgJR@KJUdkuorkVMSh}ywwzwrqu{}fvMqCpLverUTw\bpfhx_y}s|mmc||lzoxRS^Xb\yt~vrU\U_mgwyufoawciqus{i|`_gwui`QRGTOefvtn_RO[qwf^XW\djiicS]K\U_mgwr|r_~gz~~vtqv~xvd|ntMKc}|rp|R{v}ysojfiu\BHkhtbZtWvwftrr|r_NdL}O[juyubmNoJ~MWdormfdjv~frV]RS^Ywjzyj|_[Z`nv_OE?>EQ[w]fYXSVNdL}O[gyf~}fbs}v{nqt{vrrcx}N@R{z~m\XaU|y~uubLVdr]Olh|\{ibYnwl{gyPsGEKS\cvhXkEv@CN^oyxrmmr}r]zRjUcffpvtme_[\cn{xfTF;21:I{Xm_c_^YcPsGEKV}S_f}gorims|jneb`l}ybd_\q|ns|zNMlp|ritsV}c|UNLLOWyc_oNGGO_swpov~q_}Ws[qktxugXNNWcuxmcYOB63<~Nqbjoetfomc|UNL{To4v:bjuYsXvzfwYSNSzVTzlr\`hlodq[zzzzput~ztttfmnn{\oUgd]nh`{To4v}pe^TPVesxf]VWcu{}vpuvy{m{dxd|l|xbMCI|]swnkklgXHBzIs]psonot}pe^yhSy=yB[UnKb[{lfi|oPJ~r[Qzzxv|vcih}}x\Nvltxt}wch_kq}yUFVvvlXPQjyhSy=ywztdZ]ksf^botw{st}uuwmlpyf}NuEnNmfs}wvpkoyow\rRqWui|~zwwztlzmtqqYg\t]e\qs{sqyrwvLLUTvqo{^]{~s}{d\lzmtpmq{wgbj{pb_gxuqx{y~wmsuljmruq^jUe^eslx}tkg~np~pzugatbhkiyxypmq{{oj^wQhd~vyrh\{N]xlbSq]Sgvl|wt\f\wZ}Y^oYwu]u`afwzeOZ~y\]\]ksrunrv|{ooilxpccowhbfqsr~phqzpkkprtnnkukq|vh^^thwpqj]PKO]s|oilxbeg~\^hVpqs~tOdu[QpXV~b|ipskLOFXWx\mvi{VmPmz`P`zb]hchopvszberkp|tc^fqy||oxhrjnwx~ogq}vqqw|{xx{p_WxZ{^_[RG@BPhĎ̀rkp|KyK^`uhpdfuq|vn|YX^U{p_sY{}ojxwRoR~WsUxKyKwrzse`}dhhgugojqq}zw~{s~iq{xym^yYxZ[\YQFAH[v‚wrzeDa?upytbmVcJ\Kuf{a]|||t{bctjffh}wkm[mu}kxgYwGf[fh`nibzeDa?up{x{oixitm|kd_z`uivxxry|urzynq~|}nuepcvfkmhXJHSj{xLAT?}oseHuZQ]KXlmmY_y}{`[uzsZaoMQozemaY}]uizWqUmfgaok]tLAT?}oyvunmqyyvzne}dumt|x}ywrpwzxx|{uxntesexnz}nzZyPzV}iyvu[OVO|MORVsrqtNMw}c\KxKkvOPil}n{wt[OVOoivqomr{{rqyyuolttsx~wszyrtyv|l{dogfxir{wf|[{W[chghqjgmjqxty}oivqorvfqtq[Xx~gQqgO`w{wpNnfuwxyyU_xdrSVoarRMeK}u{u~tsVxjzqz~hUUU^{rvfqtqbZycuuv{~yf^bmyz|~yxxs{pmm\fP\OU_Xx`krpdyXwP~NPUY`gnsv{tbZycuu~u`VUr_ega[bror{~fMqdq{aXpslQF~SViS`uYlrhg[urv{qH@Uamx~u`WS]s|xfXTYgv~{{zz}w~mlcYZJREMRNiU_injq_kTpLJOZfqy~hWS]sebjwab}mps}t{^dlegqglehysnlkkef`SWk{webjRTby|y~sp~ynZLJWk}tqqv}ptdc[TWNTVQiS{Zfrzuhn\b]WmSYhxs]RTbyae}twu]W|plTGYrnxl\XlfpZb\`nqlrlobOS_WL]mqc[cUgd\OLoid[Vluae}R^pwt|qecoy`JBMe}umlr}vmuhliefj_v[^iyxcQuMkYfqm|dTR^p{z}ygawjntfTE]sytxdimS]{mdfKZ~~xuqfPQboFxNaiRpjklRQQwcff_[jkxVet{z}{W|j{rmov~usybX[jdJ@Jduoou|~{yy{|qgenhQGzOvfl}X{P{W|jlxjiishtaalrwjttvjiLvL`\tmV[NvN}nodhbwlxji__bvfqndadkrsrlgsYSXh}|bJAKd}|qkj{nspsuv{ysxzaRRauoeod^aQ_Q__bvfqqlSiNW]Jc[_q^yfT\|~rysub~]rhqTOd[uYHv^o}xzt­n^^Ypsawpsz]hwkqlSiNW]JCjIP\o~l_\`h~prtgqgfsZUYexs`KDMatymedzgtlsuv~xe[]gxoZvNbITDOAWCjIP\waNZaWttg[y}}wvx}ki_g{w[Otdpzou`fSZgevXzZzpvi~fu|Qr[vcXo~ogvxevOl\exuwaNZaW4u=HTduqd\Y`lxthbxjm{b^_euk`rPzLSblzrrzgaah}qxw||k`_jx|f~RqF_=S5T1a4u=HTv\qd}~W\lxvzb[pzhsggzw{lnye[jYdgoih|Wn\dv7DR\zdfmWvRW`opffvvnkklvjdgYgXj_nhrkrkmqdz`cmz}ts}wllxlaeqv{h}[vPfD\7`3m7DR\zÙj~R[xlX[j}yps|wh[Vwxt{q^{sn|tYRKI\]~[YaixwepÙIXipkoSmGnKu\oslr|xxyxzrjge`h`oeumrrlnogxcfr|mejziWS_wnmyvusohtXjInDyIXipkvp^cvnf|uqh{yuWYkv`Nsby]nyrmk[U^Obp{h^tdt}dllnvp^ne~NuEoPqg{wwx~rrpivhnyv{tpwg}gpq_VZjgPG}Pxgs|rwou_wX^neKKk~qrql|s]dukV[iJsKLaLcvixnjwrivbWu[UR}xKKkrpZQZ~nkejwxzxrs{}zukpckfetYMJSh~rXItKk[op{qtpkrpZTp{|fwa_IzJi}wbE>lKWPrhsG9ZN^reZlWOianzuj`Yp|ymlP]{ʕ|uVNDCZayJWyxibYpzZTp{|fodep~lXRYhx}wpqzwle`V_LkD?DTmeQtJePb`pww}}ytek{|g?{Bqy]WMpK[JX_ihKo@]Mg\_dWcrbw}mnotz^}`QbďgYSwPUQVog\v[_szodDT}tekvpqu{~sbPIN\lxxnghq}ne`O]Bi=}=G[ut^~PiN]Xenv{~~|ssrJgJutllbwp{qy|sY[}rnXUPlRhYv_l}XWMLrs~|tpquupf~XrOeP`Xeepp}qh_]euppeXbLnHIRd{o_wWd]cqozpoxsq~usj{elgBiJ~`xpxZsim\MwX|s}ezxZpnRldcpRc[V~ofmeWK^lPtgusj|rptyzv|kf`Q\I_Qgfp|ri]X~]k}ulpkexa]`k}{|rhsljnzwjcgtsa^jczqqkpbHRqi|XcLelx~s_ZWopud}ixpp|bUqokMX\vSkP]NoVldv_czqWlz|ftNnDoMve}vh_vatm|ssyoijvrt{sqwzob]drgSMWlc\pvxc\vxwXKXKvpecXmZf|^nwfi}|alfurmfizhcc\pEvWtitz|~mitw}`zV]swntom|u}{}mcrbllv|sqqpifpm~^Y]|fcnKt@wEvWtitz|upSpb]lqafhSxSqxmfmp|swh}InMqvddNfPc~nQfJiMhik{wu}STfjy{ua~E>VupSpb]lq6oCsRucv}o^Zg~|zot~uuyffur^lUc[jt|ui`ZRSc|vdRJ{M`WEa6i6oCsRuclRSR[`de_QGQX[lidzosubdydtfkj^fO_\l{}zw~_Jrbm~ox{iRRZpjF@RlRSR[`d1q;zHYmyxkZS_vxwxq{yf^eo~w^jQ]UbpuucVNHM`vnUE|DaMEZ3f1q;zHYbmldlmmmsg{}ws~wyWh\mvYYT`xneezvlifcv_ibmld9yDQautbW[lzwqs}jdnna]^gy|emX`]dxwxrqoatWROWk|dQ~MdUJa:m9yDQav]SIL^uwvWSrSVvOEyelzgfz_vWQaYzxzyoJA]jjuzWs:{;_vnxxiLZgvqb\wcqurtrumXQ]~vn`UUbyptgknov|hl\cZafd{fnyiegkRrHyLZgvrUdq^LXktrjlXQrQMasODn{mk`jeevXiz}|vJc=nb}jst\45apkupr^}q}lq^k\meut~ytrveNEOgmYP~Vviuy~vyplgYgPoWzjiXT^}q}svONjxR~TpurajqkKKnyd]^fsOTOQyP~Pz~xsvOhp{fep}mrbacZn^}hpnf_\_hyhPDK^s{zfvZn\fje~o|}zl`_ggWvUbvm^\hp{fep}{pJ[sRVf}\^||}r{nvvnnw}`jfXr`Ofr`fmpj{fgf]rjaRa||xzsy}{pJiezQKVdmmeXvSf[_lahleXLFHQalvVKN[hjudj\jVuU\iw|v{ʏЀiVPVvd_wW^pud`~iezQKVvPbqEGovxqd|xvvkzgKZivOujmh{ckfe|vl||~fPeyonrwvPfbsI~AJU\]WNwNl[iolqqdRClv_Vq~ovPmI]jL|hndjnfZh_]r~|{wtaejvkljOMrKkQvfkwarrg\OhlM`}jkteimomjgsmsz{{nuZ{OQ[gjtgrewg}o}vg_^ciifirvpqpnkiglvl\Zgw|u~wf^`}jkteimciN`unzmvZq[ff{”w{FoAzccRY~WwJ\bLel`oghv}qfvdpv~ZqUw}_R}ThKrTdnk}fmciN`unguss{lx\}Xaqtxuolqoilv}wpory~~~o\RVh{xuna_guzw]g]sa[mWd]zo_{c~uieqTdXlws^]KrK~tfwjszww{wy}~uf\]j}zoszuy~z~sr{wompty~zpfYKHSizyun|a^fw{vT7w@j|xvwvwpou]LenWlVvzka^zib_LgJy_{`:5SWRPDacztqe_LclsYNfca{ \ No newline at end of file +_[_]a_gaqa|bcfjpw}qeZSPQU\xcngihggjfpexfinv~slikq||sommpu{zmb^^\|[tZmYfYbY_[_]a_gajtpnslwo|tzz{qvhr_qVqQrNtPvTw[wdukqpout~|z{uxrvpuptqrrnqgobjbdfan`vafnw{qicaae{jtpnslwomkonqpvrqonmorw~|od[VUYajsvwpwmtmqomtk{knt~~tjdbelwwqnmosx|spon|lvkrjoimjmkonqpvrkzruvtzx~xuskqbq[sXuXw\yczjyqvutyx~yywvwuzv|w~yz|yuvnongqaw]~^bis~yne_^`ekzruvtzxyz|}~yuqoprxvj`ZXZakvytqzpurquoyp}v{ria\\`hsytqpruy}}z~w|uztytxvyyz|}s{{uylyezb}bfmu|~wxsuttwu|y}ywwnye}_]^dmwtjb^_cjs{ztomn}stykaZVW\eq}~yuystsrtsvywvrjb[WX\ep|yurqrsuwvusrsuy~{rmjlqxwwoplnnpstzz}w}ld_^ahpwymea`dku}vrozoosfy_YTSV]gr~~}xysvrustytsoha[XX\cmw|wtrrrsttrqrty~~wsrty}u{kqdjcifllsu|~~sjdb}dziupmwfaaemxyu|sntbw[|VRPQV]gr}yso{nxqwwvuqke`]]_dkrz|yvuttuvutstw|{xwy}wphx`lZfYf]kdsm}xxo|iyguipmjtdz__ckw{xsxezY}SPOPSX`hqy}wqlij}m|u{yvrmifeegko~s{vyzx~xxyzzzxxxz}{{}yrkd^xWkReReUj\sfq|{~synsmmogtbz]\`ht~{~{n}_TPPRUY^djpvyyuoiecdir}}zwtqonmm{mzmzmzmzo{s}x~~~}||~}}~wnga\WzRmOfNfQkWu_it~|~uwrpsivb{][]do}|zz{}k^USVZ^cgknqstsnga^]`foz}{xuyqvnwjye{a}achq{~}}~zyz}~}~wme_[XVSpQiOhPmTvZcmwzuwtovg{`\\akxyvvxz|laZ[`fkorttsrqoib\XX\dnyz}twsqvhy_}XTUZcp~{yz|snmot{}||~ynd]ZXYZZuWmUlTpUxX^gpz{usytqxi~c`bju|xrppt{zphdgnu{~|xtqng_YVV[cny~ws~suwj{]RKINXfv}wsru|xvkc`bhpy}zxwz}pe]YXZ^bd{cr_p[sYyY\cku}upo|rtwmhgktqz~tnklpww~qpt|zvqj}ay[xWyX|\eo{yuwz{m]OFCGQ`pxpkikqz~ttyfr\nVnVqZxdo{~yustxvj`ZX[`gnrpvkseu`z]^bis~wojjmztt{ppvjtunjjlq~wz}z~{wrqinbm^n]rawi|t~q`QGDGQ`q}wogcadjtuzurhi\cS_P`RdZleus{urrvsh_\\air{~vxspuizdcekttkfehm|ty{y~zudnz|slihjmprqorw|yq|ksgkfggfjjnqs{vvx~yhYNJLzUucqrqoib]YY]dnz|wqyloed^ZYTWSYW^`fnp|y|wvy}qg`^`gp{~vszurzmklqy~rhb_`diosssuzwqylo]gs~ypiecbbb`_bipw}~woizesdpephslzpsst{teY{SsSkYecap`}_[VQOPU]gs~pf}`w]oXfU^S[S\Wb]lfzow~vld_^bis~}vuw{|wuvzymb[WVY^chijmsx}}pf}`w]oValxtjb]YVTQPU]gqy~xpj~gyfwgyj|nrttu{rxeo]eZ]\VcRmRwROKHGINValxaW}RyQsPlPgQfUh[obzjryxnf`]^bjs}|xx{}sg\SNLNSY_bdiou{|~naW}RyQsR\gtxlaYSNJGFLVamw|tnk}j~losvyxx~w~mqcgYaQ`KdHiIpJ{HECCEJR\gtULI}JyLuPrUr\uc|jqx|wogb^\^birz|{}xnbVLFDFKSZ_cipv{paULI}JyQZerzmbYQKGCCIT`myys~qpruy}~}}vmc{XpPiIeEeDgFkHsGEDDEJQZerMGFIOV}^~gov{}zvqlgc`^^`ciov|}|~uj^RG@>@FOY`fmtzteWMGFIS[es{od[TOKGGMWdq}}}{x}vvx|~|{{zvnd[RxKpFkEhFgJiMnMzLJIJMS[esKHJOXblv}|wrnjgdcbaabc~fyjvnusvwyz}~ui]PE>;>EP[elt{xi\RKHJOY`iwzpha\XUQQV`lw|xw|zz{}|ywvvwwuph_VOKwIqKmOjTiXmXvWUSSTY`iwOPT[eq}xpida`acefhiujmkhlfnhpnsvv}{wk_RF>lv_Vq~ovPmI]jL|hndjnfZh_]r~|{wtaejvkljOMrKkQvfkwarrg\OhlM`}jkteimomjgsmsz{{nuZ{OQ[gjtgrewg}o}vg_^ciifirvpqpnkiglvl\Zgw|u~wf^`}jkteimciN`unzmvZq[ff{”w{FoAzccRY~WwJ\bLel`oghv}qfvdpv~ZqUw}_R}ThKrTdnk}fmciN`unguss{lx\}Xaqtxuolqoilv}wpory~~~o\RVh{xuna_guzw]g]sa[mWd]zo_{c~uieqTdXlws^]KrK~tfwjszww{wy}~uf\]j}zoszuy~z~sr{wompty~zpfYKHSizyun|a^fw{vT7w@j|xvwvwpou]LenWlVvzka^zib_LgJy_{`:5SWRPDacztqe_LclsYNfca{{wtofacn~rho}x}tmqwx}pnrvywpdWMD>BTn}wrkd}[~W]odvyqfR7rCirvpaKuKZb~Tzd~xmfI{^xXpJmeud;6RSeNW^]ULfL]qnw}jOnWc]dvyqٰ|snonklqz{mciz|w{~qmktmosq{yxk[LC>=}E}X}sztld\WSVcwwzq\YWWphaljbzuytMhMr|uZ_}msynon|pf~gwzqzomtz}yzv{s}t{}nb|euurwymubl_kdtox}o_RMtJlHiOk^pusof^XVZan~{{`d{|[d[jyli\Qgduwvthcgupxdou\hr^_ykZYK{M`oL^vhXr~o|Z^{{`dumn{utyxrxu~gycrkn|r}nm]dWf\riuyngzekb`]]]bdktsqic`cku||wi^zk]dzkr_bT[twqahu`h~e]m{_|{[QsskYpIM^}wL`y}isJXyvr{~|yo]ewi^z|zw{~|twvmioss|zndudolqykm[bW``iqv~}~p{epcgjfvo~xrputu}|zwyle_|bkyQwPukwy]tb^t\uzquyluvbVeZrre}l`m\cyqwfzhrolqtnkhklxhyfjvypuwev[nZo`}dm~npech^vbjprv}yyslo}}omqqwfzhrolaPVb]O`jPY`iDVuY]gZudScvxp_sH~UUToum[^p}{VQ]nvnlxoaY`W{aPVifUiQgWg\r^^\\\]cqxlht~wdjQcHfHuKUgxy~m{ecfkljnxzypfdifUiQgWg~_OVgdWkvumL__rZxfPWbfmX|{t`l~rdV~RvEIns{[_hRTqtXcOxt~_OVkXR^GcLjTw[^]YUWcwyncev{uhb\KX?_>nAKZirtoklptupifm~sbXkXR^GcLjwlqtfl[Wzuahpxftc\[ZVWhu}a]kp~l{prUiTwxP^[PiSu]gmkbXYezykbi}}tjz[^QJQB\EmLS^glmknxzk_y_xnt]PxP^[PiSuuyU\mmuZqY\x\~x|rWa||ohKl\szb\nsvzRCNweKJth{dco|WH\y{mVfMj`vqmqYjVY\SlmuyOw`guhs~rc^eusmvtfrW[OPSPaZsekprqppy}lfXYQ][oswwqYKOw`guhcIWr{n^e]_x}iznl{YJfwiweKdRfhgv\L`|fvqPbsjQwRen_j}vZZ}}|XgWquucVQ\XhymcQg}maajxpj`ZXW]amrhgQOFEONff|{|smqiRIQghuZaijUuUiutnRQr~xzRP__OsPSsS`uft]i^uhuZQlvvue]_fjo|t~do]hbnr||okuzwcbLLCBLHd\~sx~muewh{zxssyp[HDQlzsq\_zXUEAQbp}|{}fwdz|es{Ncgbz~wGk:lahkXeav{stRWtpv[mzsq\_Pn|xma\\Z^mue_xdus|wh]]l}ugfOTEHLHbS{cljaU|N{Q~c|x|ubN>>PniTXpFWVKSqyWNnqe\^yzqluoOl>b_khap}X`{kyxiTXNmƦȣujc^WWdvwf^czr}ub~V{T\ozwnrUfHZMR`RxY^ZRIDGXn||p^I::Nm[XXX~{{qfNMxUqYtosu}{_vYTUquw}VxZuu]{a[XLjūȮ{uqla[cryh`axoyy`sOgLfUpf~}~xv|t[}MsOga]x[]XRMKP_twdN<;LjwxTn\wxhapmUvijepQgfMrjcx]buIX{pUZicVW\YmurUG~Zx~aOv^Zn]eTbXxCr\^b\[xh|p^_Vc^wxTKf}rhjwtgad{nswjsP]CRIV]gux|urtt\ORdqzjiea_aftrZD>KfkXT}uswewOKSove{en^LUTO]e[^vvUsX]jOadUviwpYXvss^t[qW^ga^nQigJr`YjW`iomwmcsiekXpLvevzy{~srsd{^bpw{dgJR@KJUdkuorkVMSh}ywwzwrqu{}fvMqCpLverUTw\bpfhx_y}s|mmc||lzoxRS^Xb\yt~vrU\U_mgwyufoawciqus{i|`_gwui`QRGTOefvtn_RO[qwf^XW\djiicS]K\U_mgwr|r_~gz~~vtqv~xvd|ntMKc}|rp|R{v}ysojfiu\BHkhtbZtWvwftrr|r_NdL}O[juyubmNoJ~MWdormfdjv~frV]RS^Ywjzyj|_[Z`nv_OE?>EQ[w]fYXSVNdL}O[gyf~}fbs}v{nqt{vrrcx}N@R{z~m\XaU|y~uubLVdr]Olh|\{ibYnwl{gyPsGEKS\cvhXkEv@CN^oyxrmmr}r]zRjUcffpvtme_[\cn{xfTF;21:I{Xm_c_^YcPsGEKV}S_f}gorims|jneb`l}ybd_\q|ns|zNMlp|ritsV}c|UNLLOWyc_oNGGO_swpov~q_}Ws[qktxugXNNWcuxmcYOB63<~Nqbjoetfomc|UNL{To4v:bjuYsXvzfwYSNSzVTzlr\`hlodq[zzzzput~ztttfmnn{\oUgd]nh`{To4v}pe^TPVesxf]VWcu{}vpuvy{m{dxd|l|xbMCI|]swnkklgXHBzIs]psonot}pe^yhSy=yB[UnKb[{lfi|oPJ~r[Qzzxv|vcih}}x\Nvltxt}wch_kq}yUFVvvlXPQjyhSy=ywztdZ]ksf^botw{st}uuwmlpyf}NuEnNmfs}wvpkoyow\rRqWui|~zwwztlzmtqqYg\t]e\qs{sqyrwvLLUTvqo{^]{~s}{d\lzmtpmq{wgbj{pb_gxuqx{y~wmsuljmruq^jUe^eslx}tkg~np~pzugatbhkiyxypmq{{oj^wQhd~vyrh\{N]xlbSq]Sgvl|wt\f\wZ}Y^oYwu]u`afwzeOZ~y\]\]ksrunrv|{ooilxpccowhbfqsr~phqzpkkprtnnkukq|vh^^thwpqj]PKO]s|oilxbeg~\^hVpqs~tOdu[QpXV~b|ipskLOFXWx\mvi{VmPmz`P`zb]hchopvszberkp|tc^fqy||oxhrjnwx~ogq}vqqw|{xx{p_WxZ{^_[RG@BPhĎ̀rkp|KyK^`uhpdfuq|vn|YX^U{p_sY{}ojxwRoR~WsUxKyKwrzse`}dhhgugojqq}zw~{s~iq{xym^yYxZ[\YQFAH[v‚wrzeDa?upytbmVcJ\Kuf{a]|||t{bctjffh}wkm[mu}kxgYwGf[fh`nibzeDa?up{x{oixitm|kd_z`uivxxry|urzynq~|}nuepcvfkmhXJHSj{xLAT?}oseHuZQ]KXlmmY_y}{`[uzsZaoMQozemaY}]uizWqUmfgaok]tLAT?}oyvunmqyyvzne}dumt|x}ywrpwzxx|{uxntesexnz}nzZyPzV}iyvu[OVO|MORVsrqtNMw}c\KxKkvOPil}n{wt[OVOoivqomr{{rqyyuolttsx~wszyrtyv|l{dogfxir{wf|[{W[chghqjgmjqxty}oivqorvfqtq[Xx~gQqgO`w{wpNnfuwxyyU_xdrSVoarRMeK}u{u~tsVxjzqz~hUUU^{rvfqtqbZycuuv{~yf^bmyz|~yxxs{pmm\fP\OU_Xx`krpdyXwP~NPUY`gnsv{tbZycuu~u`VUr_ega[bror{~fMqdq{aXpslQF~SViS`uYlrhg[urv{qH@Uamx~u`WS]s|xfXTYgv~{{zz}w~mlcYZJREMRNiU_injq_kTpLJOZfqy~hWS]sebjwab}mps}t{^dlegqglehysnlkkef`SWk{webjRTby|y~sp~ynZLJWk}tqqv}ptdc[TWNTVQiS{Zfrzuhn\b]WmSYhxs]RTbyae}twu]W|plTGYrnxl\XlfpZb\`nqlrlobOS_WL]mqc[cUgd\OLoid[Vluae}R^pwt|qecoy`JBMe}umlr}vmuhliefj_v[^iyxcQuMkYfqm|dTR^p{z}ygawjntfTE]sytxdimS]{mdfKZ~~xuqfPQboFxNaiRpjklRQQwcff_[jkxVet{z}{W|j{rmov~usybX[jdJ@Jduoou|~{yy{|qgenhQGzOvfl}X{P{W|jlxjiishtaalrwjttvjiLvL`\tmV[NvN}nodhbwlxji__bvfqndadkrsrlgsYSXh}|bJAKd}|qkj{nspsuv{ysxzaRRauoeod^aQ_Q__bvfqqlSiNW]Jc[_q^yfT\|~rysub~]rhqTOd[uYHv^o}xzt­n^^Ypsawpsz]hwkqlSiNW]JCjIP\o~l_\`h~prtgqgfsZUYexs`KDMatymedzgtlsuv~xe[]gxoZvNbITDOAWCjIP\waNZaWttg[y}}wvx}ki_g{w[Otdpzou`fSZgevXzZzpvi~fu|Qr[vcXo~ogvxevOl\exuwaNZaW4u=HTduqd\Y`lxthbxjm{b^_euk`rPzLSblzrrzgaah}qxw||k`_jx|f~RqF_=S5T1a4u=HTv\qd}~W\lxvzb[pzhsggzw{lnye[jYdgoih|Wn\dv7DR\zdfmWvRW`opffvvnkklvjdgYgXj_nhrkrkmqdz`cmz}ts}wllxlaeqv{h}[vPfD\7`3m7DR\zÙj~R[xlX[j}yps|wh[Vwxt{q^{sn|tYRKI\]~[YaixwepÙIXipkoSmGnKu\oslr|xxyxzrjge`h`oeumrrlnogxcfr|mejziWS_wnmyvusohtXjInDyIXipkvp^cvnf|uqh{yuWYkv`Nsby]nyrmk[U^Obp{h^tdt}dllnvp^ne~NuEoPqg{wwx~rrpivhnyv{tpwg}gpq_VZjgPG}Pxgs|rwou_wX^neKKk~qrql|s]dukV[iJsKLaLcvixnjwrivbWu[UR}xKKkrpZQZ~nkejwxzxrs{}zukpckfetYMJSh~rXItKk[op{qtpkrpZTp{|fwa_IzJi}wbE>lKWPrhsG9ZN^reZlWOianzuj`Yp|ymlP]{ʕ|uVNDCZayJWyxibYpzZTp{|fodep~lXRYhx}wpqzwle`V_LkD?DTmeQtJePb`pww}}ytek{|g?{Bqy]WMpK[JX_ihKo@]Mg\_dWcrbw}mnotz^}`QbďgYSwPUQVog\v[_szodDT}tekvpqu{~sbPIN\lxxnghq}ne`O]Bi=}=G[ut^~PiN]Xenv{~~|ssrJgJutllbwp{qy|sY[}rnXUPlRhYv_l}XWMLrs~|tpquupf~XrOeP`Xeepp}qh_]euppeXbLnHIRd{o_wWd]cqozpoxsq~usj{elgBiJ~`xpxZsim\MwX|s}ezxZpnRldcpRc[V~ofmeWK^lPtgusj|rptyzv|kf`Q\I_Qgfp|ri]X~]k}ulpkexa]`k}{|rhsljnzwjcgtsa^jczqqkpbHRqi|XcLelx~s_ZWopud}ixpp|bUqokMX\vSkP]NoVldv_czqWlz|ftNnDoMve}vh_vatm|ssyoijvrt{sqwzob]drgSMWlc\pvxc\vxwXKXKvpecXmZf|^nwfi}|alfurmfizhcc\pEvWtitz|~mitw}`zV]swntom|u}{}mcrbllv|sqqpifpm~^Y]|fcnKt@wEvWtitz|upSpb]lqafhSxSqxmfmp|swh}InMqvddNfPc~nQfJiMhik{wu}STfjy{ua~E>VupSpb]lq6oCsRucv}o^Zg~|zot~uuyffur^lUc[jt|ui`ZRSc|vdRJ{M`WEa6i6oCsRuclRSR[`de_QGQX[lidzosubdydtfkj^fO_\l{}zw~_Jrbm~ox{iRRZpjF@RlRSR[`d1q;zHYmyxkZS_vxwxq{yf^eo~w^jQ]UbpuucVNHM`vnUE|DaMEZ3f1q;zHYbmldlmmmsg{}ws~wyWh\mvYYT`xneezvlifcv_ibmld9yDQautbW[lzwqs}jdnna]^gy|emX`]dxwxrqoatWROWk|dQ~MdUJa:m9yDQav]SIL^uwvWSrSVvOEyelzgfz_vWQaYzxzyoJA]jjuzWs:{;_vnxxiLZgvqb\wcqurtrumXQ]~vn`UUbyptgknov|hl\cZafd{fnyiegkRrHyLZgvrUdq^LXktrjlXQrQMasODn{mk`jeevXiz}|vJc=nb}jst\45apkupr^}q}lq^k\meut~ytrveNEOgmYP~Vviuy~vyplgYgPoWzjiXT^}q}svONjxR~TpurajqkKKnyd]^fsOTOQyP~Pz~xsvOhp{fep}mrbacZn^}hpnf_\_hyhPDK^s{zfvZn\fje~o|}zl`_ggWvUbvm^\hp{fep}{pJ[sRVf}\^||}r{nvvnnw}`jfXr`Ofr`fmpj{fgf]rjaRa||xzsy}{pJiezQKVdmmeXvSf[_lahleXLFHQalvVKN[hjudj\jVuU\iw|v{ʏЀiVPVvd_wW^pud`~iezQKVvPbqEGovxqd|xvvkzgKZivOujmh{ckfe|vl||~fPeyonrwvPfbsI~AJU\]WNwNl[iolqqdRClv_Vq~ovPmI]jL|hndjnfZh_]r~|{wtaejvkljOMrKkQvfkwarrg\OhlM`}jkteimomjgsmsz{{nuZ{OQ[gjtgrewg}o}vg_^ciifirvpqpnkiglvl\Zgw|u~wf^`}jkteimciN`unzmvZq[ff{”w{FoAzccRY~WwJ\bLel`oghv}qfvdpv~ZqUw}_R}ThKrTdnk}fmciN`unguss{lx\}Xaqtxuolqoilv}wpory~~~o\RVh{xuna_guzw]g]sa[mWd]zo_{c~uieqTdXlws^]KrK~tfwjszww{wy}~uf\]j}zoszuy~z~sr{wompty~zpfYKHSizyun|a^fw{vT7w@j|xvwvwpou]LenWlVvzka^zib_LgJy_{`:5SWRPDacztqe_LclsYNfca{ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh index ce164e02..0b9a60e4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh @@ -1,41 +1,41 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out float realisticWaterDisplacementOutput1f; - -uniform sampler2D u_noiseTexture; - -uniform vec4 u_waveTimer4f; - -void main() { - vec2 sampleA = v_position2f + vec2(-0.093, -0.056) * (u_waveTimer4f.x + 0.12); - sampleA = textureLod(u_noiseTexture, fract(sampleA) * 0.46875 + vec2(0.015625, 0.015625), 0.0).rg; - vec2 sampleB = v_position2f + vec2(0.075, 0.153) * (u_waveTimer4f.x + 1.33); - sampleB = textureLod(u_noiseTexture, fract(sampleB) * 0.46875 + vec2(0.515625, 0.015625), 0.0).rg; - vec2 sampleC = v_position2f + vec2(0.075, -0.113) * u_waveTimer4f.x + vec2(sampleA.g, sampleB.g) * 0.15; - sampleC = textureLod(u_noiseTexture, fract(sampleC) * 0.46875 + vec2(0.515625, 0.515625), 0.0).rg; - vec2 sampleD = v_position2f + vec2(-0.135, 0.092) * u_waveTimer4f.x + sampleC * 0.1; - sampleD = textureLod(u_noiseTexture, fract(sampleD) * 0.46875 + vec2(0.015625, 0.515625), 0.0).rg; - realisticWaterDisplacementOutput1f = dot(vec4(sampleA.r, sampleB.r, sampleC.r, sampleD.r), vec4(0.63, 0.40, 0.035, 0.035)) + dot(vec2(sampleC.g, sampleD.g), vec2(-0.075 * sampleA.g, 0.053 * sampleA.r)); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out float realisticWaterDisplacementOutput1f; + +uniform sampler2D u_noiseTexture; + +uniform vec4 u_waveTimer4f; + +void main() { + vec2 sampleA = v_position2f + vec2(-0.093, -0.056) * (u_waveTimer4f.x + 0.12); + sampleA = textureLod(u_noiseTexture, fract(sampleA) * 0.46875 + vec2(0.015625, 0.015625), 0.0).rg; + vec2 sampleB = v_position2f + vec2(0.075, 0.153) * (u_waveTimer4f.x + 1.33); + sampleB = textureLod(u_noiseTexture, fract(sampleB) * 0.46875 + vec2(0.515625, 0.015625), 0.0).rg; + vec2 sampleC = v_position2f + vec2(0.075, -0.113) * u_waveTimer4f.x + vec2(sampleA.g, sampleB.g) * 0.15; + sampleC = textureLod(u_noiseTexture, fract(sampleC) * 0.46875 + vec2(0.515625, 0.515625), 0.0).rg; + vec2 sampleD = v_position2f + vec2(-0.135, 0.092) * u_waveTimer4f.x + sampleC * 0.1; + sampleD = textureLod(u_noiseTexture, fract(sampleD) * 0.46875 + vec2(0.015625, 0.515625), 0.0).rg; + realisticWaterDisplacementOutput1f = dot(vec4(sampleA.r, sampleB.r, sampleC.r, sampleD.r), vec4(0.63, 0.40, 0.035, 0.035)) + dot(vec2(sampleC.g, sampleD.g), vec2(-0.075 * sampleA.g, 0.053 * sampleA.r)); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh index 7140a7a1..65bb3514 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh @@ -1,35 +1,35 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec2 realisticWaterNormalOutput2f; - -uniform sampler2D u_displacementTexture; -uniform vec2 u_sampleOffset2f; - -void main() { - float A = textureLod(u_displacementTexture, v_position2f, 0.0).r; - float B = textureLod(u_displacementTexture, v_position2f + vec2(u_sampleOffset2f.x, 0.0), 0.0).r; - float C = textureLod(u_displacementTexture, v_position2f - vec2(0.0, u_sampleOffset2f.y), 0.0).r; - realisticWaterNormalOutput2f = clamp((vec2(A * A) - vec2(B, C) * vec2(B, C)) * 10.0 + 0.5, vec2(0.0), vec2(1.0)); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec2 realisticWaterNormalOutput2f; + +uniform sampler2D u_displacementTexture; +uniform vec2 u_sampleOffset2f; + +void main() { + float A = textureLod(u_displacementTexture, v_position2f, 0.0).r; + float B = textureLod(u_displacementTexture, v_position2f + vec2(u_sampleOffset2f.x, 0.0), 0.0).r; + float C = textureLod(u_displacementTexture, v_position2f - vec2(0.0, u_sampleOffset2f.y), 0.0).r; + realisticWaterNormalOutput2f = clamp((vec2(A * A) - vec2(B, C) * vec2(B, C)) * 10.0 + 0.5, vec2(0.0), vec2(1.0)); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh index ae371ad1..15453ffc 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh @@ -1,435 +1,435 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision highp sampler2DShadow; - -in vec4 v_position4f; -in vec2 v_positionClip2f; - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 v_texture2f; -#else -uniform vec2 u_textureCoords01; -#endif - -uniform vec4 u_color4f; - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -in float v_block1f; -#else -uniform vec3 u_uniformNormal3f; -uniform float u_blockConstant1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#else -uniform vec2 u_textureCoords02; -#endif - -uniform mat4 u_inverseViewMatrix4f; -uniform mat4 u_modelViewProjMat4f_; - -layout(location = 0) out vec4 output4f; - -#ifdef COMPILE_DYNAMIC_LIGHTS -struct DynamicLight { - mediump vec4 u_lightPosition4f; - mediump vec4 u_lightColor4f; -}; -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - DynamicLight u_dynamicLightArray[12]; -}; -#endif - -layout(std140) uniform u_worldLightingData { - mediump vec4 u_sunDirection4f; - mediump vec4 u_sunColor3f_sky1f; - mediump vec4 u_fogParameters4f; - mediump vec4 u_fogColorLight4f; - mediump vec4 u_fogColorDark4f; - mediump vec4 u_fogColorAddSun4f; - mediump vec4 u_blockSkySunDynamicLightFac4f; -#ifdef COMPILE_SUN_SHADOW_LOD0 - mediump mat4 u_sunShadowMatrixLOD04f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 - mediump mat4 u_sunShadowMatrixLOD04f; - mediump mat4 u_sunShadowMatrixLOD14f; - mediump mat4 u_sunShadowMatrixLOD24f; -#define DO_COMPILE_SUN_SHADOWS -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif -}; - -#ifdef DO_COMPILE_SUN_SHADOWS -uniform sampler2DShadow u_sunShadowDepthTexture; -#ifdef COMPILE_SUN_SHADOW_SMOOTH -const vec2 POISSON_DISK[7] = vec2[]( -vec2(-0.077, 0.995), vec2(0.998, 0.015), -vec2(-0.116, -0.987), vec2(-0.916, 0.359), -vec2(-0.697, -0.511), vec2(0.740, -0.612), -vec2(0.675, 0.682)); -#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 -#define SMOOTH_SHADOW_RADIUS 0.00075 -#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ - tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ - tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ - tmpVec2.y += lod;\ - tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ - accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; -#endif -#endif - -uniform sampler2D u_environmentMap; -uniform sampler2D u_irradianceMap; -uniform sampler2D u_reflectionMap; -uniform sampler2D u_refractionMap; -uniform sampler2D u_brdfLUT; -uniform sampler2D u_normalMap; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -uniform sampler2D u_lightShaftsTexture; -#endif - -uniform vec4 u_waterWindOffset4f; -uniform vec3 u_wavingBlockOffset3f; - -#define WATER_ROUGHNESS 0.05 -#define WATER_F0 0.5 - -vec3 eaglercraftLighting_Water(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) { - float roughness = 1.0 - WATER_ROUGHNESS * 0.85; - vec3 H = normalize(viewDir + lightDir); - vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); - float NDF = (WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS); - float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; - NDF /= denom * denom * 3.141592; - float gs = WATER_ROUGHNESS + 1.0; - gs *= gs * 0.125; - vec2 Ndot = NdotHVL.yz; - Ndot /= Ndot * (1.0 - gs) + gs; - NDF *= Ndot.x * Ndot.y; - float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); - vec3 F = vec3(WATER_F0 + (1.0 - WATER_F0) * fresnel); - vec3 kD = (1.0 - F) * albedo / 3.141592; - denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; - return (kD + (NDF * F / denom)) * radiance * NdotHVL.z; -} - -vec3 eaglercraftIBL_Specular_Water(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) { - float NdotV = dot(normalVec, -viewDir); - float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); - vec3 F = vec3(WATER_F0 + (max(1.0 - WATER_ROUGHNESS, WATER_F0) - WATER_F0) * fresnel); - vec2 brdf2f = vec2(max(NdotV, 0.0), WATER_ROUGHNESS); - brdf2f = 1.0 - brdf2f; - brdf2f *= brdf2f; - brdf2f = 1.0 - brdf2f; - brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; - return envMapSample * (F * brdf2f.r + brdf2f.g); -} - -mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) { - vec3 dp1 = dFdx(p); - vec3 dp2 = dFdy(p); - vec2 duv1 = dFdx(uv); - vec2 duv2 = dFdy(uv); - vec3 dp2perp = cross(dp2, N); - vec3 dp1perp = cross(N, dp1); - vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; - vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; - float invmax = inversesqrt(max(dot(T,T), dot(B,B))); - return mat3(T * invmax, B * invmax, N); -} - -void main() { - vec4 worldPosition4f; - vec4 worldDirection4f; - vec4 diffuseColor4f; - vec3 normalVector3f; - vec2 lightmapCoords2f; - float block1f; - - // =========== RESOLVE CONSTANTS ============ // - - worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - worldPosition4f.w = 1.0; - worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); - worldDirection4f.xyz = normalize(worldDirection4f.xyz); - -#ifdef COMPILE_ENABLE_LIGHTMAP -#ifdef COMPILE_LIGHTMAP_ATTRIB - lightmapCoords2f = v_lightmap2f; -#else - lightmapCoords2f = u_textureCoords02; -#endif -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - normalVector3f = normalize(v_normal3f); - block1f = round(v_block1f); -#else - normalVector3f = u_uniformNormal3f; - block1f = u_blockConstant1f; -#endif - - normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); - - // ========= CALCULATE DIFFUSE COLOR ========== // - -#ifdef COMPILE_COLOR_ATTRIB - diffuseColor4f = v_color4f * u_color4f; -#else - diffuseColor4f = u_color4f; -#endif - - diffuseColor4f *= vec4(0.0478, 0.0585, 0.17, 1.0); - - // ======== SAMPLE REFLECT/REFRACT ======== // - -#ifdef COMPILE_TEXTURE_ATTRIB - vec2 texCoords2f = v_texture2f; -#else - vec2 texCoords2f = u_textureCoords01; -#endif - - vec4 worldPosition4fOff = worldPosition4f; - worldPosition4fOff.xyz += u_wavingBlockOffset3f; - - vec2 rotatedUV2f = worldPosition4fOff.xz + (block1f == 10.0 ? u_waterWindOffset4f.z * texCoords2f : u_waterWindOffset4f.xy); - rotatedUV2f *= (block1f == 10.0 ? 0.75 : 0.25); - mat3 cf = cotangent_frame(normalVector3f, worldDirection4f.xyz, rotatedUV2f); - vec3 surfaceNormalsMap3f = vec3(textureLod(u_normalMap, rotatedUV2f, 0.0).rg, 0.0); - surfaceNormalsMap3f.xy *= 2.0; - surfaceNormalsMap3f.xy -= 1.0; - - vec3 surfaceNormalsMapFlat3f = cf * surfaceNormalsMap3f; - surfaceNormalsMapFlat3f *= 0.1; - - surfaceNormalsMap3f.z = 8.0; - surfaceNormalsMap3f = normalize(surfaceNormalsMap3f); - normalVector3f = surfaceNormalsMap3f = cf * surfaceNormalsMap3f; - - vec4 worldPosition4fOff2 = worldPosition4f; - worldPosition4fOff2.xyz -= surfaceNormalsMapFlat3f * 4.0; - vec3 reflectCoordsR = mat4x3( - u_modelViewProjMat4f_[0].xyw, - u_modelViewProjMat4f_[1].xyw, - u_modelViewProjMat4f_[2].xyw, - u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2; - reflectCoordsR.xy /= reflectCoordsR.z; - reflectCoordsR.xy *= 0.5; - reflectCoordsR.xy += 0.5; - - worldPosition4fOff2 = worldPosition4f; - worldPosition4fOff2.xyz += surfaceNormalsMapFlat3f; - vec3 reflectCoordsL = mat4x3( - u_modelViewProjMat4f_[0].xyw, - u_modelViewProjMat4f_[1].xyw, - u_modelViewProjMat4f_[2].xyw, - u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2; - reflectCoordsL.xy /= reflectCoordsL.z; - reflectCoordsL.xy *= 0.5; - reflectCoordsL.xy += 0.5; - - vec4 envMapSample4f = textureLod(u_reflectionMap, reflectCoordsR.xy, 0.0); - vec4 refractionSample = textureLod(u_refractionMap, reflectCoordsL.xy, 0.0); - -#ifdef COMPILE_COLOR_ATTRIB - refractionSample *= v_color4f * v_color4f * u_color4f * u_color4f; -#else - refractionSample *= u_color4f * u_color4f; -#endif - - // ============ SUN LIGHTING ============== // - - diffuseColor4f.rgb *= diffuseColor4f.rgb; - - vec3 lightColor3f = vec3(0.0); - if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && - (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { -#ifdef DO_COMPILE_SUN_SHADOWS - - // ========== SUN SHADOW: LOD0 ============ // - - float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); - float shadowSample = 1.0; - vec4 shadowWorldPos4f = worldPosition4f; - shadowWorldPos4f.xyz += normalVector3f * 0.05; - - vec4 shadowTexPos4f; - vec2 tmpVec2; - for(;;) { - shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); -#ifdef COMPILE_SUN_SHADOW_SMOOTH - shadowSample *= SMOOTH_SHADOW_SAMPLES; - SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) - shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); -#endif - break; - } - -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 1.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; - if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { - shadowTexPos4f.y += 2.0; - shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); - } -#endif - break; - } -#endif - lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); -#ifdef DO_COMPILE_SUN_SHADOWS - lightColor3f *= shadowSample * skyLight; -#endif - lightColor3f = eaglercraftLighting_Water(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z; - } - - // =========== REFLECTION MAP =========== // - - lightmapCoords2f *= lightmapCoords2f; - - float e = 0.0; - e += envMapSample4f.g <= 0.0 ? 0.0 : 1.0; - e += lightmapCoords2f.y > 0.5 ? 0.0 : 1.0; - //e += abs(normalVector3f.y) > 0.1 ? 0.0 : 1.0; - if(e == 0.0) { - vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); - reflectDir.xz /= abs(reflectDir.y) + 1.0; - float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); - dst *= dst; - reflectDir.xz *= 0.975; - if(dst < 0.005) { - vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); - vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); - envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); - }else { - reflectDir.xz *= vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); - reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); - envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); - } - envMapSample4f.rgb *= (lightmapCoords2f.y * 2.0 - 1.0); - } - - if(envMapSample4f.g > 0.0) { - lightColor3f += eaglercraftIBL_Specular_Water(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * 0.5; - } - -#ifdef COMPILE_DYNAMIC_LIGHTS - - // =========== DYNAMIC LIGHTING =========== // - - vec3 dlightDist3f, dlightDir3f, dlightColor3f; - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this - for(int i = 0; i < safeLightCount; ++i) { - dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz; - dlightDir3f = normalize(dlightDist3f); - if(dot(dlightDir3f, normalVector3f) <= 0.0) { - continue; - } - dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); - if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { - continue; - } - lightColor3f += eaglercraftLighting_Water(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w; - } - -#endif - - // ============ CACLULATE FOG ============= // - - vec4 fogBlend4f = vec4(0.0); - while(u_fogParameters4f.x > 0.0) { - float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; - float type = u_fogParameters4f.x - atmos; - fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); - - float f, l = length(v_position4f.xyz); - if(type == 1.0) { - f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); - }else { - f = 1.0 - exp(-u_fogParameters4f.y * l); - } - - fogBlend4f.a *= clamp(f, 0.0, 1.0); - - if(atmos == 0.0) { - break; - } - - vec3 atmosSamplePos = v_position4f.xyz / -l; - atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0; - atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75; - atmosSamplePos.xz += vec2(0.5, 0.25); - - fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb + u_fogColorAddSun4f.rgb; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS - fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25); - fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1; -#endif - break; - } - - // ============ OUTPUT COLOR ============== // - - vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; - vec3 skyLight = (lightmapCoords2f.g + 0.05) * vec3(0.9102, 0.9, 1.0) * u_blockSkySunDynamicLightFac4f.y; - diffuseColor4f.rgb *= (skyLight + blockLight) * 0.075; - diffuseColor4f.rgb += lightColor3f; - diffuseColor4f.rgb = mix(diffuseColor4f.rgb + refractionSample.rgb, fogBlend4f.rgb, fogBlend4f.a); - output4f = vec4(diffuseColor4f.rgb, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision highp sampler2DShadow; + +in vec4 v_position4f; +in vec2 v_positionClip2f; + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#else +uniform vec2 u_textureCoords01; +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +in float v_block1f; +#else +uniform vec3 u_uniformNormal3f; +uniform float u_blockConstant1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#else +uniform vec2 u_textureCoords02; +#endif + +uniform mat4 u_inverseViewMatrix4f; +uniform mat4 u_modelViewProjMat4f_; + +layout(location = 0) out vec4 output4f; + +#ifdef COMPILE_DYNAMIC_LIGHTS +struct DynamicLight { + mediump vec4 u_lightPosition4f; + mediump vec4 u_lightColor4f; +}; +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + DynamicLight u_dynamicLightArray[12]; +}; +#endif + +layout(std140) uniform u_worldLightingData { + mediump vec4 u_sunDirection4f; + mediump vec4 u_sunColor3f_sky1f; + mediump vec4 u_fogParameters4f; + mediump vec4 u_fogColorLight4f; + mediump vec4 u_fogColorDark4f; + mediump vec4 u_fogColorAddSun4f; + mediump vec4 u_blockSkySunDynamicLightFac4f; +#ifdef COMPILE_SUN_SHADOW_LOD0 + mediump mat4 u_sunShadowMatrixLOD04f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 + mediump mat4 u_sunShadowMatrixLOD04f; + mediump mat4 u_sunShadowMatrixLOD14f; + mediump mat4 u_sunShadowMatrixLOD24f; +#define DO_COMPILE_SUN_SHADOWS +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif +}; + +#ifdef DO_COMPILE_SUN_SHADOWS +uniform sampler2DShadow u_sunShadowDepthTexture; +#ifdef COMPILE_SUN_SHADOW_SMOOTH +const vec2 POISSON_DISK[7] = vec2[]( +vec2(-0.077, 0.995), vec2(0.998, 0.015), +vec2(-0.116, -0.987), vec2(-0.916, 0.359), +vec2(-0.697, -0.511), vec2(0.740, -0.612), +vec2(0.675, 0.682)); +#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 +#define SMOOTH_SHADOW_RADIUS 0.00075 +#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ + tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ + tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ + tmpVec2.y += lod;\ + tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ + accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; +#endif +#endif + +uniform sampler2D u_environmentMap; +uniform sampler2D u_irradianceMap; +uniform sampler2D u_reflectionMap; +uniform sampler2D u_refractionMap; +uniform sampler2D u_brdfLUT; +uniform sampler2D u_normalMap; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +uniform sampler2D u_lightShaftsTexture; +#endif + +uniform vec4 u_waterWindOffset4f; +uniform vec3 u_wavingBlockOffset3f; + +#define WATER_ROUGHNESS 0.05 +#define WATER_F0 0.5 + +vec3 eaglercraftLighting_Water(in vec3 albedo, in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) { + float roughness = 1.0 - WATER_ROUGHNESS * 0.85; + vec3 H = normalize(viewDir + lightDir); + vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0)); + float NDF = (WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS * WATER_ROUGHNESS); + float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0; + NDF /= denom * denom * 3.141592; + float gs = WATER_ROUGHNESS + 1.0; + gs *= gs * 0.125; + vec2 Ndot = NdotHVL.yz; + Ndot /= Ndot * (1.0 - gs) + gs; + NDF *= Ndot.x * Ndot.y; + float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0); + vec3 F = vec3(WATER_F0 + (1.0 - WATER_F0) * fresnel); + vec3 kD = (1.0 - F) * albedo / 3.141592; + denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001; + return (kD + (NDF * F / denom)) * radiance * NdotHVL.z; +} + +vec3 eaglercraftIBL_Specular_Water(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) { + float NdotV = dot(normalVec, -viewDir); + float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0); + vec3 F = vec3(WATER_F0 + (max(1.0 - WATER_ROUGHNESS, WATER_F0) - WATER_F0) * fresnel); + vec2 brdf2f = vec2(max(NdotV, 0.0), WATER_ROUGHNESS); + brdf2f = 1.0 - brdf2f; + brdf2f *= brdf2f; + brdf2f = 1.0 - brdf2f; + brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg; + return envMapSample * (F * brdf2f.r + brdf2f.g); +} + +mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) { + vec3 dp1 = dFdx(p); + vec3 dp2 = dFdy(p); + vec2 duv1 = dFdx(uv); + vec2 duv2 = dFdy(uv); + vec3 dp2perp = cross(dp2, N); + vec3 dp1perp = cross(N, dp1); + vec3 T = dp2perp * duv1.x + dp1perp * duv2.x; + vec3 B = dp2perp * duv1.y + dp1perp * duv2.y; + float invmax = inversesqrt(max(dot(T,T), dot(B,B))); + return mat3(T * invmax, B * invmax, N); +} + +void main() { + vec4 worldPosition4f; + vec4 worldDirection4f; + vec4 diffuseColor4f; + vec3 normalVector3f; + vec2 lightmapCoords2f; + float block1f; + + // =========== RESOLVE CONSTANTS ============ // + + worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + worldPosition4f.w = 1.0; + worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0); + worldDirection4f.xyz = normalize(worldDirection4f.xyz); + +#ifdef COMPILE_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + lightmapCoords2f = v_lightmap2f; +#else + lightmapCoords2f = u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + normalVector3f = v_normal3f; + block1f = round(v_block1f); +#else + normalVector3f = u_uniformNormal3f; + block1f = u_blockConstant1f; +#endif + + normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f); + + // ========= CALCULATE DIFFUSE COLOR ========== // + +#ifdef COMPILE_COLOR_ATTRIB + diffuseColor4f = v_color4f * u_color4f; +#else + diffuseColor4f = u_color4f; +#endif + + diffuseColor4f *= vec4(0.0478, 0.0585, 0.17, 1.0); + + // ======== SAMPLE REFLECT/REFRACT ======== // + +#ifdef COMPILE_TEXTURE_ATTRIB + vec2 texCoords2f = v_texture2f; +#else + vec2 texCoords2f = u_textureCoords01; +#endif + + vec4 worldPosition4fOff = worldPosition4f; + worldPosition4fOff.xyz += u_wavingBlockOffset3f; + + vec2 rotatedUV2f = worldPosition4fOff.xz + (block1f == 10.0 ? u_waterWindOffset4f.z * texCoords2f : u_waterWindOffset4f.xy); + rotatedUV2f *= (block1f == 10.0 ? 0.75 : 0.25); + mat3 cf = cotangent_frame(normalVector3f, worldDirection4f.xyz, rotatedUV2f); + vec3 surfaceNormalsMap3f = vec3(textureLod(u_normalMap, rotatedUV2f, 0.0).rg, 0.0); + surfaceNormalsMap3f.xy *= 2.0; + surfaceNormalsMap3f.xy -= 1.0; + + vec3 surfaceNormalsMapFlat3f = cf * surfaceNormalsMap3f; + surfaceNormalsMapFlat3f *= 0.1; + + surfaceNormalsMap3f.z = 8.0; + surfaceNormalsMap3f = normalize(surfaceNormalsMap3f); + normalVector3f = surfaceNormalsMap3f = cf * surfaceNormalsMap3f; + + vec4 worldPosition4fOff2 = worldPosition4f; + worldPosition4fOff2.xyz -= surfaceNormalsMapFlat3f * 4.0; + vec3 reflectCoordsR = mat4x3( + u_modelViewProjMat4f_[0].xyw, + u_modelViewProjMat4f_[1].xyw, + u_modelViewProjMat4f_[2].xyw, + u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2; + reflectCoordsR.xy /= reflectCoordsR.z; + reflectCoordsR.xy *= 0.5; + reflectCoordsR.xy += 0.5; + + worldPosition4fOff2 = worldPosition4f; + worldPosition4fOff2.xyz += surfaceNormalsMapFlat3f; + vec3 reflectCoordsL = mat4x3( + u_modelViewProjMat4f_[0].xyw, + u_modelViewProjMat4f_[1].xyw, + u_modelViewProjMat4f_[2].xyw, + u_modelViewProjMat4f_[3].xyw) * worldPosition4fOff2; + reflectCoordsL.xy /= reflectCoordsL.z; + reflectCoordsL.xy *= 0.5; + reflectCoordsL.xy += 0.5; + + vec4 envMapSample4f = textureLod(u_reflectionMap, reflectCoordsR.xy, 0.0); + vec4 refractionSample = textureLod(u_refractionMap, reflectCoordsL.xy, 0.0); + +#ifdef COMPILE_COLOR_ATTRIB + refractionSample *= v_color4f * v_color4f * u_color4f * u_color4f; +#else + refractionSample *= u_color4f * u_color4f; +#endif + + // ============ SUN LIGHTING ============== // + + diffuseColor4f.rgb *= diffuseColor4f.rgb; + + vec3 lightColor3f = vec3(0.0); + if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 && + (u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) { +#ifdef DO_COMPILE_SUN_SHADOWS + + // ========== SUN SHADOW: LOD0 ============ // + + float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); + float shadowSample = 1.0; + vec4 shadowWorldPos4f = worldPosition4f; + shadowWorldPos4f.xyz += normalVector3f * 0.05; + + vec4 shadowTexPos4f; + vec2 tmpVec2; + for(;;) { + shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0); +#ifdef COMPILE_SUN_SHADOW_SMOOTH + shadowSample *= SMOOTH_SHADOW_SAMPLES; + SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2) + shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); +#endif + break; + } + +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 1.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f; + if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) { + shadowTexPos4f.y += 2.0; + shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0); + } +#endif + break; + } +#endif + lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0); +#ifdef DO_COMPILE_SUN_SHADOWS + lightColor3f *= shadowSample * skyLight; +#endif + lightColor3f = eaglercraftLighting_Water(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z; + } + + // =========== REFLECTION MAP =========== // + + lightmapCoords2f *= lightmapCoords2f; + + float e = 0.0; + e += envMapSample4f.g <= 0.0 ? 0.0 : 1.0; + e += lightmapCoords2f.y > 0.5 ? 0.0 : 1.0; + //e += abs(normalVector3f.y) > 0.1 ? 0.0 : 1.0; + if(e == 0.0) { + vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f); + reflectDir.xz /= abs(reflectDir.y) + 1.0; + float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz); + dst *= dst; + reflectDir.xz *= 0.975; + if(dst < 0.005) { + vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0); + vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0); + envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a)); + }else { + reflectDir.xz *= vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25); + reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75); + envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0); + } + envMapSample4f.rgb *= (lightmapCoords2f.y * 2.0 - 1.0); + } + + if(envMapSample4f.g > 0.0) { + lightColor3f += eaglercraftIBL_Specular_Water(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * 0.5; + } + +#ifdef COMPILE_DYNAMIC_LIGHTS + + // =========== DYNAMIC LIGHTING =========== // + + vec3 dlightDist3f, dlightDir3f, dlightColor3f; + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this + for(int i = 0; i < safeLightCount; ++i) { + dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz; + dlightDir3f = normalize(dlightDist3f); + if(dot(dlightDir3f, normalVector3f) <= 0.0) { + continue; + } + dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f); + if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) { + continue; + } + lightColor3f += eaglercraftLighting_Water(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w; + } + +#endif + + // ============ CACLULATE FOG ============= // + + vec4 fogBlend4f = vec4(0.0); + while(u_fogParameters4f.x > 0.0) { + float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0; + float type = u_fogParameters4f.x - atmos; + fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g); + + float f, l = length(v_position4f.xyz); + if(type == 1.0) { + f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z); + }else { + f = 1.0 - exp(-u_fogParameters4f.y * l); + } + + fogBlend4f.a *= clamp(f, 0.0, 1.0); + + if(atmos == 0.0) { + break; + } + + vec3 atmosSamplePos = v_position4f.xyz / -l; + atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0; + atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75; + atmosSamplePos.xz += vec2(0.5, 0.25); + + fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb + u_fogColorAddSun4f.rgb; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS + fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25); + fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1; +#endif + break; + } + + // ============ OUTPUT COLOR ============== // + + vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x; + vec3 skyLight = (lightmapCoords2f.g + 0.05) * vec3(0.9102, 0.9, 1.0) * u_blockSkySunDynamicLightFac4f.y; + diffuseColor4f.rgb *= (skyLight + blockLight) * 0.075; + diffuseColor4f.rgb += lightColor3f; + diffuseColor4f.rgb = mix(diffuseColor4f.rgb + refractionSample.rgb, fogBlend4f.rgb, fogBlend4f.a); + output4f = vec4(diffuseColor4f.rgb, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh index 3f533e09..b4e04e1f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh @@ -1,82 +1,82 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -out vec4 v_position4f; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS -out vec2 v_positionClip2f; -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 a_texture2f; -out vec2 v_texture2f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 a_color4f; -out vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -out float v_block1f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; -uniform mat4 u_projectionMat4f; - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { - v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); - -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif - -#ifdef COMPILE_COLOR_ATTRIB - v_color4f = a_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); - v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - - gl_Position = u_projectionMat4f * v_position4f; - -#ifdef COMPILE_FOG_LIGHT_SHAFTS - v_positionClip2f = gl_Position.xy / gl_Position.w; -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +out vec4 v_position4f; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS +out vec2 v_positionClip2f; +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 a_color4f; +out vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +out float v_block1f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); + v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + + gl_Position = u_projectionMat4f * v_position4f; + +#ifdef COMPILE_FOG_LIGHT_SHAFTS + v_positionClip2f = gl_Position.xy / gl_Position.w; +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh index 70e8a4c9..a6cd2f25 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh @@ -1,238 +1,238 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -#ifdef COMPILE_REPROJECT_SSAO -layout(location = 0) out vec4 reprojectionSSAOOutput4f; -#ifdef COMPILE_REPROJECT_SSR -layout(location = 1) out vec4 reprojectionReflectionOutput4f; -layout(location = 2) out vec4 reprojectionHitVectorOutput4f; -#endif -#else -layout(location = 0) out vec4 reprojectionReflectionOutput4f; -layout(location = 1) out vec4 reprojectionHitVectorOutput4f; -#endif - -uniform sampler2D u_gbufferDepthTexture; -#ifdef COMPILE_REPROJECT_SSAO -uniform sampler2D u_ssaoSampleTexture; -// R: ssao history length -// G: ssao value -// B: pixel opacity -// A: padding -uniform sampler2D u_reprojectionSSAOInput4f; -#endif - -#ifdef COMPILE_REPROJECT_SSR -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_gbufferMaterialTexture; - -// R: reflection R -// G: reflection G -// B: reflection B -// A: current step -uniform sampler2D u_reprojectionReflectionInput4f; - -// R: relative X of reflected pixel from origin -// G: relative Y of reflected pixel from origin -// B: relative Z of reflected pixel from origin -// A: is reflected flag -uniform sampler2D u_reprojectionHitVectorInput4f; - -uniform sampler2D u_lastFrameColorInput4f; - -uniform mat4 u_projectionMatrix4f; -uniform mat4 u_inverseProjectionMatrix4f; -uniform mat4 u_lastInverseProjMatrix4f; - -// matrix to transform view pos in old frame to view pos in current frame -uniform mat4 u_reprojectionInverseViewMatrix4f; -uniform mat4 u_viewToPreviousProjMatrix4f; - -#endif - -uniform sampler2D u_reprojectionDepthTexture; - -uniform mat4 u_inverseViewProjMatrix4f; -uniform mat4 u_reprojectionMatrix4f; - -// x = near plane -// y = far plane -// z = near plane * 2 -// w = far plane - near plane -uniform vec4 u_nearFarPlane4f; - -uniform vec4 u_pixelAlignment4f; - -#define reprojDepthLimit 0.25 - -#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w)) - -#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw) - -void main() { - vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); -#ifdef COMPILE_REPROJECT_SSAO - reprojectionSSAOOutput4f = vec4(0.0, 1.0, 0.0, 0.0); -#endif -#ifdef COMPILE_REPROJECT_SSR - reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); -#endif - float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; - - if(fragDepth < 0.000001) { - return; - } - - vec4 fragClipSpacePos4f = vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0; - vec4 fragPos4f = u_inverseViewProjMatrix4f * fragClipSpacePos4f; - fragPos4f.xyz /= fragPos4f.w; - fragPos4f.w = 1.0; - vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f; - vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0); - reprojPos4f = reprojClipPos4f; - reprojPos4f.xyz *= 0.5; - reprojPos4f.xyz += 0.5; - reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); - if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_reprojectionDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) { -#ifdef COMPILE_REPROJECT_SSAO - reprojectionSSAOOutput4f = vec4(0.01, textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, 1.0, 0.0); -#endif -#ifdef COMPILE_REPROJECT_SSR - reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0); -#endif - return; - } - -#ifdef COMPILE_REPROJECT_SSAO - vec4 reprojectionSSAOInput4f = textureLod(u_reprojectionSSAOInput4f, reprojPos4f.xy, 0.0); - reprojectionSSAOInput4f.g = mix(textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, reprojectionSSAOInput4f.g, min(reprojectionSSAOInput4f.r * 10.0, 0.85)); - reprojectionSSAOInput4f.r = min(reprojectionSSAOInput4f.r + 0.01, 1.0); - reprojectionSSAOInput4f.b = 1.0; - reprojectionSSAOOutput4f = reprojectionSSAOInput4f; -#endif - -#ifdef COMPILE_REPROJECT_SSR - vec4 materials = textureLod(u_gbufferMaterialTexture, v_position2f2, 0.0); - float f = materials.g < 0.06 ? 1.0 : 0.0; - f += materials.r < 0.5 ? 1.0 : 0.0; - f += materials.a > 0.5 ? 1.0 : 0.0; - if(f > 0.0) { - return; - } - - vec4 lastFrameHitVector4f = textureLod(u_reprojectionHitVectorInput4f, reprojPos4f.xy, 0.0); - if(lastFrameHitVector4f.g <= 0.0) { - reprojectionReflectionOutput4f = textureLod(u_reprojectionReflectionInput4f, reprojPos4f.xy, 0.0); - reprojectionReflectionOutput4f.a = max(reprojectionReflectionOutput4f.a - 1.0, 1.0); - reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a); - return; - } - - reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0); - - lastFrameHitVector4f.g -= 0.0004; - - vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0); - lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w; - lastFrameFragPosView4f.w = 1.0; - vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0); - - vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f; - thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w; - thisFrameHitPos4f.w = 1.0; - - vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f; - thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; - thisFrameHitPosProj4f.w = 1.0; - vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; - - if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { - return; - } - - float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; - vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); - thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; - - if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) { - return; - } - - vec3 lastFrameHitPosNormal3f = textureLod(u_gbufferNormalTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb; - lastFrameHitPosNormal3f *= 2.0; - lastFrameHitPosNormal3f -= 1.0; - - vec3 currentNormal3f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0).xyz; - currentNormal3f *= 2.0; - currentNormal3f -= 1.0; - - vec4 fragPosView4f = u_inverseProjectionMatrix4f * fragClipSpacePos4f; - fragPosView4f.xyz /= fragPosView4f.w; - fragPosView4f.w = 1.0; - - vec3 rayOrigin = fragPosView4f.xyz; - vec3 planePos = thisFrameHitPos4f.xyz; - vec3 planeNormal = lastFrameHitPosNormal3f; - - vec3 newRayDirection = reflect(normalize(rayOrigin), currentNormal3f.xyz); - - float dist = dot(planeNormal, newRayDirection); - if(dist > 0.9) { - return; - } - - dist = dot(planeNormal, planePos - rayOrigin) / dist; - if(dist < 0.0) { - return; - } - - reprojectionHitVectorOutput4f = vec4(newRayDirection * dist, 1.0); - reprojectionHitVectorOutput4f.y += 0.0004; - - thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0); - thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; - thisFrameHitPosProj4f.w = 1.0; - thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; - - if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { - return; - } - - fragDepthSample = textureLod(u_reprojectionDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; - - vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f; - thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y; - - thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); - thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; - - if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) { - reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - return; - } - - reprojectionReflectionOutput4f = vec4(textureLod(u_lastFrameColorInput4f, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +#ifdef COMPILE_REPROJECT_SSAO +layout(location = 0) out vec4 reprojectionSSAOOutput4f; +#ifdef COMPILE_REPROJECT_SSR +layout(location = 1) out vec4 reprojectionReflectionOutput4f; +layout(location = 2) out vec4 reprojectionHitVectorOutput4f; +#endif +#else +layout(location = 0) out vec4 reprojectionReflectionOutput4f; +layout(location = 1) out vec4 reprojectionHitVectorOutput4f; +#endif + +uniform sampler2D u_gbufferDepthTexture; +#ifdef COMPILE_REPROJECT_SSAO +uniform sampler2D u_ssaoSampleTexture; +// R: ssao history length +// G: ssao value +// B: pixel opacity +// A: padding +uniform sampler2D u_reprojectionSSAOInput4f; +#endif + +#ifdef COMPILE_REPROJECT_SSR +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_gbufferMaterialTexture; + +// R: reflection R +// G: reflection G +// B: reflection B +// A: current step +uniform sampler2D u_reprojectionReflectionInput4f; + +// R: relative X of reflected pixel from origin +// G: relative Y of reflected pixel from origin +// B: relative Z of reflected pixel from origin +// A: is reflected flag +uniform sampler2D u_reprojectionHitVectorInput4f; + +uniform sampler2D u_lastFrameColorInput4f; + +uniform mat4 u_projectionMatrix4f; +uniform mat4 u_inverseProjectionMatrix4f; +uniform mat4 u_lastInverseProjMatrix4f; + +// matrix to transform view pos in old frame to view pos in current frame +uniform mat4 u_reprojectionInverseViewMatrix4f; +uniform mat4 u_viewToPreviousProjMatrix4f; + +#endif + +uniform sampler2D u_reprojectionDepthTexture; + +uniform mat4 u_inverseViewProjMatrix4f; +uniform mat4 u_reprojectionMatrix4f; + +// x = near plane +// y = far plane +// z = near plane * 2 +// w = far plane - near plane +uniform vec4 u_nearFarPlane4f; + +uniform vec4 u_pixelAlignment4f; + +#define reprojDepthLimit 0.25 + +#define GET_LINEAR_DEPTH_FROM_VALUE(depthSample) (u_nearFarPlane4f.z / (u_nearFarPlane4f.y + u_nearFarPlane4f.x + (depthSample * 2.0 - 1.0) * u_nearFarPlane4f.w)) + +#define CREATE_DEPTH_MATRIX(matrix4fInput) mat4x2(matrix4fInput[0].zw,matrix4fInput[1].zw,matrix4fInput[2].zw,matrix4fInput[3].zw) + +void main() { + vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); +#ifdef COMPILE_REPROJECT_SSAO + reprojectionSSAOOutput4f = vec4(0.0, 1.0, 0.0, 0.0); +#endif +#ifdef COMPILE_REPROJECT_SSR + reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); +#endif + float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; + + if(fragDepth < 0.000001) { + return; + } + + vec4 fragClipSpacePos4f = vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0; + vec4 fragPos4f = u_inverseViewProjMatrix4f * fragClipSpacePos4f; + fragPos4f.xyz /= fragPos4f.w; + fragPos4f.w = 1.0; + vec4 reprojPos4f = u_reprojectionMatrix4f * fragPos4f; + vec4 reprojClipPos4f = vec4(reprojPos4f.xyz / reprojPos4f.w, 1.0); + reprojPos4f = reprojClipPos4f; + reprojPos4f.xyz *= 0.5; + reprojPos4f.xyz += 0.5; + reprojPos4f.xy = (floor(reprojPos4f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); + if(reprojPos4f.xy != clamp(reprojPos4f.xy, vec2(0.001), vec2(0.999)) || abs(GET_LINEAR_DEPTH_FROM_VALUE(textureLod(u_reprojectionDepthTexture, reprojPos4f.xy, 0.0).r) - GET_LINEAR_DEPTH_FROM_VALUE(reprojPos4f.z)) > reprojDepthLimit) { +#ifdef COMPILE_REPROJECT_SSAO + reprojectionSSAOOutput4f = vec4(0.01, textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, 1.0, 0.0); +#endif +#ifdef COMPILE_REPROJECT_SSR + reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 50.0); +#endif + return; + } + +#ifdef COMPILE_REPROJECT_SSAO + vec4 reprojectionSSAOInput4f = textureLod(u_reprojectionSSAOInput4f, reprojPos4f.xy, 0.0); + reprojectionSSAOInput4f.g = mix(textureLod(u_ssaoSampleTexture, v_position2f, 0.0).r, reprojectionSSAOInput4f.g, min(reprojectionSSAOInput4f.r * 10.0, 0.85)); + reprojectionSSAOInput4f.r = min(reprojectionSSAOInput4f.r + 0.01, 1.0); + reprojectionSSAOInput4f.b = 1.0; + reprojectionSSAOOutput4f = reprojectionSSAOInput4f; +#endif + +#ifdef COMPILE_REPROJECT_SSR + vec4 materials = textureLod(u_gbufferMaterialTexture, v_position2f2, 0.0); + float f = materials.g < 0.06 ? 1.0 : 0.0; + f += materials.r < 0.5 ? 1.0 : 0.0; + f += materials.a > 0.5 ? 1.0 : 0.0; + if(f > 0.0) { + return; + } + + vec4 lastFrameHitVector4f = textureLod(u_reprojectionHitVectorInput4f, reprojPos4f.xy, 0.0); + if(lastFrameHitVector4f.g <= 0.0) { + reprojectionReflectionOutput4f = textureLod(u_reprojectionReflectionInput4f, reprojPos4f.xy, 0.0); + reprojectionReflectionOutput4f.a = max(reprojectionReflectionOutput4f.a - 1.0, 1.0); + reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, lastFrameHitVector4f.a); + return; + } + + reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 1.0); + + lastFrameHitVector4f.g -= 0.0004; + + vec4 lastFrameFragPosView4f = u_lastInverseProjMatrix4f * vec4(reprojClipPos4f.xyz, 1.0); + lastFrameFragPosView4f.xyz /= lastFrameFragPosView4f.w; + lastFrameFragPosView4f.w = 1.0; + vec4 lastFrameHitPos4f = vec4(lastFrameFragPosView4f.xyz + lastFrameHitVector4f.xyz, 1.0); + + vec4 thisFrameHitPos4f = u_reprojectionInverseViewMatrix4f * lastFrameHitPos4f; + thisFrameHitPos4f.xyz /= thisFrameHitPos4f.w; + thisFrameHitPos4f.w = 1.0; + + vec4 thisFrameHitPosProj4f = u_projectionMatrix4f * thisFrameHitPos4f; + thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; + thisFrameHitPosProj4f.w = 1.0; + vec3 thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; + + if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { + return; + } + + float fragDepthSample = textureLod(u_gbufferDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; + vec2 thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_inverseProjectionMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); + thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; + + if(thisFrameHitPosProjDepthPos.x - thisFrameHitPos4f.z - 0.125 < 0.0) { + return; + } + + vec3 lastFrameHitPosNormal3f = textureLod(u_gbufferNormalTexture, thisFrameHitPosProjTex3f.xy, 0.0).rgb; + lastFrameHitPosNormal3f *= 2.0; + lastFrameHitPosNormal3f -= 1.0; + + vec3 currentNormal3f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0).xyz; + currentNormal3f *= 2.0; + currentNormal3f -= 1.0; + + vec4 fragPosView4f = u_inverseProjectionMatrix4f * fragClipSpacePos4f; + fragPosView4f.xyz /= fragPosView4f.w; + fragPosView4f.w = 1.0; + + vec3 rayOrigin = fragPosView4f.xyz; + vec3 planePos = thisFrameHitPos4f.xyz; + vec3 planeNormal = lastFrameHitPosNormal3f; + + vec3 newRayDirection = reflect(normalize(rayOrigin), currentNormal3f.xyz); + + float dist = dot(planeNormal, newRayDirection); + if(dist > 0.9) { + return; + } + + dist = dot(planeNormal, planePos - rayOrigin) / dist; + if(dist < 0.0) { + return; + } + + reprojectionHitVectorOutput4f = vec4(newRayDirection * dist, 1.0); + reprojectionHitVectorOutput4f.y += 0.0004; + + thisFrameHitPosProj4f = u_viewToPreviousProjMatrix4f * vec4(rayOrigin + newRayDirection * dist, 1.0); + thisFrameHitPosProj4f.xyz /= thisFrameHitPosProj4f.w; + thisFrameHitPosProj4f.w = 1.0; + thisFrameHitPosProjTex3f = thisFrameHitPosProj4f.xyz * 0.5 + 0.5; + + if(thisFrameHitPosProjTex3f.xy != clamp(thisFrameHitPosProjTex3f.xy, vec2(0.001), vec2(0.999))) { + return; + } + + fragDepthSample = textureLod(u_reprojectionDepthTexture, thisFrameHitPosProjTex3f.xy, 0.0).r * 2.0 - 1.0; + + vec2 thisFrameHitPosProjPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * thisFrameHitPosProj4f; + thisFrameHitPosProjPos.x /= thisFrameHitPosProjPos.y; + + thisFrameHitPosProjDepthPos = CREATE_DEPTH_MATRIX(u_lastInverseProjMatrix4f) * vec4(thisFrameHitPosProj4f.xy, fragDepthSample, 1.0); + thisFrameHitPosProjDepthPos.x /= thisFrameHitPosProjDepthPos.y; + + if(thisFrameHitPosProjDepthPos.x - thisFrameHitPosProjPos.x - 0.125 < 0.0) { + reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + + reprojectionReflectionOutput4f = vec4(textureLod(u_lastFrameColorInput4f, thisFrameHitPosProjTex3f.xy, 0.0).rgb, 0.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh index 30f9d965..343826ad 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh @@ -1,112 +1,112 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 reflectionOutput4f; -layout(location = 1) out vec4 hitVectorOutput4f; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_reprojectionReflectionInput4f; -uniform sampler2D u_reprojectionHitVectorInput4f; -uniform sampler2D u_lastFrameColorInput4f; -uniform sampler2D u_lastFrameDepthInput; - -uniform mat4 u_lastProjectionMatrix4f; -uniform mat4x2 u_lastInverseProjMatrix4x2f; - -uniform mat4 u_inverseProjectionMatrix4f; - -uniform float u_sampleStep1f; - -uniform vec4 u_pixelAlignment4f; - -#define maxAge 55.0 -#define maxSamples 50.0 - -void main() { - vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); - reflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - hitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); - float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; - - if(fragDepth < 0.000001) { - return; - } - - vec4 reflectionInput4f = textureLod(u_reprojectionReflectionInput4f, v_position2f, 0.0); - vec4 hitVectorInput4f = textureLod(u_reprojectionHitVectorInput4f, v_position2f, 0.0); - hitVectorInput4f.a += 1.0; - float f = reflectionInput4f.a < 1.0 ? 1.0 : reflectionInput4f.a; - reflectionInput4f.a = hitVectorInput4f.a > maxAge ? f : reflectionInput4f.a; - if(reflectionInput4f.a < 1.0) { - reflectionOutput4f = reflectionInput4f; - hitVectorOutput4f = hitVectorInput4f; - return; - } - - vec4 fragPos4f = u_inverseProjectionMatrix4f * (vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0); - fragPos4f.xyz /= fragPos4f.w; - fragPos4f.w = 1.0; - vec4 reflectionNormal4f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0); - reflectionNormal4f.xyz *= 2.0; - reflectionNormal4f.xyz -= 1.0; - reflectionNormal4f.xyz = reflect(normalize(fragPos4f.xyz), reflectionNormal4f.xyz); - reflectionNormal4f.w = 1.0; - float sampleStepMod = (reflectionInput4f.a * 0.03 + 0.15 + length(fragPos4f.xyz) * 0.03) * u_sampleStep1f; - vec3 sampleOffset3f = reflectionNormal4f.xyz * reflectionInput4f.a * sampleStepMod; - fragPos4f.xyz += sampleOffset3f; - reflectionNormal4f = u_lastProjectionMatrix4f * fragPos4f; - reflectionNormal4f.xyz /= reflectionNormal4f.w; - reflectionNormal4f.w = 1.0; - vec3 reflectionSamplePos3f = reflectionNormal4f.xyz; - reflectionSamplePos3f *= 0.5; - reflectionSamplePos3f += 0.5; - reflectionSamplePos3f.xy = (floor(reflectionSamplePos3f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); - - if(clamp(reflectionSamplePos3f.xy, vec2(0.001), vec2(0.999)) != reflectionSamplePos3f.xy) { - return; - } - - float reflectDepthSample = textureLod(u_lastFrameDepthInput, reflectionSamplePos3f.xy, 0.0).r; - vec2 sampleFragDepth = u_lastInverseProjMatrix4x2f * vec4(reflectionNormal4f.xy, reflectDepthSample * 2.0 - 1.0, 1.0); - sampleFragDepth.x /= sampleFragDepth.y; - - reflectDepthSample = sampleFragDepth.x - fragPos4f.z; - if(reflectDepthSample < sampleStepMod * 3.0) { - reflectionInput4f.a += 1.0; - reflectionOutput4f = reflectionInput4f.a >= maxSamples ? vec4(0.0, 0.0, 0.0, 0.0) : reflectionInput4f; - hitVectorOutput4f = vec4(0.0, 0.0, 0.0, hitVectorInput4f.a); - return; - } - - if(abs(reflectDepthSample) > sampleStepMod * 6.0) { - return; - } - - vec4 colorSample = textureLod(u_lastFrameColorInput4f, reflectionSamplePos3f.xy, 0.0); - reflectionOutput4f = vec4(colorSample.rgb, 0.0); - reflectionOutput4f.g += 0.0005; - hitVectorOutput4f = vec4(colorSample.a > 0.0 ? sampleOffset3f : vec3(0.0), 0.0); - hitVectorOutput4f.g += colorSample.a > 0.0 ? 0.0004 : 0.0; -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 reflectionOutput4f; +layout(location = 1) out vec4 hitVectorOutput4f; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_reprojectionReflectionInput4f; +uniform sampler2D u_reprojectionHitVectorInput4f; +uniform sampler2D u_lastFrameColorInput4f; +uniform sampler2D u_lastFrameDepthInput; + +uniform mat4 u_lastProjectionMatrix4f; +uniform mat4x2 u_lastInverseProjMatrix4x2f; + +uniform mat4 u_inverseProjectionMatrix4f; + +uniform float u_sampleStep1f; + +uniform vec4 u_pixelAlignment4f; + +#define maxAge 55.0 +#define maxSamples 50.0 + +void main() { + vec2 v_position2f2 = (floor(v_position2f * u_pixelAlignment4f.xy) + 0.25) * (2.0 / u_pixelAlignment4f.zw); + reflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + hitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0); + float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r; + + if(fragDepth < 0.000001) { + return; + } + + vec4 reflectionInput4f = textureLod(u_reprojectionReflectionInput4f, v_position2f, 0.0); + vec4 hitVectorInput4f = textureLod(u_reprojectionHitVectorInput4f, v_position2f, 0.0); + hitVectorInput4f.a += 1.0; + float f = reflectionInput4f.a < 1.0 ? 1.0 : reflectionInput4f.a; + reflectionInput4f.a = hitVectorInput4f.a > maxAge ? f : reflectionInput4f.a; + if(reflectionInput4f.a < 1.0) { + reflectionOutput4f = reflectionInput4f; + hitVectorOutput4f = hitVectorInput4f; + return; + } + + vec4 fragPos4f = u_inverseProjectionMatrix4f * (vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0); + fragPos4f.xyz /= fragPos4f.w; + fragPos4f.w = 1.0; + vec4 reflectionNormal4f = textureLod(u_gbufferNormalTexture, v_position2f2, 0.0); + reflectionNormal4f.xyz *= 2.0; + reflectionNormal4f.xyz -= 1.0; + reflectionNormal4f.xyz = reflect(normalize(fragPos4f.xyz), reflectionNormal4f.xyz); + reflectionNormal4f.w = 1.0; + float sampleStepMod = (reflectionInput4f.a * 0.03 + 0.15 + length(fragPos4f.xyz) * 0.03) * u_sampleStep1f; + vec3 sampleOffset3f = reflectionNormal4f.xyz * reflectionInput4f.a * sampleStepMod; + fragPos4f.xyz += sampleOffset3f; + reflectionNormal4f = u_lastProjectionMatrix4f * fragPos4f; + reflectionNormal4f.xyz /= reflectionNormal4f.w; + reflectionNormal4f.w = 1.0; + vec3 reflectionSamplePos3f = reflectionNormal4f.xyz; + reflectionSamplePos3f *= 0.5; + reflectionSamplePos3f += 0.5; + reflectionSamplePos3f.xy = (floor(reflectionSamplePos3f.xy * u_pixelAlignment4f.zw) + 0.5) * (0.5 / u_pixelAlignment4f.xy); + + if(clamp(reflectionSamplePos3f.xy, vec2(0.001), vec2(0.999)) != reflectionSamplePos3f.xy) { + return; + } + + float reflectDepthSample = textureLod(u_lastFrameDepthInput, reflectionSamplePos3f.xy, 0.0).r; + vec2 sampleFragDepth = u_lastInverseProjMatrix4x2f * vec4(reflectionNormal4f.xy, reflectDepthSample * 2.0 - 1.0, 1.0); + sampleFragDepth.x /= sampleFragDepth.y; + + reflectDepthSample = sampleFragDepth.x - fragPos4f.z; + if(reflectDepthSample < sampleStepMod * 3.0) { + reflectionInput4f.a += 1.0; + reflectionOutput4f = reflectionInput4f.a >= maxSamples ? vec4(0.0, 0.0, 0.0, 0.0) : reflectionInput4f; + hitVectorOutput4f = vec4(0.0, 0.0, 0.0, hitVectorInput4f.a); + return; + } + + if(abs(reflectDepthSample) > sampleStepMod * 6.0) { + return; + } + + vec4 colorSample = textureLod(u_lastFrameColorInput4f, reflectionSamplePos3f.xy, 0.0); + reflectionOutput4f = vec4(colorSample.rgb, 0.0); + reflectionOutput4f.g += 0.0005; + hitVectorOutput4f = vec4(colorSample.a > 0.0 ? sampleOffset3f : vec3(0.0), 0.0); + hitVectorOutput4f.g += colorSample.a > 0.0 ? 0.0004 : 0.0; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png index 1b0f1d18..cef31b93 100644 Binary files a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png and b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_icon.png differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json index 48660544..0d985460 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json @@ -1,24 +1,24 @@ -{ - "name": "§eHigh Performance PBR", - "desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion", - "vers": "1.2.2", - "author": "lax1dude", - "api_vers": 1, - "features": [ - "WAVING_BLOCKS", - "DYNAMIC_LIGHTS", - "GLOBAL_AMBIENT_OCCLUSION", - "SHADOWS_SUN", - "SHADOWS_COLORED", - "SHADOWS_SMOOTHED", - "REFLECTIONS_PARABOLOID", - "REFLECTIONS_ROUGHNESS", - "REALISTIC_WATER", - "LIGHT_SHAFTS", - "SCREEN_SPACE_REFLECTIONS", - "POST_LENS_DISTORION", - "POST_LENS_FLARES", - "POST_BLOOM", - "POST_FXAA" - ] -} \ No newline at end of file +{ + "name": "§eHigh Performance PBR", + "desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion", + "vers": "1.2.2", + "author": "lax1dude", + "api_vers": 1, + "features": [ + "WAVING_BLOCKS", + "DYNAMIC_LIGHTS", + "GLOBAL_AMBIENT_OCCLUSION", + "SHADOWS_SUN", + "SHADOWS_COLORED", + "SHADOWS_SMOOTHED", + "REFLECTIONS_PARABOLOID", + "REFLECTIONS_ROUGHNESS", + "REALISTIC_WATER", + "LIGHT_SHAFTS", + "SCREEN_SPACE_REFLECTIONS", + "POST_LENS_DISTORION", + "POST_LENS_FLARES", + "POST_BLOOM", + "POST_FXAA" + ] +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh index a11645ee..cc466ed5 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh @@ -1,170 +1,170 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; -precision highp sampler2DShadow; - -in vec2 v_position2f; - -#ifdef COMPILE_COLORED_SHADOW -layout(location = 0) out vec4 output4f; -#else -layout(location = 0) out float output1f; -#endif - -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2DShadow u_sunShadowDepthTexture; -#ifdef COMPILE_COLORED_SHADOW -uniform sampler2D u_sunShadowColorTexture; -#endif - -uniform mat4 u_inverseViewMatrix4f; -uniform mat4 u_inverseViewProjMatrix4f; - -#ifdef COMPILE_SUN_SHADOW_LOD0 -uniform mat4 u_sunShadowMatrixLOD04f; -#define SUN_SHADOW_MAP_FRAC 1.0 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD1 -uniform mat4 u_sunShadowMatrixLOD04f; -uniform mat4 u_sunShadowMatrixLOD14f; -#define SUN_SHADOW_MAP_FRAC 0.5 -#endif -#ifdef COMPILE_SUN_SHADOW_LOD2 -uniform mat4 u_sunShadowMatrixLOD04f; -uniform mat4 u_sunShadowMatrixLOD14f; -uniform mat4 u_sunShadowMatrixLOD24f; -#define SUN_SHADOW_MAP_FRAC 0.3333333 -#endif -#ifdef COMPILE_SUN_SHADOW_SMOOTH -const vec2 POISSON_DISK[7] = vec2[]( -vec2(-0.077, 0.995), vec2(0.998, 0.015), -vec2(-0.116, -0.987), vec2(-0.916, 0.359), -vec2(-0.697, -0.511), vec2(0.740, -0.612), -vec2(0.675, 0.682)); -#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 -#define SMOOTH_SHADOW_RADIUS 0.00075 -#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ - tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ - tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ - tmpVec2.y += lod;\ - tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ - accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; -#endif - -uniform vec3 u_sunDirection3f; - -void main() { -#ifdef COMPILE_COLORED_SHADOW - output4f = vec4(0.0); -#else - output1f = 0.0; -#endif - float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; - if(depth < 0.00001) { - return; - } - vec4 normalVector4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); - if(normalVector4f.a < 0.5) { - return; - } - normalVector4f.xyz *= 2.0; - normalVector4f.xyz -= 1.0; - vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector4f.xyz); - if(dot(u_sunDirection3f, worldSpaceNormal) < 0.0) { - return; - } - vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); - worldSpacePosition.xyz *= 2.0; - worldSpacePosition.xyz -= 1.0; - worldSpacePosition = u_inverseViewProjMatrix4f * worldSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - worldSpacePosition.xyz += worldSpaceNormal * 0.05; - worldSpacePosition.w = 1.0; - float skyLight = max(normalVector4f.a * 2.0 - 1.0, 0.0); - float shadowSample; - vec2 tmpVec2; - vec4 shadowSpacePosition; - for(;;) { - shadowSpacePosition = u_sunShadowMatrixLOD04f * worldSpacePosition; - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowSpacePosition.z), 0.0); -#ifdef COMPILE_SUN_SHADOW_SMOOTH - shadowSample *= SMOOTH_SHADOW_SAMPLES; - SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) - shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); -#endif -#ifdef COMPILE_COLORED_SHADOW - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; -#endif - break; - } - -#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) - shadowSpacePosition = u_sunShadowMatrixLOD14f * worldSpacePosition; - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSpacePosition.y += 1.0; - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_SUN_SHADOW_LOD2 - shadowSpacePosition = u_sunShadowMatrixLOD24f * worldSpacePosition; - if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { - shadowSpacePosition.y += 2.0; - shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; - shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0); - break; - } -#endif - -#ifdef COMPILE_COLORED_SHADOW - output4f = vec4(normalVector4f.a); -#else - output1f = normalVector4f.a; -#endif - return; - } - - shadowSample *= skyLight; - -#ifdef COMPILE_COLORED_SHADOW - // reuse normalVector4f: - normalVector4f = shadowSample > 0.05 ? textureLod(u_sunShadowColorTexture, shadowSpacePosition.xy, 0.0) : vec4(0.0); - - // saturate the colors, looks nice - float luma = dot(normalVector4f.rgb, vec3(0.299, 0.587, 0.114)); - normalVector4f.rgb = clamp((normalVector4f.rgb - luma) * 1.5 + luma, vec3(0.0), vec3(1.0)); - - output4f = vec4(mix(normalVector4f.rgb, vec3(1.0), normalVector4f.a) * shadowSample, shadowSample); -#else - output1f = shadowSample; -#endif - -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; +precision highp sampler2DShadow; + +in vec2 v_position2f; + +#ifdef COMPILE_COLORED_SHADOW +layout(location = 0) out vec4 output4f; +#else +layout(location = 0) out float output1f; +#endif + +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2DShadow u_sunShadowDepthTexture; +#ifdef COMPILE_COLORED_SHADOW +uniform sampler2D u_sunShadowColorTexture; +#endif + +uniform mat4 u_inverseViewMatrix4f; +uniform mat4 u_inverseViewProjMatrix4f; + +#ifdef COMPILE_SUN_SHADOW_LOD0 +uniform mat4 u_sunShadowMatrixLOD04f; +#define SUN_SHADOW_MAP_FRAC 1.0 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD1 +uniform mat4 u_sunShadowMatrixLOD04f; +uniform mat4 u_sunShadowMatrixLOD14f; +#define SUN_SHADOW_MAP_FRAC 0.5 +#endif +#ifdef COMPILE_SUN_SHADOW_LOD2 +uniform mat4 u_sunShadowMatrixLOD04f; +uniform mat4 u_sunShadowMatrixLOD14f; +uniform mat4 u_sunShadowMatrixLOD24f; +#define SUN_SHADOW_MAP_FRAC 0.3333333 +#endif +#ifdef COMPILE_SUN_SHADOW_SMOOTH +const vec2 POISSON_DISK[7] = vec2[]( +vec2(-0.077, 0.995), vec2(0.998, 0.015), +vec2(-0.116, -0.987), vec2(-0.916, 0.359), +vec2(-0.697, -0.511), vec2(0.740, -0.612), +vec2(0.675, 0.682)); +#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0 +#define SMOOTH_SHADOW_RADIUS 0.00075 +#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\ + tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\ + tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\ + tmpVec2.y += lod;\ + tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\ + accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES; +#endif + +uniform vec3 u_sunDirection3f; + +void main() { +#ifdef COMPILE_COLORED_SHADOW + output4f = vec4(0.0); +#else + output1f = 0.0; +#endif + float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r; + if(depth < 0.00001) { + return; + } + vec4 normalVector4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0); + if(normalVector4f.a < 0.5) { + return; + } + normalVector4f.xyz *= 2.0; + normalVector4f.xyz -= 1.0; + vec3 worldSpaceNormal = normalize(mat3(u_inverseViewMatrix4f) * normalVector4f.xyz); + if(dot(u_sunDirection3f, worldSpaceNormal) < 0.0) { + return; + } + vec4 worldSpacePosition = vec4(v_position2f, depth, 1.0); + worldSpacePosition.xyz *= 2.0; + worldSpacePosition.xyz -= 1.0; + worldSpacePosition = u_inverseViewProjMatrix4f * worldSpacePosition; + worldSpacePosition.xyz /= worldSpacePosition.w; + worldSpacePosition.xyz += worldSpaceNormal * 0.05; + worldSpacePosition.w = 1.0; + float skyLight = max(normalVector4f.a * 2.0 - 1.0, 0.0); + float shadowSample; + vec2 tmpVec2; + vec4 shadowSpacePosition; + for(;;) { + shadowSpacePosition = u_sunShadowMatrixLOD04f * worldSpacePosition; + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowSpacePosition.z), 0.0); +#ifdef COMPILE_SUN_SHADOW_SMOOTH + shadowSample *= SMOOTH_SHADOW_SAMPLES; + SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowSpacePosition.xyz, shadowSample, tmpVec2) + shadowSample = max(shadowSample * 2.0 - 1.0, 0.0); +#endif +#ifdef COMPILE_COLORED_SHADOW + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; +#endif + break; + } + +#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2) + shadowSpacePosition = u_sunShadowMatrixLOD14f * worldSpacePosition; + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSpacePosition.y += 1.0; + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_SUN_SHADOW_LOD2 + shadowSpacePosition = u_sunShadowMatrixLOD24f * worldSpacePosition; + if(shadowSpacePosition.xyz == clamp(shadowSpacePosition.xyz, vec3(0.005), vec3(0.995))) { + shadowSpacePosition.y += 2.0; + shadowSpacePosition.y *= SUN_SHADOW_MAP_FRAC; + shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowSpacePosition.xy, shadowSpacePosition.z + 0.00015), 0.0); + break; + } +#endif + +#ifdef COMPILE_COLORED_SHADOW + output4f = vec4(normalVector4f.a); +#else + output1f = normalVector4f.a; +#endif + return; + } + + shadowSample *= skyLight; + +#ifdef COMPILE_COLORED_SHADOW + // reuse normalVector4f: + normalVector4f = shadowSample > 0.05 ? textureLod(u_sunShadowColorTexture, shadowSpacePosition.xy, 0.0) : vec4(0.0); + + // saturate the colors, looks nice + float luma = dot(normalVector4f.rgb, vec3(0.299, 0.587, 0.114)); + normalVector4f.rgb = clamp((normalVector4f.rgb - luma) * 1.5 + luma, vec3(0.0), vec3(1.0)); + + output4f = vec4(mix(normalVector4f.rgb, vec3(1.0), normalVector4f.a) * shadowSample, shadowSample); +#else + output1f = shadowSample; +#endif + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh index a647daad..7ddd29c5 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh @@ -1,128 +1,128 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_skyNormals; -uniform vec4 u_sunDirectionIntensity4f; -uniform vec3 u_scatteringCoefficient3f; -uniform float u_altitude1f; -uniform vec4 u_blendColor4f; - -// Source: https://github.com/wwwtyro/glsl-atmosphere - -#define PI 3.141592 -#define iSteps 16 -#define jSteps 4 - -vec2 rsi(vec3 r0, vec3 rd, float sr) { - float a = dot(rd, rd); - float b = 2.0 * dot(rd, r0); - float c = dot(r0, r0) - (sr * sr); - float d = (b*b) - 4.0*a*c; - if (d < 0.0) return vec2(1e5,-1e5); - a *= 2.0; - d = sqrt(d); - return vec2(-b - d, -b + d) / a; -} - -vec3 atmosphere(vec3 r, vec3 r0, vec3 pSun, float iSun, float rPlanet, float rAtmos, vec3 kRlh, float kMie, float shRlh, float shMie, float g) { - pSun = normalize(pSun); - r = normalize(r); - - vec2 p = rsi(r0, r, rAtmos); - if (p.x > p.y) return vec3(0.0); - p.y = min(p.y, rsi(r0, r, rPlanet).x); - float iStepSize = (p.y - p.x) / float(iSteps); - - float iTime = 0.0; - - vec3 totalRlh = vec3(0.0); - vec3 totalMie = vec3(0.0); - - float iOdRlh = 0.0; - float iOdMie = 0.0; - - float mu = dot(r, pSun); - float mumu = mu * mu; - float gg = g * g; - float pRlh = 3.0 / (16.0 * PI) * (1.0 + mumu); - float pMie = 3.0 / (8.0 * PI) * ((1.0 - gg) * (mumu + 1.0)) / (pow(1.0 + gg - 2.0 * mu * g, 1.5) * (2.0 + gg)); - - for (int i = 0; i < iSteps; i++) { - vec3 iPos = r0 + r * (iTime + iStepSize * 0.5); - float iHeight = length(iPos) - rPlanet; - float odStepRlh = exp(-iHeight / shRlh) * iStepSize; - float odStepMie = exp(-iHeight / shMie) * iStepSize; - iOdRlh += odStepRlh; - iOdMie += odStepMie; - float jStepSize = rsi(iPos, pSun, rAtmos).y / float(jSteps); - float jTime = 0.0; - float jOdRlh = 0.0; - float jOdMie = 0.0; - for (int j = 0; j < jSteps; j++) { - vec3 jPos = iPos + pSun * (jTime + jStepSize * 0.5); - float jHeight = length(jPos) - rPlanet; - jOdRlh += exp(-jHeight / shRlh) * jStepSize; - jOdMie += exp(-jHeight / shMie) * jStepSize; - jTime += jStepSize; - } - vec3 attn = exp(-(kMie * (iOdMie + jOdMie) + kRlh * (iOdRlh + jOdRlh))); - totalRlh += odStepRlh * attn; - totalMie += odStepMie * attn; - iTime += iStepSize; - - } - return iSun * (pRlh * kRlh * totalRlh + pMie * kMie * totalMie); -} - -void main() { - if(u_blendColor4f.a >= 1.0) { - output4f = vec4(u_blendColor4f.rgb, 0.0); - return; - } - vec4 normalIn = textureLod(u_skyNormals, v_position2f, 0.0); - if(normalIn.a != 1.0) { - output4f = vec4(0.0); - return; - } - normalIn.xyz *= 2.0; - normalIn.xyz -= 1.0; - output4f = vec4(atmosphere( - normalIn.xyz, // normalized ray direction - vec3(0,6373e3 + u_altitude1f * 50.0,0), // ray origin - u_sunDirectionIntensity4f.xyz, // position of the sun - u_sunDirectionIntensity4f.w, // intensity of the sun - 6371e3, // radius of the planet in meters - 6471e3, // radius of the atmosphere in meters - vec3(5.5e-6, 13.0e-6, 22.4e-6), // Rayleigh scattering coefficient - 21e-6, // Mie scattering coefficient - 8e3, // Rayleigh scale height - 1.2e3, // Mie scale height - 0.758 // Mie preferred scattering direction - ), 0.0); - if(u_blendColor4f.a > 0.0) { - output4f.rgb = mix(output4f.rgb, u_blendColor4f.rgb, u_blendColor4f.a); - } -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_skyNormals; +uniform vec4 u_sunDirectionIntensity4f; +uniform vec3 u_scatteringCoefficient3f; +uniform float u_altitude1f; +uniform vec4 u_blendColor4f; + +// Source: https://github.com/wwwtyro/glsl-atmosphere + +#define PI 3.141592 +#define iSteps 16 +#define jSteps 4 + +vec2 rsi(vec3 r0, vec3 rd, float sr) { + float a = dot(rd, rd); + float b = 2.0 * dot(rd, r0); + float c = dot(r0, r0) - (sr * sr); + float d = (b*b) - 4.0*a*c; + if (d < 0.0) return vec2(1e5,-1e5); + a *= 2.0; + d = sqrt(d); + return vec2(-b - d, -b + d) / a; +} + +vec3 atmosphere(vec3 r, vec3 r0, vec3 pSun, float iSun, float rPlanet, float rAtmos, vec3 kRlh, float kMie, float shRlh, float shMie, float g) { + pSun = normalize(pSun); + r = normalize(r); + + vec2 p = rsi(r0, r, rAtmos); + if (p.x > p.y) return vec3(0.0); + p.y = min(p.y, rsi(r0, r, rPlanet).x); + float iStepSize = (p.y - p.x) / float(iSteps); + + float iTime = 0.0; + + vec3 totalRlh = vec3(0.0); + vec3 totalMie = vec3(0.0); + + float iOdRlh = 0.0; + float iOdMie = 0.0; + + float mu = dot(r, pSun); + float mumu = mu * mu; + float gg = g * g; + float pRlh = 3.0 / (16.0 * PI) * (1.0 + mumu); + float pMie = 3.0 / (8.0 * PI) * ((1.0 - gg) * (mumu + 1.0)) / (pow(1.0 + gg - 2.0 * mu * g, 1.5) * (2.0 + gg)); + + for (int i = 0; i < iSteps; i++) { + vec3 iPos = r0 + r * (iTime + iStepSize * 0.5); + float iHeight = length(iPos) - rPlanet; + float odStepRlh = exp(-iHeight / shRlh) * iStepSize; + float odStepMie = exp(-iHeight / shMie) * iStepSize; + iOdRlh += odStepRlh; + iOdMie += odStepMie; + float jStepSize = rsi(iPos, pSun, rAtmos).y / float(jSteps); + float jTime = 0.0; + float jOdRlh = 0.0; + float jOdMie = 0.0; + for (int j = 0; j < jSteps; j++) { + vec3 jPos = iPos + pSun * (jTime + jStepSize * 0.5); + float jHeight = length(jPos) - rPlanet; + jOdRlh += exp(-jHeight / shRlh) * jStepSize; + jOdMie += exp(-jHeight / shMie) * jStepSize; + jTime += jStepSize; + } + vec3 attn = exp(-(kMie * (iOdMie + jOdMie) + kRlh * (iOdRlh + jOdRlh))); + totalRlh += odStepRlh * attn; + totalMie += odStepMie * attn; + iTime += iStepSize; + + } + return iSun * (pRlh * kRlh * totalRlh + pMie * kMie * totalMie); +} + +void main() { + if(u_blendColor4f.a >= 1.0) { + output4f = vec4(u_blendColor4f.rgb, 0.0); + return; + } + vec4 normalIn = textureLod(u_skyNormals, v_position2f, 0.0); + if(normalIn.a != 1.0) { + output4f = vec4(0.0); + return; + } + normalIn.xyz *= 2.0; + normalIn.xyz -= 1.0; + output4f = vec4(atmosphere( + normalIn.xyz, // normalized ray direction + vec3(0,6373e3 + u_altitude1f * 50.0,0), // ray origin + u_sunDirectionIntensity4f.xyz, // position of the sun + u_sunDirectionIntensity4f.w, // intensity of the sun + 6371e3, // radius of the planet in meters + 6471e3, // radius of the atmosphere in meters + vec3(5.5e-6, 13.0e-6, 22.4e-6), // Rayleigh scattering coefficient + 21e-6, // Mie scattering coefficient + 8e3, // Rayleigh scale height + 1.2e3, // Mie scale height + 0.758 // Mie preferred scattering direction + ), 0.0); + if(u_blendColor4f.a > 0.0) { + output4f.rgb = mix(output4f.rgb, u_blendColor4f.rgb, u_blendColor4f.a); + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh index 59df74cc..e997f63e 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh @@ -1,233 +1,233 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_paraboloidSkyboxTexture; - -#define SAMPLE_IRRADIANCE(tex, tmat3f, st, sm, accum3f, tmp3f)\ - tmp3f = tmat3f * st;\ - tmp3f.xz /= abs(tmp3f.y) + 1.0;\ - tmp3f.xz *= vec2(0.4875, tmp3f.y >= 0.0 ? 0.24375 : -0.24375);\ - tmp3f.xz += vec2(0.5, tmp3f.y >= 0.0 ? 0.25 : 0.75);\ - accum3f += textureLod(tex, tmp3f.xz, 0.0).rgb * sm * clamp(1.0 + tmp3f.y * 2.0, 0.0, 1.0); - -void main() { - vec2 latLong = v_position2f * vec2(2.0, 4.0); - latLong -= vec2(1.0, v_position2f.y >= 0.5 ? 3.0 : 1.0); - float latLongLen2 = dot(latLong, latLong); - if(latLongLen2 > 1.2) { - output4f = vec4(0.0); - return; - } - - vec2 texCoords = v_position2f; - texCoords = mod(texCoords, vec2(1.0, 0.5)); - texCoords = texCoords * vec2(2.0, 4.0) - 1.0; - texCoords *= (v_position2f.y < 0.5) ? vec2(1.0, 1.0) : vec2(1.0, -1.0); - - float mag2 = 2.0 / (latLongLen2 + 1.0); - vec3 dir; - dir.y = ((v_position2f.y < 0.5) ? 1.0 : -1.0) * (mag2 - 1.0); - if(dir.y < -0.25) { - output4f = vec4(0.0); - return; - } - - dir.xz = texCoords * mag2; - - vec3 tmp3f = cross(dir, vec3(0.0, 1.0, 0.0)); - mat3 tmat3f = mat3(tmp3f, cross(dir, tmp3f), dir); - vec3 accum3f = vec3(0.0); - - // note: sampling is divided into 3 draw calls to allow better driver multitasking, - // shader would otherwise run the full 156 texture samples in only a single thread - // per pixel which is not ideal. The resulting values of the 3 draw calls are added - // together using GL_ONE, GL_ONE blending on the destination framebuffer - -#ifdef PHASE_1 - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, 0.000, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, 0.000, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.682, 0.000, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, 0.000, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.949, 0.000, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, 0.000, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.240, 0.061, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.465, 0.119, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.660, 0.169, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.815, 0.208, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.919, 0.235, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.966, 0.247, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.217, 0.119, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.421, 0.230, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.598, 0.327, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.738, 0.403, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.833, 0.455, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.875, 0.478, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.181, 0.169, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.351, 0.327, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.499, 0.465, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.616, 0.574, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.694, 0.647, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.730, 0.680, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.134, 0.208, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.259, 0.403, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.368, 0.574, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.455, 0.708, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.513, 0.799, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.539, 0.839, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.078, 0.235, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.151, 0.455, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.215, 0.647, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.265, 0.799, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.299, 0.901, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.315, 0.947, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, 0.247, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.034, 0.478, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.048, 0.680, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.060, 0.839, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.067, 0.947, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.071, 0.995, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.044, 0.243, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.085, 0.472, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.121, 0.671, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.150, 0.828, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.169, 0.934, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.178, 0.982, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.103, 0.225, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, 0.436, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.284, 0.620, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.350, 0.765, 0.540), 0.0092, accum3f, tmp3f) -#endif -#ifdef PHASE_2 - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.395, 0.863, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.415, 0.907, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.155, 0.192, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.301, 0.373, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.428, 0.530, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.529, 0.655, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.596, 0.738, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.627, 0.776, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.198, 0.148, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.384, 0.287, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.546, 0.408, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.674, 0.504, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.760, 0.568, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.799, 0.597, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.229, 0.094, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.443, 0.183, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.630, 0.260, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.778, 0.321, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.877, 0.362, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.922, 0.381, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.245, 0.035, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.475, 0.068, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.675, 0.096, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.833, 0.119, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.939, 0.134, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.988, 0.141, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.246, -0.027, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.477, -0.052, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.678, -0.074, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.837, -0.091, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.943, -0.103, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.992, -0.108, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.232, -0.087, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.449, -0.168, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.638, -0.239, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.788, -0.295, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.889, -0.333, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.934, -0.350, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.203, -0.141, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.393, -0.274, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.559, -0.390, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.690, -0.481, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.779, -0.542, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.819, -0.570, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.162, -0.187, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.313, -0.363, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.446, -0.516, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.550, -0.637, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.620, -0.718, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.652, -0.755, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.110, -0.221, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.214, -0.429, 0.878), 0.0085, accum3f, tmp3f) -#endif -#ifdef PHASE_3 - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.304, -0.610, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.375, -0.753, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.423, -0.849, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.445, -0.893, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.052, -0.242, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.101, -0.469, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.144, -0.666, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.177, -0.823, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, -0.928, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.210, -0.975, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.009, -0.247, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, -0.479, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.026, -0.681, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.032, -0.841, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.036, -0.948, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.038, -0.997, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.070, -0.237, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.136, -0.460, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.193, -0.654, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.239, -0.807, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.269, -0.910, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.283, -0.957, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.127, -0.213, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.246, -0.412, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.349, -0.585, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.431, -0.723, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.486, -0.815, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.511, -0.857, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.175, -0.175, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.340, -0.338, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.483, -0.481, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.596, -0.594, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.673, -0.670, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.707, -0.704, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.213, -0.126, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.413, -0.244, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.587, -0.346, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.725, -0.428, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.817, -0.482, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.859, -0.507, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.238, -0.069, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.460, -0.134, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.654, -0.190, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.808, -0.235, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.911, -0.265, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.958, -0.279, 0.071), 0.0014, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, -0.008, 0.969), 0.0048, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, -0.016, 0.878), 0.0085, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.681, -0.023, 0.732), 0.0100, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, -0.028, 0.540), 0.0092, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.948, -0.031, 0.315), 0.0060, accum3f, tmp3f) - SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, -0.033, 0.071), 0.0014, accum3f, tmp3f) -#endif - - output4f = vec4(accum3f * min(1.0 + dir.y * 4.0, 1.0), 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_paraboloidSkyboxTexture; + +#define SAMPLE_IRRADIANCE(tex, tmat3f, st, sm, accum3f, tmp3f)\ + tmp3f = tmat3f * st;\ + tmp3f.xz /= abs(tmp3f.y) + 1.0;\ + tmp3f.xz *= vec2(0.4875, tmp3f.y >= 0.0 ? 0.24375 : -0.24375);\ + tmp3f.xz += vec2(0.5, tmp3f.y >= 0.0 ? 0.25 : 0.75);\ + accum3f += textureLod(tex, tmp3f.xz, 0.0).rgb * sm * clamp(1.0 + tmp3f.y * 2.0, 0.0, 1.0); + +void main() { + vec2 latLong = v_position2f * vec2(2.0, 4.0); + latLong -= vec2(1.0, v_position2f.y >= 0.5 ? 3.0 : 1.0); + float latLongLen2 = dot(latLong, latLong); + if(latLongLen2 > 1.2) { + output4f = vec4(0.0); + return; + } + + vec2 texCoords = v_position2f; + texCoords = mod(texCoords, vec2(1.0, 0.5)); + texCoords = texCoords * vec2(2.0, 4.0) - 1.0; + texCoords *= (v_position2f.y < 0.5) ? vec2(1.0, 1.0) : vec2(1.0, -1.0); + + float mag2 = 2.0 / (latLongLen2 + 1.0); + vec3 dir; + dir.y = ((v_position2f.y < 0.5) ? 1.0 : -1.0) * (mag2 - 1.0); + if(dir.y < -0.25) { + output4f = vec4(0.0); + return; + } + + dir.xz = texCoords * mag2; + + vec3 tmp3f = cross(dir, vec3(0.0, 1.0, 0.0)); + mat3 tmat3f = mat3(tmp3f, cross(dir, tmp3f), dir); + vec3 accum3f = vec3(0.0); + + // note: sampling is divided into 3 draw calls to allow better driver multitasking, + // shader would otherwise run the full 156 texture samples in only a single thread + // per pixel which is not ideal. The resulting values of the 3 draw calls are added + // together using GL_ONE, GL_ONE blending on the destination framebuffer + +#ifdef PHASE_1 + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, 0.000, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, 0.000, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.682, 0.000, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, 0.000, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.949, 0.000, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, 0.000, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.240, 0.061, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.465, 0.119, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.660, 0.169, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.815, 0.208, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.919, 0.235, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.966, 0.247, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.217, 0.119, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.421, 0.230, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.598, 0.327, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.738, 0.403, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.833, 0.455, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.875, 0.478, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.181, 0.169, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.351, 0.327, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.499, 0.465, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.616, 0.574, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.694, 0.647, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.730, 0.680, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.134, 0.208, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.259, 0.403, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.368, 0.574, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.455, 0.708, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.513, 0.799, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.539, 0.839, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.078, 0.235, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.151, 0.455, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.215, 0.647, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.265, 0.799, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.299, 0.901, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.315, 0.947, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, 0.247, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.034, 0.478, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.048, 0.680, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.060, 0.839, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.067, 0.947, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.071, 0.995, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.044, 0.243, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.085, 0.472, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.121, 0.671, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.150, 0.828, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.169, 0.934, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.178, 0.982, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.103, 0.225, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, 0.436, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.284, 0.620, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.350, 0.765, 0.540), 0.0092, accum3f, tmp3f) +#endif +#ifdef PHASE_2 + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.395, 0.863, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.415, 0.907, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.155, 0.192, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.301, 0.373, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.428, 0.530, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.529, 0.655, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.596, 0.738, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.627, 0.776, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.198, 0.148, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.384, 0.287, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.546, 0.408, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.674, 0.504, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.760, 0.568, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.799, 0.597, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.229, 0.094, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.443, 0.183, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.630, 0.260, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.778, 0.321, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.877, 0.362, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.922, 0.381, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.245, 0.035, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.475, 0.068, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.675, 0.096, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.833, 0.119, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.939, 0.134, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.988, 0.141, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.246, -0.027, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.477, -0.052, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.678, -0.074, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.837, -0.091, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.943, -0.103, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.992, -0.108, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.232, -0.087, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.449, -0.168, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.638, -0.239, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.788, -0.295, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.889, -0.333, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.934, -0.350, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.203, -0.141, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.393, -0.274, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.559, -0.390, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.690, -0.481, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.779, -0.542, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.819, -0.570, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.162, -0.187, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.313, -0.363, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.446, -0.516, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.550, -0.637, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.620, -0.718, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.652, -0.755, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.110, -0.221, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.214, -0.429, 0.878), 0.0085, accum3f, tmp3f) +#endif +#ifdef PHASE_3 + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.304, -0.610, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.375, -0.753, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.423, -0.849, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.445, -0.893, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.052, -0.242, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.101, -0.469, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.144, -0.666, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.177, -0.823, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.200, -0.928, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(-0.210, -0.975, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.009, -0.247, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.018, -0.479, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.026, -0.681, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.032, -0.841, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.036, -0.948, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.038, -0.997, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.070, -0.237, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.136, -0.460, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.193, -0.654, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.239, -0.807, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.269, -0.910, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.283, -0.957, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.127, -0.213, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.246, -0.412, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.349, -0.585, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.431, -0.723, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.486, -0.815, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.511, -0.857, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.175, -0.175, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.340, -0.338, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.483, -0.481, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.596, -0.594, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.673, -0.670, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.707, -0.704, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.213, -0.126, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.413, -0.244, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.587, -0.346, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.725, -0.428, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.817, -0.482, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.859, -0.507, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.238, -0.069, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.460, -0.134, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.654, -0.190, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.808, -0.235, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.911, -0.265, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.958, -0.279, 0.071), 0.0014, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.247, -0.008, 0.969), 0.0048, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.479, -0.016, 0.878), 0.0085, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.681, -0.023, 0.732), 0.0100, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.841, -0.028, 0.540), 0.0092, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.948, -0.031, 0.315), 0.0060, accum3f, tmp3f) + SAMPLE_IRRADIANCE(u_paraboloidSkyboxTexture, tmat3f, vec3(0.997, -0.033, 0.071), 0.0014, accum3f, tmp3f) +#endif + + output4f = vec4(accum3f * min(1.0 + dir.y * 4.0, 1.0), 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh index 3284f5fc..d580f3c1 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh @@ -1,62 +1,62 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec3 v_position3f; -in vec3 v_color3f; - -layout(location = 0) out vec4 output4f; - -uniform vec3 u_sunDirection3f; -uniform vec3 u_sunColor3f; -uniform vec4 u_lightningColor4f; - -#ifdef COMPILE_CLOUDS -uniform sampler2D u_cloudsTexture; -#endif - -uniform sampler2D u_sunOcclusion; - -#define SKY_BRIGHTNESS 5.0 - -void main() { - gl_FragDepth = 0.0; - vec3 viewDir = normalize(v_position3f); -#ifdef COMPILE_PARABOLOID_SKY - output4f = vec4(v_color3f * SKY_BRIGHTNESS, 0.0); -#else - float f = max(dot(viewDir, u_sunDirection3f) - 0.995, 0.0) * 100.0; - float intensity = min(f * 2.0, 1.0); - intensity *= intensity * intensity * intensity * textureLod(u_sunOcclusion, vec2(0.5, 0.5), 0.0).r * 2.0; - output4f = vec4(v_color3f * SKY_BRIGHTNESS + intensity * u_sunColor3f, 0.0); -#endif -#ifdef COMPILE_CLOUDS - if(viewDir.y < 0.01) { - output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb; - return; - } - vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5; - vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0); - output4f.rgb = mix(output4f.rgb, output4f.rgb * cloudSample.a + cloudSample.rgb, smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0))); -#endif - output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb; - -} \ No newline at end of file +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec3 v_position3f; +in vec3 v_color3f; + +layout(location = 0) out vec4 output4f; + +uniform vec3 u_sunDirection3f; +uniform vec3 u_sunColor3f; +uniform vec4 u_lightningColor4f; + +#ifdef COMPILE_CLOUDS +uniform sampler2D u_cloudsTexture; +#endif + +uniform sampler2D u_sunOcclusion; + +#define SKY_BRIGHTNESS 5.0 + +void main() { + gl_FragDepth = 0.0; + vec3 viewDir = normalize(v_position3f); +#ifdef COMPILE_PARABOLOID_SKY + output4f = vec4(v_color3f * SKY_BRIGHTNESS, 0.0); +#else + float f = max(dot(viewDir, u_sunDirection3f) - 0.995, 0.0) * 100.0; + float intensity = min(f * 2.0, 1.0); + intensity *= intensity * intensity * intensity * textureLod(u_sunOcclusion, vec2(0.5, 0.5), 0.0).r * 2.0; + output4f = vec4(v_color3f * SKY_BRIGHTNESS + intensity * u_sunColor3f, 0.0); +#endif +#ifdef COMPILE_CLOUDS + if(viewDir.y < 0.01) { + output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb; + return; + } + vec2 cloudSampleCoord2f = (viewDir.xz / (viewDir.y + 1.0)) * 0.975 * 0.5 + 0.5; + vec4 cloudSample = textureLod(u_cloudsTexture, cloudSampleCoord2f, 0.0); + output4f.rgb = mix(output4f.rgb, output4f.rgb * cloudSample.a + cloudSample.rgb, smoothstep(0.0, 1.0, min(viewDir.y * 8.0, 1.0))); +#endif + output4f.rgb = output4f.rgb * u_lightningColor4f.a + u_lightningColor4f.rgb; + +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh index b4069a5e..f48cea51 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh @@ -1,51 +1,51 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -layout(location = 0) in vec3 a_position3f; -layout(location = 1) in vec2 a_colorIndex2f; - -out vec3 v_position3f; -out vec3 v_color3f; - -uniform mat4 u_viewMatrix4f; -#ifdef COMPILE_PARABOLOID_SKY -uniform float u_farPlane1f; -#else -uniform mat4 u_projMatrix4f; -#endif -uniform sampler2D u_renderedAtmosphere; - -void main() { - v_position3f = a_position3f; - v_color3f = textureLod(u_renderedAtmosphere, a_colorIndex2f, 0.0).rgb; - vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0); - -#ifdef COMPILE_PARABOLOID_SKY - float dist = pos.z; - pos.xyz = normalize(pos.xyz); - pos.xy /= 1.0 - pos.z; - pos.z = dist / u_farPlane1f; - gl_Position = vec4(pos.xyz, 1.0); -#else - gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0); -#endif -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +layout(location = 0) in vec3 a_position3f; +layout(location = 1) in vec2 a_colorIndex2f; + +out vec3 v_position3f; +out vec3 v_color3f; + +uniform mat4 u_viewMatrix4f; +#ifdef COMPILE_PARABOLOID_SKY +uniform float u_farPlane1f; +#else +uniform mat4 u_projMatrix4f; +#endif +uniform sampler2D u_renderedAtmosphere; + +void main() { + v_position3f = a_position3f; + v_color3f = textureLod(u_renderedAtmosphere, a_colorIndex2f, 0.0).rgb; + vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0); + +#ifdef COMPILE_PARABOLOID_SKY + float dist = pos.z; + pos.xyz = normalize(pos.xyz); + pos.xy /= 1.0 - pos.z; + pos.z = dist / u_farPlane1f; + gl_Position = vec4(pos.xyz, 1.0); +#else + gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0); +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh index b4e0cdc7..f8fd32c7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh @@ -1,47 +1,47 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec3 v_position3f; - -layout(location = 0) out vec4 output4f; - -#define SKY_BRIGHTNESS 0.05 - -uniform sampler2D u_skyTexture; - -uniform vec2 u_skyTextureScale2f; - -void main() { - gl_FragDepth = 0.0; - vec3 viewDir = normalize(v_position3f); - - vec3 blending = abs(viewDir * viewDir * viewDir); - blending = normalize(max(blending, 0.00001)); - float b = (blending.x + blending.y + blending.z); - blending /= b; - - vec3 blendedSkyColor = texture(u_skyTexture, v_position3f.zy * u_skyTextureScale2f).rgb * blending.x; - blendedSkyColor += texture(u_skyTexture, v_position3f.xz * u_skyTextureScale2f).rgb * blending.y; - blendedSkyColor += texture(u_skyTexture, v_position3f.xy * u_skyTextureScale2f).rgb * blending.z; - - output4f = vec4(blendedSkyColor * blendedSkyColor * blendedSkyColor * SKY_BRIGHTNESS, 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec3 v_position3f; + +layout(location = 0) out vec4 output4f; + +#define SKY_BRIGHTNESS 0.05 + +uniform sampler2D u_skyTexture; + +uniform vec2 u_skyTextureScale2f; + +void main() { + gl_FragDepth = 0.0; + vec3 viewDir = normalize(v_position3f); + + vec3 blending = abs(viewDir * viewDir * viewDir); + blending = normalize(max(blending, 0.00001)); + float b = (blending.x + blending.y + blending.z); + blending /= b; + + vec3 blendedSkyColor = texture(u_skyTexture, v_position3f.zy * u_skyTextureScale2f).rgb * blending.x; + blendedSkyColor += texture(u_skyTexture, v_position3f.xz * u_skyTextureScale2f).rgb * blending.y; + blendedSkyColor += texture(u_skyTexture, v_position3f.xy * u_skyTextureScale2f).rgb * blending.z; + + output4f = vec4(blendedSkyColor * blendedSkyColor * blendedSkyColor * SKY_BRIGHTNESS, 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh index ae990235..da9a6463 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh @@ -1,35 +1,35 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; - -layout(location = 0) in vec3 a_position3f; -layout(location = 1) in vec2 a_colorIndex2f; - -out vec3 v_position3f; - -uniform mat4 u_viewMatrix4f; -uniform mat4 u_projMatrix4f; - -void main() { - v_position3f = a_position3f; - vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0); - gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec3 a_position3f; +layout(location = 1) in vec2 a_colorIndex2f; + +out vec3 v_position3f; + +uniform mat4 u_viewMatrix4f; +uniform mat4 u_projMatrix4f; + +void main() { + v_position3f = a_position3f; + vec4 pos = u_viewMatrix4f * vec4(a_position3f, 0.0); + gl_Position = u_projMatrix4f * vec4(pos.xyz, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh index 98b425ce..7f0e37e7 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh @@ -1,98 +1,98 @@ -#line 2 - -/* - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision highp sampler2D; - -in vec2 v_position2f; - -layout(location = 0) out float output1f; - -uniform sampler2D u_gbufferDepthTexture; -uniform sampler2D u_gbufferNormalTexture; -uniform sampler2D u_noiseConstantTexture; - -uniform mat4 u_projectionMatrix4f; -uniform mat4 u_inverseProjectionMatrix4f; - -uniform mat2 u_randomizerDataMatrix2f; - -const vec3 ssaoKernel[8] = vec3[]( -vec3(0.599,0.721,0.350),vec3(0.114,0.791,0.601), -vec3(0.067,0.995,0.069),vec3(0.511,-0.510,0.692), -vec3(0.626,-0.667,0.404),vec3(0.896,-0.169,0.411), -vec3(0.716,-0.439,0.543),vec3(-0.400,0.733,0.550)); -#define radius 1.5 -#define SAMPLE_SSAO(idx, pos, matTBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)\ - tmpVec4_1.xyz = pos + (matTBN * ssaoKernel[idx]) * radius;\ - tmpVec4_1.w = 1.0;\ - tmpVec4_2 = u_projectionMatrix4f * tmpVec4_1;\ - tmpVec4_2.xyz /= tmpVec4_2.w;\ - tmpVec4_2.xyz = clamp(tmpVec4_2.xyz, -0.99, 0.99);\ - tmpVec4_2.zw = matProjInv2f * vec4(tmpVec4_2.xy, textureLod(u_gbufferDepthTexture, tmpVec4_2.xy * 0.5 + 0.5, 0.0).r * 2.0 - 1.0, 1.0);\ - tmpVec4_2.z /= tmpVec4_2.w;\ - tmpVec4_2.x = smoothstep(0.0, 1.0, radius * 0.5 / abs(pos.z - tmpVec4_2.z));\ - divisor += tmpVec4_2.x > 0.0 ? 1.0 : 0.0;\ - occlusion += (tmpVec4_2.z >= tmpVec4_1.z ? 1.0 : 0.0) * tmpVec4_2.x; - -void main() { - vec3 originalClipSpacePos = vec3(v_position2f, textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r); - - if(originalClipSpacePos.z <= 0.0000001) { - output1f = 1.0; - return; - } - - originalClipSpacePos *= 2.0; - originalClipSpacePos -= 1.0; - - vec3 normal3f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).rgb; - normal3f *= 2.0; - normal3f -= 1.0; - - vec4 originalViewSpacePos = u_inverseProjectionMatrix4f * vec4(originalClipSpacePos, 1.0); - originalViewSpacePos.xyz /= originalViewSpacePos.w; - originalViewSpacePos.w = 1.0; - - vec4 noiseVec = textureLod(u_noiseConstantTexture, 13.3725 / fract((u_randomizerDataMatrix2f * (v_position2f * 0.42695346 + originalViewSpacePos.xy * 1.373769945645 + normal3f.xz * 42.69456453)) * 1.123234234), 0.0); - noiseVec.xyz *= 2.0; - noiseVec.xyz -= 1.0; - - vec3 tangent = normalize(noiseVec.xyz - normal3f * dot(noiseVec.xyz, normal3f)); - vec3 bitangent = cross(normal3f, tangent); - mat3 TBN = mat3(tangent, bitangent, normal3f) * noiseVec.w; - - float divisor = 0.0; - float occlusion = 0.0; - vec4 tmpVec4_1; - vec4 tmpVec4_2; - - mat4x2 matProjInv2f = mat4x2(u_inverseProjectionMatrix4f[0].zw, u_inverseProjectionMatrix4f[1].zw, u_inverseProjectionMatrix4f[2].zw, u_inverseProjectionMatrix4f[3].zw); - - SAMPLE_SSAO(0, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(1, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(2, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(3, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(4, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(5, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(6, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - SAMPLE_SSAO(7, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) - - output1f = max(1.0 - (occlusion / max(divisor, 0.001)), 0.0); -} +#line 2 + +/* + * Copyright (c) 2023 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out float output1f; + +uniform sampler2D u_gbufferDepthTexture; +uniform sampler2D u_gbufferNormalTexture; +uniform sampler2D u_noiseConstantTexture; + +uniform mat4 u_projectionMatrix4f; +uniform mat4 u_inverseProjectionMatrix4f; + +uniform mat2 u_randomizerDataMatrix2f; + +const vec3 ssaoKernel[8] = vec3[]( +vec3(0.599,0.721,0.350),vec3(0.114,0.791,0.601), +vec3(0.067,0.995,0.069),vec3(0.511,-0.510,0.692), +vec3(0.626,-0.667,0.404),vec3(0.896,-0.169,0.411), +vec3(0.716,-0.439,0.543),vec3(-0.400,0.733,0.550)); +#define radius 1.5 +#define SAMPLE_SSAO(idx, pos, matTBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2)\ + tmpVec4_1.xyz = pos + (matTBN * ssaoKernel[idx]) * radius;\ + tmpVec4_1.w = 1.0;\ + tmpVec4_2 = u_projectionMatrix4f * tmpVec4_1;\ + tmpVec4_2.xyz /= tmpVec4_2.w;\ + tmpVec4_2.xyz = clamp(tmpVec4_2.xyz, -0.99, 0.99);\ + tmpVec4_2.zw = matProjInv2f * vec4(tmpVec4_2.xy, textureLod(u_gbufferDepthTexture, tmpVec4_2.xy * 0.5 + 0.5, 0.0).r * 2.0 - 1.0, 1.0);\ + tmpVec4_2.z /= tmpVec4_2.w;\ + tmpVec4_2.x = smoothstep(0.0, 1.0, radius * 0.5 / abs(pos.z - tmpVec4_2.z));\ + divisor += tmpVec4_2.x > 0.0 ? 1.0 : 0.0;\ + occlusion += (tmpVec4_2.z >= tmpVec4_1.z ? 1.0 : 0.0) * tmpVec4_2.x; + +void main() { + vec3 originalClipSpacePos = vec3(v_position2f, textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r); + + if(originalClipSpacePos.z <= 0.0000001) { + output1f = 1.0; + return; + } + + originalClipSpacePos *= 2.0; + originalClipSpacePos -= 1.0; + + vec3 normal3f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).rgb; + normal3f *= 2.0; + normal3f -= 1.0; + + vec4 originalViewSpacePos = u_inverseProjectionMatrix4f * vec4(originalClipSpacePos, 1.0); + originalViewSpacePos.xyz /= originalViewSpacePos.w; + originalViewSpacePos.w = 1.0; + + vec4 noiseVec = textureLod(u_noiseConstantTexture, 13.3725 / fract((u_randomizerDataMatrix2f * (v_position2f * 0.42695346 + originalViewSpacePos.xy * 1.373769945645 + normal3f.xz * 42.69456453)) * 1.123234234), 0.0); + noiseVec.xyz *= 2.0; + noiseVec.xyz -= 1.0; + + vec3 tangent = normalize(noiseVec.xyz - normal3f * dot(noiseVec.xyz, normal3f)); + vec3 bitangent = cross(normal3f, tangent); + mat3 TBN = mat3(tangent, bitangent, normal3f) * noiseVec.w; + + float divisor = 0.0; + float occlusion = 0.0; + vec4 tmpVec4_1; + vec4 tmpVec4_2; + + mat4x2 matProjInv2f = mat4x2(u_inverseProjectionMatrix4f[0].zw, u_inverseProjectionMatrix4f[1].zw, u_inverseProjectionMatrix4f[2].zw, u_inverseProjectionMatrix4f[3].zw); + + SAMPLE_SSAO(0, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(1, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(2, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(3, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(4, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(5, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(6, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + SAMPLE_SSAO(7, originalViewSpacePos.xyz, TBN, matProjInv2f, divisor, occlusion, tmpVec4_1, tmpVec4_2) + + output1f = max(1.0 - (occlusion / max(divisor, 0.001)), 0.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv index 570d21ef..6a1f5ae9 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv @@ -1,120 +1,120 @@ -model,value -minecraft:block/leaves,1 -minecraft:block/web,1 -minecraft:block/tallgrass,2 -minecraft:block/crop,3 -minecraft:block/double_fern_bottom,4 -minecraft:block/double_grass_bottom,4 -minecraft:block/double_paeonia_bottom,4 -minecraft:block/double_rose_bottom,4 -minecraft:block/double_sunflower_bottom,4 -minecraft:block/double_syringa_bottom,4 -minecraft:block/double_fern_top,5 -minecraft:block/double_grass_top,5 -minecraft:block/double_paeonia_top,5 -minecraft:block/double_rose_top,5 -minecraft:block/double_sunflower_top,5 -minecraft:block/double_syringa_top,5 -minecraft:block/acacia_sapling,6 -minecraft:block/birch_sapling,6 -minecraft:block/daisy,6 -minecraft:block/dandelion,6 -minecraft:block/dead_bush,6 -minecraft:block/houstonia,6 -minecraft:block/jungle_sapling,6 -minecraft:block/oak_sapling,6 -minecraft:block/orchid,6 -minecraft:block/poppy,6 -minecraft:block/red_tulip,6 -minecraft:block/spruce_sapling,6 -minecraft:block/white_tulip,6 -minecraft:block/pink_tulip,6 -minecraft:block/orange_tulip,6 -minecraft:block/allium,6 -minecraft:block/reeds,7 -minecraft:block/vine_1,8 -minecraft:block/vine_1u,8 -minecraft:block/vine_2,8 -minecraft:block/vine_2_opposite,8 -minecraft:block/vine_2u,8 -minecraft:block/vine_2u_opposite,8 -minecraft:block/vine_3,8 -minecraft:block/vine_3u,8 -minecraft:block/vine_4,8 -minecraft:block/vine_4u,8 -minecraft:block/vine_u,8 -eagler:builtin/water_still_vertex_id,9 -eagler:builtin/water_flow_vertex_id,10 -minecraft:block/waterlily,11 -minecraft:block/fire_floor_main,12 -minecraft:block/fire_n_main,13 -minecraft:block/fire_ne_main,13 -minecraft:block/fire_ns_main,13 -minecraft:block/fire_nse_main,13 -minecraft:block/fire_nsew_main,13 -minecraft:block/fire_u1_main,13 -minecraft:block/fire_nu1_main,13 -minecraft:block/fire_neu1_main,13 -minecraft:block/fire_nsu1_main,13 -minecraft:block/fire_nseu1_main,13 -minecraft:block/fire_nsewu1_main,13 -minecraft:block/fire_u2_main,13 -minecraft:block/fire_nu2_main,13 -minecraft:block/fire_neu2_main,13 -minecraft:block/fire_nsu2_main,13 -minecraft:block/fire_nseu2_main,13 -minecraft:block/fire_nsewu2_main,13 -minecraft:block/fire_n_alt,13 -minecraft:block/fire_ne_alt,13 -minecraft:block/fire_ns_alt,13 -minecraft:block/fire_nse_alt,13 -minecraft:block/fire_nsew_alt,13 -minecraft:block/fire_nu2_alt,13 -minecraft:block/fire_neu2_alt,13 -minecraft:block/fire_nsu2_alt,13 -minecraft:block/fire_nseu2_alt,13 -minecraft:block/fire_nsewu2_alt,13 -minecraft:block/fire_n_flip_main,13 -minecraft:block/fire_ne_flip_main,13 -minecraft:block/fire_ns_flip_main,13 -minecraft:block/fire_nse_flip_main,13 -minecraft:block/fire_nsew_flip_main,13 -minecraft:block/fire_nu1_flip_main,13 -minecraft:block/fire_neu1_flip_main,13 -minecraft:block/fire_nsu1_flip_main,13 -minecraft:block/fire_nseu1_flip_main,13 -minecraft:block/fire_nsewu1_flip_main,13 -minecraft:block/fire_nu2_flip_main,13 -minecraft:block/fire_neu2_flip_main,13 -minecraft:block/fire_nsu2_flip_main,13 -minecraft:block/fire_nseu2_flip_main,13 -minecraft:block/fire_nsewu2_flip_main,13 -minecraft:block/fire_n_alt_flip,13 -minecraft:block/fire_ne_alt_flip,13 -minecraft:block/fire_ns_alt_flip,13 -minecraft:block/fire_nse_alt_flip,13 -minecraft:block/fire_nsew_alt_flip,13 -minecraft:block/fire_nu1_alt_flip,13 -minecraft:block/fire_neu1_alt_flip,13 -minecraft:block/fire_nsu1_alt_flip,13 -minecraft:block/fire_nseu1_alt_flip,13 -minecraft:block/fire_nsewu1_alt_flip,13 -minecraft:block/fire_nu2_alt_flip,13 -minecraft:block/fire_neu2_alt_flip,13 -minecraft:block/fire_nsu2_alt_flip,13 -minecraft:block/fire_nseu2_alt_flip,13 -minecraft:block/fire_nsewu2_alt_flip,13 -minecraft:block/fire_nsewu2_alt_flip,13 -minecraft:block/glass,14 -minecraft:block/glass_pane_n,14 -minecraft:block/glass_pane_ne,14 -minecraft:block/glass_pane_new,14 -minecraft:block/glass_pane_ns,14 -minecraft:block/glass_pane_nse,14 -minecraft:block/glass_pane_nsew,14 -minecraft:block/glass_pane_nsw,14 -minecraft:block/glass_pane_nw,14 -minecraft:block/glass_pane_s,14 -minecraft:block/glass_pane_se,14 -minecraft:block/glass_pane_sew,14 -minecraft:block/glass_pane_sw,14 \ No newline at end of file +model,value +minecraft:block/leaves,1 +minecraft:block/web,1 +minecraft:block/tallgrass,2 +minecraft:block/crop,3 +minecraft:block/double_fern_bottom,4 +minecraft:block/double_grass_bottom,4 +minecraft:block/double_paeonia_bottom,4 +minecraft:block/double_rose_bottom,4 +minecraft:block/double_sunflower_bottom,4 +minecraft:block/double_syringa_bottom,4 +minecraft:block/double_fern_top,5 +minecraft:block/double_grass_top,5 +minecraft:block/double_paeonia_top,5 +minecraft:block/double_rose_top,5 +minecraft:block/double_sunflower_top,5 +minecraft:block/double_syringa_top,5 +minecraft:block/acacia_sapling,6 +minecraft:block/birch_sapling,6 +minecraft:block/daisy,6 +minecraft:block/dandelion,6 +minecraft:block/dead_bush,6 +minecraft:block/houstonia,6 +minecraft:block/jungle_sapling,6 +minecraft:block/oak_sapling,6 +minecraft:block/orchid,6 +minecraft:block/poppy,6 +minecraft:block/red_tulip,6 +minecraft:block/spruce_sapling,6 +minecraft:block/white_tulip,6 +minecraft:block/pink_tulip,6 +minecraft:block/orange_tulip,6 +minecraft:block/allium,6 +minecraft:block/reeds,7 +minecraft:block/vine_1,8 +minecraft:block/vine_1u,8 +minecraft:block/vine_2,8 +minecraft:block/vine_2_opposite,8 +minecraft:block/vine_2u,8 +minecraft:block/vine_2u_opposite,8 +minecraft:block/vine_3,8 +minecraft:block/vine_3u,8 +minecraft:block/vine_4,8 +minecraft:block/vine_4u,8 +minecraft:block/vine_u,8 +eagler:builtin/water_still_vertex_id,9 +eagler:builtin/water_flow_vertex_id,10 +minecraft:block/waterlily,11 +minecraft:block/fire_floor_main,12 +minecraft:block/fire_n_main,13 +minecraft:block/fire_ne_main,13 +minecraft:block/fire_ns_main,13 +minecraft:block/fire_nse_main,13 +minecraft:block/fire_nsew_main,13 +minecraft:block/fire_u1_main,13 +minecraft:block/fire_nu1_main,13 +minecraft:block/fire_neu1_main,13 +minecraft:block/fire_nsu1_main,13 +minecraft:block/fire_nseu1_main,13 +minecraft:block/fire_nsewu1_main,13 +minecraft:block/fire_u2_main,13 +minecraft:block/fire_nu2_main,13 +minecraft:block/fire_neu2_main,13 +minecraft:block/fire_nsu2_main,13 +minecraft:block/fire_nseu2_main,13 +minecraft:block/fire_nsewu2_main,13 +minecraft:block/fire_n_alt,13 +minecraft:block/fire_ne_alt,13 +minecraft:block/fire_ns_alt,13 +minecraft:block/fire_nse_alt,13 +minecraft:block/fire_nsew_alt,13 +minecraft:block/fire_nu2_alt,13 +minecraft:block/fire_neu2_alt,13 +minecraft:block/fire_nsu2_alt,13 +minecraft:block/fire_nseu2_alt,13 +minecraft:block/fire_nsewu2_alt,13 +minecraft:block/fire_n_flip_main,13 +minecraft:block/fire_ne_flip_main,13 +minecraft:block/fire_ns_flip_main,13 +minecraft:block/fire_nse_flip_main,13 +minecraft:block/fire_nsew_flip_main,13 +minecraft:block/fire_nu1_flip_main,13 +minecraft:block/fire_neu1_flip_main,13 +minecraft:block/fire_nsu1_flip_main,13 +minecraft:block/fire_nseu1_flip_main,13 +minecraft:block/fire_nsewu1_flip_main,13 +minecraft:block/fire_nu2_flip_main,13 +minecraft:block/fire_neu2_flip_main,13 +minecraft:block/fire_nsu2_flip_main,13 +minecraft:block/fire_nseu2_flip_main,13 +minecraft:block/fire_nsewu2_flip_main,13 +minecraft:block/fire_n_alt_flip,13 +minecraft:block/fire_ne_alt_flip,13 +minecraft:block/fire_ns_alt_flip,13 +minecraft:block/fire_nse_alt_flip,13 +minecraft:block/fire_nsew_alt_flip,13 +minecraft:block/fire_nu1_alt_flip,13 +minecraft:block/fire_neu1_alt_flip,13 +minecraft:block/fire_nsu1_alt_flip,13 +minecraft:block/fire_nseu1_alt_flip,13 +minecraft:block/fire_nsewu1_alt_flip,13 +minecraft:block/fire_nu2_alt_flip,13 +minecraft:block/fire_neu2_alt_flip,13 +minecraft:block/fire_nsu2_alt_flip,13 +minecraft:block/fire_nseu2_alt_flip,13 +minecraft:block/fire_nsewu2_alt_flip,13 +minecraft:block/fire_nsewu2_alt_flip,13 +minecraft:block/glass,14 +minecraft:block/glass_pane_n,14 +minecraft:block/glass_pane_ne,14 +minecraft:block/glass_pane_new,14 +minecraft:block/glass_pane_ns,14 +minecraft:block/glass_pane_nse,14 +minecraft:block/glass_pane_nsew,14 +minecraft:block/glass_pane_nsw,14 +minecraft:block/glass_pane_nw,14 +minecraft:block/glass_pane_s,14 +minecraft:block/glass_pane_se,14 +minecraft:block/glass_pane_sew,14 +minecraft:block/glass_pane_sw,14 diff --git a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh index 1775d982..c8289e8c 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.fsh @@ -1,71 +1,71 @@ -#line 2 - -/* - * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision mediump float; -precision mediump sampler2D; - -in vec4 v_position4f; -in vec2 v_texCoord2f; -in vec4 v_color4f; -in vec2 v_lightmap2f; - -layout(location = 0) out vec4 output4f; - -uniform sampler2D u_inputTexture; -uniform sampler2D u_lightmapTexture; - -uniform mat4 u_inverseViewMatrix4f; - -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - mediump vec4 u_dynamicLightArray[12]; -}; - -void main() { - vec4 color = texture(u_inputTexture, v_texCoord2f) * v_color4f; - - if(color.a < 0.004) { - discard; - } - - vec4 light; - float blockLight = v_lightmap2f.x; - float diffuse = 0.0; - float len; - if(u_dynamicLightCount1i > 0) { - vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - vec3 normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; - for(int i = 0; i < safeLightCount; ++i) { - light = u_dynamicLightArray[i]; - light.xyz = light.xyz - worldPosition4f.xyz; - len = length(light.xyz); - diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); - } - blockLight = min(blockLight + diffuse * 0.066667, 1.0); - } - - color *= texture(u_lightmapTexture, vec2(blockLight, v_lightmap2f.y)); - - output4f = color; -} +#line 2 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec4 v_position4f; +in vec2 v_texCoord2f; +in vec4 v_color4f; +in vec2 v_lightmap2f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; +uniform sampler2D u_lightmapTexture; + +uniform mat4 u_inverseViewMatrix4f; + +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + mediump vec4 u_dynamicLightArray[12]; +}; + +void main() { + vec4 color = texture(u_inputTexture, v_texCoord2f) * v_color4f; + + if(color.a < 0.004) { + discard; + } + + vec4 light; + float blockLight = v_lightmap2f.x; + float diffuse = 0.0; + float len; + if(u_dynamicLightCount1i > 0) { + vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + vec3 normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz); + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; + for(int i = 0; i < safeLightCount; ++i) { + light = u_dynamicLightArray[i]; + light.xyz = light.xyz - worldPosition4f.xyz; + len = length(light.xyz); + diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); + } + blockLight = min(blockLight + diffuse * 0.066667, 1.0); + } + + color *= texture(u_lightmapTexture, vec2(blockLight, v_lightmap2f.y)); + + output4f = color; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh index 2ff13dd2..202bd153 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/accel_particle_dynamiclights.vsh @@ -1,61 +1,61 @@ -#line 2 - -/* - * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -precision lowp int; -precision highp float; -precision mediump sampler2D; - -layout(location = 0) in vec2 a_position2f; - -layout(location = 1) in vec3 p_position3f; -layout(location = 2) in vec2 p_texCoords2i; -layout(location = 3) in vec2 p_lightMap2f; -layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i; -layout(location = 5) in vec4 p_color4f; - -out vec4 v_position4f; -out vec2 v_texCoord2f; -out vec4 v_color4f; -out vec2 v_lightmap2f; - -uniform mat4 u_modelViewMatrix4f; -uniform mat4 u_projectionMatrix4f; -uniform vec3 u_texCoordSize2f_particleSize1f; -uniform vec3 u_transformParam_1_2_5_f; -uniform vec2 u_transformParam_3_4_f; -uniform vec4 u_color4f; - -void main() { - v_color4f = u_color4f * p_color4f.bgra; - v_lightmap2f = p_lightMap2f; - - vec2 tex2f = a_position2f * 0.5 + 0.5; - tex2f.y = 1.0 - tex2f.y; - tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; - v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; - - float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; - - vec3 pos3f = p_position3f; - vec2 spos2f = a_position2f * particleSize; - pos3f += u_transformParam_1_2_5_f * spos2f.xyy; - pos3f.zx += u_transformParam_3_4_f * spos2f; - - v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0); - gl_Position = u_projectionMatrix4f * v_position4f; -} +#line 2 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec2 a_position2f; + +layout(location = 1) in vec3 p_position3f; +layout(location = 2) in vec2 p_texCoords2i; +layout(location = 3) in vec2 p_lightMap2f; +layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i; +layout(location = 5) in vec4 p_color4f; + +out vec4 v_position4f; +out vec2 v_texCoord2f; +out vec4 v_color4f; +out vec2 v_lightmap2f; + +uniform mat4 u_modelViewMatrix4f; +uniform mat4 u_projectionMatrix4f; +uniform vec3 u_texCoordSize2f_particleSize1f; +uniform vec3 u_transformParam_1_2_5_f; +uniform vec2 u_transformParam_3_4_f; +uniform vec4 u_color4f; + +void main() { + v_color4f = u_color4f * p_color4f.bgra; + v_lightmap2f = p_lightMap2f; + + vec2 tex2f = a_position2f * 0.5 + 0.5; + tex2f.y = 1.0 - tex2f.y; + tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y; + v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy; + + float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x; + + vec3 pos3f = p_position3f; + vec2 spos2f = a_position2f * particleSize; + pos3f += u_transformParam_1_2_5_f * spos2f.xyy; + pos3f.zx += u_transformParam_3_4_f * spos2f; + + v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0); + gl_Position = u_projectionMatrix4f * v_position4f; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh index 114eb3cd..dffed3df 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.fsh @@ -1,219 +1,219 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec4 v_position4f; - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 v_texture2f; -#endif - -uniform vec4 u_color4f; - -#ifdef COMPILE_BLEND_ADD -uniform vec4 u_colorBlendSrc4f; -uniform vec4 u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec3 v_normal3f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 v_lightmap2f; -#endif - -#ifdef COMPILE_ENABLE_TEXTURE2D -uniform sampler2D u_samplerTexture; -#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN) -uniform vec2 u_textureCoords01; -#endif -#endif - -#ifdef COMPILE_ENABLE_LIGHTMAP -uniform sampler2D u_samplerLightmap; -#ifndef COMPILE_LIGHTMAP_ATTRIB -uniform vec2 u_textureCoords02; -#endif -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST -uniform float u_alphaTestRef1f; -#endif - -#ifdef COMPILE_ENABLE_MC_LIGHTING -uniform int u_lightsEnabled1i; -uniform vec4 u_lightsDirections4fv[4]; -uniform vec3 u_lightsAmbient3f; -#endif - -#ifndef COMPILE_NORMAL_ATTRIB -uniform vec3 u_uniformNormal3f; -#endif - -#ifdef COMPILE_ENABLE_FOG -uniform vec4 u_fogParameters4f; -uniform vec4 u_fogColor4f; -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN -in vec3 v_objectPosition3f; -uniform ivec4 u_texGenPlane4i; -uniform vec4 u_texGenS4f; -uniform vec4 u_texGenT4f; -uniform vec4 u_texGenR4f; -uniform vec4 u_texGenQ4f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX -uniform vec2 u_textureAnisotropicFix; -#endif - -uniform mat4 u_inverseViewMatrix4f; - -layout(std140) uniform u_chunkLightingData { - mediump int u_dynamicLightCount1i; - mediump int _paddingA_; - mediump int _paddingB_; - mediump int _paddingC_; - mediump vec4 u_dynamicLightArray[12]; -}; - -layout(location = 0) out vec4 output4f; - -void main() { - -#ifdef COMPILE_COLOR_ATTRIB - vec4 color = v_color4f * u_color4f; -#else - vec4 color = u_color4f; -#endif - -#ifdef COMPILE_ENABLE_TEX_GEN - vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); - vec4 texGenVector; - texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); - texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); - texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); - texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); - texGenVector.xyz = mat4x3( - u_textureMat4f01[0].xyw, - u_textureMat4f01[1].xyw, - u_textureMat4f01[2].xyw, - u_textureMat4f01[3].xyw - ) * texGenVector; - - color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.z); - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif - -#else - -#ifdef COMPILE_ENABLE_TEXTURE2D -#ifdef COMPILE_TEXTURE_ATTRIB -#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX - // d3d11 doesn't support GL_NEAREST upscaling with anisotropic - // filtering enabled, so it needs this stupid fix to 'work' - vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; - color *= texture(u_samplerTexture, uv / u_textureAnisotropicFix); -#else - color *= texture(u_samplerTexture, v_texture2f); -#endif -#else - color *= texture(u_samplerTexture, u_textureCoords01); -#endif -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - vec3 normal = normalize(v_normal3f); -#else - vec3 normal = u_uniformNormal3f; -#endif - -#ifdef COMPILE_ENABLE_LIGHTMAP - float diffuse = 0.0; -#ifdef COMPILE_LIGHTMAP_ATTRIB - float blockLight = v_lightmap2f.x; -#else - float blockLight = u_textureCoords02.x; -#endif - float len; - vec4 light; - if(u_dynamicLightCount1i > 0) { - vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; - worldPosition4f.xyz /= worldPosition4f.w; - vec3 normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normal); - int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; - for(int i = 0; i < safeLightCount; ++i) { - light = u_dynamicLightArray[i]; - light.xyz = light.xyz - worldPosition4f.xyz; - len = length(light.xyz); - diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); - } - blockLight = min(blockLight + diffuse * 0.066667, 1.0); - } -#ifdef COMPILE_LIGHTMAP_ATTRIB - color *= texture(u_samplerLightmap, vec2(blockLight, v_lightmap2f.y)); -#else - color *= texture(u_samplerLightmap, vec2(blockLight, u_textureCoords02.y)); -#endif -#endif - -#ifdef COMPILE_BLEND_ADD - color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; -#endif - -#ifdef COMPILE_ENABLE_ALPHA_TEST - if(color.a < u_alphaTestRef1f) discard; -#endif - -#endif - -#ifdef COMPILE_ENABLE_MC_LIGHTING -#ifndef COMPILE_ENABLE_LIGHTMAP - vec4 light; - float diffuse = 0.0; -#else - diffuse = 0.0; -#endif - for(int i = 0; i < u_lightsEnabled1i; ++i) { - light = u_lightsDirections4fv[i]; - diffuse += max(dot(light.xyz, normal), 0.0) * light.w; - } - color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0); -#endif - -#ifdef COMPILE_ENABLE_FOG - vec3 fogPos = v_position4f.xyz / v_position4f.w; - float dist = sqrt(dot(fogPos, fogPos)); - float fogDensity = u_fogParameters4f.y; - float fogStart = u_fogParameters4f.z; - float fogEnd = u_fogParameters4f.w; - float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) : - (dist - fogStart) / (fogEnd - fogStart); - color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a); -#endif - - output4f = color; -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec4 v_position4f; + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 v_texture2f; +#endif + +uniform vec4 u_color4f; + +#ifdef COMPILE_BLEND_ADD +uniform vec4 u_colorBlendSrc4f; +uniform vec4 u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 v_lightmap2f; +#endif + +#ifdef COMPILE_ENABLE_TEXTURE2D +uniform sampler2D u_samplerTexture; +#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN) +uniform vec2 u_textureCoords01; +#endif +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP +uniform sampler2D u_samplerLightmap; +#ifndef COMPILE_LIGHTMAP_ATTRIB +uniform vec2 u_textureCoords02; +#endif +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST +uniform float u_alphaTestRef1f; +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +uniform int u_lightsEnabled1i; +uniform vec4 u_lightsDirections4fv[4]; +uniform vec3 u_lightsAmbient3f; +#endif + +#ifndef COMPILE_NORMAL_ATTRIB +uniform vec3 u_uniformNormal3f; +#endif + +#ifdef COMPILE_ENABLE_FOG +uniform vec4 u_fogParameters4f; +uniform vec4 u_fogColor4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN +in vec3 v_objectPosition3f; +uniform ivec4 u_texGenPlane4i; +uniform vec4 u_texGenS4f; +uniform vec4 u_texGenT4f; +uniform vec4 u_texGenR4f; +uniform vec4 u_texGenQ4f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX +uniform vec2 u_textureAnisotropicFix; +#endif + +uniform mat4 u_inverseViewMatrix4f; + +layout(std140) uniform u_chunkLightingData { + mediump int u_dynamicLightCount1i; + mediump int _paddingA_; + mediump int _paddingB_; + mediump int _paddingC_; + mediump vec4 u_dynamicLightArray[12]; +}; + +layout(location = 0) out vec4 output4f; + +void main() { + +#ifdef COMPILE_COLOR_ATTRIB + vec4 color = v_color4f * u_color4f; +#else + vec4 color = u_color4f; +#endif + +#ifdef COMPILE_ENABLE_TEX_GEN + vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0); + vec4 texGenVector; + texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f); + texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f); + texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f); + texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f); + texGenVector.xyz = mat4x3( + u_textureMat4f01[0].xyw, + u_textureMat4f01[1].xyw, + u_textureMat4f01[2].xyw, + u_textureMat4f01[3].xyw + ) * texGenVector; + + color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.z); + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#else + +#ifdef COMPILE_ENABLE_TEXTURE2D +#ifdef COMPILE_TEXTURE_ATTRIB +#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX + // d3d11 doesn't support GL_NEAREST upscaling with anisotropic + // filtering enabled, so it needs this stupid fix to 'work' + vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5; + color *= texture(u_samplerTexture, uv / u_textureAnisotropicFix); +#else + color *= texture(u_samplerTexture, v_texture2f); +#endif +#else + color *= texture(u_samplerTexture, u_textureCoords01); +#endif +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + vec3 normal = v_normal3f; +#else + vec3 normal = u_uniformNormal3f; +#endif + +#ifdef COMPILE_ENABLE_LIGHTMAP + float diffuse = 0.0; +#ifdef COMPILE_LIGHTMAP_ATTRIB + float blockLight = v_lightmap2f.x; +#else + float blockLight = u_textureCoords02.x; +#endif + float len; + vec4 light; + if(u_dynamicLightCount1i > 0) { + vec4 worldPosition4f = u_inverseViewMatrix4f * v_position4f; + worldPosition4f.xyz /= worldPosition4f.w; + vec3 normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normal); + int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; + for(int i = 0; i < safeLightCount; ++i) { + light = u_dynamicLightArray[i]; + light.xyz = light.xyz - worldPosition4f.xyz; + len = length(light.xyz); + diffuse += max(dot(light.xyz / len, normalVector3f) * 0.8 + 0.2, 0.0) * max(light.w - len, 0.0); + } + blockLight = min(blockLight + diffuse * 0.066667, 1.0); + } +#ifdef COMPILE_LIGHTMAP_ATTRIB + color *= texture(u_samplerLightmap, vec2(blockLight, v_lightmap2f.y)); +#else + color *= texture(u_samplerLightmap, vec2(blockLight, u_textureCoords02.y)); +#endif +#endif + +#ifdef COMPILE_BLEND_ADD + color = color * u_colorBlendSrc4f + u_colorBlendAdd4f; +#endif + +#ifdef COMPILE_ENABLE_ALPHA_TEST + if(color.a < u_alphaTestRef1f) discard; +#endif + +#endif + +#ifdef COMPILE_ENABLE_MC_LIGHTING +#ifndef COMPILE_ENABLE_LIGHTMAP + vec4 light; + float diffuse = 0.0; +#else + diffuse = 0.0; +#endif + for(int i = 0; i < u_lightsEnabled1i; ++i) { + light = u_lightsDirections4fv[i]; + diffuse += max(dot(light.xyz, normal), 0.0) * light.w; + } + color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0); +#endif + +#ifdef COMPILE_ENABLE_FOG + vec3 fogPos = v_position4f.xyz / v_position4f.w; + float dist = sqrt(dot(fogPos, fogPos)); + float fogDensity = u_fogParameters4f.y; + float fogStart = u_fogParameters4f.z; + float fogEnd = u_fogParameters4f.w; + float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) : + (dist - fogStart) / (fogEnd - fogStart); + color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a); +#endif + + output4f = color; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh index b1cb7f3d..023b204f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/dynamiclights/core_dynamiclights.vsh @@ -1,80 +1,80 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -in vec3 a_position3f; - -out vec4 v_position4f; - -#ifdef COMPILE_ENABLE_TEX_GEN -out vec3 v_objectPosition3f; -#endif - -#ifdef COMPILE_TEXTURE_ATTRIB -in vec2 a_texture2f; -out vec2 v_texture2f; -uniform mat4 u_textureMat4f01; -#endif - -#ifdef COMPILE_COLOR_ATTRIB -in vec4 a_color4f; -out vec4 v_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB -in vec4 a_normal4f; -out vec3 v_normal3f; -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB -in vec2 a_lightmap2f; -out vec2 v_lightmap2f; -uniform mat4 u_textureMat4f02; -#endif - -uniform mat4 u_modelviewMat4f; -uniform mat4 u_projectionMat4f; - -#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) - -void main() { -#ifdef COMPILE_ENABLE_TEX_GEN - v_objectPosition3f = a_position3f; -#endif - - v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); - -#ifdef COMPILE_TEXTURE_ATTRIB - vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); - v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; -#endif - -#ifdef COMPILE_COLOR_ATTRIB - v_color4f = a_color4f; -#endif - -#ifdef COMPILE_NORMAL_ATTRIB - v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); -#endif - -#ifdef COMPILE_LIGHTMAP_ATTRIB - vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); - v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; -#endif - - gl_Position = u_projectionMat4f * v_position4f; -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +in vec3 a_position3f; + +out vec4 v_position4f; + +#ifdef COMPILE_ENABLE_TEX_GEN +out vec3 v_objectPosition3f; +#endif + +#ifdef COMPILE_TEXTURE_ATTRIB +in vec2 a_texture2f; +out vec2 v_texture2f; +uniform mat4 u_textureMat4f01; +#endif + +#ifdef COMPILE_COLOR_ATTRIB +in vec4 a_color4f; +out vec4 v_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB +in vec4 a_normal4f; +out vec3 v_normal3f; +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB +in vec2 a_lightmap2f; +out vec2 v_lightmap2f; +uniform mat4 u_textureMat4f02; +#endif + +uniform mat4 u_modelviewMat4f; +uniform mat4 u_projectionMat4f; + +#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw) + +void main() { +#ifdef COMPILE_ENABLE_TEX_GEN + v_objectPosition3f = a_position3f; +#endif + + v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0); + +#ifdef COMPILE_TEXTURE_ATTRIB + vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0); + v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z; +#endif + +#ifdef COMPILE_COLOR_ATTRIB + v_color4f = a_color4f; +#endif + +#ifdef COMPILE_NORMAL_ATTRIB + v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz); +#endif + +#ifdef COMPILE_LIGHTMAP_ATTRIB + vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0); + v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z; +#endif + + gl_Position = u_projectionMat4f * v_position4f; +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/gles2_compat.glsl b/desktopRuntime/resources/assets/eagler/glsl/gles2_compat.glsl index 5529cbbe..51a99cc4 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/gles2_compat.glsl +++ b/desktopRuntime/resources/assets/eagler/glsl/gles2_compat.glsl @@ -1,98 +1,98 @@ -#line 2 6969 - -/* - * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef EAGLER_HAS_GLES_300 - -// For GLES 3.00+ (WebGL 2.0) -#ifdef EAGLER_IS_VERTEX_SHADER - -// Vertex Shaders: -#define EAGLER_VSH_LAYOUT_BEGIN() -#define EAGLER_VSH_LAYOUT_END() -#define EAGLER_IN(_loc, _type, _name) layout(location = _loc) in _type _name; -#define EAGLER_IN_AUTO(_type, _name) in _type _name; -#define EAGLER_OUT(_type, _name) out _type _name; -#define EAGLER_VERT_POSITION gl_Position - -#else -#ifdef EAGLER_IS_FRAGMENT_SHADER - -// Fragment Shaders: -#define EAGLER_IN(_type, _name) in _type _name; -#define EAGLER_FRAG_COLOR eagler_FragColor -#define EAGLER_FRAG_DEPTH gl_FragDepth - -#define EAGLER_FRAG_OUT() layout(location = 0) out vec4 EAGLER_FRAG_COLOR; - -#endif -#endif - -// All Shaders: - -#define EAGLER_TEXTURE_2D(tex, coord2f) texture(tex, coord2f) -#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) textureLod(_tex, _coord2f, _lod1f) -#define EAGLER_HAS_TEXTURE_2D_LOD - - -#else -#ifdef EAGLER_HAS_GLES_200 - -// For GLES 2.00 (WebGL 1.0) -#ifdef EAGLER_IS_VERTEX_SHADER - -// Vertex Shaders: -#define EAGLER_VSH_LAYOUT_BEGIN() -#define EAGLER_VSH_LAYOUT_END() -#define EAGLER_IN(_loc, _type, _name) attribute _type _name; -#define EAGLER_IN_AUTO(_type, _name) attribute _type _name; -#define EAGLER_OUT(_type, _name) varying _type _name; -#define EAGLER_VERT_POSITION gl_Position - -#else -#ifdef EAGLER_IS_FRAGMENT_SHADER - -// Fragment Shaders: -#define EAGLER_IN(_type, _name) varying _type _name; -#define EAGLER_FRAG_COLOR gl_FragColor -// TODO: Must require EXT_frag_depth to use this on GLES 2.0 (currently not needed) -#define EAGLER_FRAG_DEPTH gl_FragDepth - -#define EAGLER_FRAG_OUT() - -#endif -#endif - -// All Shaders: - -#define EAGLER_TEXTURE_2D(_tex, _coord2f) texture2D(_tex, _coord2f) - -#ifdef EAGLER_HAS_GLES_200_SHADER_TEXTURE_LOD -#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2DLodEXT(_tex, _coord2f, _lod1f) -#define EAGLER_HAS_TEXTURE_2D_LOD -#else -// Beware! -#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2D(_tex, _coord2f) -#define EAGLER_HAS_TEXTURE_2D_LOD -#endif - -#else -#error Unable to determine API version! (Missing directive EAGLER_HAS_GLES_200 or 300) -#endif -#endif - -#line 1 0 \ No newline at end of file +#line 2 6969 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef EAGLER_HAS_GLES_300 + +// For GLES 3.00+ (WebGL 2.0) +#ifdef EAGLER_IS_VERTEX_SHADER + +// Vertex Shaders: +#define EAGLER_VSH_LAYOUT_BEGIN() +#define EAGLER_VSH_LAYOUT_END() +#define EAGLER_IN(_loc, _type, _name) layout(location = _loc) in _type _name; +#define EAGLER_IN_AUTO(_type, _name) in _type _name; +#define EAGLER_OUT(_type, _name) out _type _name; +#define EAGLER_VERT_POSITION gl_Position + +#else +#ifdef EAGLER_IS_FRAGMENT_SHADER + +// Fragment Shaders: +#define EAGLER_IN(_type, _name) in _type _name; +#define EAGLER_FRAG_COLOR eagler_FragColor +#define EAGLER_FRAG_DEPTH gl_FragDepth + +#define EAGLER_FRAG_OUT() layout(location = 0) out vec4 EAGLER_FRAG_COLOR; + +#endif +#endif + +// All Shaders: + +#define EAGLER_TEXTURE_2D(tex, coord2f) texture(tex, coord2f) +#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) textureLod(_tex, _coord2f, _lod1f) +#define EAGLER_HAS_TEXTURE_2D_LOD + + +#else +#ifdef EAGLER_HAS_GLES_200 + +// For GLES 2.00 (WebGL 1.0) +#ifdef EAGLER_IS_VERTEX_SHADER + +// Vertex Shaders: +#define EAGLER_VSH_LAYOUT_BEGIN() +#define EAGLER_VSH_LAYOUT_END() +#define EAGLER_IN(_loc, _type, _name) attribute _type _name; +#define EAGLER_IN_AUTO(_type, _name) attribute _type _name; +#define EAGLER_OUT(_type, _name) varying _type _name; +#define EAGLER_VERT_POSITION gl_Position + +#else +#ifdef EAGLER_IS_FRAGMENT_SHADER + +// Fragment Shaders: +#define EAGLER_IN(_type, _name) varying _type _name; +#define EAGLER_FRAG_COLOR gl_FragColor +// TODO: Must require EXT_frag_depth to use this on GLES 2.0 (currently not needed) +#define EAGLER_FRAG_DEPTH gl_FragDepth + +#define EAGLER_FRAG_OUT() + +#endif +#endif + +// All Shaders: + +#define EAGLER_TEXTURE_2D(_tex, _coord2f) texture2D(_tex, _coord2f) + +#ifdef EAGLER_HAS_GLES_200_SHADER_TEXTURE_LOD +#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2DLodEXT(_tex, _coord2f, _lod1f) +#define EAGLER_HAS_TEXTURE_2D_LOD +#else +// Beware! +#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2D(_tex, _coord2f) +#define EAGLER_HAS_TEXTURE_2D_LOD +#endif + +#else +#error Unable to determine API version! (Missing directive EAGLER_HAS_GLES_200 or 300) +#endif +#endif + +#line 1 0 diff --git a/desktopRuntime/resources/assets/eagler/glsl/hw_fingerprint.fsh b/desktopRuntime/resources/assets/eagler/glsl/hw_fingerprint.fsh index 0c11ba84..0abd43f6 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/hw_fingerprint.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/hw_fingerprint.fsh @@ -1,55 +1,55 @@ -#line 2 - -/* - * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN(vec2, v_position2f) - -EAGLER_FRAG_OUT() - -uniform sampler2D u_inputTexture; -uniform mat4 u_textureMatrix; - -vec2 rand(in vec2 co){ - float f = dot(co, vec2(12.98984576, 78.23378678)); - return fract(vec2(sin(f + 0.32490982), cos(f - 0.69890)) * 43758.54576873); -} - -void main() { - vec4 coords4f = vec4(v_position2f.x * 0.25 - 0.125, v_position2f.y * 0.25 - 0.125, v_position2f.y * 10.0 - 9.0, 1.0); - coords4f = u_textureMatrix * coords4f; - coords4f.xy /= coords4f.w; - EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, coords4f.xy * 0.5 + 0.5); - EAGLER_FRAG_COLOR.rg += rand(v_position2f * 1.2344574345) * 0.05; - EAGLER_FRAG_COLOR.ba -= rand(v_position2f * 1.2343525225) * 0.05; - EAGLER_FRAG_COLOR.a = fract(sin(dot(coords4f.yz, vec2(12.9898, 78.233))) * 43758.5453); - EAGLER_FRAG_COLOR.a += exp(length(rand(coords4f.xw)) * -69.420); - EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 2.423952)); - EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(5.4523856)); - EAGLER_FRAG_COLOR += 0.00004423 + EAGLER_FRAG_COLOR.a * 0.02; - EAGLER_FRAG_COLOR = sqrt(EAGLER_FRAG_COLOR); - EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 1.9023576)); -#ifdef EAGLER_HAS_GLES_300 - EAGLER_FRAG_COLOR.ra += tanh(fract(EAGLER_FRAG_COLOR.a * 32.324834)) * 0.1012426; -#endif - EAGLER_FRAG_COLOR.b *= 0.934924; - EAGLER_FRAG_COLOR.b += (1.23213 / inversesqrt(EAGLER_FRAG_COLOR.a)) * 0.156365; - EAGLER_FRAG_COLOR.ga += rand(gl_FragCoord.xy) * 0.13423567; - EAGLER_FRAG_COLOR.rb += gl_PointCoord * 0.0124264565; -#ifdef EAGLER_HAS_GLES_300 - EAGLER_FRAG_COLOR *= 0.95234 + asinh(EAGLER_FRAG_COLOR.g * 5.23423) * 0.0254325; -#endif -} +#line 2 + +/* + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN(vec2, v_position2f) + +EAGLER_FRAG_OUT() + +uniform sampler2D u_inputTexture; +uniform mat4 u_textureMatrix; + +vec2 rand(in vec2 co){ + float f = dot(co, vec2(12.98984576, 78.23378678)); + return fract(vec2(sin(f + 0.32490982), cos(f - 0.69890)) * 43758.54576873); +} + +void main() { + vec4 coords4f = vec4(v_position2f.x * 0.25 - 0.125, v_position2f.y * 0.25 - 0.125, v_position2f.y * 10.0 - 9.0, 1.0); + coords4f = u_textureMatrix * coords4f; + coords4f.xy /= coords4f.w; + EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, coords4f.xy * 0.5 + 0.5); + EAGLER_FRAG_COLOR.rg += rand(v_position2f * 1.2344574345) * 0.05; + EAGLER_FRAG_COLOR.ba -= rand(v_position2f * 1.2343525225) * 0.05; + EAGLER_FRAG_COLOR.a = fract(sin(dot(coords4f.yz, vec2(12.9898, 78.233))) * 43758.5453); + EAGLER_FRAG_COLOR.a += exp(length(rand(coords4f.xw)) * -69.420); + EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 2.423952)); + EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(5.4523856)); + EAGLER_FRAG_COLOR += 0.00004423 + EAGLER_FRAG_COLOR.a * 0.02; + EAGLER_FRAG_COLOR = sqrt(EAGLER_FRAG_COLOR); + EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 1.9023576)); +#ifdef EAGLER_HAS_GLES_300 + EAGLER_FRAG_COLOR.ra += tanh(fract(EAGLER_FRAG_COLOR.a * 32.324834)) * 0.1012426; +#endif + EAGLER_FRAG_COLOR.b *= 0.934924; + EAGLER_FRAG_COLOR.b += (1.23213 / inversesqrt(EAGLER_FRAG_COLOR.a)) * 0.156365; + EAGLER_FRAG_COLOR.ga += rand(gl_FragCoord.xy) * 0.13423567; + EAGLER_FRAG_COLOR.rb += gl_PointCoord * 0.0124264565; +#ifdef EAGLER_HAS_GLES_300 + EAGLER_FRAG_COLOR *= 0.95234 + asinh(EAGLER_FRAG_COLOR.g * 5.23423) * 0.0254325; +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/local.vsh b/desktopRuntime/resources/assets/eagler/glsl/local.vsh index 0802a642..cd74b1eb 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/local.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/local.vsh @@ -1,28 +1,28 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_VSH_LAYOUT_BEGIN() -EAGLER_IN(0, vec2, a_position2f) -EAGLER_VSH_LAYOUT_END() - -EAGLER_OUT(vec2, v_position2f) - -void main() { - v_position2f = a_position2f * 0.5 + 0.5; - EAGLER_VERT_POSITION = vec4(a_position2f, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_VSH_LAYOUT_BEGIN() +EAGLER_IN(0, vec2, a_position2f) +EAGLER_VSH_LAYOUT_END() + +EAGLER_OUT(vec2, v_position2f) + +void main() { + v_position2f = a_position2f * 0.5 + 0.5; + EAGLER_VERT_POSITION = vec4(a_position2f, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh index 8b680599..6bc3c50c 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh @@ -1,369 +1,369 @@ -#line 2 - -// Remove this line below if you plan to modify this file -#ifndef EAGLER_IS_GLES_200 -#define USE_OPTIMIZED -#endif - - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - - -/* - * This file was modified by lax1dude to remove dead code - * - * Original: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 - * - */ - - -/* - * ============================================================================ - * - * - * NVIDIA FXAA 3.11 by TIMOTHY LOTTES - * - * - * ------------------------------------------------------------------------------ - * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. - * ------------------------------------------------------------------------------ - * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED - * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS - * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA - * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR - * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR - * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, - * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE - * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGES. - * - */ - -EAGLER_IN(vec2, v_position2f) - -EAGLER_FRAG_OUT() - -uniform sampler2D u_screenTexture; -uniform vec2 u_screenSize2f; - -#ifndef USE_OPTIMIZED -#ifndef FXAA_GREEN_AS_LUMA - // For those using non-linear color, - // and either not able to get luma in alpha, or not wanting to, - // this enables FXAA to run using green as a proxy for luma. - // So with this enabled, no need to pack luma in alpha. - // - // This will turn off AA on anything which lacks some amount of green. - // Pure red and blue or combination of only R and B, will get no AA. - // - // Might want to lower the settings for both, - // fxaaConsoleEdgeThresholdMin - // fxaaQualityEdgeThresholdMin - // In order to insure AA does not get turned off on colors - // which contain a minor amount of green. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_GREEN_AS_LUMA 0 -#endif - -#ifndef FXAA_DISCARD - // 1 = Use discard on pixels which don't need AA. - // 0 = Return unchanged color on pixels which don't need AA. - #define FXAA_DISCARD 0 -#endif - -/*============================================================================ - API PORTING -============================================================================*/ - #define FxaaBool bool - #define FxaaDiscard discard - #define FxaaFloat float - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaHalf float - #define FxaaHalf2 vec2 - #define FxaaHalf3 vec3 - #define FxaaHalf4 vec4 - #define FxaaInt2 ivec2 - #define FxaaSat(x) clamp(x, 0.0, 1.0) - #define FxaaTex sampler2D -/*--------------------------------------------------------------------------*/ - - #define FxaaTexTop(t, p) EAGLER_TEXTURE_2D_LOD(t, p, 0.0) - -/*============================================================================ - GREEN AS LUMA OPTION SUPPORT FUNCTION -============================================================================*/ -#if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return dot(rgba.xyz * rgba.xyz, vec3(0.299, 0.587, 0.114)); } -#else - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } -#endif - -/*============================================================================ - FXAA3 CONSOLE - PC VERSION -============================================================================*/ -/*--------------------------------------------------------------------------*/ -FxaaFloat4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - // - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy} = center of pixel - FxaaFloat2 pos, - // - // Used only for FXAA Console, and not used on the 360 version. - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy__} = upper left of pixel - // {__zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - // - // Input color texture. - // {rgb_} = color in linear or perceptual color space - // if (FXAA_GREEN_AS_LUMA == 0) - // {___a} = luma in perceptual color space (not linear) - FxaaTex tex, - // - // Only used on FXAA Console. - // This must be from a constant/uniform. - // This effects sub-pixel AA quality and inversely sharpness. - // Where N ranges between, - // N = 0.50 (default) - // N = 0.33 (sharper) - // {x___} = -N/screenWidthInPixels - // {_y__} = -N/screenHeightInPixels - // {__z_} = N/screenWidthInPixels - // {___w} = N/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt, - // - // Only used on FXAA Console. - // Not used on 360, but used on PS3 and PC. - // This must be from a constant/uniform. - // {x___} = -2.0/screenWidthInPixels - // {_y__} = -2.0/screenHeightInPixels - // {__z_} = 2.0/screenWidthInPixels - // {___w} = 2.0/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. - // Due to the PS3 being ALU bound, - // there are only three safe values here: 2 and 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // For all other platforms can be a non-power of two. - // 8.0 is sharper (default!!!) - // 4.0 is softer - // 2.0 is really soft (good only for vector graphics inputs) - FxaaFloat fxaaConsoleEdgeSharpness, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. - // Due to the PS3 being ALU bound, - // there are only two safe values here: 1/4 and 1/8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // The console setting has a different mapping than the quality setting. - // Other platforms can use other values. - // 0.125 leaves less aliasing, but is softer (default!!!) - // 0.25 leaves more aliasing, and is sharper - FxaaFloat fxaaConsoleEdgeThreshold, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // The console setting has a different mapping than the quality setting. - // This does not apply to PS3, - // PS3 was simplified to avoid more shader instructions. - // 0.06 - faster but more aliasing in darks - // 0.05 - default - // 0.04 - slower and less aliasing in darks - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaConsoleEdgeThresholdMin -) { -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); - FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); - FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); - FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); - #if (FXAA_GREEN_AS_LUMA == 0) - // TODO Luma - FxaaFloat lumaM = FxaaLuma(rgbyM); - #else - FxaaFloat lumaM = rgbyM.y; - #endif -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); - lumaNe += 1.0/384.0; - FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); - FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); - FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMinM = min(lumaMin, lumaM); - FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - FxaaFloat lumaMaxM = max(lumaMax, lumaM); - FxaaFloat dirSwMinusNe = lumaSw - lumaNe; - FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; - FxaaFloat dirSeMinusNw = lumaSe - lumaNw; - if(lumaMaxSubMinM < lumaMaxScaledClamped) - { - #if (FXAA_DISCARD == 1) - FxaaDiscard; - #else - return rgbyM; - #endif - } -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir; - dir.x = dirSwMinusNe + dirSeMinusNw; - dir.y = dirSwMinusNe - dirSeMinusNw; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir1 = normalize(dir.xy); - FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); - FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); -/*--------------------------------------------------------------------------*/ - FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; - FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw; - FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x); - FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; - FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); -/*--------------------------------------------------------------------------*/ - #if (FXAA_GREEN_AS_LUMA == 0) - // TODO Luma - float lumaB = FxaaLuma(rgbyB); - #else - float lumaB = rgbyB.y; - #endif - if((lumaB < lumaMin) || (lumaB > lumaMax)) - rgbyB.xyz = rgbyA.xyz * 0.5; - // - return rgbyB; -} -/*==========================================================================*/ - -#define edgeSharpness 3.0 -#define edgeThreshold 0.15 -#define edgeThresholdMin 0.05 - -void main(){ - vec2 screenSize05 = 0.5 * u_screenSize2f; - - vec4 posPos; - posPos.xy = v_position2f; - posPos.zw = v_position2f + u_screenSize2f; - - vec4 rcpFrameOpt; - rcpFrameOpt.xy = -screenSize05; - rcpFrameOpt.zw = screenSize05; - - EAGLER_FRAG_COLOR = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0); -} -#else - -// This 'optimized' code was generated using glslangValidator + spirv-cross + spirv-opt on the source code above -// Is it faster? Idfk, probably compiles faster at least, what matters it I tried - -float _616; - -void main() -{ - mediump vec2 _257 = u_screenSize2f * 0.5; - mediump vec4 _611 = vec4(v_position2f, v_position2f + u_screenSize2f); - mediump vec4 _612 = vec4(_616, _616, _257); - mediump vec2 _290 = v_position2f + _257; - mediump vec4 _608; - for(;;) - { - mediump vec3 _532 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xy, 0.0).xyz; - mediump float _536 = dot(_532 * _532, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); - mediump vec3 _540 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xw, 0.0).xyz; - mediump float _544 = dot(_540 * _540, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); - mediump vec3 _548 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zy, 0.0).xyz; - mediump vec3 _556 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zw, 0.0).xyz; - mediump float _560 = dot(_556 * _556, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); - mediump vec4 _390 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _290, 0.0); - mediump vec3 _564 = _390.xyz; - mediump float _568 = dot(_564 * _564, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); - mediump float _397 = dot(_548 * _548, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)) + 0.00260416674427688121795654296875; - mediump float _409 = max(max(_397, _560), max(_536, _544)); - mediump float _412 = min(min(_397, _560), min(_536, _544)); - mediump float _427 = _544 - _397; - mediump float _433 = _560 - _536; - if ((max(_409, _568) - min(_412, _568)) < max(0.0500000007450580596923828125, _409 * 0.1500000059604644775390625)) - { - _608 = _390; - break; - } - mediump vec2 _449 = normalize(vec2(_427 + _433, _427 - _433)); - vec2 hp_copy_449 = _449; - mediump vec2 _454 = _612.zw; - vec2 _614 = -hp_copy_449; - mediump vec2 mp_copy_614 = _614; - mediump vec2 _481 = clamp(_449 / vec2(min(abs(_449.x), abs(_449.y)) * 3.0), vec2(-2.0), vec2(2.0)); - vec2 hp_copy_481 = _481; - mediump vec2 _484 = (_612 * 4.0).zw; - vec2 _615 = -hp_copy_481; - mediump vec2 mp_copy_615 = _615; - mediump vec4 _498 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _449 * _454 + _290, 0.0); - mediump vec4 _505 = ((EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25); - mediump float _576 = dot(_505.xyz * _505.xyz, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); - mediump vec4 _607; - if ((_576 < _412) || (_576 > _409)) - { - mediump vec3 _518 = _498.xyz * 0.5; - mediump vec4 _600; - _600.x = _518.x; - _600.y = _518.y; - _600.z = _518.z; - _607 = _600; - } - else - { - _607 = _505; - } - _608 = _607; - break; - } - EAGLER_FRAG_COLOR = vec4(_608.xyz, 1.0); -} - -#endif \ No newline at end of file +#line 2 + +// Remove this line below if you plan to modify this file +#ifndef EAGLER_IS_GLES_200 +#define USE_OPTIMIZED +#endif + + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + + +/* + * This file was modified by lax1dude to remove dead code + * + * Original: https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126 + * + */ + + +/* + * ============================================================================ + * + * + * NVIDIA FXAA 3.11 by TIMOTHY LOTTES + * + * + * ------------------------------------------------------------------------------ + * COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. + * ------------------------------------------------------------------------------ + * TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED + * *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS + * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA + * OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR + * LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, + * OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE + * THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGES. + * + */ + +EAGLER_IN(vec2, v_position2f) + +EAGLER_FRAG_OUT() + +uniform sampler2D u_screenTexture; +uniform vec2 u_screenSize2f; + +#ifndef USE_OPTIMIZED +#ifndef FXAA_GREEN_AS_LUMA + // For those using non-linear color, + // and either not able to get luma in alpha, or not wanting to, + // this enables FXAA to run using green as a proxy for luma. + // So with this enabled, no need to pack luma in alpha. + // + // This will turn off AA on anything which lacks some amount of green. + // Pure red and blue or combination of only R and B, will get no AA. + // + // Might want to lower the settings for both, + // fxaaConsoleEdgeThresholdMin + // fxaaQualityEdgeThresholdMin + // In order to insure AA does not get turned off on colors + // which contain a minor amount of green. + // + // 1 = On. + // 0 = Off. + // + #define FXAA_GREEN_AS_LUMA 0 +#endif + +#ifndef FXAA_DISCARD + // 1 = Use discard on pixels which don't need AA. + // 0 = Return unchanged color on pixels which don't need AA. + #define FXAA_DISCARD 0 +#endif + +/*============================================================================ + API PORTING +============================================================================*/ + #define FxaaBool bool + #define FxaaDiscard discard + #define FxaaFloat float + #define FxaaFloat2 vec2 + #define FxaaFloat3 vec3 + #define FxaaFloat4 vec4 + #define FxaaHalf float + #define FxaaHalf2 vec2 + #define FxaaHalf3 vec3 + #define FxaaHalf4 vec4 + #define FxaaInt2 ivec2 + #define FxaaSat(x) clamp(x, 0.0, 1.0) + #define FxaaTex sampler2D +/*--------------------------------------------------------------------------*/ + + #define FxaaTexTop(t, p) EAGLER_TEXTURE_2D_LOD(t, p, 0.0) + +/*============================================================================ + GREEN AS LUMA OPTION SUPPORT FUNCTION +============================================================================*/ +#if (FXAA_GREEN_AS_LUMA == 0) + FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return dot(rgba.xyz * rgba.xyz, vec3(0.299, 0.587, 0.114)); } +#else + FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } +#endif + +/*============================================================================ + FXAA3 CONSOLE - PC VERSION +============================================================================*/ +/*--------------------------------------------------------------------------*/ +FxaaFloat4 FxaaPixelShader( + // See FXAA Quality FxaaPixelShader() source for docs on Inputs! + // + // Use noperspective interpolation here (turn off perspective interpolation). + // {xy} = center of pixel + FxaaFloat2 pos, + // + // Used only for FXAA Console, and not used on the 360 version. + // Use noperspective interpolation here (turn off perspective interpolation). + // {xy__} = upper left of pixel + // {__zw} = lower right of pixel + FxaaFloat4 fxaaConsolePosPos, + // + // Input color texture. + // {rgb_} = color in linear or perceptual color space + // if (FXAA_GREEN_AS_LUMA == 0) + // {___a} = luma in perceptual color space (not linear) + FxaaTex tex, + // + // Only used on FXAA Console. + // This must be from a constant/uniform. + // This effects sub-pixel AA quality and inversely sharpness. + // Where N ranges between, + // N = 0.50 (default) + // N = 0.33 (sharper) + // {x___} = -N/screenWidthInPixels + // {_y__} = -N/screenHeightInPixels + // {__z_} = N/screenWidthInPixels + // {___w} = N/screenHeightInPixels + FxaaFloat4 fxaaConsoleRcpFrameOpt, + // + // Only used on FXAA Console. + // Not used on 360, but used on PS3 and PC. + // This must be from a constant/uniform. + // {x___} = -2.0/screenWidthInPixels + // {_y__} = -2.0/screenHeightInPixels + // {__z_} = 2.0/screenWidthInPixels + // {___w} = 2.0/screenHeightInPixels + FxaaFloat4 fxaaConsoleRcpFrameOpt2, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. + // It is here now to allow easier tuning. + // This does not effect PS3, as this needs to be compiled in. + // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. + // Due to the PS3 being ALU bound, + // there are only three safe values here: 2 and 4 and 8. + // These options use the shaders ability to a free *|/ by 2|4|8. + // For all other platforms can be a non-power of two. + // 8.0 is sharper (default!!!) + // 4.0 is softer + // 2.0 is really soft (good only for vector graphics inputs) + FxaaFloat fxaaConsoleEdgeSharpness, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. + // It is here now to allow easier tuning. + // This does not effect PS3, as this needs to be compiled in. + // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. + // Due to the PS3 being ALU bound, + // there are only two safe values here: 1/4 and 1/8. + // These options use the shaders ability to a free *|/ by 2|4|8. + // The console setting has a different mapping than the quality setting. + // Other platforms can use other values. + // 0.125 leaves less aliasing, but is softer (default!!!) + // 0.25 leaves more aliasing, and is sharper + FxaaFloat fxaaConsoleEdgeThreshold, + // + // Only used on FXAA Console. + // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. + // It is here now to allow easier tuning. + // Trims the algorithm from processing darks. + // The console setting has a different mapping than the quality setting. + // This does not apply to PS3, + // PS3 was simplified to avoid more shader instructions. + // 0.06 - faster but more aliasing in darks + // 0.05 - default + // 0.04 - slower and less aliasing in darks + // Special notes when using FXAA_GREEN_AS_LUMA, + // Likely want to set this to zero. + // As colors that are mostly not-green + // will appear very dark in the green channel! + // Tune by looking at mostly non-green content, + // then start at zero and increase until aliasing is a problem. + FxaaFloat fxaaConsoleEdgeThresholdMin +) { +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); + FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); + FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); + FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); +/*--------------------------------------------------------------------------*/ + FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); + #if (FXAA_GREEN_AS_LUMA == 0) + // TODO Luma + FxaaFloat lumaM = FxaaLuma(rgbyM); + #else + FxaaFloat lumaM = rgbyM.y; + #endif +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); + lumaNe += 1.0/384.0; + FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); + FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); + FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; +/*--------------------------------------------------------------------------*/ + FxaaFloat lumaMinM = min(lumaMin, lumaM); + FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); + FxaaFloat lumaMaxM = max(lumaMax, lumaM); + FxaaFloat dirSwMinusNe = lumaSw - lumaNe; + FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; + FxaaFloat dirSeMinusNw = lumaSe - lumaNw; + if(lumaMaxSubMinM < lumaMaxScaledClamped) + { + #if (FXAA_DISCARD == 1) + FxaaDiscard; + #else + return rgbyM; + #endif + } +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir; + dir.x = dirSwMinusNe + dirSeMinusNw; + dir.y = dirSwMinusNe - dirSeMinusNw; +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir1 = normalize(dir.xy); + FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); + FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); +/*--------------------------------------------------------------------------*/ + FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; + FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); +/*--------------------------------------------------------------------------*/ + FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw; + FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x); + FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x); +/*--------------------------------------------------------------------------*/ + FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; + FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); +/*--------------------------------------------------------------------------*/ + #if (FXAA_GREEN_AS_LUMA == 0) + // TODO Luma + float lumaB = FxaaLuma(rgbyB); + #else + float lumaB = rgbyB.y; + #endif + if((lumaB < lumaMin) || (lumaB > lumaMax)) + rgbyB.xyz = rgbyA.xyz * 0.5; + // + return rgbyB; +} +/*==========================================================================*/ + +#define edgeSharpness 3.0 +#define edgeThreshold 0.15 +#define edgeThresholdMin 0.05 + +void main(){ + vec2 screenSize05 = 0.5 * u_screenSize2f; + + vec4 posPos; + posPos.xy = v_position2f; + posPos.zw = v_position2f + u_screenSize2f; + + vec4 rcpFrameOpt; + rcpFrameOpt.xy = -screenSize05; + rcpFrameOpt.zw = screenSize05; + + EAGLER_FRAG_COLOR = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0); +} +#else + +// This 'optimized' code was generated using glslangValidator + spirv-cross + spirv-opt on the source code above +// Is it faster? Idfk, probably compiles faster at least, what matters it I tried + +float _616; + +void main() +{ + mediump vec2 _257 = u_screenSize2f * 0.5; + mediump vec4 _611 = vec4(v_position2f, v_position2f + u_screenSize2f); + mediump vec4 _612 = vec4(_616, _616, _257); + mediump vec2 _290 = v_position2f + _257; + mediump vec4 _608; + for(;;) + { + mediump vec3 _532 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xy, 0.0).xyz; + mediump float _536 = dot(_532 * _532, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec3 _540 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xw, 0.0).xyz; + mediump float _544 = dot(_540 * _540, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec3 _548 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zy, 0.0).xyz; + mediump vec3 _556 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zw, 0.0).xyz; + mediump float _560 = dot(_556 * _556, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec4 _390 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _290, 0.0); + mediump vec3 _564 = _390.xyz; + mediump float _568 = dot(_564 * _564, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump float _397 = dot(_548 * _548, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)) + 0.00260416674427688121795654296875; + mediump float _409 = max(max(_397, _560), max(_536, _544)); + mediump float _412 = min(min(_397, _560), min(_536, _544)); + mediump float _427 = _544 - _397; + mediump float _433 = _560 - _536; + if ((max(_409, _568) - min(_412, _568)) < max(0.0500000007450580596923828125, _409 * 0.1500000059604644775390625)) + { + _608 = _390; + break; + } + mediump vec2 _449 = normalize(vec2(_427 + _433, _427 - _433)); + vec2 hp_copy_449 = _449; + mediump vec2 _454 = _612.zw; + vec2 _614 = -hp_copy_449; + mediump vec2 mp_copy_614 = _614; + mediump vec2 _481 = clamp(_449 / vec2(min(abs(_449.x), abs(_449.y)) * 3.0), vec2(-2.0), vec2(2.0)); + vec2 hp_copy_481 = _481; + mediump vec2 _484 = (_612 * 4.0).zw; + vec2 _615 = -hp_copy_481; + mediump vec2 mp_copy_615 = _615; + mediump vec4 _498 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _449 * _454 + _290, 0.0); + mediump vec4 _505 = ((EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25); + mediump float _576 = dot(_505.xyz * _505.xyz, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec4 _607; + if ((_576 < _412) || (_576 > _409)) + { + mediump vec3 _518 = _498.xyz * 0.5; + mediump vec4 _600; + _600.x = _518.x; + _600.y = _518.y; + _600.z = _518.z; + _607 = _600; + } + else + { + _607 = _505; + } + _608 = _607; + break; + } + EAGLER_FRAG_COLOR = vec4(_608.xyz, 1.0); +} + +#endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh index e84391db..debfcc0f 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh @@ -1,43 +1,43 @@ -#line 2 - -/* - * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN(vec2, v_texCoords2f) - -#ifndef COMPILE_BLIT_DEPTH -EAGLER_FRAG_OUT() -#endif - -uniform sampler2D u_inputTexture; -uniform float u_textureLod1f; - -#ifdef COMPILE_PIXEL_ALIGNMENT -uniform vec4 u_pixelAlignmentSizes4f; -uniform vec2 u_pixelAlignmentOffset2f; -#endif - -void main() { - vec2 uv2f = v_texCoords2f; -#ifdef COMPILE_PIXEL_ALIGNMENT - uv2f = (floor(uv2f * u_pixelAlignmentSizes4f.xy) + u_pixelAlignmentOffset2f) * u_pixelAlignmentSizes4f.zw; -#endif -#ifndef COMPILE_BLIT_DEPTH - EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f); -#else - EAGLER_FRAG_DEPTH = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f).r; -#endif -} +#line 2 + +/* + * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN(vec2, v_texCoords2f) + +#ifndef COMPILE_BLIT_DEPTH +EAGLER_FRAG_OUT() +#endif + +uniform sampler2D u_inputTexture; +uniform float u_textureLod1f; + +#ifdef COMPILE_PIXEL_ALIGNMENT +uniform vec4 u_pixelAlignmentSizes4f; +uniform vec2 u_pixelAlignmentOffset2f; +#endif + +void main() { + vec2 uv2f = v_texCoords2f; +#ifdef COMPILE_PIXEL_ALIGNMENT + uv2f = (floor(uv2f * u_pixelAlignmentSizes4f.xy) + u_pixelAlignmentOffset2f) * u_pixelAlignmentSizes4f.zw; +#endif +#ifndef COMPILE_BLIT_DEPTH + EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f); +#else + EAGLER_FRAG_DEPTH = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f).r; +#endif +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh index 622af8ca..d5d18343 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh @@ -1,32 +1,32 @@ -#line 2 - -/* - * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_VSH_LAYOUT_BEGIN() -EAGLER_IN(0, vec2, a_position2f) -EAGLER_VSH_LAYOUT_END() - -EAGLER_OUT(vec2, v_texCoords2f) - -uniform vec4 u_srcCoords4f; -uniform vec4 u_dstCoords4f; - -void main() { - vec2 uv = a_position2f * 0.5 + 0.5; - v_texCoords2f = u_srcCoords4f.xy + u_srcCoords4f.zw * uv; - EAGLER_VERT_POSITION = vec4(u_dstCoords4f.xy + u_dstCoords4f.zw * uv, 0.0, 1.0); -} +#line 2 + +/* + * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_VSH_LAYOUT_BEGIN() +EAGLER_IN(0, vec2, a_position2f) +EAGLER_VSH_LAYOUT_END() + +EAGLER_OUT(vec2, v_texCoords2f) + +uniform vec4 u_srcCoords4f; +uniform vec4 u_dstCoords4f; + +void main() { + vec2 uv = a_position2f * 0.5 + 0.5; + v_texCoords2f = u_srcCoords4f.xy + u_srcCoords4f.zw * uv; + EAGLER_VERT_POSITION = vec4(u_dstCoords4f.xy + u_dstCoords4f.zw * uv, 0.0, 1.0); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh b/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh index b6dc9f2d..26cb13fb 100644 --- a/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh @@ -1,33 +1,33 @@ -#line 2 - -/* - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -EAGLER_IN(vec2, v_position2f) - -EAGLER_FRAG_OUT() - -uniform sampler2D u_inputTexture; -uniform float u_textureLod1f; -uniform vec4 u_blendFactor4f; -uniform vec4 u_blendBias4f; -uniform mat3 u_matrixTransform; - -void main() { - vec3 coords = u_matrixTransform * vec3(v_position2f, 1.0); - vec4 color4f = EAGLER_TEXTURE_2D_LOD(u_inputTexture, coords.xy, u_textureLod1f); - EAGLER_FRAG_COLOR = color4f * u_blendFactor4f + u_blendBias4f; -} +#line 2 + +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +EAGLER_IN(vec2, v_position2f) + +EAGLER_FRAG_OUT() + +uniform sampler2D u_inputTexture; +uniform float u_textureLod1f; +uniform vec4 u_blendFactor4f; +uniform vec4 u_blendBias4f; +uniform mat3 u_matrixTransform; + +void main() { + vec3 coords = u_matrixTransform * vec3(v_position2f, 1.0); + vec4 color4f = EAGLER_TEXTURE_2D_LOD(u_inputTexture, coords.xy, u_textureLod1f); + EAGLER_FRAG_COLOR = color4f * u_blendFactor4f + u_blendBias4f; +} diff --git a/desktopRuntime/resources/assets/eagler/gui/eagler_gui.png b/desktopRuntime/resources/assets/eagler/gui/eagler_gui.png index 5d9d516d..867ee00a 100644 Binary files a/desktopRuntime/resources/assets/eagler/gui/eagler_gui.png and b/desktopRuntime/resources/assets/eagler/gui/eagler_gui.png differ diff --git a/desktopRuntime/resources/assets/eagler/gui/notif_bk_large.png b/desktopRuntime/resources/assets/eagler/gui/notif_bk_large.png index 9cab1452..00568b46 100644 Binary files a/desktopRuntime/resources/assets/eagler/gui/notif_bk_large.png and b/desktopRuntime/resources/assets/eagler/gui/notif_bk_large.png differ diff --git a/desktopRuntime/resources/assets/eagler/gui/touch_gui.png b/desktopRuntime/resources/assets/eagler/gui/touch_gui.png index 12cbcbed..1e4db924 100644 Binary files a/desktopRuntime/resources/assets/eagler/gui/touch_gui.png and b/desktopRuntime/resources/assets/eagler/gui/touch_gui.png differ diff --git a/desktopRuntime/resources/assets/eagler/lang/en_US.lang b/desktopRuntime/resources/assets/eagler/lang/en_US.lang index e6588e66..5d32820a 100644 --- a/desktopRuntime/resources/assets/eagler/lang/en_US.lang +++ b/desktopRuntime/resources/assets/eagler/lang/en_US.lang @@ -412,7 +412,7 @@ eaglercraft.singleplayer.demo.create.create.tooltip=Play the Minecraft 1.8 demo 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.createWorld.seedNote=Note: Vanilla seeds work eaglercraft.singleplayer.oldseedwarning.title=Old World Detected! eaglercraft.singleplayer.oldseedwarning.msg1=Please use EaglercraftX u32 or older to "Re-Create" this world @@ -627,6 +627,29 @@ eaglercraft.options.recordingNote.text1=try opening the file in your browser eaglercraft.touch.interact.entity=Interact +eaglercraft.options.badVideoSettingsDetected.title=Issues Detected +eaglercraft.options.badVideoSettingsDetected.0=Some of your video settings may be causing +eaglercraft.options.badVideoSettingsDetected.1=the game to lag excessively +eaglercraft.options.badVideoSettingsDetected.vsync.0=VSync is disabled, some browsers require +eaglercraft.options.badVideoSettingsDetected.vsync.1=VSync to be enabled to hint when the +eaglercraft.options.badVideoSettingsDetected.vsync.2=framebuffer has updated. If the game feels +eaglercraft.options.badVideoSettingsDetected.vsync.3=significantly slower than is indicated by +eaglercraft.options.badVideoSettingsDetected.vsync.4=the FPS counter, you should enable VSync. +eaglercraft.options.badVideoSettingsDetected.renderDistance.0=Render distance is %d chunks, most devices +eaglercraft.options.badVideoSettingsDetected.renderDistance.1=lag when the render distance is greater +eaglercraft.options.badVideoSettingsDetected.renderDistance.2=than 4 chunks +eaglercraft.options.badVideoSettingsDetected.frameLimit.0=Framerate limit is set to %d +eaglercraft.options.badVideoSettingsDetected.fixSettings=Fix Settings +eaglercraft.options.badVideoSettingsDetected.continueAnyway=Continue Anyway +eaglercraft.options.badVideoSettingsDetected.doNotShowAgain=Do Not Show Again + +eaglercraft.options.vsyncReEnabled.title=Issues Detected +eaglercraft.options.vsyncReEnabled.0=You are using the WASM-GC client +eaglercraft.options.vsyncReEnabled.1=VSync has been automatically re-enabled +eaglercraft.options.vsyncReEnabled.2=Using the WASM-GC version of EaglercraftX without +eaglercraft.options.vsyncReEnabled.3=VSync enabled causes bad input lag, sorry! +eaglercraft.options.vsyncReEnabled.continue=Continue + eaglercraft.addServer.hideAddr=Hide Addr eaglercraft.addServer.enableCookies=Cookies eaglercraft.addServer.enableCookies.enabled=Enabled diff --git a/desktopRuntime/resources/assets/eagler/mesh/charles.fallback.png b/desktopRuntime/resources/assets/eagler/mesh/charles.fallback.png index f1d90ca5..121d52ff 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/charles.fallback.png and b/desktopRuntime/resources/assets/eagler/mesh/charles.fallback.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/charles.png b/desktopRuntime/resources/assets/eagler/mesh/charles.png index a23587f5..4b485f69 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/charles.png and b/desktopRuntime/resources/assets/eagler/mesh/charles.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/laxativedude.fallback.png b/desktopRuntime/resources/assets/eagler/mesh/laxativedude.fallback.png index 27b1f9ce..b760d591 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/laxativedude.fallback.png and b/desktopRuntime/resources/assets/eagler/mesh/laxativedude.fallback.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/longarms.fallback.png b/desktopRuntime/resources/assets/eagler/mesh/longarms.fallback.png index b5065341..a10c7f5c 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/longarms.fallback.png and b/desktopRuntime/resources/assets/eagler/mesh/longarms.fallback.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/readme.txt b/desktopRuntime/resources/assets/eagler/mesh/readme.txt index f43f96d9..3d8e7f9e 100644 --- a/desktopRuntime/resources/assets/eagler/mesh/readme.txt +++ b/desktopRuntime/resources/assets/eagler/mesh/readme.txt @@ -1,9 +1,9 @@ -THESE ARE NOT DOOM/GMOD MODELS! - -The FNAW skins are stored in a proprietary format created by lax1dude. - -The format is a container for raw OpenGL vertex buffer and index buffer data intended to be copied directly into the GPU's memory, along with a small amount of metadata. - -Data is rendered in GL_TRIANGLES mode using glDrawElements. - -See "net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java" and "net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java" for more details. \ No newline at end of file +THESE ARE NOT DOOM/GMOD MODELS! + +The FNAW skins are stored in a proprietary format created by lax1dude. + +The format is a container for raw OpenGL vertex buffer and index buffer data intended to be copied directly into the GPU's memory, along with a small amount of metadata. + +Data is rendered in GL_TRIANGLES mode using glDrawElements. + +See "net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java" and "net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java" for more details. diff --git a/desktopRuntime/resources/assets/eagler/mesh/weirdclimber.fallback.png b/desktopRuntime/resources/assets/eagler/mesh/weirdclimber.fallback.png index da5d0521..9d1be8f5 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/weirdclimber.fallback.png and b/desktopRuntime/resources/assets/eagler/mesh/weirdclimber.fallback.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/winston.fallback.png b/desktopRuntime/resources/assets/eagler/mesh/winston.fallback.png index b0da89c6..e828b3cc 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/winston.fallback.png and b/desktopRuntime/resources/assets/eagler/mesh/winston.fallback.png differ diff --git a/desktopRuntime/resources/assets/eagler/mesh/winston.png b/desktopRuntime/resources/assets/eagler/mesh/winston.png index fceadbb2..b58d9555 100644 Binary files a/desktopRuntime/resources/assets/eagler/mesh/winston.png and b/desktopRuntime/resources/assets/eagler/mesh/winston.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png b/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png index 86ec331a..ecefbcdc 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png and b/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/02.default_alex.png b/desktopRuntime/resources/assets/eagler/skins/02.default_alex.png index b643fe2d..4f95372b 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/02.default_alex.png and b/desktopRuntime/resources/assets/eagler/skins/02.default_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/03.tennis_steve.png b/desktopRuntime/resources/assets/eagler/skins/03.tennis_steve.png index 2b21235a..541ca3a7 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/03.tennis_steve.png and b/desktopRuntime/resources/assets/eagler/skins/03.tennis_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/04.tennis_alex.png b/desktopRuntime/resources/assets/eagler/skins/04.tennis_alex.png index 3f6abf7e..443e6061 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/04.tennis_alex.png and b/desktopRuntime/resources/assets/eagler/skins/04.tennis_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/05.tuxedo_steve.png b/desktopRuntime/resources/assets/eagler/skins/05.tuxedo_steve.png index 9eb5f5aa..e9ae396d 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/05.tuxedo_steve.png and b/desktopRuntime/resources/assets/eagler/skins/05.tuxedo_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/06.tuxedo_alex.png b/desktopRuntime/resources/assets/eagler/skins/06.tuxedo_alex.png index a0258ab7..8a584f88 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/06.tuxedo_alex.png and b/desktopRuntime/resources/assets/eagler/skins/06.tuxedo_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/07.athlete_steve.png b/desktopRuntime/resources/assets/eagler/skins/07.athlete_steve.png index 8dda96d6..330c598f 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/07.athlete_steve.png and b/desktopRuntime/resources/assets/eagler/skins/07.athlete_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/08.athlete_alex.png b/desktopRuntime/resources/assets/eagler/skins/08.athlete_alex.png index a67a3c82..14ed7632 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/08.athlete_alex.png and b/desktopRuntime/resources/assets/eagler/skins/08.athlete_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/09.cyclist_steve.png b/desktopRuntime/resources/assets/eagler/skins/09.cyclist_steve.png index c65409f4..50803e0b 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/09.cyclist_steve.png and b/desktopRuntime/resources/assets/eagler/skins/09.cyclist_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/10.cyclist_alex.png b/desktopRuntime/resources/assets/eagler/skins/10.cyclist_alex.png index 20461a7b..fad3129a 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/10.cyclist_alex.png and b/desktopRuntime/resources/assets/eagler/skins/10.cyclist_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/11.boxer_steve.png b/desktopRuntime/resources/assets/eagler/skins/11.boxer_steve.png index 6975f653..323ffdf7 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/11.boxer_steve.png and b/desktopRuntime/resources/assets/eagler/skins/11.boxer_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png b/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png index bbc6968d..74daf358 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png and b/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/14.prisoner_alex.png b/desktopRuntime/resources/assets/eagler/skins/14.prisoner_alex.png index a81c05fc..856367e5 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/14.prisoner_alex.png and b/desktopRuntime/resources/assets/eagler/skins/14.prisoner_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/15.scottish_steve.png b/desktopRuntime/resources/assets/eagler/skins/15.scottish_steve.png index e78c7391..b61c7ac4 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/15.scottish_steve.png and b/desktopRuntime/resources/assets/eagler/skins/15.scottish_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/16.scottish_alex.png b/desktopRuntime/resources/assets/eagler/skins/16.scottish_alex.png index a73a9314..4a829b1f 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/16.scottish_alex.png and b/desktopRuntime/resources/assets/eagler/skins/16.scottish_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/17.developer_steve.png b/desktopRuntime/resources/assets/eagler/skins/17.developer_steve.png index 652a7c42..48313a40 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/17.developer_steve.png and b/desktopRuntime/resources/assets/eagler/skins/17.developer_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png b/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png index 9ce121fe..df0952f3 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png and b/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/20.notch.png b/desktopRuntime/resources/assets/eagler/skins/20.notch.png index 374923fa..c13fd492 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/20.notch.png and b/desktopRuntime/resources/assets/eagler/skins/20.notch.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/21.creeper.png b/desktopRuntime/resources/assets/eagler/skins/21.creeper.png index a71add5e..4499496e 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/21.creeper.png and b/desktopRuntime/resources/assets/eagler/skins/21.creeper.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/22.zombie.png b/desktopRuntime/resources/assets/eagler/skins/22.zombie.png index 3b6fd16c..9404255e 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/22.zombie.png and b/desktopRuntime/resources/assets/eagler/skins/22.zombie.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/23.pig.png b/desktopRuntime/resources/assets/eagler/skins/23.pig.png index ad08bb53..bf8b9d03 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/23.pig.png and b/desktopRuntime/resources/assets/eagler/skins/23.pig.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/24.mooshroom.png b/desktopRuntime/resources/assets/eagler/skins/24.mooshroom.png index e32b9b0a..e0d9adf7 100644 Binary files a/desktopRuntime/resources/assets/eagler/skins/24.mooshroom.png and b/desktopRuntime/resources/assets/eagler/skins/24.mooshroom.png differ diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_door.json index 18a9c831..d687a60b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "acacia_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "acacia_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "acacia_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "acacia_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "acacia_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "acacia_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "acacia_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "acacia_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "acacia_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "acacia_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "acacia_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "acacia_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "acacia_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "acacia_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "acacia_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "acacia_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "acacia_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "acacia_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "acacia_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "acacia_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "acacia_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "acacia_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "acacia_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "acacia_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "acacia_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "acacia_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "acacia_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "acacia_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "acacia_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "acacia_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "acacia_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "acacia_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "acacia_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "acacia_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "acacia_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "acacia_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "acacia_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "acacia_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "acacia_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "acacia_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "acacia_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "acacia_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "acacia_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "acacia_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "acacia_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "acacia_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "acacia_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "acacia_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "acacia_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "acacia_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "acacia_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "acacia_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "acacia_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "acacia_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "acacia_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "acacia_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "acacia_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "acacia_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "acacia_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "acacia_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "acacia_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "acacia_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "acacia_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "acacia_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_double_slab.json index 7ee24494..50ac4b26 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "acacia_planks" } - } -} +{ + "variants": { + "normal": { "model": "acacia_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence.json index 012fa6a7..de1b858d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "acacia_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "acacia_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "acacia_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "acacia_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "acacia_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "acacia_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "acacia_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "acacia_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "acacia_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "acacia_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "acacia_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "acacia_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "acacia_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "acacia_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "acacia_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "acacia_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "acacia_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "acacia_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "acacia_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "acacia_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "acacia_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "acacia_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "acacia_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "acacia_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "acacia_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "acacia_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "acacia_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "acacia_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "acacia_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "acacia_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "acacia_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "acacia_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence_gate.json index e60b901c..3d04dab3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence_gate.json @@ -1,20 +1,74 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "acacia_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "acacia_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "acacia_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "acacia_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "acacia_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "acacia_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "acacia_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "acacia_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "acacia_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "acacia_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "acacia_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "acacia_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "acacia_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "acacia_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "acacia_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "acacia_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "acacia_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "acacia_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "acacia_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "acacia_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "acacia_fence_gate_open" + }, + "facing=west,in_wall=false,open=true": { + "model": "acacia_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "acacia_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "acacia_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "acacia_wall_gate_closed" + }, + "facing=west,in_wall=true,open=false": { + "model": "acacia_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "acacia_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "acacia_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { "model": "acacia_wall_gate_open" }, + "facing=west,in_wall=true,open=true": { + "model": "acacia_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "acacia_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "acacia_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_leaves.json index 6ac1a731..7004cee2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "acacia_leaves" } - } -} +{ + "variants": { + "normal": { "model": "acacia_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_log.json index 3a1db29f..4e8cb3d3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "acacia_log" }, - "axis=z": { "model": "acacia_log_side" }, - "axis=x": { "model": "acacia_log_side", "y": 90 }, - "axis=none": { "model": "acacia_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "acacia_log" }, + "axis=z": { "model": "acacia_log_side" }, + "axis=x": { "model": "acacia_log_side", "y": 90 }, + "axis=none": { "model": "acacia_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json index 7ee24494..50ac4b26 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "acacia_planks" } - } -} +{ + "variants": { + "normal": { "model": "acacia_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_sapling.json index 045ea901..b7280c9f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "acacia_sapling" }, - "stage=1": { "model": "acacia_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "acacia_sapling" }, + "stage=1": { "model": "acacia_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_slab.json index 20175965..b8cd0f7f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_acacia" }, - "half=top": { "model": "upper_slab_acacia" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_acacia" }, + "half=top": { "model": "upper_slab_acacia" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_stairs.json index 0f30e729..d3b07f34 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "acacia_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "acacia_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "acacia_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "acacia_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "acacia_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "acacia_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "acacia_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "acacia_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "acacia_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "acacia_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "acacia_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "acacia_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "acacia_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "acacia_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "acacia_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "acacia_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "acacia_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "acacia_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "acacia_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "acacia_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "acacia_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "acacia_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "acacia_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "acacia_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "acacia_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "acacia_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "acacia_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "acacia_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "acacia_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "acacia_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "acacia_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "acacia_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "acacia_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "acacia_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "acacia_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "acacia_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "acacia_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "acacia_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "acacia_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "acacia_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "acacia_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "acacia_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "acacia_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "acacia_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "acacia_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "acacia_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "acacia_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "acacia_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "acacia_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "acacia_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "acacia_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "acacia_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "acacia_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "acacia_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "acacia_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "acacia_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "acacia_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "acacia_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "acacia_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "acacia_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "acacia_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "acacia_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "acacia_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "acacia_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "acacia_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "acacia_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "acacia_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "acacia_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "acacia_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "acacia_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/activator_rail.json b/desktopRuntime/resources/assets/minecraft/blockstates/activator_rail.json index 29e8696a..f1e61904 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/activator_rail.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/activator_rail.json @@ -1,16 +1,42 @@ -{ - "variants": { - "powered=false,shape=north_south": { "model": "activator_rail_flat" }, - "powered=false,shape=east_west": { "model": "activator_rail_flat", "y": 90 }, - "powered=false,shape=ascending_east": { "model": "activator_rail_raised_ne", "y": 90 }, - "powered=false,shape=ascending_west": { "model": "activator_rail_raised_sw", "y": 90 }, - "powered=false,shape=ascending_north": { "model": "activator_rail_raised_ne" }, - "powered=false,shape=ascending_south": { "model": "activator_rail_raised_sw" }, - "powered=true,shape=north_south": { "model": "activator_rail_active_flat" }, - "powered=true,shape=east_west": { "model": "activator_rail_active_flat", "y": 90 }, - "powered=true,shape=ascending_east": { "model": "activator_rail_active_raised_ne", "y": 90 }, - "powered=true,shape=ascending_west": { "model": "activator_rail_active_raised_sw", "y": 90 }, - "powered=true,shape=ascending_north": { "model": "activator_rail_active_raised_ne" }, - "powered=true,shape=ascending_south": { "model": "activator_rail_active_raised_sw" } - } -} +{ + "variants": { + "powered=false,shape=north_south": { "model": "activator_rail_flat" }, + "powered=false,shape=east_west": { + "model": "activator_rail_flat", + "y": 90 + }, + "powered=false,shape=ascending_east": { + "model": "activator_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_west": { + "model": "activator_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=ascending_north": { + "model": "activator_rail_raised_ne" + }, + "powered=false,shape=ascending_south": { + "model": "activator_rail_raised_sw" + }, + "powered=true,shape=north_south": { "model": "activator_rail_active_flat" }, + "powered=true,shape=east_west": { + "model": "activator_rail_active_flat", + "y": 90 + }, + "powered=true,shape=ascending_east": { + "model": "activator_rail_active_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_west": { + "model": "activator_rail_active_raised_sw", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "activator_rail_active_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "activator_rail_active_raised_sw" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/allium.json b/desktopRuntime/resources/assets/minecraft/blockstates/allium.json index 6aa69517..567da9ac 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/allium.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/allium.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "allium" } - } -} +{ + "variants": { + "normal": { "model": "allium" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json b/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json index ec008768..5b8f5eab 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "andesite" } - } -} +{ + "variants": { + "normal": { "model": "andesite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json b/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json index 8fa4d698..706fc4d5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json @@ -1,16 +1,16 @@ -{ - "variants": { - "damage=0,facing=south": { "model": "anvil_undamaged" }, - "damage=0,facing=west": { "model": "anvil_undamaged", "y": 90 }, - "damage=0,facing=north": { "model": "anvil_undamaged", "y": 180 }, - "damage=0,facing=east": { "model": "anvil_undamaged", "y": 270 }, - "damage=1,facing=south": { "model": "anvil_slightly_damaged" }, - "damage=1,facing=west": { "model": "anvil_slightly_damaged", "y": 90 }, - "damage=1,facing=north": { "model": "anvil_slightly_damaged", "y": 180 }, - "damage=1,facing=east": { "model": "anvil_slightly_damaged", "y": 270 }, - "damage=2,facing=south": { "model": "anvil_very_damaged" }, - "damage=2,facing=west": { "model": "anvil_very_damaged", "y": 90 }, - "damage=2,facing=north": { "model": "anvil_very_damaged", "y": 180 }, - "damage=2,facing=east": { "model": "anvil_very_damaged", "y": 270 } - } -} +{ + "variants": { + "damage=0,facing=south": { "model": "anvil_undamaged" }, + "damage=0,facing=west": { "model": "anvil_undamaged", "y": 90 }, + "damage=0,facing=north": { "model": "anvil_undamaged", "y": 180 }, + "damage=0,facing=east": { "model": "anvil_undamaged", "y": 270 }, + "damage=1,facing=south": { "model": "anvil_slightly_damaged" }, + "damage=1,facing=west": { "model": "anvil_slightly_damaged", "y": 90 }, + "damage=1,facing=north": { "model": "anvil_slightly_damaged", "y": 180 }, + "damage=1,facing=east": { "model": "anvil_slightly_damaged", "y": 270 }, + "damage=2,facing=south": { "model": "anvil_very_damaged" }, + "damage=2,facing=west": { "model": "anvil_very_damaged", "y": 90 }, + "damage=2,facing=north": { "model": "anvil_very_damaged", "y": 180 }, + "damage=2,facing=east": { "model": "anvil_very_damaged", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json b/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json index 68c77f59..b391f883 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "beacon" } - } -} +{ + "variants": { + "normal": { "model": "beacon" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bed.json b/desktopRuntime/resources/assets/minecraft/blockstates/bed.json index 416bd23f..a70dbc28 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/bed.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bed.json @@ -1,12 +1,12 @@ -{ - "variants": { - "facing=north,part=foot": { "model": "bed_foot", "y": 180 }, - "facing=east,part=foot": { "model": "bed_foot", "y": 270 }, - "facing=south,part=foot": { "model": "bed_foot" }, - "facing=west,part=foot": { "model": "bed_foot", "y": 90 }, - "facing=north,part=head": { "model": "bed_head", "y": 180 }, - "facing=east,part=head": { "model": "bed_head", "y": 270 }, - "facing=south,part=head": { "model": "bed_head" }, - "facing=west,part=head": { "model": "bed_head", "y": 90 } - } -} +{ + "variants": { + "facing=north,part=foot": { "model": "bed_foot", "y": 180 }, + "facing=east,part=foot": { "model": "bed_foot", "y": 270 }, + "facing=south,part=foot": { "model": "bed_foot" }, + "facing=west,part=foot": { "model": "bed_foot", "y": 90 }, + "facing=north,part=head": { "model": "bed_head", "y": 180 }, + "facing=east,part=head": { "model": "bed_head", "y": 270 }, + "facing=south,part=head": { "model": "bed_head" }, + "facing=west,part=head": { "model": "bed_head", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json b/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json index 9e3ec686..77bcd672 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "bedrock" }, - { "model": "bedrock_mirrored" }, - { "model": "bedrock", "y": 180 }, - { "model": "bedrock_mirrored", "y": 180 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "bedrock" }, + { "model": "bedrock_mirrored" }, + { "model": "bedrock", "y": 180 }, + { "model": "bedrock_mirrored", "y": 180 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_door.json index c6d598d9..4b716666 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "birch_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "birch_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "birch_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "birch_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "birch_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "birch_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "birch_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "birch_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "birch_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "birch_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "birch_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "birch_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "birch_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "birch_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "birch_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "birch_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "birch_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "birch_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "birch_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "birch_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "birch_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "birch_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "birch_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "birch_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "birch_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "birch_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "birch_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "birch_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "birch_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "birch_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "birch_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "birch_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "birch_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "birch_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "birch_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "birch_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "birch_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "birch_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "birch_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "birch_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "birch_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "birch_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "birch_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "birch_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "birch_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "birch_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "birch_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "birch_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "birch_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "birch_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "birch_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "birch_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "birch_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "birch_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "birch_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "birch_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "birch_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "birch_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "birch_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "birch_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "birch_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "birch_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "birch_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "birch_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_double_slab.json index b297ea9b..c7a40dc8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "birch_planks" } - } -} +{ + "variants": { + "normal": { "model": "birch_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence.json index c88c19b3..8cbbe980 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "birch_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "birch_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "birch_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "birch_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "birch_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "birch_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "birch_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "birch_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "birch_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "birch_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "birch_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "birch_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "birch_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "birch_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "birch_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "birch_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "birch_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "birch_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "birch_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "birch_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "birch_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "birch_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "birch_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "birch_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "birch_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "birch_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "birch_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "birch_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "birch_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "birch_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "birch_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "birch_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence_gate.json index df9a84b6..af215637 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence_gate.json @@ -1,20 +1,74 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "birch_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "birch_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "birch_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "birch_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "birch_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "birch_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "birch_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "birch_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "birch_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "birch_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "birch_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "birch_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "birch_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "birch_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "birch_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "birch_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "birch_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "birch_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "birch_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "birch_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "birch_fence_gate_open" + }, + "facing=west,in_wall=false,open=true": { + "model": "birch_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "birch_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "birch_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "birch_wall_gate_closed" + }, + "facing=west,in_wall=true,open=false": { + "model": "birch_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "birch_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "birch_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { "model": "birch_wall_gate_open" }, + "facing=west,in_wall=true,open=true": { + "model": "birch_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "birch_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "birch_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_leaves.json index f231f134..81029158 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "birch_leaves" } - } -} +{ + "variants": { + "normal": { "model": "birch_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_log.json index c1ce673b..ca78c5dd 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "birch_log" }, - "axis=z": { "model": "birch_log_side" }, - "axis=x": { "model": "birch_log_side", "y": 90 }, - "axis=none": { "model": "birch_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "birch_log" }, + "axis=z": { "model": "birch_log_side" }, + "axis=x": { "model": "birch_log_side", "y": 90 }, + "axis=none": { "model": "birch_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json index b297ea9b..c7a40dc8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "birch_planks" } - } -} +{ + "variants": { + "normal": { "model": "birch_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_sapling.json index 2fa7af42..15ef92d1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "birch_sapling" }, - "stage=1": { "model": "birch_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "birch_sapling" }, + "stage=1": { "model": "birch_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_slab.json index d7d75fb8..4cf26c44 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_birch" }, - "half=top": { "model": "upper_slab_birch" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_birch" }, + "half=top": { "model": "upper_slab_birch" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_stairs.json index 5e0663cc..0e50cc85 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/birch_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "birch_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "birch_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "birch_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "birch_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "birch_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "birch_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "birch_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "birch_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "birch_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "birch_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "birch_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "birch_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "birch_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "birch_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "birch_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "birch_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "birch_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "birch_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "birch_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "birch_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "birch_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "birch_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "birch_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "birch_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "birch_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "birch_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "birch_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "birch_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "birch_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "birch_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "birch_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "birch_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "birch_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "birch_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "birch_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "birch_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "birch_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "birch_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "birch_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "birch_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "birch_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "birch_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "birch_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "birch_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "birch_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "birch_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "birch_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "birch_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "birch_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "birch_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "birch_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "birch_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "birch_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "birch_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "birch_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "birch_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "birch_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "birch_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "birch_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "birch_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "birch_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "birch_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "birch_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "birch_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "birch_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "birch_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "birch_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "birch_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "birch_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "birch_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "birch_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "birch_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "birch_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "birch_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "birch_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "birch_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "birch_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "birch_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "birch_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "birch_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/black_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/black_carpet.json index b4c001de..7d9b7d1c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/black_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_black" } - } -} +{ + "variants": { + "normal": { "model": "carpet_black" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass.json index 837f380e..7d35a80d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_black" } - } -} +{ + "variants": { + "normal": { "model": "glass_black" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass_pane.json index 18b98dbb..94dcce3a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "black_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "black_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "black_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "black_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "black_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "black_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "black_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "black_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "black_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "black_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "black_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "black_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "black_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "black_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "black_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "black_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "black_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "black_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "black_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "black_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "black_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "black_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "black_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "black_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "black_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "black_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "black_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "black_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "black_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "black_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "black_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "black_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_hardened_clay.json index 81decc71..8ec9aa69 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_black" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_black" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/black_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/black_wool.json index 2dd5b3ef..7b223d7b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/black_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "black_wool" } - } -} +{ + "variants": { + "normal": { "model": "black_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_carpet.json index c2af687a..65bb01c5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_blue" } - } -} +{ + "variants": { + "normal": { "model": "carpet_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_orchid.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_orchid.json index eeaad9b5..024bbbc0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_orchid.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_orchid.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "orchid" } - } -} +{ + "variants": { + "normal": { "model": "orchid" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass.json index 3f46ff0b..faf598d5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_blue" } - } -} +{ + "variants": { + "normal": { "model": "glass_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass_pane.json index 81287241..41ef2324 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "blue_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "blue_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "blue_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "blue_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "blue_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "blue_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "blue_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "blue_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "blue_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "blue_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "blue_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "blue_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "blue_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "blue_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "blue_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "blue_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "blue_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "blue_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "blue_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "blue_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "blue_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "blue_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "blue_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "blue_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "blue_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "blue_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "blue_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "blue_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "blue_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "blue_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "blue_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "blue_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_hardened_clay.json index 07215bbe..b611eeec 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_blue" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/blue_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/blue_wool.json index 34f97440..1a26f9a1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "blue_wool" } - } -} +{ + "variants": { + "normal": { "model": "blue_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json b/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json index ff0aefcb..d8e1d89c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "bookshelf" } - } -} +{ + "variants": { + "normal": { "model": "bookshelf" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json b/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json index f4827384..3d1dccc8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json @@ -1,12 +1,28 @@ -{ - "variants": { - "has_bottle_0=false,has_bottle_1=false,has_bottle_2=false": { "model": "brewing_stand_empty" }, - "has_bottle_0=true,has_bottle_1=false,has_bottle_2=false": { "model": "brewing_stand_bottles_1" }, - "has_bottle_0=false,has_bottle_1=true,has_bottle_2=false": { "model": "brewing_stand_bottles_2" }, - "has_bottle_0=false,has_bottle_1=false,has_bottle_2=true": { "model": "brewing_stand_bottles_3" }, - "has_bottle_0=true,has_bottle_1=true,has_bottle_2=false": { "model": "brewing_stand_bottles_12" }, - "has_bottle_0=true,has_bottle_1=false,has_bottle_2=true": { "model": "brewing_stand_bottles_13" }, - "has_bottle_0=false,has_bottle_1=true,has_bottle_2=true": { "model": "brewing_stand_bottles_23" }, - "has_bottle_0=true,has_bottle_1=true,has_bottle_2=true": { "model": "brewing_stand_bottles_123" } - } -} +{ + "variants": { + "has_bottle_0=false,has_bottle_1=false,has_bottle_2=false": { + "model": "brewing_stand_empty" + }, + "has_bottle_0=true,has_bottle_1=false,has_bottle_2=false": { + "model": "brewing_stand_bottles_1" + }, + "has_bottle_0=false,has_bottle_1=true,has_bottle_2=false": { + "model": "brewing_stand_bottles_2" + }, + "has_bottle_0=false,has_bottle_1=false,has_bottle_2=true": { + "model": "brewing_stand_bottles_3" + }, + "has_bottle_0=true,has_bottle_1=true,has_bottle_2=false": { + "model": "brewing_stand_bottles_12" + }, + "has_bottle_0=true,has_bottle_1=false,has_bottle_2=true": { + "model": "brewing_stand_bottles_13" + }, + "has_bottle_0=false,has_bottle_1=true,has_bottle_2=true": { + "model": "brewing_stand_bottles_23" + }, + "has_bottle_0=true,has_bottle_1=true,has_bottle_2=true": { + "model": "brewing_stand_bottles_123" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brick_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/brick_block.json index edc686b1..1496bd20 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brick_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "brick" } - } -} +{ + "variants": { + "normal": { "model": "brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brick_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/brick_double_slab.json index 8259844b..115c3c83 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brick_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "brick" }, - "all": { "model": "brick" } - } -} +{ + "variants": { + "normal": { "model": "brick" }, + "all": { "model": "brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brick_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/brick_slab.json index 02a3c5c2..e62bd3af 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_brick" }, - "half=top": { "model": "upper_slab_brick" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_brick" }, + "half=top": { "model": "upper_slab_brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brick_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/brick_stairs.json index 1686e1cb..1267d545 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "brick_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "brick_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "brick_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "brick_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "brick_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "brick_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "brick_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "brick_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "brick_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "brick_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "brick_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "brick_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "brick_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "brick_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "brick_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "brick_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "brick_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "brick_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "brick_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "brick_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "brick_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_carpet.json index 3c4eda75..7bd08501 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_brown" } - } -} +{ + "variants": { + "normal": { "model": "carpet_brown" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom.json index 7eda408d..44962ac7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "brown_mushroom" } - } -} +{ + "variants": { + "normal": { "model": "brown_mushroom" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom_block.json index 95a65f8e..f312d79a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom_block.json @@ -1,17 +1,17 @@ -{ - "variants": { - "variant=north_west": { "model": "brown_mushroom_block_nw" }, - "variant=north": { "model": "brown_mushroom_block_n" }, - "variant=north_east": { "model": "brown_mushroom_block_ne" }, - "variant=west": { "model": "brown_mushroom_block_w" }, - "variant=center": { "model": "brown_mushroom_block_c" }, - "variant=east": { "model": "brown_mushroom_block_e" }, - "variant=south_west": { "model": "brown_mushroom_block_sw" }, - "variant=south": { "model": "brown_mushroom_block_s" }, - "variant=south_east": { "model": "brown_mushroom_block_se" }, - "variant=stem": { "model": "brown_mushroom_block_stem" }, - "variant=all_stem": { "model": "brown_mushroom_block_stem_all" }, - "variant=all_outside": { "model": "brown_mushroom_block_cap_all" }, - "variant=all_inside": { "model": "brown_mushroom_block_inside_all" } - } -} +{ + "variants": { + "variant=north_west": { "model": "brown_mushroom_block_nw" }, + "variant=north": { "model": "brown_mushroom_block_n" }, + "variant=north_east": { "model": "brown_mushroom_block_ne" }, + "variant=west": { "model": "brown_mushroom_block_w" }, + "variant=center": { "model": "brown_mushroom_block_c" }, + "variant=east": { "model": "brown_mushroom_block_e" }, + "variant=south_west": { "model": "brown_mushroom_block_sw" }, + "variant=south": { "model": "brown_mushroom_block_s" }, + "variant=south_east": { "model": "brown_mushroom_block_se" }, + "variant=stem": { "model": "brown_mushroom_block_stem" }, + "variant=all_stem": { "model": "brown_mushroom_block_stem_all" }, + "variant=all_outside": { "model": "brown_mushroom_block_cap_all" }, + "variant=all_inside": { "model": "brown_mushroom_block_inside_all" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json index 0c343650..742843fb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_brown" } - } -} +{ + "variants": { + "normal": { "model": "glass_brown" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass_pane.json index 938e4aef..b91a022f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "brown_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "brown_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "brown_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "brown_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "brown_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "brown_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "brown_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "brown_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "brown_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "brown_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "brown_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "brown_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "brown_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "brown_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "brown_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "brown_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "brown_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "brown_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "brown_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "brown_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "brown_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "brown_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "brown_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "brown_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "brown_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "brown_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "brown_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "brown_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "brown_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "brown_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "brown_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "brown_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_hardened_clay.json index 5d4a8ef8..c0d19d9f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_brown" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_brown" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_wool.json index 60e0f973..bc379aa1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/brown_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "brown_wool" } - } -} +{ + "variants": { + "normal": { "model": "brown_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json b/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json index e09d4dc3..18629fdb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "cactus" } - } -} +{ + "variants": { + "normal": { "model": "cactus" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cake.json b/desktopRuntime/resources/assets/minecraft/blockstates/cake.json index 23a28ac9..eb96552e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cake.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cake.json @@ -1,11 +1,11 @@ -{ - "variants": { - "bites=0": { "model": "cake_uneaten" }, - "bites=1": { "model": "cake_slice1" }, - "bites=2": { "model": "cake_slice2" }, - "bites=3": { "model": "cake_slice3" }, - "bites=4": { "model": "cake_slice4" }, - "bites=5": { "model": "cake_slice5" }, - "bites=6": { "model": "cake_slice6" } - } -} +{ + "variants": { + "bites=0": { "model": "cake_uneaten" }, + "bites=1": { "model": "cake_slice1" }, + "bites=2": { "model": "cake_slice2" }, + "bites=3": { "model": "cake_slice3" }, + "bites=4": { "model": "cake_slice4" }, + "bites=5": { "model": "cake_slice5" }, + "bites=6": { "model": "cake_slice6" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json b/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json index b1834f9f..b1139c90 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json @@ -1,12 +1,12 @@ -{ - "variants": { - "age=0": { "model": "carrots_stage0" }, - "age=1": { "model": "carrots_stage0" }, - "age=2": { "model": "carrots_stage1" }, - "age=3": { "model": "carrots_stage1" }, - "age=4": { "model": "carrots_stage2" }, - "age=5": { "model": "carrots_stage2" }, - "age=6": { "model": "carrots_stage2" }, - "age=7": { "model": "carrots_stage3" } - } -} +{ + "variants": { + "age=0": { "model": "carrots_stage0" }, + "age=1": { "model": "carrots_stage0" }, + "age=2": { "model": "carrots_stage1" }, + "age=3": { "model": "carrots_stage1" }, + "age=4": { "model": "carrots_stage2" }, + "age=5": { "model": "carrots_stage2" }, + "age=6": { "model": "carrots_stage2" }, + "age=7": { "model": "carrots_stage3" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json b/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json index b9d77317..98d6a93d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json @@ -1,8 +1,8 @@ -{ - "variants": { - "level=0": { "model": "cauldron_empty" }, - "level=1": { "model": "cauldron_level1" }, - "level=2": { "model": "cauldron_level2" }, - "level=3": { "model": "cauldron_level3" } - } -} +{ + "variants": { + "level=0": { "model": "cauldron_empty" }, + "level=1": { "model": "cauldron_level1" }, + "level=2": { "model": "cauldron_level2" }, + "level=3": { "model": "cauldron_level3" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_brick_monster_egg.json index ac6954e2..c8a9e6aa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_brick_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_chiseled" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_quartz_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_quartz_block.json index c5146fd6..13566da1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_quartz_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_quartz_block.json @@ -1,6 +1,5 @@ -{ - "variants": { - "normal": { "model": "quartz_chiseled" } - } -} - +{ + "variants": { + "normal": { "model": "quartz_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_red_sandstone.json index 1482c106..7bf5348c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_red_sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_sandstone_chiseled" } - } -} +{ + "variants": { + "normal": { "model": "red_sandstone_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_sandstone.json index f3b7880a..4116e1a1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "sandstone_chiseled" } - } -} +{ + "variants": { + "normal": { "model": "sandstone_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_stonebrick.json b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_stonebrick.json index ac6954e2..c8a9e6aa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_stonebrick.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_chiseled" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/clay.json index 9c7d6ed7..1a57ff4e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "clay" } - } -} +{ + "variants": { + "normal": { "model": "clay" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json index d3ce78f4..b07dcb01 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "coal_block" } - } -} +{ + "variants": { + "normal": { "model": "coal_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/coal_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/coal_ore.json index 2e891213..af7ec6c4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/coal_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coal_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "coal_ore" } - } -} +{ + "variants": { + "normal": { "model": "coal_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/coarse_dirt.json b/desktopRuntime/resources/assets/minecraft/blockstates/coarse_dirt.json index 573e2c8b..d1ea51f7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/coarse_dirt.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coarse_dirt.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "coarse_dirt" } - } -} +{ + "variants": { + "normal": { "model": "coarse_dirt" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json index ba218035..8b9614c0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "cobblestone" } - } -} +{ + "variants": { + "normal": { "model": "cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_double_slab.json index e60e5530..77e10258 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "cobblestone" }, - "all": { "model": "cobblestone" } - } -} +{ + "variants": { + "normal": { "model": "cobblestone" }, + "all": { "model": "cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_monster_egg.json index ba218035..8b9614c0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "cobblestone" } - } -} +{ + "variants": { + "normal": { "model": "cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json index 864b8035..cfe73f4e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_cobblestone" }, - "half=top": { "model": "upper_slab_cobblestone" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_cobblestone" }, + "half=top": { "model": "upper_slab_cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_wall.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_wall.json index da9c8235..07404a55 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_wall.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_wall.json @@ -1,36 +1,140 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "cobblestone_wall_post" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "cobblestone_wall_n" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "cobblestone_wall_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "cobblestone_wall_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "cobblestone_wall_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "cobblestone_wall_ne" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "cobblestone_wall_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "cobblestone_wall_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "cobblestone_wall_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "cobblestone_wall_ns" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "cobblestone_wall_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "cobblestone_wall_nse" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "cobblestone_wall_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "cobblestone_wall_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "cobblestone_wall_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "cobblestone_wall_nsew" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "cobblestone_wall_post" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "cobblestone_wall_n" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "cobblestone_wall_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "cobblestone_wall_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "cobblestone_wall_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "cobblestone_wall_ne" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "cobblestone_wall_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "cobblestone_wall_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "cobblestone_wall_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "cobblestone_wall_ns_above" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "cobblestone_wall_ns_above", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "cobblestone_wall_nse" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "cobblestone_wall_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "cobblestone_wall_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "cobblestone_wall_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "cobblestone_wall_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,up=false,west=false": { + "model": "cobblestone_wall_post" + }, + "east=false,north=true,south=false,up=false,west=false": { + "model": "cobblestone_wall_n" + }, + "east=true,north=false,south=false,up=false,west=false": { + "model": "cobblestone_wall_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=false,west=false": { + "model": "cobblestone_wall_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,up=false,west=true": { + "model": "cobblestone_wall_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,up=false,west=false": { + "model": "cobblestone_wall_ne" + }, + "east=true,north=false,south=true,up=false,west=false": { + "model": "cobblestone_wall_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=false,west=true": { + "model": "cobblestone_wall_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,up=false,west=true": { + "model": "cobblestone_wall_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,up=false,west=false": { + "model": "cobblestone_wall_ns" + }, + "east=true,north=false,south=false,up=false,west=true": { + "model": "cobblestone_wall_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,up=false,west=false": { + "model": "cobblestone_wall_nse" + }, + "east=true,north=false,south=true,up=false,west=true": { + "model": "cobblestone_wall_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,up=false,west=true": { + "model": "cobblestone_wall_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,up=false,west=true": { + "model": "cobblestone_wall_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,up=false,west=true": { + "model": "cobblestone_wall_nsew" + }, + "east=false,north=false,south=false,up=true,west=false": { + "model": "cobblestone_wall_post" + }, + "east=false,north=true,south=false,up=true,west=false": { + "model": "cobblestone_wall_n" + }, + "east=true,north=false,south=false,up=true,west=false": { + "model": "cobblestone_wall_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=true,west=false": { + "model": "cobblestone_wall_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,up=true,west=true": { + "model": "cobblestone_wall_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,up=true,west=false": { + "model": "cobblestone_wall_ne" + }, + "east=true,north=false,south=true,up=true,west=false": { + "model": "cobblestone_wall_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=true,west=true": { + "model": "cobblestone_wall_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,up=true,west=true": { + "model": "cobblestone_wall_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,up=true,west=false": { + "model": "cobblestone_wall_ns_above" + }, + "east=true,north=false,south=false,up=true,west=true": { + "model": "cobblestone_wall_ns_above", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,up=true,west=false": { + "model": "cobblestone_wall_nse" + }, + "east=true,north=false,south=true,up=true,west=true": { + "model": "cobblestone_wall_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,up=true,west=true": { + "model": "cobblestone_wall_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,up=true,west=true": { + "model": "cobblestone_wall_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,up=true,west=true": { + "model": "cobblestone_wall_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cocoa.json b/desktopRuntime/resources/assets/minecraft/blockstates/cocoa.json index 6247497d..0932fb79 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cocoa.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cocoa.json @@ -1,16 +1,16 @@ -{ - "variants": { - "age=0,facing=south": { "model": "cocoa_age0_s" }, - "age=0,facing=west": { "model": "cocoa_age0_s", "y": 90 }, - "age=0,facing=north": { "model": "cocoa_age0_s", "y": 180 }, - "age=0,facing=east": { "model": "cocoa_age0_s", "y": 270 }, - "age=1,facing=south": { "model": "cocoa_age1_s" }, - "age=1,facing=west": { "model": "cocoa_age1_s", "y": 90 }, - "age=1,facing=north": { "model": "cocoa_age1_s", "y": 180 }, - "age=1,facing=east": { "model": "cocoa_age1_s", "y": 270 }, - "age=2,facing=south": { "model": "cocoa_age2_s" }, - "age=2,facing=west": { "model": "cocoa_age2_s", "y": 90 }, - "age=2,facing=north": { "model": "cocoa_age2_s", "y": 180 }, - "age=2,facing=east": { "model": "cocoa_age2_s", "y": 270 } - } -} +{ + "variants": { + "age=0,facing=south": { "model": "cocoa_age0_s" }, + "age=0,facing=west": { "model": "cocoa_age0_s", "y": 90 }, + "age=0,facing=north": { "model": "cocoa_age0_s", "y": 180 }, + "age=0,facing=east": { "model": "cocoa_age0_s", "y": 270 }, + "age=1,facing=south": { "model": "cocoa_age1_s" }, + "age=1,facing=west": { "model": "cocoa_age1_s", "y": 90 }, + "age=1,facing=north": { "model": "cocoa_age1_s", "y": 180 }, + "age=1,facing=east": { "model": "cocoa_age1_s", "y": 270 }, + "age=2,facing=south": { "model": "cocoa_age2_s" }, + "age=2,facing=west": { "model": "cocoa_age2_s", "y": 90 }, + "age=2,facing=north": { "model": "cocoa_age2_s", "y": 180 }, + "age=2,facing=east": { "model": "cocoa_age2_s", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json index 508b16b7..188309e1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "command_block" } - } -} +{ + "variants": { + "normal": { "model": "command_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cracked_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_brick_monster_egg.json index 1343d5fa..2b9d59ad 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cracked_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_brick_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_cracked" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_cracked" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cracked_stonebrick.json b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_stonebrick.json index 1343d5fa..2b9d59ad 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cracked_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_stonebrick.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_cracked" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_cracked" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/crafting_table.json b/desktopRuntime/resources/assets/minecraft/blockstates/crafting_table.json index bf6526ea..0c828900 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/crafting_table.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/crafting_table.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "crafting_table" } - } -} +{ + "variants": { + "normal": { "model": "crafting_table" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_carpet.json index 6298743a..7b909e56 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_cyan" } - } -} +{ + "variants": { + "normal": { "model": "carpet_cyan" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass.json index 642787a9..1b6545d1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_cyan" } - } -} +{ + "variants": { + "normal": { "model": "glass_cyan" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass_pane.json index 64facf5e..76f4efa2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "cyan_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "cyan_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "cyan_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "cyan_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "cyan_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "cyan_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "cyan_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "cyan_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "cyan_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "cyan_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "cyan_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "cyan_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "cyan_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "cyan_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "cyan_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "cyan_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "cyan_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "cyan_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "cyan_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "cyan_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "cyan_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "cyan_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "cyan_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "cyan_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "cyan_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "cyan_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "cyan_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "cyan_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "cyan_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "cyan_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "cyan_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "cyan_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_hardened_clay.json index 60d9fadb..c6acd571 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_cyan" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_cyan" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_wool.json index 8eb7bdab..9c1fe067 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/cyan_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "cyan_wool" } - } -} +{ + "variants": { + "normal": { "model": "cyan_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json b/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json index ff254695..c61d7bea 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dandelion" } - } -} +{ + "variants": { + "normal": { "model": "dandelion" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_door.json index dbb5eda3..b6f94343 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "dark_oak_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "dark_oak_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "dark_oak_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "dark_oak_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "dark_oak_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "dark_oak_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "dark_oak_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "dark_oak_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "dark_oak_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "dark_oak_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "dark_oak_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "dark_oak_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "dark_oak_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "dark_oak_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "dark_oak_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "dark_oak_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "dark_oak_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "dark_oak_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "dark_oak_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "dark_oak_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "dark_oak_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "dark_oak_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "dark_oak_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "dark_oak_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "dark_oak_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "dark_oak_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "dark_oak_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "dark_oak_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "dark_oak_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "dark_oak_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "dark_oak_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "dark_oak_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "dark_oak_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "dark_oak_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "dark_oak_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "dark_oak_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "dark_oak_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "dark_oak_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "dark_oak_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "dark_oak_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "dark_oak_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "dark_oak_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "dark_oak_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "dark_oak_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "dark_oak_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "dark_oak_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "dark_oak_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "dark_oak_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "dark_oak_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "dark_oak_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "dark_oak_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "dark_oak_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "dark_oak_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "dark_oak_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "dark_oak_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "dark_oak_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "dark_oak_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "dark_oak_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "dark_oak_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "dark_oak_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "dark_oak_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "dark_oak_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "dark_oak_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "dark_oak_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_double_slab.json index 987bd5f0..1b3498f3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dark_oak_planks" } - } -} +{ + "variants": { + "normal": { "model": "dark_oak_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence.json index faa146b9..61e86dfa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "dark_oak_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "dark_oak_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "dark_oak_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "dark_oak_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "dark_oak_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "dark_oak_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "dark_oak_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "dark_oak_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "dark_oak_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "dark_oak_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "dark_oak_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "dark_oak_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "dark_oak_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "dark_oak_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "dark_oak_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "dark_oak_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "dark_oak_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "dark_oak_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "dark_oak_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "dark_oak_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "dark_oak_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "dark_oak_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "dark_oak_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "dark_oak_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "dark_oak_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "dark_oak_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "dark_oak_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "dark_oak_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "dark_oak_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "dark_oak_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "dark_oak_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "dark_oak_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence_gate.json index 2878fa14..2a3ef567 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence_gate.json @@ -1,20 +1,76 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "dark_oak_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "dark_oak_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "dark_oak_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "dark_oak_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "dark_oak_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "dark_oak_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "dark_oak_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "dark_oak_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "dark_oak_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "dark_oak_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "dark_oak_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "dark_oak_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "dark_oak_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "dark_oak_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "dark_oak_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "dark_oak_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "dark_oak_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "dark_oak_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "dark_oak_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "dark_oak_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "dark_oak_fence_gate_open" + }, + "facing=west,in_wall=false,open=true": { + "model": "dark_oak_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "dark_oak_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "dark_oak_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "dark_oak_wall_gate_closed" + }, + "facing=west,in_wall=true,open=false": { + "model": "dark_oak_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "dark_oak_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "dark_oak_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "dark_oak_wall_gate_open" + }, + "facing=west,in_wall=true,open=true": { + "model": "dark_oak_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "dark_oak_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "dark_oak_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_leaves.json index 1deac59d..26b327ad 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dark_oak_leaves" } - } -} +{ + "variants": { + "normal": { "model": "dark_oak_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_log.json index 2691bea3..060cfb61 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "dark_oak_log" }, - "axis=z": { "model": "dark_oak_log_side" }, - "axis=x": { "model": "dark_oak_log_side", "y": 90 }, - "axis=none": { "model": "dark_oak_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "dark_oak_log" }, + "axis=z": { "model": "dark_oak_log_side" }, + "axis=x": { "model": "dark_oak_log_side", "y": 90 }, + "axis=none": { "model": "dark_oak_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json index 987bd5f0..1b3498f3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dark_oak_planks" } - } -} +{ + "variants": { + "normal": { "model": "dark_oak_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_sapling.json index 1f3bc5c2..d5828ce1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "dark_oak_sapling" }, - "stage=1": { "model": "dark_oak_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "dark_oak_sapling" }, + "stage=1": { "model": "dark_oak_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_slab.json index acf60856..173dc721 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_dark_oak" }, - "half=top": { "model": "upper_slab_dark_oak" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_dark_oak" }, + "half=top": { "model": "upper_slab_dark_oak" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_stairs.json index 2e13b96d..e3123ccb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "dark_oak_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "dark_oak_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "dark_oak_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "dark_oak_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "dark_oak_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "dark_oak_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "dark_oak_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "dark_oak_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "dark_oak_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "dark_oak_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "dark_oak_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "dark_oak_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "dark_oak_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "dark_oak_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "dark_oak_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "dark_oak_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "dark_oak_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "dark_oak_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "dark_oak_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "dark_oak_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "dark_oak_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "dark_oak_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "dark_oak_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "dark_oak_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "dark_oak_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "dark_oak_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "dark_oak_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "dark_oak_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "dark_oak_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "dark_oak_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "dark_oak_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "dark_oak_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "dark_oak_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "dark_oak_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "dark_oak_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "dark_oak_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "dark_oak_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "dark_oak_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "dark_oak_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "dark_oak_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "dark_oak_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "dark_oak_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "dark_oak_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "dark_oak_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "dark_oak_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "dark_oak_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "dark_oak_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "dark_oak_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "dark_oak_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "dark_oak_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "dark_oak_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "dark_oak_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "dark_oak_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "dark_oak_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_prismarine.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_prismarine.json index 015f2b5c..60e8850b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dark_prismarine.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_prismarine.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "prismarine_dark" } - } -} +{ + "variants": { + "normal": { "model": "prismarine_dark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector.json b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector.json index b600867f..0fa3c0f8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector.json @@ -1,20 +1,20 @@ -{ - "variants": { - "power=0": { "model": "daylight_detector" }, - "power=1": { "model": "daylight_detector" }, - "power=2": { "model": "daylight_detector" }, - "power=3": { "model": "daylight_detector" }, - "power=4": { "model": "daylight_detector" }, - "power=5": { "model": "daylight_detector" }, - "power=6": { "model": "daylight_detector" }, - "power=7": { "model": "daylight_detector" }, - "power=8": { "model": "daylight_detector" }, - "power=9": { "model": "daylight_detector" }, - "power=10": { "model": "daylight_detector" }, - "power=11": { "model": "daylight_detector" }, - "power=12": { "model": "daylight_detector" }, - "power=13": { "model": "daylight_detector" }, - "power=14": { "model": "daylight_detector" }, - "power=15": { "model": "daylight_detector" } - } -} +{ + "variants": { + "power=0": { "model": "daylight_detector" }, + "power=1": { "model": "daylight_detector" }, + "power=2": { "model": "daylight_detector" }, + "power=3": { "model": "daylight_detector" }, + "power=4": { "model": "daylight_detector" }, + "power=5": { "model": "daylight_detector" }, + "power=6": { "model": "daylight_detector" }, + "power=7": { "model": "daylight_detector" }, + "power=8": { "model": "daylight_detector" }, + "power=9": { "model": "daylight_detector" }, + "power=10": { "model": "daylight_detector" }, + "power=11": { "model": "daylight_detector" }, + "power=12": { "model": "daylight_detector" }, + "power=13": { "model": "daylight_detector" }, + "power=14": { "model": "daylight_detector" }, + "power=15": { "model": "daylight_detector" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json index 97e1f75f..b5e14d4b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json @@ -1,20 +1,20 @@ -{ - "variants": { - "power=0": { "model": "daylight_detector_inverted" }, - "power=1": { "model": "daylight_detector_inverted" }, - "power=2": { "model": "daylight_detector_inverted" }, - "power=3": { "model": "daylight_detector_inverted" }, - "power=4": { "model": "daylight_detector_inverted" }, - "power=5": { "model": "daylight_detector_inverted" }, - "power=6": { "model": "daylight_detector_inverted" }, - "power=7": { "model": "daylight_detector_inverted" }, - "power=8": { "model": "daylight_detector_inverted" }, - "power=9": { "model": "daylight_detector_inverted" }, - "power=10": { "model": "daylight_detector_inverted" }, - "power=11": { "model": "daylight_detector_inverted" }, - "power=12": { "model": "daylight_detector_inverted" }, - "power=13": { "model": "daylight_detector_inverted" }, - "power=14": { "model": "daylight_detector_inverted" }, - "power=15": { "model": "daylight_detector_inverted" } - } -} +{ + "variants": { + "power=0": { "model": "daylight_detector_inverted" }, + "power=1": { "model": "daylight_detector_inverted" }, + "power=2": { "model": "daylight_detector_inverted" }, + "power=3": { "model": "daylight_detector_inverted" }, + "power=4": { "model": "daylight_detector_inverted" }, + "power=5": { "model": "daylight_detector_inverted" }, + "power=6": { "model": "daylight_detector_inverted" }, + "power=7": { "model": "daylight_detector_inverted" }, + "power=8": { "model": "daylight_detector_inverted" }, + "power=9": { "model": "daylight_detector_inverted" }, + "power=10": { "model": "daylight_detector_inverted" }, + "power=11": { "model": "daylight_detector_inverted" }, + "power=12": { "model": "daylight_detector_inverted" }, + "power=13": { "model": "daylight_detector_inverted" }, + "power=14": { "model": "daylight_detector_inverted" }, + "power=15": { "model": "daylight_detector_inverted" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json b/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json index 410f4088..3a56305e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dead_bush" } - } -} +{ + "variants": { + "normal": { "model": "dead_bush" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/detector_rail.json b/desktopRuntime/resources/assets/minecraft/blockstates/detector_rail.json index a6c55b28..ebf18473 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/detector_rail.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/detector_rail.json @@ -1,16 +1,39 @@ -{ - "variants": { - "powered=false,shape=north_south": { "model": "detector_rail_flat" }, - "powered=false,shape=east_west": { "model": "detector_rail_flat", "y": 90 }, - "powered=false,shape=ascending_east": { "model": "detector_rail_raised_ne", "y": 90 }, - "powered=false,shape=ascending_west": { "model": "detector_rail_raised_sw", "y": 90 }, - "powered=false,shape=ascending_north": { "model": "detector_rail_raised_ne" }, - "powered=false,shape=ascending_south": { "model": "detector_rail_raised_sw" }, - "powered=true,shape=north_south": { "model": "detector_rail_powered_flat" }, - "powered=true,shape=east_west": { "model": "detector_rail_powered_flat", "y": 90 }, - "powered=true,shape=ascending_east": { "model": "detector_rail_powered_raised_ne", "y": 90 }, - "powered=true,shape=ascending_west": { "model": "detector_rail_powered_raised_sw", "y": 90 }, - "powered=true,shape=ascending_north": { "model": "detector_rail_powered_raised_ne" }, - "powered=true,shape=ascending_south": { "model": "detector_rail_powered_raised_sw" } - } -} +{ + "variants": { + "powered=false,shape=north_south": { "model": "detector_rail_flat" }, + "powered=false,shape=east_west": { "model": "detector_rail_flat", "y": 90 }, + "powered=false,shape=ascending_east": { + "model": "detector_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_west": { + "model": "detector_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=ascending_north": { + "model": "detector_rail_raised_ne" + }, + "powered=false,shape=ascending_south": { + "model": "detector_rail_raised_sw" + }, + "powered=true,shape=north_south": { "model": "detector_rail_powered_flat" }, + "powered=true,shape=east_west": { + "model": "detector_rail_powered_flat", + "y": 90 + }, + "powered=true,shape=ascending_east": { + "model": "detector_rail_powered_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_west": { + "model": "detector_rail_powered_raised_sw", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "detector_rail_powered_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "detector_rail_powered_raised_sw" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/diamond_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_block.json index 9a0c4874..e008954c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/diamond_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "diamond_block" } - } -} +{ + "variants": { + "normal": { "model": "diamond_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/diamond_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_ore.json index b870a842..af34cc7d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/diamond_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "diamond_ore" } - } -} +{ + "variants": { + "normal": { "model": "diamond_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json b/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json index 64314e0a..11b018bc 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "diorite" } - } -} +{ + "variants": { + "normal": { "model": "diorite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json b/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json index c83e0caf..91e274e4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "dirt" }, - { "model": "dirt", "y": 90 }, - { "model": "dirt", "y": 180 }, - { "model": "dirt", "y": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "dirt" }, + { "model": "dirt", "y": 90 }, + { "model": "dirt", "y": 180 }, + { "model": "dirt", "y": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dispenser.json b/desktopRuntime/resources/assets/minecraft/blockstates/dispenser.json index 2765f9a2..75b1c7ee 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dispenser.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dispenser.json @@ -1,10 +1,10 @@ -{ - "variants": { - "facing=down": { "model": "dispenser_vertical", "x": 180 }, - "facing=up": { "model": "dispenser_vertical" }, - "facing=north": { "model": "dispenser" }, - "facing=south": { "model": "dispenser", "y": 180 }, - "facing=west": { "model": "dispenser", "y": 270 }, - "facing=east": { "model": "dispenser", "y": 90 } - } -} +{ + "variants": { + "facing=down": { "model": "dispenser_vertical", "x": 180 }, + "facing=up": { "model": "dispenser_vertical" }, + "facing=north": { "model": "dispenser" }, + "facing=south": { "model": "dispenser", "y": 180 }, + "facing=west": { "model": "dispenser", "y": 270 }, + "facing=east": { "model": "dispenser", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json b/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json index 6e6feb21..b0366911 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_fern_bottom" }, - "half=upper": { "model": "double_fern_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_fern_bottom" }, + "half=upper": { "model": "double_fern_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/double_grass.json b/desktopRuntime/resources/assets/minecraft/blockstates/double_grass.json index c776e161..1711d3c1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/double_grass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_grass.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_grass_bottom" }, - "half=upper": { "model": "double_grass_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_grass_bottom" }, + "half=upper": { "model": "double_grass_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/double_rose.json b/desktopRuntime/resources/assets/minecraft/blockstates/double_rose.json index 2433eaa0..3253261e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/double_rose.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_rose.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_rose_bottom" }, - "half=upper": { "model": "double_rose_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_rose_bottom" }, + "half=upper": { "model": "double_rose_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dragon_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/dragon_egg.json index 455e6b9d..5e295010 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dragon_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dragon_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "dragon_egg" } - } -} +{ + "variants": { + "normal": { "model": "dragon_egg" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json b/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json index 69e36f0c..259137ad 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json @@ -1,10 +1,10 @@ -{ - "variants": { - "facing=down": { "model": "dropper_vertical", "x": 180 }, - "facing=up": { "model": "dropper_vertical" }, - "facing=north": { "model": "dropper" }, - "facing=south": { "model": "dropper", "y": 180 }, - "facing=west": { "model": "dropper", "y": 270 }, - "facing=east": { "model": "dropper", "y": 90 } - } -} +{ + "variants": { + "facing=down": { "model": "dropper_vertical", "x": 180 }, + "facing=up": { "model": "dropper_vertical" }, + "facing=north": { "model": "dropper" }, + "facing=south": { "model": "dropper", "y": 180 }, + "facing=west": { "model": "dropper", "y": 270 }, + "facing=east": { "model": "dropper", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json index 75aea371..43b5d6ae 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "emerald_block" } - } -} +{ + "variants": { + "normal": { "model": "emerald_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/emerald_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_ore.json index a5ce775b..e9eeaa19 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/emerald_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "emerald_ore" } - } -} +{ + "variants": { + "normal": { "model": "emerald_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/enchanting_table.json b/desktopRuntime/resources/assets/minecraft/blockstates/enchanting_table.json index 27f7a223..12e57c3b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/enchanting_table.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/enchanting_table.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "enchanting_table_base" } - } -} +{ + "variants": { + "normal": { "model": "enchanting_table_base" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/end_portal_frame.json b/desktopRuntime/resources/assets/minecraft/blockstates/end_portal_frame.json index b2999074..94d6f177 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/end_portal_frame.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/end_portal_frame.json @@ -1,12 +1,12 @@ -{ - "variants": { - "eye=false,facing=south": { "model": "end_portal_frame_empty" }, - "eye=false,facing=west": { "model": "end_portal_frame_empty", "y": 90 }, - "eye=false,facing=north": { "model": "end_portal_frame_empty", "y": 180 }, - "eye=false,facing=east": { "model": "end_portal_frame_empty", "y": 270 }, - "eye=true,facing=south": { "model": "end_portal_frame_filled" }, - "eye=true,facing=west": { "model": "end_portal_frame_filled", "y": 90 }, - "eye=true,facing=north": { "model": "end_portal_frame_filled", "y": 180 }, - "eye=true,facing=east": { "model": "end_portal_frame_filled", "y": 270 } - } -} +{ + "variants": { + "eye=false,facing=south": { "model": "end_portal_frame_empty" }, + "eye=false,facing=west": { "model": "end_portal_frame_empty", "y": 90 }, + "eye=false,facing=north": { "model": "end_portal_frame_empty", "y": 180 }, + "eye=false,facing=east": { "model": "end_portal_frame_empty", "y": 270 }, + "eye=true,facing=south": { "model": "end_portal_frame_filled" }, + "eye=true,facing=west": { "model": "end_portal_frame_filled", "y": 90 }, + "eye=true,facing=north": { "model": "end_portal_frame_filled", "y": 180 }, + "eye=true,facing=east": { "model": "end_portal_frame_filled", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json b/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json index eb7c12dd..74424f0b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "end_stone" } - } -} +{ + "variants": { + "normal": { "model": "end_stone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json b/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json index f3712558..c58d531b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json @@ -1,12 +1,12 @@ -{ - "variants": { - "moisture=0": { "model": "farmland_dry" }, - "moisture=1": { "model": "farmland_dry" }, - "moisture=2": { "model": "farmland_dry" }, - "moisture=3": { "model": "farmland_dry" }, - "moisture=4": { "model": "farmland_dry" }, - "moisture=5": { "model": "farmland_dry" }, - "moisture=6": { "model": "farmland_dry" }, - "moisture=7": { "model": "farmland_moist" } - } -} +{ + "variants": { + "moisture=0": { "model": "farmland_dry" }, + "moisture=1": { "model": "farmland_dry" }, + "moisture=2": { "model": "farmland_dry" }, + "moisture=3": { "model": "farmland_dry" }, + "moisture=4": { "model": "farmland_dry" }, + "moisture=5": { "model": "farmland_dry" }, + "moisture=6": { "model": "farmland_dry" }, + "moisture=7": { "model": "farmland_moist" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/fence.json index 83b0bb3c..e0cec42e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "oak_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "oak_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "oak_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "oak_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "oak_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "oak_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "oak_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "oak_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "oak_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "oak_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "oak_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "oak_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "oak_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "oak_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "oak_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "oak_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "oak_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "oak_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "oak_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "oak_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "oak_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "oak_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "oak_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "oak_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "oak_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "oak_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "oak_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "oak_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "oak_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "oak_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "oak_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "oak_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/fence_gate.json index d0f22d68..1afa630e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fence_gate.json @@ -1,20 +1,70 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "oak_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "oak_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "oak_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "oak_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "oak_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "oak_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "oak_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "oak_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "oak_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "oak_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "oak_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "oak_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "oak_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "oak_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "oak_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "oak_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "oak_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "oak_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "oak_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "oak_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { "model": "oak_fence_gate_open" }, + "facing=west,in_wall=false,open=true": { + "model": "oak_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "oak_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "oak_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { "model": "oak_wall_gate_closed" }, + "facing=west,in_wall=true,open=false": { + "model": "oak_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "oak_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "oak_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { "model": "oak_wall_gate_open" }, + "facing=west,in_wall=true,open=true": { + "model": "oak_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "oak_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "oak_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fern.json b/desktopRuntime/resources/assets/minecraft/blockstates/fern.json index 7c94bcfb..1176f71c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/fern.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fern.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "fern" } - } -} +{ + "variants": { + "normal": { "model": "fern" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fire.json b/desktopRuntime/resources/assets/minecraft/blockstates/fire.json index 67c09092..f01faf40 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/fire.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fire.json @@ -1,196 +1,700 @@ -{ - "variants": { - "alt=false,east=false,flip=false,north=false,south=false,upper=0,west=false": { "model": "fire_floor_main" }, - "alt=false,east=false,flip=false,north=false,south=true,upper=0,west=false": { "model": "fire_n_main", "y": 180 }, - "alt=false,east=false,flip=false,north=false,south=false,upper=0,west=true": { "model": "fire_n_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=0,west=false": { "model": "fire_n_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=0,west=false": { "model": "fire_n_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=0,west=false": { "model": "fire_ne_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=0,west=false": { "model": "fire_ne_main", "y": 90 }, - "alt=false,east=false,flip=false,north=false,south=true,upper=0,west=true": { "model": "fire_ne_main", "y": 180 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=0,west=true": { "model": "fire_ne_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=0,west=false": { "model": "fire_ns_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=0,west=true": { "model": "fire_ns_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=0,west=false": { "model": "fire_nse_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=0,west=true": { "model": "fire_nse_main", "y": 90 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=0,west=true": { "model": "fire_nse_main", "y": 180 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=0,west=true": { "model": "fire_nse_main", "y": 270 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=0,west=true": { "model": "fire_nsew_main" }, - "alt=false,east=false,flip=false,north=false,south=false,upper=1,west=false": { "model": "fire_u1_main" }, - "alt=false,east=false,flip=false,north=false,south=true,upper=1,west=false": { "model": "fire_nu1_main", "y": 180 }, - "alt=false,east=false,flip=false,north=false,south=false,upper=1,west=true": { "model": "fire_nu1_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=1,west=false": { "model": "fire_nu1_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=1,west=false": { "model": "fire_nu1_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=1,west=false": { "model": "fire_neu1_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=1,west=false": { "model": "fire_neu1_main", "y": 90 }, - "alt=false,east=false,flip=false,north=false,south=true,upper=1,west=true": { "model": "fire_neu1_main", "y": 180 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=1,west=true": { "model": "fire_neu1_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=1,west=false": { "model": "fire_nsu1_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=1,west=true": { "model": "fire_nsu1_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=1,west=false": { "model": "fire_nseu1_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=1,west=true": { "model": "fire_nseu1_main", "y": 90 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=1,west=true": { "model": "fire_nseu1_main", "y": 180 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=1,west=true": { "model": "fire_nseu1_main", "y": 270 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=1,west=true": { "model": "fire_nsewu1_main" }, - "alt=false,east=false,flip=false,north=false,south=false,upper=2,west=false": { "model": "fire_u2_main" }, - "alt=false,east=false,flip=false,north=false,south=true,upper=2,west=false": { "model": "fire_nu2_main", "y": 180 }, - "alt=false,east=false,flip=false,north=false,south=false,upper=2,west=true": { "model": "fire_nu2_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=2,west=false": { "model": "fire_nu2_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=2,west=false": { "model": "fire_nu2_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=2,west=false": { "model": "fire_neu2_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=2,west=false": { "model": "fire_neu2_main", "y": 90 }, - "alt=false,east=false,flip=false,north=false,south=true,upper=2,west=true": { "model": "fire_neu2_main", "y": 180 }, - "alt=false,east=false,flip=false,north=true,south=false,upper=2,west=true": { "model": "fire_neu2_main", "y": 270 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=2,west=false": { "model": "fire_nsu2_main" }, - "alt=false,east=true,flip=false,north=false,south=false,upper=2,west=true": { "model": "fire_nsu2_main", "y": 90 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=2,west=false": { "model": "fire_nseu2_main" }, - "alt=false,east=true,flip=false,north=false,south=true,upper=2,west=true": { "model": "fire_nseu2_main", "y": 90 }, - "alt=false,east=false,flip=false,north=true,south=true,upper=2,west=true": { "model": "fire_nseu2_main", "y": 180 }, - "alt=false,east=true,flip=false,north=true,south=false,upper=2,west=true": { "model": "fire_nseu2_main", "y": 270 }, - "alt=false,east=true,flip=false,north=true,south=true,upper=2,west=true": { "model": "fire_nsewu2_main" }, - "alt=true,east=false,flip=false,north=false,south=false,upper=0,west=false": { "model": "fire_floor_main" }, - "alt=true,east=false,flip=false,north=false,south=true,upper=0,west=false": { "model": "fire_n_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=false,south=false,upper=0,west=true": { "model": "fire_n_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=0,west=false": { "model": "fire_n_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=0,west=false": { "model": "fire_n_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=0,west=false": { "model": "fire_ne_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=0,west=false": { "model": "fire_ne_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=false,south=true,upper=0,west=true": { "model": "fire_ne_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=0,west=true": { "model": "fire_ne_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=0,west=false": { "model": "fire_ns_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=0,west=true": { "model": "fire_ns_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=0,west=false": { "model": "fire_nse_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=0,west=true": { "model": "fire_nse_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=0,west=true": { "model": "fire_nse_alt", "y": 180 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=0,west=true": { "model": "fire_nse_alt", "y": 270 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=0,west=true": { "model": "fire_nsew_alt" }, - "alt=true,east=false,flip=false,north=false,south=false,upper=1,west=false": { "model": "fire_u1_main" }, - "alt=true,east=false,flip=false,north=false,south=true,upper=1,west=false": { "model": "fire_nu1_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=false,south=false,upper=1,west=true": { "model": "fire_nu1_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=1,west=false": { "model": "fire_nu1_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=1,west=false": { "model": "fire_nu1_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=1,west=false": { "model": "fire_neu1_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=1,west=false": { "model": "fire_neu1_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=false,south=true,upper=1,west=true": { "model": "fire_neu1_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=1,west=true": { "model": "fire_neu1_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=1,west=false": { "model": "fire_nsu1_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=1,west=true": { "model": "fire_nsu1_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=1,west=false": { "model": "fire_nseu1_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=1,west=true": { "model": "fire_nseu1_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=1,west=true": { "model": "fire_nseu1_alt", "y": 180 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=1,west=true": { "model": "fire_nseu1_alt", "y": 270 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=1,west=true": { "model": "fire_nsewu1_alt" }, - "alt=true,east=false,flip=false,north=false,south=false,upper=2,west=false": { "model": "fire_u2_main" }, - "alt=true,east=false,flip=false,north=false,south=true,upper=2,west=false": { "model": "fire_nu2_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=false,south=false,upper=2,west=true": { "model": "fire_nu2_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=2,west=false": { "model": "fire_nu2_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=2,west=false": { "model": "fire_nu2_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=2,west=false": { "model": "fire_neu2_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=2,west=false": { "model": "fire_neu2_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=false,south=true,upper=2,west=true": { "model": "fire_neu2_alt", "y": 180 }, - "alt=true,east=false,flip=false,north=true,south=false,upper=2,west=true": { "model": "fire_neu2_alt", "y": 270 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=2,west=false": { "model": "fire_nsu2_alt" }, - "alt=true,east=true,flip=false,north=false,south=false,upper=2,west=true": { "model": "fire_nsu2_alt", "y": 90 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=2,west=false": { "model": "fire_nseu2_alt" }, - "alt=true,east=true,flip=false,north=false,south=true,upper=2,west=true": { "model": "fire_nseu2_alt", "y": 90 }, - "alt=true,east=false,flip=false,north=true,south=true,upper=2,west=true": { "model": "fire_nseu2_alt", "y": 180 }, - "alt=true,east=true,flip=false,north=true,south=false,upper=2,west=true": { "model": "fire_nseu2_alt", "y": 270 }, - "alt=true,east=true,flip=false,north=true,south=true,upper=2,west=true": { "model": "fire_nsewu2_alt" }, - "alt=false,east=false,flip=true,north=false,south=false,upper=0,west=false": { "model": "fire_floor_main" }, - "alt=false,east=false,flip=true,north=false,south=true,upper=0,west=false": { "model": "fire_n_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=false,south=false,upper=0,west=true": { "model": "fire_n_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=0,west=false": { "model": "fire_n_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=0,west=false": { "model": "fire_n_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=0,west=false": { "model": "fire_ne_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=0,west=false": { "model": "fire_ne_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=false,south=true,upper=0,west=true": { "model": "fire_ne_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=0,west=true": { "model": "fire_ne_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=0,west=false": { "model": "fire_ns_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=0,west=true": { "model": "fire_ns_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=0,west=false": { "model": "fire_nse_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=0,west=true": { "model": "fire_nse_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=0,west=true": { "model": "fire_nse_flip_main", "y": 180 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=0,west=true": { "model": "fire_nse_flip_main", "y": 270 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=0,west=true": { "model": "fire_nsew_flip_main" }, - "alt=false,east=false,flip=true,north=false,south=false,upper=1,west=false": { "model": "fire_u1_main" }, - "alt=false,east=false,flip=true,north=false,south=true,upper=1,west=false": { "model": "fire_nu1_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=false,south=false,upper=1,west=true": { "model": "fire_nu1_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=1,west=false": { "model": "fire_nu1_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=1,west=false": { "model": "fire_nu1_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=1,west=false": { "model": "fire_neu1_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=1,west=false": { "model": "fire_neu1_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=false,south=true,upper=1,west=true": { "model": "fire_neu1_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=1,west=true": { "model": "fire_neu1_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=1,west=false": { "model": "fire_nsu1_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=1,west=true": { "model": "fire_nsu1_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=1,west=false": { "model": "fire_nseu1_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=1,west=true": { "model": "fire_nseu1_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=1,west=true": { "model": "fire_nseu1_flip_main", "y": 180 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=1,west=true": { "model": "fire_nseu1_flip_main", "y": 270 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=1,west=true": { "model": "fire_nsewu1_flip_main" }, - "alt=false,east=false,flip=true,north=false,south=false,upper=2,west=false": { "model": "fire_u2_main" }, - "alt=false,east=false,flip=true,north=false,south=true,upper=2,west=false": { "model": "fire_nu2_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=false,south=false,upper=2,west=true": { "model": "fire_nu2_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=2,west=false": { "model": "fire_nu2_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=2,west=false": { "model": "fire_nu2_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=2,west=false": { "model": "fire_neu2_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=2,west=false": { "model": "fire_neu2_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=false,south=true,upper=2,west=true": { "model": "fire_neu2_flip_main", "y": 180 }, - "alt=false,east=false,flip=true,north=true,south=false,upper=2,west=true": { "model": "fire_neu2_flip_main", "y": 270 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=2,west=false": { "model": "fire_nsu2_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=false,upper=2,west=true": { "model": "fire_nsu2_flip_main", "y": 90 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=2,west=false": { "model": "fire_nseu2_flip_main" }, - "alt=false,east=true,flip=true,north=false,south=true,upper=2,west=true": { "model": "fire_nseu2_flip_main", "y": 90 }, - "alt=false,east=false,flip=true,north=true,south=true,upper=2,west=true": { "model": "fire_nseu2_flip_main", "y": 180 }, - "alt=false,east=true,flip=true,north=true,south=false,upper=2,west=true": { "model": "fire_nseu2_flip_main", "y": 270 }, - "alt=false,east=true,flip=true,north=true,south=true,upper=2,west=true": { "model": "fire_nsewu2_flip_main" }, - "alt=true,east=false,flip=true,north=false,south=false,upper=0,west=false": { "model": "fire_floor_main" }, - "alt=true,east=false,flip=true,north=false,south=true,upper=0,west=false": { "model": "fire_n_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=false,south=false,upper=0,west=true": { "model": "fire_n_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=0,west=false": { "model": "fire_n_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=0,west=false": { "model": "fire_n_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=0,west=false": { "model": "fire_ne_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=0,west=false": { "model": "fire_ne_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=false,south=true,upper=0,west=true": { "model": "fire_ne_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=0,west=true": { "model": "fire_ne_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=0,west=false": { "model": "fire_ns_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=0,west=true": { "model": "fire_ns_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=0,west=false": { "model": "fire_nse_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=0,west=true": { "model": "fire_nse_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=0,west=true": { "model": "fire_nse_alt_flip", "y": 180 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=0,west=true": { "model": "fire_nse_alt_flip", "y": 270 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=0,west=true": { "model": "fire_nsew_alt_flip" }, - "alt=true,east=false,flip=true,north=false,south=false,upper=1,west=false": { "model": "fire_u1_main" }, - "alt=true,east=false,flip=true,north=false,south=true,upper=1,west=false": { "model": "fire_nu1_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=false,south=false,upper=1,west=true": { "model": "fire_nu1_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=1,west=false": { "model": "fire_nu1_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=1,west=false": { "model": "fire_nu1_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=1,west=false": { "model": "fire_neu1_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=1,west=false": { "model": "fire_neu1_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=false,south=true,upper=1,west=true": { "model": "fire_neu1_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=1,west=true": { "model": "fire_neu1_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=1,west=false": { "model": "fire_nsu1_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=1,west=true": { "model": "fire_nsu1_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=1,west=false": { "model": "fire_nseu1_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=1,west=true": { "model": "fire_nseu1_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=1,west=true": { "model": "fire_nseu1_alt_flip", "y": 180 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=1,west=true": { "model": "fire_nseu1_alt_flip", "y": 270 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=1,west=true": { "model": "fire_nsewu1_alt_flip" }, - "alt=true,east=false,flip=true,north=false,south=false,upper=2,west=false": { "model": "fire_u2_main" }, - "alt=true,east=false,flip=true,north=false,south=true,upper=2,west=false": { "model": "fire_nu2_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=false,south=false,upper=2,west=true": { "model": "fire_nu2_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=2,west=false": { "model": "fire_nu2_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=2,west=false": { "model": "fire_nu2_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=2,west=false": { "model": "fire_neu2_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=2,west=false": { "model": "fire_neu2_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=false,south=true,upper=2,west=true": { "model": "fire_neu2_alt_flip", "y": 180 }, - "alt=true,east=false,flip=true,north=true,south=false,upper=2,west=true": { "model": "fire_neu2_alt_flip", "y": 270 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=2,west=false": { "model": "fire_nsu2_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=false,upper=2,west=true": { "model": "fire_nsu2_alt_flip", "y": 90 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=2,west=false": { "model": "fire_nseu2_alt_flip" }, - "alt=true,east=true,flip=true,north=false,south=true,upper=2,west=true": { "model": "fire_nseu2_alt_flip", "y": 90 }, - "alt=true,east=false,flip=true,north=true,south=true,upper=2,west=true": { "model": "fire_nseu2_alt_flip", "y": 180 }, - "alt=true,east=true,flip=true,north=true,south=false,upper=2,west=true": { "model": "fire_nseu2_alt_flip", "y": 270 }, - "alt=true,east=true,flip=true,north=true,south=true,upper=2,west=true": { "model": "fire_nsewu2_alt_flip" } - } -} +{ + "variants": { + "alt=false,east=false,flip=false,north=false,south=false,upper=0,west=false": { + "model": "fire_floor_main" + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=0,west=false": { + "model": "fire_n_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=false,south=false,upper=0,west=true": { + "model": "fire_n_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=0,west=false": { + "model": "fire_n_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=0,west=false": { + "model": "fire_n_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=0,west=false": { + "model": "fire_ne_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=0,west=false": { + "model": "fire_ne_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=0,west=true": { + "model": "fire_ne_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=0,west=true": { + "model": "fire_ne_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=0,west=false": { + "model": "fire_ns_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=0,west=true": { + "model": "fire_ns_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=0,west=false": { + "model": "fire_nse_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=0,west=true": { + "model": "fire_nse_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=0,west=true": { + "model": "fire_nse_main", + "y": 180 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=0,west=true": { + "model": "fire_nse_main", + "y": 270 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=0,west=true": { + "model": "fire_nsew_main" + }, + "alt=false,east=false,flip=false,north=false,south=false,upper=1,west=false": { + "model": "fire_u1_main" + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=1,west=false": { + "model": "fire_nu1_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=false,south=false,upper=1,west=true": { + "model": "fire_nu1_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=1,west=false": { + "model": "fire_nu1_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=1,west=false": { + "model": "fire_nu1_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=1,west=false": { + "model": "fire_neu1_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=1,west=false": { + "model": "fire_neu1_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=1,west=true": { + "model": "fire_neu1_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=1,west=true": { + "model": "fire_neu1_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=1,west=false": { + "model": "fire_nsu1_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=1,west=true": { + "model": "fire_nsu1_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=1,west=false": { + "model": "fire_nseu1_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=1,west=true": { + "model": "fire_nseu1_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=1,west=true": { + "model": "fire_nseu1_main", + "y": 180 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=1,west=true": { + "model": "fire_nseu1_main", + "y": 270 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=1,west=true": { + "model": "fire_nsewu1_main" + }, + "alt=false,east=false,flip=false,north=false,south=false,upper=2,west=false": { + "model": "fire_u2_main" + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=2,west=false": { + "model": "fire_nu2_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=false,south=false,upper=2,west=true": { + "model": "fire_nu2_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=2,west=false": { + "model": "fire_nu2_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=2,west=false": { + "model": "fire_nu2_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=2,west=false": { + "model": "fire_neu2_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=2,west=false": { + "model": "fire_neu2_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=false,south=true,upper=2,west=true": { + "model": "fire_neu2_main", + "y": 180 + }, + "alt=false,east=false,flip=false,north=true,south=false,upper=2,west=true": { + "model": "fire_neu2_main", + "y": 270 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=2,west=false": { + "model": "fire_nsu2_main" + }, + "alt=false,east=true,flip=false,north=false,south=false,upper=2,west=true": { + "model": "fire_nsu2_main", + "y": 90 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=2,west=false": { + "model": "fire_nseu2_main" + }, + "alt=false,east=true,flip=false,north=false,south=true,upper=2,west=true": { + "model": "fire_nseu2_main", + "y": 90 + }, + "alt=false,east=false,flip=false,north=true,south=true,upper=2,west=true": { + "model": "fire_nseu2_main", + "y": 180 + }, + "alt=false,east=true,flip=false,north=true,south=false,upper=2,west=true": { + "model": "fire_nseu2_main", + "y": 270 + }, + "alt=false,east=true,flip=false,north=true,south=true,upper=2,west=true": { + "model": "fire_nsewu2_main" + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=0,west=false": { + "model": "fire_floor_main" + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=0,west=false": { + "model": "fire_n_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=0,west=true": { + "model": "fire_n_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=0,west=false": { + "model": "fire_n_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=0,west=false": { + "model": "fire_n_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=0,west=false": { + "model": "fire_ne_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=0,west=false": { + "model": "fire_ne_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=0,west=true": { + "model": "fire_ne_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=0,west=true": { + "model": "fire_ne_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=0,west=false": { + "model": "fire_ns_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=0,west=true": { + "model": "fire_ns_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=0,west=false": { + "model": "fire_nse_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=0,west=true": { + "model": "fire_nse_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=0,west=true": { + "model": "fire_nse_alt", + "y": 180 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=0,west=true": { + "model": "fire_nse_alt", + "y": 270 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=0,west=true": { + "model": "fire_nsew_alt" + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=1,west=false": { + "model": "fire_u1_main" + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=1,west=false": { + "model": "fire_nu1_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=1,west=true": { + "model": "fire_nu1_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=1,west=false": { + "model": "fire_nu1_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=1,west=false": { + "model": "fire_nu1_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=1,west=false": { + "model": "fire_neu1_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=1,west=false": { + "model": "fire_neu1_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=1,west=true": { + "model": "fire_neu1_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=1,west=true": { + "model": "fire_neu1_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=1,west=false": { + "model": "fire_nsu1_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=1,west=true": { + "model": "fire_nsu1_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=1,west=false": { + "model": "fire_nseu1_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=1,west=true": { + "model": "fire_nseu1_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=1,west=true": { + "model": "fire_nseu1_alt", + "y": 180 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=1,west=true": { + "model": "fire_nseu1_alt", + "y": 270 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=1,west=true": { + "model": "fire_nsewu1_alt" + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=2,west=false": { + "model": "fire_u2_main" + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=2,west=false": { + "model": "fire_nu2_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=false,south=false,upper=2,west=true": { + "model": "fire_nu2_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=2,west=false": { + "model": "fire_nu2_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=2,west=false": { + "model": "fire_nu2_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=2,west=false": { + "model": "fire_neu2_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=2,west=false": { + "model": "fire_neu2_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=false,south=true,upper=2,west=true": { + "model": "fire_neu2_alt", + "y": 180 + }, + "alt=true,east=false,flip=false,north=true,south=false,upper=2,west=true": { + "model": "fire_neu2_alt", + "y": 270 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=2,west=false": { + "model": "fire_nsu2_alt" + }, + "alt=true,east=true,flip=false,north=false,south=false,upper=2,west=true": { + "model": "fire_nsu2_alt", + "y": 90 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=2,west=false": { + "model": "fire_nseu2_alt" + }, + "alt=true,east=true,flip=false,north=false,south=true,upper=2,west=true": { + "model": "fire_nseu2_alt", + "y": 90 + }, + "alt=true,east=false,flip=false,north=true,south=true,upper=2,west=true": { + "model": "fire_nseu2_alt", + "y": 180 + }, + "alt=true,east=true,flip=false,north=true,south=false,upper=2,west=true": { + "model": "fire_nseu2_alt", + "y": 270 + }, + "alt=true,east=true,flip=false,north=true,south=true,upper=2,west=true": { + "model": "fire_nsewu2_alt" + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=0,west=false": { + "model": "fire_floor_main" + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=0,west=false": { + "model": "fire_n_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=0,west=true": { + "model": "fire_n_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=0,west=false": { + "model": "fire_n_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=0,west=false": { + "model": "fire_n_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=0,west=false": { + "model": "fire_ne_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=0,west=false": { + "model": "fire_ne_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=0,west=true": { + "model": "fire_ne_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=0,west=true": { + "model": "fire_ne_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=0,west=false": { + "model": "fire_ns_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=0,west=true": { + "model": "fire_ns_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=0,west=false": { + "model": "fire_nse_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=0,west=true": { + "model": "fire_nse_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=0,west=true": { + "model": "fire_nse_flip_main", + "y": 180 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=0,west=true": { + "model": "fire_nse_flip_main", + "y": 270 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=0,west=true": { + "model": "fire_nsew_flip_main" + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=1,west=false": { + "model": "fire_u1_main" + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=1,west=false": { + "model": "fire_nu1_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=1,west=true": { + "model": "fire_nu1_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=1,west=false": { + "model": "fire_nu1_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=1,west=false": { + "model": "fire_nu1_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=1,west=false": { + "model": "fire_neu1_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=1,west=false": { + "model": "fire_neu1_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=1,west=true": { + "model": "fire_neu1_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=1,west=true": { + "model": "fire_neu1_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=1,west=false": { + "model": "fire_nsu1_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=1,west=true": { + "model": "fire_nsu1_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=1,west=false": { + "model": "fire_nseu1_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=1,west=true": { + "model": "fire_nseu1_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=1,west=true": { + "model": "fire_nseu1_flip_main", + "y": 180 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=1,west=true": { + "model": "fire_nseu1_flip_main", + "y": 270 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=1,west=true": { + "model": "fire_nsewu1_flip_main" + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=2,west=false": { + "model": "fire_u2_main" + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=2,west=false": { + "model": "fire_nu2_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=false,south=false,upper=2,west=true": { + "model": "fire_nu2_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=2,west=false": { + "model": "fire_nu2_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=2,west=false": { + "model": "fire_nu2_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=2,west=false": { + "model": "fire_neu2_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=2,west=false": { + "model": "fire_neu2_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=false,south=true,upper=2,west=true": { + "model": "fire_neu2_flip_main", + "y": 180 + }, + "alt=false,east=false,flip=true,north=true,south=false,upper=2,west=true": { + "model": "fire_neu2_flip_main", + "y": 270 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=2,west=false": { + "model": "fire_nsu2_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=false,upper=2,west=true": { + "model": "fire_nsu2_flip_main", + "y": 90 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=2,west=false": { + "model": "fire_nseu2_flip_main" + }, + "alt=false,east=true,flip=true,north=false,south=true,upper=2,west=true": { + "model": "fire_nseu2_flip_main", + "y": 90 + }, + "alt=false,east=false,flip=true,north=true,south=true,upper=2,west=true": { + "model": "fire_nseu2_flip_main", + "y": 180 + }, + "alt=false,east=true,flip=true,north=true,south=false,upper=2,west=true": { + "model": "fire_nseu2_flip_main", + "y": 270 + }, + "alt=false,east=true,flip=true,north=true,south=true,upper=2,west=true": { + "model": "fire_nsewu2_flip_main" + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=0,west=false": { + "model": "fire_floor_main" + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=0,west=false": { + "model": "fire_n_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=0,west=true": { + "model": "fire_n_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=0,west=false": { + "model": "fire_n_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=0,west=false": { + "model": "fire_n_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=0,west=false": { + "model": "fire_ne_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=0,west=false": { + "model": "fire_ne_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=0,west=true": { + "model": "fire_ne_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=0,west=true": { + "model": "fire_ne_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=0,west=false": { + "model": "fire_ns_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=0,west=true": { + "model": "fire_ns_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=0,west=false": { + "model": "fire_nse_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=0,west=true": { + "model": "fire_nse_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=0,west=true": { + "model": "fire_nse_alt_flip", + "y": 180 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=0,west=true": { + "model": "fire_nse_alt_flip", + "y": 270 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=0,west=true": { + "model": "fire_nsew_alt_flip" + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=1,west=false": { + "model": "fire_u1_main" + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=1,west=false": { + "model": "fire_nu1_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=1,west=true": { + "model": "fire_nu1_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=1,west=false": { + "model": "fire_nu1_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=1,west=false": { + "model": "fire_nu1_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=1,west=false": { + "model": "fire_neu1_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=1,west=false": { + "model": "fire_neu1_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=1,west=true": { + "model": "fire_neu1_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=1,west=true": { + "model": "fire_neu1_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=1,west=false": { + "model": "fire_nsu1_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=1,west=true": { + "model": "fire_nsu1_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=1,west=false": { + "model": "fire_nseu1_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=1,west=true": { + "model": "fire_nseu1_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=1,west=true": { + "model": "fire_nseu1_alt_flip", + "y": 180 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=1,west=true": { + "model": "fire_nseu1_alt_flip", + "y": 270 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=1,west=true": { + "model": "fire_nsewu1_alt_flip" + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=2,west=false": { + "model": "fire_u2_main" + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=2,west=false": { + "model": "fire_nu2_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=false,south=false,upper=2,west=true": { + "model": "fire_nu2_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=2,west=false": { + "model": "fire_nu2_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=2,west=false": { + "model": "fire_nu2_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=2,west=false": { + "model": "fire_neu2_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=2,west=false": { + "model": "fire_neu2_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=false,south=true,upper=2,west=true": { + "model": "fire_neu2_alt_flip", + "y": 180 + }, + "alt=true,east=false,flip=true,north=true,south=false,upper=2,west=true": { + "model": "fire_neu2_alt_flip", + "y": 270 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=2,west=false": { + "model": "fire_nsu2_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=false,upper=2,west=true": { + "model": "fire_nsu2_alt_flip", + "y": 90 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=2,west=false": { + "model": "fire_nseu2_alt_flip" + }, + "alt=true,east=true,flip=true,north=false,south=true,upper=2,west=true": { + "model": "fire_nseu2_alt_flip", + "y": 90 + }, + "alt=true,east=false,flip=true,north=true,south=true,upper=2,west=true": { + "model": "fire_nseu2_alt_flip", + "y": 180 + }, + "alt=true,east=true,flip=true,north=true,south=false,upper=2,west=true": { + "model": "fire_nseu2_alt_flip", + "y": 270 + }, + "alt=true,east=true,flip=true,north=true,south=true,upper=2,west=true": { + "model": "fire_nsewu2_alt_flip" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/flower_pot.json b/desktopRuntime/resources/assets/minecraft/blockstates/flower_pot.json index b4ae9fe3..80339557 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/flower_pot.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/flower_pot.json @@ -1,26 +1,26 @@ -{ - "variants": { - "contents=empty": { "model": "flower_pot" }, - "contents=rose": { "model": "flower_pot_rose" }, - "contents=blue_orchid": { "model": "flower_pot_orchid" }, - "contents=allium": { "model": "flower_pot_allium" }, - "contents=houstonia": { "model": "flower_pot_houstonia" }, - "contents=red_tulip": { "model": "flower_pot_tulip_red" }, - "contents=orange_tulip": { "model": "flower_pot_tulip_orange" }, - "contents=white_tulip": { "model": "flower_pot_tulip_white" }, - "contents=pink_tulip": { "model": "flower_pot_tulip_pink" }, - "contents=oxeye_daisy": { "model": "flower_pot_daisy" }, - "contents=dandelion": { "model": "flower_pot_dandelion" }, - "contents=oak_sapling": { "model": "flower_pot_oak" }, - "contents=spruce_sapling": { "model": "flower_pot_spruce" }, - "contents=birch_sapling": { "model": "flower_pot_birch" }, - "contents=jungle_sapling": { "model": "flower_pot_jungle" }, - "contents=acacia_sapling": { "model": "flower_pot_acacia" }, - "contents=dark_oak_sapling": { "model": "flower_pot_dark_oak" }, - "contents=mushroom_red": { "model": "flower_pot_mushroom_red" }, - "contents=mushroom_brown": { "model": "flower_pot_mushroom_brown" }, - "contents=dead_bush": { "model": "flower_pot_dead_bush" }, - "contents=fern": { "model": "flower_pot_fern" }, - "contents=cactus": { "model": "flower_pot_cactus" } - } -} +{ + "variants": { + "contents=empty": { "model": "flower_pot" }, + "contents=rose": { "model": "flower_pot_rose" }, + "contents=blue_orchid": { "model": "flower_pot_orchid" }, + "contents=allium": { "model": "flower_pot_allium" }, + "contents=houstonia": { "model": "flower_pot_houstonia" }, + "contents=red_tulip": { "model": "flower_pot_tulip_red" }, + "contents=orange_tulip": { "model": "flower_pot_tulip_orange" }, + "contents=white_tulip": { "model": "flower_pot_tulip_white" }, + "contents=pink_tulip": { "model": "flower_pot_tulip_pink" }, + "contents=oxeye_daisy": { "model": "flower_pot_daisy" }, + "contents=dandelion": { "model": "flower_pot_dandelion" }, + "contents=oak_sapling": { "model": "flower_pot_oak" }, + "contents=spruce_sapling": { "model": "flower_pot_spruce" }, + "contents=birch_sapling": { "model": "flower_pot_birch" }, + "contents=jungle_sapling": { "model": "flower_pot_jungle" }, + "contents=acacia_sapling": { "model": "flower_pot_acacia" }, + "contents=dark_oak_sapling": { "model": "flower_pot_dark_oak" }, + "contents=mushroom_red": { "model": "flower_pot_mushroom_red" }, + "contents=mushroom_brown": { "model": "flower_pot_mushroom_brown" }, + "contents=dead_bush": { "model": "flower_pot_dead_bush" }, + "contents=fern": { "model": "flower_pot_fern" }, + "contents=cactus": { "model": "flower_pot_cactus" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json b/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json index 7928038e..d8550875 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "furnace" }, - "facing=south": { "model": "furnace", "y": 180 }, - "facing=west": { "model": "furnace", "y": 270 }, - "facing=east": { "model": "furnace", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "furnace" }, + "facing=south": { "model": "furnace", "y": 180 }, + "facing=west": { "model": "furnace", "y": 270 }, + "facing=east": { "model": "furnace", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/glass.json index 78ebe664..57df1427 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass" } - } -} +{ + "variants": { + "normal": { "model": "glass" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json index 53cf2f83..8496d881 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json @@ -1,20 +1,52 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "glass_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "glass_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "glass_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "glass_pane_n", "y": 180 }, - "east=false,north=false,south=false,west=true": { "model": "glass_pane_n", "y": 270 }, - "east=true,north=true,south=false,west=false": { "model": "glass_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "glass_pane_ne", "y": 90 }, - "east=false,north=false,south=true,west=true": { "model": "glass_pane_ne", "y": 180 }, - "east=false,north=true,south=false,west=true": { "model": "glass_pane_ne", "y": 270 }, - "east=false,north=true,south=true,west=false": { "model": "glass_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "glass_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "glass_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "glass_pane_nse", "y": 90 }, - "east=false,north=true,south=true,west=true": { "model": "glass_pane_nse", "y": 180 }, - "east=true,north=true,south=false,west=true": { "model": "glass_pane_nse", "y": 270 }, - "east=true,north=true,south=true,west=true": { "model": "glass_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "glass_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "glass_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "glass_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "glass_pane_n", + "y": 180 + }, + "east=false,north=false,south=false,west=true": { + "model": "glass_pane_n", + "y": 270 + }, + "east=true,north=true,south=false,west=false": { "model": "glass_pane_ne" }, + "east=true,north=false,south=true,west=false": { + "model": "glass_pane_ne", + "y": 90 + }, + "east=false,north=false,south=true,west=true": { + "model": "glass_pane_ne", + "y": 180 + }, + "east=false,north=true,south=false,west=true": { + "model": "glass_pane_ne", + "y": 270 + }, + "east=false,north=true,south=true,west=false": { "model": "glass_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "glass_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "glass_pane_nse" }, + "east=true,north=false,south=true,west=true": { + "model": "glass_pane_nse", + "y": 90 + }, + "east=false,north=true,south=true,west=true": { + "model": "glass_pane_nse", + "y": 180 + }, + "east=true,north=true,south=false,west=true": { + "model": "glass_pane_nse", + "y": 270 + }, + "east=true,north=true,south=true,west=true": { "model": "glass_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/glowstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/glowstone.json index b10362d9..373befe6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/glowstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glowstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glowstone" } - } -} +{ + "variants": { + "normal": { "model": "glowstone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json index 9666d9bb..8979082b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "gold_block" } - } -} +{ + "variants": { + "normal": { "model": "gold_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gold_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/gold_ore.json index 9dfa778e..b7e1effd 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gold_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gold_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "gold_ore" } - } -} +{ + "variants": { + "normal": { "model": "gold_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/golden_rail.json b/desktopRuntime/resources/assets/minecraft/blockstates/golden_rail.json index 6938c5ea..8805d030 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/golden_rail.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/golden_rail.json @@ -1,16 +1,35 @@ -{ - "variants": { - "powered=false,shape=north_south": { "model": "golden_rail_flat" }, - "powered=false,shape=east_west": { "model": "golden_rail_flat", "y": 90 }, - "powered=false,shape=ascending_east": { "model": "golden_rail_raised_ne", "y": 90 }, - "powered=false,shape=ascending_west": { "model": "golden_rail_raised_sw", "y": 90 }, - "powered=false,shape=ascending_north": { "model": "golden_rail_raised_ne" }, - "powered=false,shape=ascending_south": { "model": "golden_rail_raised_sw" }, - "powered=true,shape=north_south": { "model": "golden_rail_active_flat" }, - "powered=true,shape=east_west": { "model": "golden_rail_active_flat", "y": 90 }, - "powered=true,shape=ascending_east": { "model": "golden_rail_active_raised_ne", "y": 90 }, - "powered=true,shape=ascending_west": { "model": "golden_rail_active_raised_sw", "y": 90 }, - "powered=true,shape=ascending_north": { "model": "golden_rail_active_raised_ne" }, - "powered=true,shape=ascending_south": { "model": "golden_rail_active_raised_sw" } - } -} +{ + "variants": { + "powered=false,shape=north_south": { "model": "golden_rail_flat" }, + "powered=false,shape=east_west": { "model": "golden_rail_flat", "y": 90 }, + "powered=false,shape=ascending_east": { + "model": "golden_rail_raised_ne", + "y": 90 + }, + "powered=false,shape=ascending_west": { + "model": "golden_rail_raised_sw", + "y": 90 + }, + "powered=false,shape=ascending_north": { "model": "golden_rail_raised_ne" }, + "powered=false,shape=ascending_south": { "model": "golden_rail_raised_sw" }, + "powered=true,shape=north_south": { "model": "golden_rail_active_flat" }, + "powered=true,shape=east_west": { + "model": "golden_rail_active_flat", + "y": 90 + }, + "powered=true,shape=ascending_east": { + "model": "golden_rail_active_raised_ne", + "y": 90 + }, + "powered=true,shape=ascending_west": { + "model": "golden_rail_active_raised_sw", + "y": 90 + }, + "powered=true,shape=ascending_north": { + "model": "golden_rail_active_raised_ne" + }, + "powered=true,shape=ascending_south": { + "model": "golden_rail_active_raised_sw" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/granite.json b/desktopRuntime/resources/assets/minecraft/blockstates/granite.json index 8742085d..fd5758cc 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/granite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/granite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "granite" } - } -} +{ + "variants": { + "normal": { "model": "granite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/grass.json b/desktopRuntime/resources/assets/minecraft/blockstates/grass.json index e7df7c16..80c170b4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/grass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/grass.json @@ -1,11 +1,11 @@ -{ - "variants": { - "snowy=false": [ - { "model": "grass_normal" }, - { "model": "grass_normal", "y": 90 }, - { "model": "grass_normal", "y": 180 }, - { "model": "grass_normal", "y": 270 } - ], - "snowy=true": { "model": "grass_snowed" } - } -} +{ + "variants": { + "snowy=false": [ + { "model": "grass_normal" }, + { "model": "grass_normal", "y": 90 }, + { "model": "grass_normal", "y": 180 }, + { "model": "grass_normal", "y": 270 } + ], + "snowy=true": { "model": "grass_snowed" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json b/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json index fb699c5b..8dd21e2f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "gravel" } - } -} +{ + "variants": { + "normal": { "model": "gravel" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json index fbae593e..b8f5830b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_gray" } - } -} +{ + "variants": { + "normal": { "model": "carpet_gray" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass.json index b423b89b..6d39640b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_gray" } - } -} +{ + "variants": { + "normal": { "model": "glass_gray" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass_pane.json index c42141ea..1de1b26f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "gray_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "gray_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "gray_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "gray_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "gray_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "gray_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "gray_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "gray_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "gray_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "gray_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "gray_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "gray_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "gray_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "gray_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "gray_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "gray_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "gray_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "gray_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "gray_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "gray_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "gray_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "gray_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "gray_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "gray_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "gray_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "gray_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "gray_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "gray_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "gray_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "gray_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "gray_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "gray_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_hardened_clay.json index 6d6aabd9..594eed42 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_gray" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_gray" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_wool.json index 84da5a10..f4517dd1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/gray_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "gray_wool" } - } -} +{ + "variants": { + "normal": { "model": "gray_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/green_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/green_carpet.json index a38b9ef4..a727fec1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/green_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_green" } - } -} +{ + "variants": { + "normal": { "model": "carpet_green" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass.json index c61028b5..aa539f48 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_green" } - } -} +{ + "variants": { + "normal": { "model": "glass_green" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass_pane.json index 4e1b49b1..631c73b9 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "green_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "green_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "green_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "green_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "green_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "green_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "green_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "green_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "green_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "green_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "green_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "green_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "green_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "green_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "green_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "green_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "green_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "green_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "green_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "green_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "green_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "green_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "green_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "green_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "green_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "green_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "green_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "green_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "green_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "green_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "green_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "green_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_hardened_clay.json index de2449da..652efb34 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_green" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_green" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/green_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/green_wool.json index fdbbdd78..7fea78fa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/green_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "green_wool" } - } -} +{ + "variants": { + "normal": { "model": "green_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/hardened_clay.json index 52a2e8a6..8ead3864 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/hay_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/hay_block.json index e679a9ca..46a42125 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/hay_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hay_block.json @@ -1,7 +1,7 @@ -{ - "variants": { - "axis=y": { "model": "hay" }, - "axis=z": { "model": "hay_side" }, - "axis=x": { "model": "hay_side", "y": 90 } - } -} +{ + "variants": { + "axis=y": { "model": "hay" }, + "axis=z": { "model": "hay_side" }, + "axis=x": { "model": "hay_side", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json index 4dbf98eb..f322d97f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json @@ -1,20 +1,20 @@ -{ - "variants": { - "power=0": { "model": "heavy_pressure_plate_up" }, - "power=1": { "model": "heavy_pressure_plate_down" }, - "power=2": { "model": "heavy_pressure_plate_down" }, - "power=3": { "model": "heavy_pressure_plate_down" }, - "power=4": { "model": "heavy_pressure_plate_down" }, - "power=5": { "model": "heavy_pressure_plate_down" }, - "power=6": { "model": "heavy_pressure_plate_down" }, - "power=7": { "model": "heavy_pressure_plate_down" }, - "power=8": { "model": "heavy_pressure_plate_down" }, - "power=9": { "model": "heavy_pressure_plate_down" }, - "power=10": { "model": "heavy_pressure_plate_down" }, - "power=11": { "model": "heavy_pressure_plate_down" }, - "power=12": { "model": "heavy_pressure_plate_down" }, - "power=13": { "model": "heavy_pressure_plate_down" }, - "power=14": { "model": "heavy_pressure_plate_down" }, - "power=15": { "model": "heavy_pressure_plate_down" } - } -} +{ + "variants": { + "power=0": { "model": "heavy_pressure_plate_up" }, + "power=1": { "model": "heavy_pressure_plate_down" }, + "power=2": { "model": "heavy_pressure_plate_down" }, + "power=3": { "model": "heavy_pressure_plate_down" }, + "power=4": { "model": "heavy_pressure_plate_down" }, + "power=5": { "model": "heavy_pressure_plate_down" }, + "power=6": { "model": "heavy_pressure_plate_down" }, + "power=7": { "model": "heavy_pressure_plate_down" }, + "power=8": { "model": "heavy_pressure_plate_down" }, + "power=9": { "model": "heavy_pressure_plate_down" }, + "power=10": { "model": "heavy_pressure_plate_down" }, + "power=11": { "model": "heavy_pressure_plate_down" }, + "power=12": { "model": "heavy_pressure_plate_down" }, + "power=13": { "model": "heavy_pressure_plate_down" }, + "power=14": { "model": "heavy_pressure_plate_down" }, + "power=15": { "model": "heavy_pressure_plate_down" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json b/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json index 60815998..8bff23af 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json @@ -1,9 +1,9 @@ -{ - "variants": { - "facing=down": { "model": "hopper_down" }, - "facing=north": { "model": "hopper_side" }, - "facing=south": { "model": "hopper_side", "y": 180 }, - "facing=west": { "model": "hopper_side", "y": 270 }, - "facing=east": { "model": "hopper_side", "y": 90 } - } -} +{ + "variants": { + "facing=down": { "model": "hopper_down" }, + "facing=north": { "model": "hopper_side" }, + "facing=south": { "model": "hopper_side", "y": 180 }, + "facing=west": { "model": "hopper_side", "y": 270 }, + "facing=east": { "model": "hopper_side", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json b/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json index 004d930c..706aeb7a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "houstonia" } - } -} +{ + "variants": { + "normal": { "model": "houstonia" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/ice.json b/desktopRuntime/resources/assets/minecraft/blockstates/ice.json index d72cb9b9..a0ba32b0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/ice.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/ice.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "ice" } - } -} +{ + "variants": { + "normal": { "model": "ice" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json index ff883856..271315ad 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json @@ -1,20 +1,50 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "bars_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "bars_n" }, - "east=true,north=false,south=false,west=false": { "model": "bars_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "bars_n", "y": 180 }, - "east=false,north=false,south=false,west=true": { "model": "bars_n", "y": 270 }, - "east=true,north=true,south=false,west=false": { "model": "bars_ne" }, - "east=true,north=false,south=true,west=false": { "model": "bars_ne", "y": 90 }, - "east=false,north=false,south=true,west=true": { "model": "bars_ne", "y": 180 }, - "east=false,north=true,south=false,west=true": { "model": "bars_ne", "y": 270 }, - "east=false,north=true,south=true,west=false": { "model": "bars_ns" }, - "east=true,north=false,south=false,west=true": { "model": "bars_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "bars_nse" }, - "east=true,north=false,south=true,west=true": { "model": "bars_nse", "y": 90 }, - "east=false,north=true,south=true,west=true": { "model": "bars_nse", "y": 180 }, - "east=true,north=true,south=false,west=true": { "model": "bars_nse", "y": 270 }, - "east=true,north=true,south=true,west=true": { "model": "bars_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { "model": "bars_nsew" }, + "east=false,north=true,south=false,west=false": { "model": "bars_n" }, + "east=true,north=false,south=false,west=false": { + "model": "bars_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "bars_n", + "y": 180 + }, + "east=false,north=false,south=false,west=true": { + "model": "bars_n", + "y": 270 + }, + "east=true,north=true,south=false,west=false": { "model": "bars_ne" }, + "east=true,north=false,south=true,west=false": { + "model": "bars_ne", + "y": 90 + }, + "east=false,north=false,south=true,west=true": { + "model": "bars_ne", + "y": 180 + }, + "east=false,north=true,south=false,west=true": { + "model": "bars_ne", + "y": 270 + }, + "east=false,north=true,south=true,west=false": { "model": "bars_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "bars_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "bars_nse" }, + "east=true,north=false,south=true,west=true": { + "model": "bars_nse", + "y": 90 + }, + "east=false,north=true,south=true,west=true": { + "model": "bars_nse", + "y": 180 + }, + "east=true,north=true,south=false,west=true": { + "model": "bars_nse", + "y": 270 + }, + "east=true,north=true,south=true,west=true": { "model": "bars_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_block.json index ac749645..d661c0a6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/iron_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "iron_block" } - } -} +{ + "variants": { + "normal": { "model": "iron_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_door.json index 6a2696a1..b9df366d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/iron_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "iron_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "iron_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "iron_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "iron_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "iron_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "iron_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "iron_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "iron_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "iron_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "iron_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "iron_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "iron_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "iron_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "iron_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "iron_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "iron_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "iron_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "iron_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "iron_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "iron_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "iron_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "iron_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "iron_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "iron_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "iron_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "iron_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "iron_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "iron_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "iron_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "iron_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "iron_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "iron_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "iron_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "iron_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "iron_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "iron_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "iron_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "iron_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "iron_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "iron_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "iron_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "iron_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "iron_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "iron_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "iron_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "iron_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "iron_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "iron_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "iron_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "iron_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "iron_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "iron_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "iron_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "iron_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "iron_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "iron_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "iron_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "iron_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "iron_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "iron_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "iron_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "iron_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "iron_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "iron_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_ore.json index e47d5cbc..3434b24e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/iron_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "iron_ore" } - } -} +{ + "variants": { + "normal": { "model": "iron_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_trapdoor.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_trapdoor.json index df3f75e7..f6550ffe 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/iron_trapdoor.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_trapdoor.json @@ -1,20 +1,38 @@ -{ - "variants": { - "facing=north,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, - "facing=south,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, - "facing=east,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, - "facing=west,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, - "facing=north,half=top,open=false": { "model": "iron_trapdoor_top" }, - "facing=south,half=top,open=false": { "model": "iron_trapdoor_top" }, - "facing=east,half=top,open=false": { "model": "iron_trapdoor_top" }, - "facing=west,half=top,open=false": { "model": "iron_trapdoor_top" }, - "facing=north,half=bottom,open=true": { "model": "iron_trapdoor_open" }, - "facing=south,half=bottom,open=true": { "model": "iron_trapdoor_open", "y": 180 }, - "facing=east,half=bottom,open=true": { "model": "iron_trapdoor_open", "y": 90 }, - "facing=west,half=bottom,open=true": { "model": "iron_trapdoor_open", "y": 270 }, - "facing=north,half=top,open=true": { "model": "iron_trapdoor_open" }, - "facing=south,half=top,open=true": { "model": "iron_trapdoor_open", "y": 180 }, - "facing=east,half=top,open=true": { "model": "iron_trapdoor_open", "y": 90 }, - "facing=west,half=top,open=true": { "model": "iron_trapdoor_open", "y": 270 } - } -} +{ + "variants": { + "facing=north,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, + "facing=south,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, + "facing=east,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, + "facing=west,half=bottom,open=false": { "model": "iron_trapdoor_bottom" }, + "facing=north,half=top,open=false": { "model": "iron_trapdoor_top" }, + "facing=south,half=top,open=false": { "model": "iron_trapdoor_top" }, + "facing=east,half=top,open=false": { "model": "iron_trapdoor_top" }, + "facing=west,half=top,open=false": { "model": "iron_trapdoor_top" }, + "facing=north,half=bottom,open=true": { "model": "iron_trapdoor_open" }, + "facing=south,half=bottom,open=true": { + "model": "iron_trapdoor_open", + "y": 180 + }, + "facing=east,half=bottom,open=true": { + "model": "iron_trapdoor_open", + "y": 90 + }, + "facing=west,half=bottom,open=true": { + "model": "iron_trapdoor_open", + "y": 270 + }, + "facing=north,half=top,open=true": { "model": "iron_trapdoor_open" }, + "facing=south,half=top,open=true": { + "model": "iron_trapdoor_open", + "y": 180 + }, + "facing=east,half=top,open=true": { + "model": "iron_trapdoor_open", + "y": 90 + }, + "facing=west,half=top,open=true": { + "model": "iron_trapdoor_open", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/item_frame.json b/desktopRuntime/resources/assets/minecraft/blockstates/item_frame.json index f88ae585..301a623a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/item_frame.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/item_frame.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "item_frame" }, - "map": { "model": "item_frame_map" } - } -} +{ + "variants": { + "normal": { "model": "item_frame" }, + "map": { "model": "item_frame_map" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jukebox.json b/desktopRuntime/resources/assets/minecraft/blockstates/jukebox.json index bf3cacc0..933a6c69 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jukebox.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jukebox.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "jukebox" } - } -} +{ + "variants": { + "normal": { "model": "jukebox" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json index 16478914..2c0eccf9 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "jungle_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "jungle_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "jungle_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "jungle_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "jungle_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "jungle_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "jungle_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "jungle_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "jungle_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "jungle_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "jungle_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "jungle_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "jungle_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "jungle_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "jungle_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "jungle_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "jungle_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "jungle_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "jungle_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "jungle_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "jungle_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "jungle_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "jungle_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "jungle_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "jungle_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "jungle_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "jungle_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "jungle_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "jungle_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "jungle_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "jungle_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "jungle_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "jungle_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "jungle_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "jungle_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "jungle_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "jungle_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "jungle_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "jungle_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "jungle_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "jungle_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "jungle_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "jungle_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "jungle_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "jungle_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "jungle_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "jungle_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "jungle_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "jungle_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "jungle_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "jungle_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "jungle_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "jungle_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "jungle_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "jungle_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "jungle_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "jungle_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "jungle_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "jungle_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "jungle_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "jungle_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "jungle_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "jungle_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "jungle_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_double_slab.json index 039b419b..e0e0a478 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "jungle_planks" } - } -} +{ + "variants": { + "normal": { "model": "jungle_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence.json index 4863e1d9..d3af55a6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "jungle_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "jungle_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "jungle_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "jungle_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "jungle_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "jungle_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "jungle_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "jungle_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "jungle_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "jungle_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "jungle_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "jungle_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "jungle_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "jungle_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "jungle_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "jungle_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "jungle_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "jungle_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "jungle_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "jungle_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "jungle_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "jungle_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "jungle_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "jungle_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "jungle_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "jungle_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "jungle_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "jungle_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "jungle_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "jungle_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "jungle_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "jungle_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence_gate.json index a830322d..36d26074 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence_gate.json @@ -1,20 +1,74 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "jungle_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "jungle_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "jungle_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "jungle_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "jungle_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "jungle_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "jungle_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "jungle_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "jungle_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "jungle_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "jungle_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "jungle_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "jungle_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "jungle_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "jungle_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "jungle_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "jungle_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "jungle_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "jungle_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "jungle_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "jungle_fence_gate_open" + }, + "facing=west,in_wall=false,open=true": { + "model": "jungle_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "jungle_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "jungle_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "jungle_wall_gate_closed" + }, + "facing=west,in_wall=true,open=false": { + "model": "jungle_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "jungle_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "jungle_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { "model": "jungle_wall_gate_open" }, + "facing=west,in_wall=true,open=true": { + "model": "jungle_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "jungle_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "jungle_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_leaves.json index a169915b..3ccd9743 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "jungle_leaves" } - } -} +{ + "variants": { + "normal": { "model": "jungle_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_log.json index ef9bf27b..59cb0e25 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "jungle_log" }, - "axis=z": { "model": "jungle_log_side" }, - "axis=x": { "model": "jungle_log_side", "y": 90 }, - "axis=none": { "model": "jungle_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "jungle_log" }, + "axis=z": { "model": "jungle_log_side" }, + "axis=x": { "model": "jungle_log_side", "y": 90 }, + "axis=none": { "model": "jungle_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json index 039b419b..e0e0a478 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "jungle_planks" } - } -} +{ + "variants": { + "normal": { "model": "jungle_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_sapling.json index eb9bf937..4d4c8807 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "jungle_sapling" }, - "stage=1": { "model": "jungle_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "jungle_sapling" }, + "stage=1": { "model": "jungle_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_slab.json index 6597e479..c316533a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_jungle" }, - "half=top": { "model": "upper_slab_jungle" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_jungle" }, + "half=top": { "model": "upper_slab_jungle" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_stairs.json index 907a9563..e91d97fc 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "jungle_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "jungle_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "jungle_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "jungle_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "jungle_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "jungle_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "jungle_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "jungle_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "jungle_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "jungle_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "jungle_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "jungle_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "jungle_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "jungle_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "jungle_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "jungle_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "jungle_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "jungle_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "jungle_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "jungle_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "jungle_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "jungle_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "jungle_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "jungle_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "jungle_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "jungle_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "jungle_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "jungle_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "jungle_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "jungle_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "jungle_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "jungle_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "jungle_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "jungle_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "jungle_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "jungle_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "jungle_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "jungle_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "jungle_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "jungle_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "jungle_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "jungle_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "jungle_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "jungle_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "jungle_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "jungle_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "jungle_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "jungle_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "jungle_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "jungle_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "jungle_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "jungle_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "jungle_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "jungle_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "jungle_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "jungle_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "jungle_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "jungle_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "jungle_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "jungle_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "jungle_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "jungle_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "jungle_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "jungle_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "jungle_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "jungle_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "jungle_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "jungle_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "jungle_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "jungle_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/ladder.json b/desktopRuntime/resources/assets/minecraft/blockstates/ladder.json index 046473a1..96740753 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/ladder.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/ladder.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "ladder" }, - "facing=east": { "model": "ladder", "y": 90 }, - "facing=south": { "model": "ladder", "y": 180 }, - "facing=west": { "model": "ladder", "y": 270 } - } -} +{ + "variants": { + "facing=north": { "model": "ladder" }, + "facing=east": { "model": "ladder", "y": 90 }, + "facing=south": { "model": "ladder", "y": 180 }, + "facing=west": { "model": "ladder", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json index 53010ddf..e8162060 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "lapis_block" } - } -} +{ + "variants": { + "normal": { "model": "lapis_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lapis_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_ore.json index a7191a8a..64393eac 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lapis_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "lapis_ore" } - } -} +{ + "variants": { + "normal": { "model": "lapis_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lever.json b/desktopRuntime/resources/assets/minecraft/blockstates/lever.json index 39072be9..8a4ccf8c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lever.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lever.json @@ -1,20 +1,20 @@ -{ - "variants": { - "facing=down_z,powered=false": { "model": "lever_off", "x": 180, "y": 180 }, - "facing=down_x,powered=false": { "model": "lever_off", "x": 180, "y": 90 }, - "facing=up_z,powered=false": { "model": "lever_off" }, - "facing=up_x,powered=false": { "model": "lever_off", "y": 270 }, - "facing=east,powered=false": { "model": "lever_off", "x": 90, "y": 90 }, - "facing=west,powered=false": { "model": "lever_off", "x": 90, "y": 270 }, - "facing=south,powered=false" : { "model": "lever_off", "x": 90, "y": 180 }, - "facing=north,powered=false" : { "model": "lever_off", "x": 90 }, - "facing=down_z,powered=true" : { "model": "lever", "x": 180, "y": 180 }, - "facing=down_x,powered=true" : { "model": "lever", "x": 180, "y": 90 }, - "facing=up_z,powered=true": { "model": "lever" }, - "facing=up_x,powered=true": { "model": "lever", "y": 270 }, - "facing=east,powered=true": { "model": "lever", "x": 90, "y": 90 }, - "facing=west,powered=true": { "model": "lever", "x": 90, "y": 270 }, - "facing=south,powered=true": { "model": "lever", "x": 90, "y": 180 }, - "facing=north,powered=true": { "model": "lever", "x": 90 } - } -} +{ + "variants": { + "facing=down_z,powered=false": { "model": "lever_off", "x": 180, "y": 180 }, + "facing=down_x,powered=false": { "model": "lever_off", "x": 180, "y": 90 }, + "facing=up_z,powered=false": { "model": "lever_off" }, + "facing=up_x,powered=false": { "model": "lever_off", "y": 270 }, + "facing=east,powered=false": { "model": "lever_off", "x": 90, "y": 90 }, + "facing=west,powered=false": { "model": "lever_off", "x": 90, "y": 270 }, + "facing=south,powered=false": { "model": "lever_off", "x": 90, "y": 180 }, + "facing=north,powered=false": { "model": "lever_off", "x": 90 }, + "facing=down_z,powered=true": { "model": "lever", "x": 180, "y": 180 }, + "facing=down_x,powered=true": { "model": "lever", "x": 180, "y": 90 }, + "facing=up_z,powered=true": { "model": "lever" }, + "facing=up_x,powered=true": { "model": "lever", "y": 270 }, + "facing=east,powered=true": { "model": "lever", "x": 90, "y": 90 }, + "facing=west,powered=true": { "model": "lever", "x": 90, "y": 270 }, + "facing=south,powered=true": { "model": "lever", "x": 90, "y": 180 }, + "facing=north,powered=true": { "model": "lever", "x": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json index 5d8cc766..17d12c77 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_light_blue" } - } -} +{ + "variants": { + "normal": { "model": "carpet_light_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass.json index 97466329..5b1e7b66 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_light_blue" } - } -} +{ + "variants": { + "normal": { "model": "glass_light_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass_pane.json index 13f11939..fdb4e15b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass_pane.json @@ -1,20 +1,55 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "light_blue_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "light_blue_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "light_blue_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "light_blue_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "light_blue_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "light_blue_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "light_blue_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "light_blue_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "light_blue_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "light_blue_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "light_blue_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "light_blue_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "light_blue_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "light_blue_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "light_blue_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "light_blue_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "light_blue_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "light_blue_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "light_blue_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "light_blue_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "light_blue_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "light_blue_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "light_blue_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "light_blue_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "light_blue_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "light_blue_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "light_blue_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "light_blue_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "light_blue_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "light_blue_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "light_blue_pane_new" + }, + "east=true,north=true,south=true,west=true": { + "model": "light_blue_pane_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_hardened_clay.json index 99325fac..48aca200 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_light_blue" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_light_blue" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_wool.json index 93ecabe4..2f636d9f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "light_blue_wool" } - } -} +{ + "variants": { + "normal": { "model": "light_blue_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_weighted_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_weighted_pressure_plate.json index 63fb2b08..cdf59c3e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/light_weighted_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_weighted_pressure_plate.json @@ -1,20 +1,20 @@ -{ - "variants": { - "power=0": { "model": "light_pressure_plate_up" }, - "power=1": { "model": "light_pressure_plate_down" }, - "power=2": { "model": "light_pressure_plate_down" }, - "power=3": { "model": "light_pressure_plate_down" }, - "power=4": { "model": "light_pressure_plate_down" }, - "power=5": { "model": "light_pressure_plate_down" }, - "power=6": { "model": "light_pressure_plate_down" }, - "power=7": { "model": "light_pressure_plate_down" }, - "power=8": { "model": "light_pressure_plate_down" }, - "power=9": { "model": "light_pressure_plate_down" }, - "power=10": { "model": "light_pressure_plate_down" }, - "power=11": { "model": "light_pressure_plate_down" }, - "power=12": { "model": "light_pressure_plate_down" }, - "power=13": { "model": "light_pressure_plate_down" }, - "power=14": { "model": "light_pressure_plate_down" }, - "power=15": { "model": "light_pressure_plate_down" } - } -} +{ + "variants": { + "power=0": { "model": "light_pressure_plate_up" }, + "power=1": { "model": "light_pressure_plate_down" }, + "power=2": { "model": "light_pressure_plate_down" }, + "power=3": { "model": "light_pressure_plate_down" }, + "power=4": { "model": "light_pressure_plate_down" }, + "power=5": { "model": "light_pressure_plate_down" }, + "power=6": { "model": "light_pressure_plate_down" }, + "power=7": { "model": "light_pressure_plate_down" }, + "power=8": { "model": "light_pressure_plate_down" }, + "power=9": { "model": "light_pressure_plate_down" }, + "power=10": { "model": "light_pressure_plate_down" }, + "power=11": { "model": "light_pressure_plate_down" }, + "power=12": { "model": "light_pressure_plate_down" }, + "power=13": { "model": "light_pressure_plate_down" }, + "power=14": { "model": "light_pressure_plate_down" }, + "power=15": { "model": "light_pressure_plate_down" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json index 8e4307bf..dd3bfb7d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_lime" } - } -} +{ + "variants": { + "normal": { "model": "carpet_lime" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass.json index 38ca94fd..827e353f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_lime" } - } -} +{ + "variants": { + "normal": { "model": "glass_lime" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass_pane.json index c276feaf..1816e95f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "lime_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "lime_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "lime_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "lime_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "lime_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "lime_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "lime_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "lime_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "lime_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "lime_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "lime_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "lime_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "lime_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "lime_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "lime_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "lime_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "lime_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "lime_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "lime_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "lime_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "lime_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "lime_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "lime_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "lime_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "lime_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "lime_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "lime_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "lime_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "lime_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "lime_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "lime_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "lime_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_hardened_clay.json index 54c48cec..d6ee2393 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_lime" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_lime" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_wool.json index 4c8683eb..f4685a59 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lime_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "lime_wool" } - } -} +{ + "variants": { + "normal": { "model": "lime_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_furnace.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_furnace.json index d482cc74..bc4badb4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lit_furnace.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_furnace.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "lit_furnace" }, - "facing=south": { "model": "lit_furnace", "y": 180 }, - "facing=west": { "model": "lit_furnace", "y": 270 }, - "facing=east": { "model": "lit_furnace", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "lit_furnace" }, + "facing=south": { "model": "lit_furnace", "y": 180 }, + "facing=west": { "model": "lit_furnace", "y": 270 }, + "facing=east": { "model": "lit_furnace", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json index b8d16a1f..ddafe8e6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "lit_pumpkin" }, - "facing=south": { "model": "lit_pumpkin", "y": 180 }, - "facing=west": { "model": "lit_pumpkin", "y": 270 }, - "facing=east": { "model": "lit_pumpkin", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "lit_pumpkin" }, + "facing=south": { "model": "lit_pumpkin", "y": 180 }, + "facing=west": { "model": "lit_pumpkin", "y": 270 }, + "facing=east": { "model": "lit_pumpkin", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json index a9149026..9fd45cb6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "lit_redstone_lamp" } - } -} +{ + "variants": { + "normal": { "model": "lit_redstone_lamp" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_ore.json index c108cd19..9953b2db 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "lit_redstone_ore" } - } -} +{ + "variants": { + "normal": { "model": "lit_redstone_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_carpet.json index ee6b25f5..ab9a8643 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_magenta" } - } -} +{ + "variants": { + "normal": { "model": "carpet_magenta" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass.json index 576cdef0..cfee37cd 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_magenta" } - } -} +{ + "variants": { + "normal": { "model": "glass_magenta" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass_pane.json index 64a7d40f..c5ccf574 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass_pane.json @@ -1,20 +1,55 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "magenta_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "magenta_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "magenta_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "magenta_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "magenta_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "magenta_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "magenta_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "magenta_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "magenta_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "magenta_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "magenta_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "magenta_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "magenta_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "magenta_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "magenta_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "magenta_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "magenta_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "magenta_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "magenta_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "magenta_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "magenta_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "magenta_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "magenta_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "magenta_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "magenta_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "magenta_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "magenta_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "magenta_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "magenta_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "magenta_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "magenta_pane_new" + }, + "east=true,north=true,south=true,west=true": { + "model": "magenta_pane_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_hardened_clay.json index bee8b7ef..182a1b1c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_magenta" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_magenta" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_wool.json index cffa445c..22e0ca56 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/magenta_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "magenta_wool" } - } -} +{ + "variants": { + "normal": { "model": "magenta_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/melon_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/melon_block.json index c17c6aa5..144862d7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/melon_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/melon_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "melon" } - } -} +{ + "variants": { + "normal": { "model": "melon" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json b/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json index 9d72bd6a..875c360d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json @@ -1,16 +1,16 @@ -{ - "variants": { - "age=0,facing=up": { "model": "melon_stem_growth0" }, - "age=1,facing=up": { "model": "melon_stem_growth1" }, - "age=2,facing=up": { "model": "melon_stem_growth2" }, - "age=3,facing=up": { "model": "melon_stem_growth3" }, - "age=4,facing=up": { "model": "melon_stem_growth4" }, - "age=5,facing=up": { "model": "melon_stem_growth5" }, - "age=6,facing=up": { "model": "melon_stem_growth6" }, - "age=7,facing=up": { "model": "melon_stem_growth7" }, - "facing=west": { "model": "melon_stem_fruit" }, - "facing=east": { "model": "melon_stem_fruit", "y": 180 }, - "facing=north": { "model": "melon_stem_fruit", "y": 90 }, - "facing=south": { "model": "melon_stem_fruit", "y": 270 } - } -} +{ + "variants": { + "age=0,facing=up": { "model": "melon_stem_growth0" }, + "age=1,facing=up": { "model": "melon_stem_growth1" }, + "age=2,facing=up": { "model": "melon_stem_growth2" }, + "age=3,facing=up": { "model": "melon_stem_growth3" }, + "age=4,facing=up": { "model": "melon_stem_growth4" }, + "age=5,facing=up": { "model": "melon_stem_growth5" }, + "age=6,facing=up": { "model": "melon_stem_growth6" }, + "age=7,facing=up": { "model": "melon_stem_growth7" }, + "facing=west": { "model": "melon_stem_fruit" }, + "facing=east": { "model": "melon_stem_fruit", "y": 180 }, + "facing=north": { "model": "melon_stem_fruit", "y": 90 }, + "facing=south": { "model": "melon_stem_fruit", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json b/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json index b28af1d2..0d90aa5b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "mob_spawner_cage" } - } -} +{ + "variants": { + "normal": { "model": "mob_spawner_cage" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_brick_monster_egg.json index 72550201..2cdbaec4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_brick_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_mossy" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_mossy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone.json b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone.json index f88105cf..b34c623a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "mossy_cobblestone" } - } -} +{ + "variants": { + "normal": { "model": "mossy_cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone_wall.json b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone_wall.json index 84610dec..a908e4b8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone_wall.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone_wall.json @@ -1,36 +1,140 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "mossy_wall_post" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "mossy_wall_n" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "mossy_wall_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "mossy_wall_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "mossy_wall_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "mossy_wall_ne" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "mossy_wall_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "mossy_wall_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "mossy_wall_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "mossy_wall_ns" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "mossy_wall_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "mossy_wall_nse" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "mossy_wall_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "mossy_wall_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "mossy_wall_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "mossy_wall_nsew" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "mossy_wall_post" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "mossy_wall_n" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "mossy_wall_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "mossy_wall_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "mossy_wall_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "mossy_wall_ne" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "mossy_wall_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "mossy_wall_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "mossy_wall_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "mossy_wall_ns_above" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "mossy_wall_ns_above", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "mossy_wall_nse" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "mossy_wall_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "mossy_wall_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "mossy_wall_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "mossy_wall_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,up=false,west=false": { + "model": "mossy_wall_post" + }, + "east=false,north=true,south=false,up=false,west=false": { + "model": "mossy_wall_n" + }, + "east=true,north=false,south=false,up=false,west=false": { + "model": "mossy_wall_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=false,west=false": { + "model": "mossy_wall_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,up=false,west=true": { + "model": "mossy_wall_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,up=false,west=false": { + "model": "mossy_wall_ne" + }, + "east=true,north=false,south=true,up=false,west=false": { + "model": "mossy_wall_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=false,west=true": { + "model": "mossy_wall_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,up=false,west=true": { + "model": "mossy_wall_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,up=false,west=false": { + "model": "mossy_wall_ns" + }, + "east=true,north=false,south=false,up=false,west=true": { + "model": "mossy_wall_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,up=false,west=false": { + "model": "mossy_wall_nse" + }, + "east=true,north=false,south=true,up=false,west=true": { + "model": "mossy_wall_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,up=false,west=true": { + "model": "mossy_wall_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,up=false,west=true": { + "model": "mossy_wall_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,up=false,west=true": { + "model": "mossy_wall_nsew" + }, + "east=false,north=false,south=false,up=true,west=false": { + "model": "mossy_wall_post" + }, + "east=false,north=true,south=false,up=true,west=false": { + "model": "mossy_wall_n" + }, + "east=true,north=false,south=false,up=true,west=false": { + "model": "mossy_wall_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=true,west=false": { + "model": "mossy_wall_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,up=true,west=true": { + "model": "mossy_wall_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,up=true,west=false": { + "model": "mossy_wall_ne" + }, + "east=true,north=false,south=true,up=true,west=false": { + "model": "mossy_wall_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,up=true,west=true": { + "model": "mossy_wall_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,up=true,west=true": { + "model": "mossy_wall_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,up=true,west=false": { + "model": "mossy_wall_ns_above" + }, + "east=true,north=false,south=false,up=true,west=true": { + "model": "mossy_wall_ns_above", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,up=true,west=false": { + "model": "mossy_wall_nse" + }, + "east=true,north=false,south=true,up=true,west=true": { + "model": "mossy_wall_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,up=true,west=true": { + "model": "mossy_wall_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,up=true,west=true": { + "model": "mossy_wall_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,up=true,west=true": { + "model": "mossy_wall_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_stonebrick.json b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_stonebrick.json index 72550201..2cdbaec4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mossy_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_stonebrick.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_mossy" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_mossy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json b/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json index c2911319..9c9a9f91 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json @@ -1,6 +1,6 @@ -{ - "variants": { - "snowy=false": { "model": "mycelium" }, - "snowy=true": { "model": "grass_snowed" } - } -} +{ + "variants": { + "snowy=false": { "model": "mycelium" }, + "snowy=true": { "model": "grass_snowed" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick.json index 3b14da6a..76c454d5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "nether_brick" } - } -} +{ + "variants": { + "normal": { "model": "nether_brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_double_slab.json index 09bc0b4e..5e9bbf2c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "nether_brick" }, - "all": { "model": "nether_brick" } - } -} +{ + "variants": { + "normal": { "model": "nether_brick" }, + "all": { "model": "nether_brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_fence.json index 3dd9e09f..16363e27 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_fence.json @@ -1,20 +1,72 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "nether_brick_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "nether_brick_fence_n" }, - "east=true,north=false,south=false,west=false": { "model": "nether_brick_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "nether_brick_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "nether_brick_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "nether_brick_fence_ne" }, - "east=true,north=false,south=true,west=false": { "model": "nether_brick_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "nether_brick_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "nether_brick_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "nether_brick_fence_ns" }, - "east=true,north=false,south=false,west=true": { "model": "nether_brick_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "nether_brick_fence_nse" }, - "east=true,north=false,south=true,west=true": { "model": "nether_brick_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "nether_brick_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "nether_brick_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "nether_brick_fence_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "nether_brick_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "nether_brick_fence_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "nether_brick_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "nether_brick_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "nether_brick_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "nether_brick_fence_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "nether_brick_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "nether_brick_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "nether_brick_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "nether_brick_fence_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "nether_brick_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "nether_brick_fence_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "nether_brick_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "nether_brick_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "nether_brick_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "nether_brick_fence_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_slab.json index 0e50f69b..f7ce06e7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_nether_brick" }, - "half=top": { "model": "upper_slab_nether_brick" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_nether_brick" }, + "half=top": { "model": "upper_slab_nether_brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_stairs.json index 687cd271..810dab0d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_stairs.json @@ -1,44 +1,209 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "nether_brick_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "nether_brick_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "nether_brick_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "nether_brick_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "nether_brick_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "nether_brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "nether_brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "nether_brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "nether_brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "nether_brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "nether_brick_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "nether_brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "nether_brick_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "nether_brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "nether_brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "nether_brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "nether_brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "nether_brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "nether_brick_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "nether_brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "nether_brick_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "nether_brick_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "nether_brick_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "nether_brick_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "nether_brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "nether_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "nether_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "nether_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "nether_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "nether_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "nether_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "nether_brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "nether_brick_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "nether_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "nether_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "nether_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "nether_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "nether_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "nether_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "nether_brick_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "nether_brick_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "nether_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "nether_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "nether_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "nether_brick_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "nether_brick_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "nether_brick_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "nether_brick_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "nether_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "nether_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "nether_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "nether_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "nether_brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "nether_brick_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/nether_wart.json b/desktopRuntime/resources/assets/minecraft/blockstates/nether_wart.json index 3f098378..df7139f7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/nether_wart.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_wart.json @@ -1,8 +1,8 @@ -{ - "variants": { - "age=0": { "model": "nether_wart_stage0" }, - "age=1": { "model": "nether_wart_stage1" }, - "age=2": { "model": "nether_wart_stage1" }, - "age=3": { "model": "nether_wart_stage2" } - } -} +{ + "variants": { + "age=0": { "model": "nether_wart_stage0" }, + "age=1": { "model": "nether_wart_stage1" }, + "age=2": { "model": "nether_wart_stage1" }, + "age=3": { "model": "nether_wart_stage2" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json b/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json index e08d7ba5..a8029ab7 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json @@ -1,22 +1,22 @@ -{ - "variants": { - "normal": [ - { "model": "netherrack" }, - { "model": "netherrack", "x": 90 }, - { "model": "netherrack", "x": 180 }, - { "model": "netherrack", "x": 270 }, - { "model": "netherrack", "y": 90 }, - { "model": "netherrack", "y": 90, "x": 90 }, - { "model": "netherrack", "y": 90, "x": 180 }, - { "model": "netherrack", "y": 90, "x": 270 }, - { "model": "netherrack", "y": 180 }, - { "model": "netherrack", "y": 180, "x": 90 }, - { "model": "netherrack", "y": 180, "x": 180 }, - { "model": "netherrack", "y": 180, "x": 270 }, - { "model": "netherrack", "y": 270 }, - { "model": "netherrack", "y": 270, "x": 90 }, - { "model": "netherrack", "y": 270, "x": 180 }, - { "model": "netherrack", "y": 270, "x": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "netherrack" }, + { "model": "netherrack", "x": 90 }, + { "model": "netherrack", "x": 180 }, + { "model": "netherrack", "x": 270 }, + { "model": "netherrack", "y": 90 }, + { "model": "netherrack", "y": 90, "x": 90 }, + { "model": "netherrack", "y": 90, "x": 180 }, + { "model": "netherrack", "y": 90, "x": 270 }, + { "model": "netherrack", "y": 180 }, + { "model": "netherrack", "y": 180, "x": 90 }, + { "model": "netherrack", "y": 180, "x": 180 }, + { "model": "netherrack", "y": 180, "x": 270 }, + { "model": "netherrack", "y": 270 }, + { "model": "netherrack", "y": 270, "x": 90 }, + { "model": "netherrack", "y": 270, "x": 180 }, + { "model": "netherrack", "y": 270, "x": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json b/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json index 092da955..d2379b06 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "noteblock" } - } -} +{ + "variants": { + "normal": { "model": "noteblock" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_double_slab.json index c5b300d2..fe185d46 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "oak_planks" } - } -} +{ + "variants": { + "normal": { "model": "oak_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_leaves.json index d09fc669..7ee71263 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "oak_leaves" } - } -} +{ + "variants": { + "normal": { "model": "oak_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_log.json index 7c1a9e6f..b28098e9 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "oak_log" }, - "axis=z": { "model": "oak_log_side" }, - "axis=x": { "model": "oak_log_side", "y": 90 }, - "axis=none": { "model": "oak_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "oak_log" }, + "axis=z": { "model": "oak_log_side" }, + "axis=x": { "model": "oak_log_side", "y": 90 }, + "axis=none": { "model": "oak_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json index c5b300d2..fe185d46 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "oak_planks" } - } -} +{ + "variants": { + "normal": { "model": "oak_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_sapling.json index e8a70a28..0e34f219 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "oak_sapling" }, - "stage=1": { "model": "oak_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "oak_sapling" }, + "stage=1": { "model": "oak_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_slab.json index 8c99098d..d6f5231f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_oak" }, - "half=top": { "model": "upper_slab_oak" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_oak" }, + "half=top": { "model": "upper_slab_oak" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_stairs.json index d4db6031..f5d2c4e2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "oak_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "oak_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "oak_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "oak_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "oak_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "oak_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "oak_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "oak_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "oak_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "oak_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "oak_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "oak_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "oak_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "oak_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "oak_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "oak_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "oak_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "oak_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "oak_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "oak_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "oak_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "oak_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "oak_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "oak_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "oak_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "oak_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "oak_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "oak_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "oak_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "oak_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "oak_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "oak_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "oak_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "oak_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "oak_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "oak_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "oak_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "oak_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "oak_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "oak_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "oak_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "oak_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "oak_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "oak_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "oak_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "oak_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "oak_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "oak_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "oak_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "oak_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "oak_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "oak_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "oak_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "oak_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "oak_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "oak_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "oak_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "oak_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "oak_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "oak_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "oak_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "oak_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "oak_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "oak_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "oak_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "oak_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "oak_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "oak_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "oak_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "oak_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "oak_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "oak_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "oak_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "oak_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "oak_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "oak_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "oak_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "oak_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "oak_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "oak_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/obsidian.json b/desktopRuntime/resources/assets/minecraft/blockstates/obsidian.json index 324aeeb7..cf7c24f3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/obsidian.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/obsidian.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "obsidian" } - } -} +{ + "variants": { + "normal": { "model": "obsidian" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json index bcf43545..8ea700a2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_orange" } - } -} +{ + "variants": { + "normal": { "model": "carpet_orange" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass.json index 111d355f..fb6260aa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_orange" } - } -} +{ + "variants": { + "normal": { "model": "glass_orange" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass_pane.json index 07ddb24e..0d031f9d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass_pane.json @@ -1,20 +1,53 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "orange_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "orange_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "orange_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "orange_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "orange_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "orange_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "orange_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "orange_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "orange_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "orange_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "orange_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "orange_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "orange_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "orange_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "orange_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "orange_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "orange_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "orange_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "orange_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "orange_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "orange_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "orange_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "orange_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "orange_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "orange_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "orange_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "orange_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "orange_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "orange_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "orange_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "orange_pane_new" + }, + "east=true,north=true,south=true,west=true": { "model": "orange_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_hardened_clay.json index d8e3f920..b74b62a9 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_orange" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_orange" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_tulip.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_tulip.json index 36cc0f0e..f469f952 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_tulip.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "orange_tulip" } - } -} +{ + "variants": { + "normal": { "model": "orange_tulip" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_wool.json index 8e9867aa..8580354b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/orange_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "orange_wool" } - } -} +{ + "variants": { + "normal": { "model": "orange_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oxeye_daisy.json b/desktopRuntime/resources/assets/minecraft/blockstates/oxeye_daisy.json index 8524855e..480d21e5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/oxeye_daisy.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oxeye_daisy.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "daisy" } - } -} +{ + "variants": { + "normal": { "model": "daisy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json b/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json index af6291a3..48e6e728 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "packed_ice" } - } -} +{ + "variants": { + "normal": { "model": "packed_ice" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json b/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json index 9dcaf7d8..4ba8a5f1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_paeonia_bottom" }, - "half=upper": { "model": "double_paeonia_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_paeonia_bottom" }, + "half=upper": { "model": "double_paeonia_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_carpet.json index c85f2c11..e32fec9f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_pink" } - } -} +{ + "variants": { + "normal": { "model": "carpet_pink" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass.json index 0a510480..666f8e2f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_pink" } - } -} +{ + "variants": { + "normal": { "model": "glass_pink" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass_pane.json index c6c59f6e..b04b0889 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "pink_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "pink_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "pink_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "pink_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "pink_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "pink_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "pink_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "pink_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "pink_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "pink_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "pink_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "pink_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "pink_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "pink_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "pink_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "pink_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "pink_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "pink_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "pink_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "pink_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "pink_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "pink_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "pink_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "pink_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "pink_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "pink_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "pink_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "pink_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "pink_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "pink_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "pink_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "pink_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_hardened_clay.json index 25051c06..a3cea64f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_pink" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_pink" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_tulip.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_tulip.json index c8bc82d3..77be42f1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_tulip.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "pink_tulip" } - } -} +{ + "variants": { + "normal": { "model": "pink_tulip" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pink_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/pink_wool.json index 1b727acb..8bdea1c1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pink_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "pink_wool" } - } -} +{ + "variants": { + "normal": { "model": "pink_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/piston.json b/desktopRuntime/resources/assets/minecraft/blockstates/piston.json index f5c1a5a6..c3c22c23 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/piston.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/piston.json @@ -1,16 +1,22 @@ -{ - "variants": { - "extended=false,facing=down": { "model": "piston_normal", "x": 90 }, - "extended=false,facing=up": { "model": "piston_normal", "x": 270 }, - "extended=false,facing=north": { "model": "piston_normal" }, - "extended=false,facing=south": { "model": "piston_normal", "y": 180 }, - "extended=false,facing=west": { "model": "piston_normal", "y": 270 }, - "extended=false,facing=east": { "model": "piston_normal", "y": 90 }, - "extended=true,facing=down": { "model": "piston_extended_normal", "x": 90 }, - "extended=true,facing=up": { "model": "piston_extended_normal", "x": 270 }, - "extended=true,facing=north": { "model": "piston_extended_normal" }, - "extended=true,facing=south": { "model": "piston_extended_normal", "y": 180 }, - "extended=true,facing=west": { "model": "piston_extended_normal", "y": 270 }, - "extended=true,facing=east": { "model": "piston_extended_normal", "y": 90 } - } -} +{ + "variants": { + "extended=false,facing=down": { "model": "piston_normal", "x": 90 }, + "extended=false,facing=up": { "model": "piston_normal", "x": 270 }, + "extended=false,facing=north": { "model": "piston_normal" }, + "extended=false,facing=south": { "model": "piston_normal", "y": 180 }, + "extended=false,facing=west": { "model": "piston_normal", "y": 270 }, + "extended=false,facing=east": { "model": "piston_normal", "y": 90 }, + "extended=true,facing=down": { "model": "piston_extended_normal", "x": 90 }, + "extended=true,facing=up": { "model": "piston_extended_normal", "x": 270 }, + "extended=true,facing=north": { "model": "piston_extended_normal" }, + "extended=true,facing=south": { + "model": "piston_extended_normal", + "y": 180 + }, + "extended=true,facing=west": { + "model": "piston_extended_normal", + "y": 270 + }, + "extended=true,facing=east": { "model": "piston_extended_normal", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/piston_head.json b/desktopRuntime/resources/assets/minecraft/blockstates/piston_head.json index 67790eb1..ec1f758c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/piston_head.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/piston_head.json @@ -1,28 +1,92 @@ -{ - "variants": { - "facing=down,short=false,type=normal": { "model": "piston_head_normal", "x": 90 }, - "facing=up,short=false,type=normal": { "model": "piston_head_normal", "x": 270 }, - "facing=north,short=false,type=normal": { "model": "piston_head_normal" }, - "facing=south,short=false,type=normal": { "model": "piston_head_normal", "y": 180 }, - "facing=west,short=false,type=normal": { "model": "piston_head_normal", "y": 270 }, - "facing=east,short=false,type=normal": { "model": "piston_head_normal", "y": 90 }, - "facing=down,short=false,type=sticky": { "model": "piston_head_sticky", "x": 90 }, - "facing=up,short=false,type=sticky": { "model": "piston_head_sticky", "x": 270 }, - "facing=north,short=false,type=sticky": { "model": "piston_head_sticky" }, - "facing=south,short=false,type=sticky": { "model": "piston_head_sticky", "y": 180 }, - "facing=west,short=false,type=sticky": { "model": "piston_head_sticky", "y": 270 }, - "facing=east,short=false,type=sticky": { "model": "piston_head_sticky", "y": 90 }, - "facing=down,short=true,type=normal": { "model": "piston_head_short_normal", "x": 90 }, - "facing=up,short=true,type=normal": { "model": "piston_head_short_normal", "x": 270 }, - "facing=north,short=true,type=normal": { "model": "piston_head_short_normal" }, - "facing=south,short=true,type=normal": { "model": "piston_head_short_normal", "y": 180 }, - "facing=west,short=true,type=normal": { "model": "piston_head_short_normal", "y": 270 }, - "facing=east,short=true,type=normal": { "model": "piston_head_short_normal", "y": 90 }, - "facing=down,short=true,type=sticky": { "model": "piston_head_short_sticky", "x": 90 }, - "facing=up,short=true,type=sticky": { "model": "piston_head_short_sticky", "x": 270 }, - "facing=north,short=true,type=sticky": { "model": "piston_head_short_sticky" }, - "facing=south,short=true,type=sticky": { "model": "piston_head_short_sticky", "y": 180 }, - "facing=west,short=true,type=sticky": { "model": "piston_head_short_sticky", "y": 270 }, - "facing=east,short=true,type=sticky": { "model": "piston_head_short_sticky", "y": 90 } - } -} +{ + "variants": { + "facing=down,short=false,type=normal": { + "model": "piston_head_normal", + "x": 90 + }, + "facing=up,short=false,type=normal": { + "model": "piston_head_normal", + "x": 270 + }, + "facing=north,short=false,type=normal": { "model": "piston_head_normal" }, + "facing=south,short=false,type=normal": { + "model": "piston_head_normal", + "y": 180 + }, + "facing=west,short=false,type=normal": { + "model": "piston_head_normal", + "y": 270 + }, + "facing=east,short=false,type=normal": { + "model": "piston_head_normal", + "y": 90 + }, + "facing=down,short=false,type=sticky": { + "model": "piston_head_sticky", + "x": 90 + }, + "facing=up,short=false,type=sticky": { + "model": "piston_head_sticky", + "x": 270 + }, + "facing=north,short=false,type=sticky": { "model": "piston_head_sticky" }, + "facing=south,short=false,type=sticky": { + "model": "piston_head_sticky", + "y": 180 + }, + "facing=west,short=false,type=sticky": { + "model": "piston_head_sticky", + "y": 270 + }, + "facing=east,short=false,type=sticky": { + "model": "piston_head_sticky", + "y": 90 + }, + "facing=down,short=true,type=normal": { + "model": "piston_head_short_normal", + "x": 90 + }, + "facing=up,short=true,type=normal": { + "model": "piston_head_short_normal", + "x": 270 + }, + "facing=north,short=true,type=normal": { + "model": "piston_head_short_normal" + }, + "facing=south,short=true,type=normal": { + "model": "piston_head_short_normal", + "y": 180 + }, + "facing=west,short=true,type=normal": { + "model": "piston_head_short_normal", + "y": 270 + }, + "facing=east,short=true,type=normal": { + "model": "piston_head_short_normal", + "y": 90 + }, + "facing=down,short=true,type=sticky": { + "model": "piston_head_short_sticky", + "x": 90 + }, + "facing=up,short=true,type=sticky": { + "model": "piston_head_short_sticky", + "x": 270 + }, + "facing=north,short=true,type=sticky": { + "model": "piston_head_short_sticky" + }, + "facing=south,short=true,type=sticky": { + "model": "piston_head_short_sticky", + "y": 180 + }, + "facing=west,short=true,type=sticky": { + "model": "piston_head_short_sticky", + "y": 270 + }, + "facing=east,short=true,type=sticky": { + "model": "piston_head_short_sticky", + "y": 90 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/podzol.json b/desktopRuntime/resources/assets/minecraft/blockstates/podzol.json index 32c56918..6e5f3b99 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/podzol.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/podzol.json @@ -1,6 +1,6 @@ -{ - "variants": { - "snowy=false": { "model": "podzol" }, - "snowy=true": { "model": "grass_snowed" } - } -} +{ + "variants": { + "snowy=false": { "model": "podzol" }, + "snowy=true": { "model": "grass_snowed" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/poppy.json b/desktopRuntime/resources/assets/minecraft/blockstates/poppy.json index 15b2892a..d1b1d295 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/poppy.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/poppy.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "poppy" } - } -} +{ + "variants": { + "normal": { "model": "poppy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/portal.json b/desktopRuntime/resources/assets/minecraft/blockstates/portal.json index bcfeb361..236f0a76 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/portal.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/portal.json @@ -1,6 +1,6 @@ -{ - "variants": { - "axis=z": { "model": "portal_ew" }, - "axis=x": { "model": "portal_ns" } - } -} +{ + "variants": { + "axis=z": { "model": "portal_ew" }, + "axis=x": { "model": "portal_ns" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/potatoes.json b/desktopRuntime/resources/assets/minecraft/blockstates/potatoes.json index f5881d3a..951c3100 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/potatoes.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/potatoes.json @@ -1,12 +1,12 @@ -{ - "variants": { - "age=0": { "model": "potatoes_stage0" }, - "age=1": { "model": "potatoes_stage0" }, - "age=2": { "model": "potatoes_stage1" }, - "age=3": { "model": "potatoes_stage1" }, - "age=4": { "model": "potatoes_stage2" }, - "age=5": { "model": "potatoes_stage2" }, - "age=6": { "model": "potatoes_stage2" }, - "age=7": { "model": "potatoes_stage3" } - } -} +{ + "variants": { + "age=0": { "model": "potatoes_stage0" }, + "age=1": { "model": "potatoes_stage0" }, + "age=2": { "model": "potatoes_stage1" }, + "age=3": { "model": "potatoes_stage1" }, + "age=4": { "model": "potatoes_stage2" }, + "age=5": { "model": "potatoes_stage2" }, + "age=6": { "model": "potatoes_stage2" }, + "age=7": { "model": "potatoes_stage3" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json b/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json index 46a050fd..a5c6ffa4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json @@ -1,20 +1,60 @@ -{ - "variants": { - "facing=north,mode=compare,powered=false": { "model": "comparator_unlit" }, - "facing=east,mode=compare,powered=false": { "model": "comparator_unlit", "y": 90 }, - "facing=south,mode=compare,powered=false": { "model": "comparator_unlit", "y": 180 }, - "facing=west,mode=compare,powered=false": { "model": "comparator_unlit", "y": 270 }, - "facing=north,mode=subtract,powered=false": { "model": "comparator_unlit_subtract" }, - "facing=east,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 90 }, - "facing=south,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 180 }, - "facing=west,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 270 }, - "facing=north,mode=compare,powered=true": { "model": "comparator_lit" }, - "facing=east,mode=compare,powered=true": { "model": "comparator_lit", "y": 90 }, - "facing=south,mode=compare,powered=true": { "model": "comparator_lit", "y": 180 }, - "facing=west,mode=compare,powered=true": { "model": "comparator_lit", "y": 270 }, - "facing=north,mode=subtract,powered=true": { "model": "comparator_lit_subtract" }, - "facing=east,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 90 }, - "facing=south,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 180 }, - "facing=west,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 270 } - } -} +{ + "variants": { + "facing=north,mode=compare,powered=false": { "model": "comparator_unlit" }, + "facing=east,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 90 + }, + "facing=south,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 180 + }, + "facing=west,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 270 + }, + "facing=north,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract" + }, + "facing=east,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 90 + }, + "facing=south,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 180 + }, + "facing=west,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 270 + }, + "facing=north,mode=compare,powered=true": { "model": "comparator_lit" }, + "facing=east,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 90 + }, + "facing=south,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 180 + }, + "facing=west,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 270 + }, + "facing=north,mode=subtract,powered=true": { + "model": "comparator_lit_subtract" + }, + "facing=east,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 90 + }, + "facing=south,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 180 + }, + "facing=west,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/powered_repeater.json b/desktopRuntime/resources/assets/minecraft/blockstates/powered_repeater.json index f45a9512..e6be608f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/powered_repeater.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/powered_repeater.json @@ -1,36 +1,108 @@ -{ - "variants": { - "delay=1,facing=south,locked=false": { "model": "repeater_on_1tick" }, - "delay=1,facing=west,locked=false": { "model": "repeater_on_1tick", "y": 90 }, - "delay=1,facing=north,locked=false": { "model": "repeater_on_1tick", "y": 180 }, - "delay=1,facing=east,locked=false": { "model": "repeater_on_1tick", "y": 270 }, - "delay=2,facing=south,locked=false": { "model": "repeater_on_2tick" }, - "delay=2,facing=west,locked=false": { "model": "repeater_on_2tick", "y": 90 }, - "delay=2,facing=north,locked=false": { "model": "repeater_on_2tick", "y": 180 }, - "delay=2,facing=east,locked=false": { "model": "repeater_on_2tick", "y": 270 }, - "delay=3,facing=south,locked=false": { "model": "repeater_on_3tick" }, - "delay=3,facing=west,locked=false": { "model": "repeater_on_3tick", "y": 90 }, - "delay=3,facing=north,locked=false": { "model": "repeater_on_3tick", "y": 180 }, - "delay=3,facing=east,locked=false": { "model": "repeater_on_3tick", "y": 270 }, - "delay=4,facing=south,locked=false": { "model": "repeater_on_4tick" }, - "delay=4,facing=west,locked=false": { "model": "repeater_on_4tick", "y": 90 }, - "delay=4,facing=north,locked=false": { "model": "repeater_on_4tick", "y": 180 }, - "delay=4,facing=east,locked=false": { "model": "repeater_on_4tick", "y": 270 }, - "delay=1,facing=south,locked=true": { "model": "repeater_on_locked_1tick" }, - "delay=1,facing=west,locked=true": { "model": "repeater_on_locked_1tick", "y": 90 }, - "delay=1,facing=north,locked=true": { "model": "repeater_on_locked_1tick", "y": 180 }, - "delay=1,facing=east,locked=true": { "model": "repeater_on_locked_1tick", "y": 270 }, - "delay=2,facing=south,locked=true": { "model": "repeater_on_locked_2tick" }, - "delay=2,facing=west,locked=true": { "model": "repeater_on_locked_2tick", "y": 90 }, - "delay=2,facing=north,locked=true": { "model": "repeater_on_locked_2tick", "y": 180 }, - "delay=2,facing=east,locked=true": { "model": "repeater_on_locked_2tick", "y": 270 }, - "delay=3,facing=south,locked=true": { "model": "repeater_on_locked_3tick" }, - "delay=3,facing=west,locked=true": { "model": "repeater_on_locked_3tick", "y": 90 }, - "delay=3,facing=north,locked=true": { "model": "repeater_on_locked_3tick", "y": 180 }, - "delay=3,facing=east,locked=true": { "model": "repeater_on_locked_3tick", "y": 270 }, - "delay=4,facing=south,locked=true": { "model": "repeater_on_locked_4tick" }, - "delay=4,facing=west,locked=true": { "model": "repeater_on_locked_4tick", "y": 90 }, - "delay=4,facing=north,locked=true": { "model": "repeater_on_locked_4tick", "y": 180 }, - "delay=4,facing=east,locked=true": { "model": "repeater_on_locked_4tick", "y": 270 } - } -} +{ + "variants": { + "delay=1,facing=south,locked=false": { "model": "repeater_on_1tick" }, + "delay=1,facing=west,locked=false": { + "model": "repeater_on_1tick", + "y": 90 + }, + "delay=1,facing=north,locked=false": { + "model": "repeater_on_1tick", + "y": 180 + }, + "delay=1,facing=east,locked=false": { + "model": "repeater_on_1tick", + "y": 270 + }, + "delay=2,facing=south,locked=false": { "model": "repeater_on_2tick" }, + "delay=2,facing=west,locked=false": { + "model": "repeater_on_2tick", + "y": 90 + }, + "delay=2,facing=north,locked=false": { + "model": "repeater_on_2tick", + "y": 180 + }, + "delay=2,facing=east,locked=false": { + "model": "repeater_on_2tick", + "y": 270 + }, + "delay=3,facing=south,locked=false": { "model": "repeater_on_3tick" }, + "delay=3,facing=west,locked=false": { + "model": "repeater_on_3tick", + "y": 90 + }, + "delay=3,facing=north,locked=false": { + "model": "repeater_on_3tick", + "y": 180 + }, + "delay=3,facing=east,locked=false": { + "model": "repeater_on_3tick", + "y": 270 + }, + "delay=4,facing=south,locked=false": { "model": "repeater_on_4tick" }, + "delay=4,facing=west,locked=false": { + "model": "repeater_on_4tick", + "y": 90 + }, + "delay=4,facing=north,locked=false": { + "model": "repeater_on_4tick", + "y": 180 + }, + "delay=4,facing=east,locked=false": { + "model": "repeater_on_4tick", + "y": 270 + }, + "delay=1,facing=south,locked=true": { "model": "repeater_on_locked_1tick" }, + "delay=1,facing=west,locked=true": { + "model": "repeater_on_locked_1tick", + "y": 90 + }, + "delay=1,facing=north,locked=true": { + "model": "repeater_on_locked_1tick", + "y": 180 + }, + "delay=1,facing=east,locked=true": { + "model": "repeater_on_locked_1tick", + "y": 270 + }, + "delay=2,facing=south,locked=true": { "model": "repeater_on_locked_2tick" }, + "delay=2,facing=west,locked=true": { + "model": "repeater_on_locked_2tick", + "y": 90 + }, + "delay=2,facing=north,locked=true": { + "model": "repeater_on_locked_2tick", + "y": 180 + }, + "delay=2,facing=east,locked=true": { + "model": "repeater_on_locked_2tick", + "y": 270 + }, + "delay=3,facing=south,locked=true": { "model": "repeater_on_locked_3tick" }, + "delay=3,facing=west,locked=true": { + "model": "repeater_on_locked_3tick", + "y": 90 + }, + "delay=3,facing=north,locked=true": { + "model": "repeater_on_locked_3tick", + "y": 180 + }, + "delay=3,facing=east,locked=true": { + "model": "repeater_on_locked_3tick", + "y": 270 + }, + "delay=4,facing=south,locked=true": { "model": "repeater_on_locked_4tick" }, + "delay=4,facing=west,locked=true": { + "model": "repeater_on_locked_4tick", + "y": 90 + }, + "delay=4,facing=north,locked=true": { + "model": "repeater_on_locked_4tick", + "y": 180 + }, + "delay=4,facing=east,locked=true": { + "model": "repeater_on_locked_4tick", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/prismarine.json b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine.json index 7b00dbbb..fb7a47f6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/prismarine.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "prismarine_rough" } - } -} +{ + "variants": { + "normal": { "model": "prismarine_rough" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/prismarine_bricks.json b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine_bricks.json index 2a7f9c0e..ef88f1c2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/prismarine_bricks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine_bricks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "prismarine_bricks" } - } -} +{ + "variants": { + "normal": { "model": "prismarine_bricks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json index e809cc3e..f0224bfe 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "pumpkin" }, - "facing=south": { "model": "pumpkin", "y": 180 }, - "facing=west": { "model": "pumpkin", "y": 270 }, - "facing=east": { "model": "pumpkin", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "pumpkin" }, + "facing=south": { "model": "pumpkin", "y": 180 }, + "facing=west": { "model": "pumpkin", "y": 270 }, + "facing=east": { "model": "pumpkin", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json index 1d5156d0..56ea9dac 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json @@ -1,16 +1,16 @@ -{ - "variants": { - "age=0,facing=up": { "model": "pumpkin_stem_growth0" }, - "age=1,facing=up": { "model": "pumpkin_stem_growth1" }, - "age=2,facing=up": { "model": "pumpkin_stem_growth2" }, - "age=3,facing=up": { "model": "pumpkin_stem_growth3" }, - "age=4,facing=up": { "model": "pumpkin_stem_growth4" }, - "age=5,facing=up": { "model": "pumpkin_stem_growth5" }, - "age=6,facing=up": { "model": "pumpkin_stem_growth6" }, - "age=7,facing=up": { "model": "pumpkin_stem_growth7" }, - "facing=west": { "model": "pumpkin_stem_fruit" }, - "facing=east": { "model": "pumpkin_stem_fruit", "y": 180 }, - "facing=north": { "model": "pumpkin_stem_fruit", "y": 90 }, - "facing=south": { "model": "pumpkin_stem_fruit", "y": 270 } - } -} +{ + "variants": { + "age=0,facing=up": { "model": "pumpkin_stem_growth0" }, + "age=1,facing=up": { "model": "pumpkin_stem_growth1" }, + "age=2,facing=up": { "model": "pumpkin_stem_growth2" }, + "age=3,facing=up": { "model": "pumpkin_stem_growth3" }, + "age=4,facing=up": { "model": "pumpkin_stem_growth4" }, + "age=5,facing=up": { "model": "pumpkin_stem_growth5" }, + "age=6,facing=up": { "model": "pumpkin_stem_growth6" }, + "age=7,facing=up": { "model": "pumpkin_stem_growth7" }, + "facing=west": { "model": "pumpkin_stem_fruit" }, + "facing=east": { "model": "pumpkin_stem_fruit", "y": 180 }, + "facing=north": { "model": "pumpkin_stem_fruit", "y": 90 }, + "facing=south": { "model": "pumpkin_stem_fruit", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json index 2f162601..f57038fb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_purple" } - } -} +{ + "variants": { + "normal": { "model": "carpet_purple" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass.json index e283b346..9a57321e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_purple" } - } -} +{ + "variants": { + "normal": { "model": "glass_purple" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass_pane.json index fc4bfb91..ded6077f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass_pane.json @@ -1,20 +1,53 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "purple_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "purple_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "purple_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "purple_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "purple_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "purple_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "purple_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "purple_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "purple_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "purple_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "purple_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "purple_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "purple_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "purple_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "purple_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "purple_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "purple_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "purple_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "purple_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "purple_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "purple_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "purple_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "purple_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "purple_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "purple_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "purple_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "purple_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "purple_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "purple_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "purple_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "purple_pane_new" + }, + "east=true,north=true,south=true,west=true": { "model": "purple_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_hardened_clay.json index 0625b3e6..13c0a823 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_purple" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_purple" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_wool.json index 012bc85d..97a1ebd3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/purple_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "purple_wool" } - } -} +{ + "variants": { + "normal": { "model": "purple_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_block.json index 6b8fb645..2d616a20 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "quartz_normal" } - } -} +{ + "variants": { + "normal": { "model": "quartz_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_column.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_column.json index fc9166dd..2079836a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_column.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_column.json @@ -1,8 +1,7 @@ -{ - "variants": { - "axis=y": { "model": "quartz_lines" }, - "axis=z": { "model": "quartz_lines", "x": 90 }, - "axis=x": { "model": "quartz_lines", "x": 90, "y": 90 } - } -} - +{ + "variants": { + "axis=y": { "model": "quartz_lines" }, + "axis=z": { "model": "quartz_lines", "x": 90 }, + "axis=x": { "model": "quartz_lines", "x": 90, "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_double_slab.json index 7841268f..b55d11e9 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "quartz_normal" }, - "all": { "model": "quartz_top" } - } -} +{ + "variants": { + "normal": { "model": "quartz_normal" }, + "all": { "model": "quartz_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_ore.json index d94faf6f..55ab463c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "quartz_ore" } - } -} +{ + "variants": { + "normal": { "model": "quartz_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_slab.json index 4ee9d4e2..61a65f69 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_quartz" }, - "half=top": { "model": "upper_slab_quartz" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_quartz" }, + "half=top": { "model": "upper_slab_quartz" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_stairs.json index 322102ed..288896c1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/quartz_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "quartz_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "quartz_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "quartz_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "quartz_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "quartz_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "quartz_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "quartz_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "quartz_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "quartz_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "quartz_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "quartz_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "quartz_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "quartz_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "quartz_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "quartz_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "quartz_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "quartz_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "quartz_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "quartz_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "quartz_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "quartz_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "quartz_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "quartz_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "quartz_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "quartz_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "quartz_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "quartz_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "quartz_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "quartz_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "quartz_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "quartz_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "quartz_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "quartz_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "quartz_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "quartz_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "quartz_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "quartz_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "quartz_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "quartz_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "quartz_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "quartz_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "quartz_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "quartz_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "quartz_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "quartz_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "quartz_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "quartz_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "quartz_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "quartz_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "quartz_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "quartz_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "quartz_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "quartz_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "quartz_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "quartz_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "quartz_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "quartz_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "quartz_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "quartz_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "quartz_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "quartz_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "quartz_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "quartz_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "quartz_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "quartz_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "quartz_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "quartz_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "quartz_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "quartz_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "quartz_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/rail.json b/desktopRuntime/resources/assets/minecraft/blockstates/rail.json index 85c6a532..a89813f5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/rail.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/rail.json @@ -1,14 +1,14 @@ -{ - "variants": { - "shape=north_south": { "model": "normal_rail_flat" }, - "shape=east_west": { "model": "normal_rail_flat", "y": 90 }, - "shape=ascending_east": { "model": "normal_rail_raised_ne", "y": 90 }, - "shape=ascending_west": { "model": "normal_rail_raised_sw", "y": 90 }, - "shape=ascending_north": { "model": "normal_rail_raised_ne" }, - "shape=ascending_south": { "model": "normal_rail_raised_sw" }, - "shape=south_east": { "model": "normal_rail_curved" }, - "shape=south_west": { "model": "normal_rail_curved", "y": 90 }, - "shape=north_west": { "model": "normal_rail_curved", "y": 180 }, - "shape=north_east": { "model": "normal_rail_curved", "y": 270 } - } -} +{ + "variants": { + "shape=north_south": { "model": "normal_rail_flat" }, + "shape=east_west": { "model": "normal_rail_flat", "y": 90 }, + "shape=ascending_east": { "model": "normal_rail_raised_ne", "y": 90 }, + "shape=ascending_west": { "model": "normal_rail_raised_sw", "y": 90 }, + "shape=ascending_north": { "model": "normal_rail_raised_ne" }, + "shape=ascending_south": { "model": "normal_rail_raised_sw" }, + "shape=south_east": { "model": "normal_rail_curved" }, + "shape=south_west": { "model": "normal_rail_curved", "y": 90 }, + "shape=north_west": { "model": "normal_rail_curved", "y": 180 }, + "shape=north_east": { "model": "normal_rail_curved", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json index fdfcf2c2..e465d46e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_red" } - } -} +{ + "variants": { + "normal": { "model": "carpet_red" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom.json index 6c915beb..7cfe4965 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_mushroom" } - } -} +{ + "variants": { + "normal": { "model": "red_mushroom" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom_block.json index e1ca08e9..1257ced6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom_block.json @@ -1,18 +1,17 @@ -{ - "variants": { - "variant=north_west": { "model": "red_mushroom_block_nw" }, - "variant=north": { "model": "red_mushroom_block_n" }, - "variant=north_east": { "model": "red_mushroom_block_ne" }, - "variant=west": { "model": "red_mushroom_block_w" }, - "variant=center": { "model": "red_mushroom_block_c" }, - "variant=east": { "model": "red_mushroom_block_e" }, - "variant=south_west": { "model": "red_mushroom_block_sw" }, - "variant=south": { "model": "red_mushroom_block_s" }, - "variant=south_east": { "model": "red_mushroom_block_se" }, - "variant=stem": { "model": "red_mushroom_block_stem" }, - "variant=all_stem": { "model": "red_mushroom_block_stem_all" }, - "variant=all_outside": { "model": "red_mushroom_block_cap_all" }, - "variant=all_inside": { "model": "red_mushroom_block_inside_all" } - } -} - +{ + "variants": { + "variant=north_west": { "model": "red_mushroom_block_nw" }, + "variant=north": { "model": "red_mushroom_block_n" }, + "variant=north_east": { "model": "red_mushroom_block_ne" }, + "variant=west": { "model": "red_mushroom_block_w" }, + "variant=center": { "model": "red_mushroom_block_c" }, + "variant=east": { "model": "red_mushroom_block_e" }, + "variant=south_west": { "model": "red_mushroom_block_sw" }, + "variant=south": { "model": "red_mushroom_block_s" }, + "variant=south_east": { "model": "red_mushroom_block_se" }, + "variant=stem": { "model": "red_mushroom_block_stem" }, + "variant=all_stem": { "model": "red_mushroom_block_stem_all" }, + "variant=all_outside": { "model": "red_mushroom_block_cap_all" }, + "variant=all_inside": { "model": "red_mushroom_block_inside_all" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_sand.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_sand.json index 911558b0..1b5178df 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_sand.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sand.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "red_sand" }, - { "model": "red_sand", "y": 90 }, - { "model": "red_sand", "y": 180 }, - { "model": "red_sand", "y": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "red_sand" }, + { "model": "red_sand", "y": 90 }, + { "model": "red_sand", "y": 180 }, + { "model": "red_sand", "y": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone.json index 2cfdad08..158443b1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_sandstone_normal" } - } -} +{ + "variants": { + "normal": { "model": "red_sandstone_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_double_slab.json index 932ccf8b..8a9271ce 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "red_sandstone_normal" }, - "all": { "model": "red_sandstone_all" } - } -} +{ + "variants": { + "normal": { "model": "red_sandstone_normal" }, + "all": { "model": "red_sandstone_all" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_slab.json index 81391dc3..868ffe8b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_red_sandstone" }, - "half=top": { "model": "upper_slab_red_sandstone" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_red_sandstone" }, + "half=top": { "model": "upper_slab_red_sandstone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_stairs.json index 416269c5..9f799045 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_stairs.json @@ -1,44 +1,209 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "red_sandstone_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "red_sandstone_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "red_sandstone_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "red_sandstone_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "red_sandstone_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "red_sandstone_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "red_sandstone_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "red_sandstone_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "red_sandstone_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "red_sandstone_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "red_sandstone_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "red_sandstone_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "red_sandstone_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "red_sandstone_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "red_sandstone_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "red_sandstone_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "red_sandstone_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "red_sandstone_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "red_sandstone_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "red_sandstone_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "red_sandstone_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "red_sandstone_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "red_sandstone_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "red_sandstone_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "red_sandstone_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "red_sandstone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "red_sandstone_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "red_sandstone_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "red_sandstone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "red_sandstone_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "red_sandstone_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "red_sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "red_sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "red_sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "red_sandstone_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "red_sandstone_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "red_sandstone_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "red_sandstone_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "red_sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "red_sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "red_sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "red_sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "red_sandstone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "red_sandstone_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass.json index 26fcd4a0..b6ed448a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_red" } - } -} +{ + "variants": { + "normal": { "model": "glass_red" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass_pane.json index c0100f46..49f4cebf 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "red_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "red_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "red_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "red_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "red_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "red_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "red_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "red_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "red_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "red_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "red_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "red_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "red_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "red_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "red_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "red_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "red_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "red_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "red_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "red_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "red_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "red_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "red_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "red_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "red_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "red_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "red_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "red_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "red_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "red_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "red_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "red_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_hardened_clay.json index 827e4cc7..b436ba66 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_red" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_red" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_tulip.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_tulip.json index 3ef91a24..0be6349e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_tulip.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_tulip" } - } -} +{ + "variants": { + "normal": { "model": "red_tulip" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_wool.json index d7bb203d..1f447964 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/red_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_wool" } - } -} +{ + "variants": { + "normal": { "model": "red_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_block.json index b8124157..1462825c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_block.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_block.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "redstone_block" } - } -} +{ + "variants": { + "normal": { "model": "redstone_block" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_lamp.json index e4f90c5b..0ba966de 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_lamp.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_lamp.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "unlit_redstone_lamp" } - } -} +{ + "variants": { + "normal": { "model": "unlit_redstone_lamp" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_ore.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_ore.json index d9055452..008a370d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_ore.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_ore.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "redstone_ore" } - } -} +{ + "variants": { + "normal": { "model": "redstone_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_torch.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_torch.json index 93f841c1..c038c2fa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_torch.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_torch.json @@ -1,9 +1,9 @@ -{ - "variants": { - "facing=up": { "model": "lit_redstone_torch" }, - "facing=east": { "model": "lit_redstone_torch_wall" }, - "facing=south": { "model": "lit_redstone_torch_wall", "y": 90 }, - "facing=west": { "model": "lit_redstone_torch_wall", "y": 180 }, - "facing=north": { "model": "lit_redstone_torch_wall", "y": 270 } - } -} +{ + "variants": { + "facing=up": { "model": "lit_redstone_torch" }, + "facing=east": { "model": "lit_redstone_torch_wall" }, + "facing=south": { "model": "lit_redstone_torch_wall", "y": 90 }, + "facing=west": { "model": "lit_redstone_torch_wall", "y": 180 }, + "facing=north": { "model": "lit_redstone_torch_wall", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json index 9f3e9a47..93d95b78 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json @@ -1,103 +1,367 @@ -{ - "variants": { - "east=none,north=none,south=none,west=none": { "model": "redstone_none" }, - - "east=none,north=side,south=none,west=none": { "model": "redstone_n" }, - "east=none,north=none,south=side,west=none": { "model": "redstone_n" }, - "east=side,north=none,south=none,west=none": { "model": "redstone_n", "y": 90 }, - "east=none,north=none,south=none,west=side": { "model": "redstone_n", "y": 90 }, - - "east=none,north=up,south=none,west=none": { "model": "redstone_uns" }, - "east=none,north=none,south=up,west=none": { "model": "redstone_uns", "y": 180, "uvlock": true }, - "east=up,north=none,south=none,west=none": { "model": "redstone_uew" }, - "east=none,north=none,south=none,west=up": { "model": "redstone_uew", "y": 180, "uvlock": true }, - - "east=side,north=side,south=none,west=none": { "model": "redstone_ne", "uvlock": true }, - "east=side,north=up,south=none,west=none": { "model": "redstone_une", "uvlock": true }, - "east=up,north=side,south=none,west=none": { "model": "redstone_nue", "uvlock": true }, - "east=up,north=up,south=none,west=none": { "model": "redstone_unue", "uvlock": true }, - - "east=side,north=none,south=side,west=none": { "model": "redstone_ne", "y": 90, "uvlock": true }, - "east=up,north=none,south=side,west=none": { "model": "redstone_une", "y": 90, "uvlock": true }, - "east=side,north=none,south=up,west=none": { "model": "redstone_nue", "y": 90, "uvlock": true }, - "east=up,north=none,south=up,west=none": { "model": "redstone_unue", "y": 90, "uvlock": true }, - - "east=none,north=none,south=side,west=side": { "model": "redstone_ne", "y": 180, "uvlock": true }, - "east=none,north=none,south=up,west=side": { "model": "redstone_une", "y": 180, "uvlock": true }, - "east=none,north=none,south=side,west=up": { "model": "redstone_nue", "y": 180, "uvlock": true }, - "east=none,north=none,south=up,west=up": { "model": "redstone_unue", "y": 180, "uvlock": true }, - - "east=none,north=side,south=none,west=side": { "model": "redstone_ne", "y": 270, "uvlock": true }, - "east=none,north=side,south=none,west=up": { "model": "redstone_une", "y": 270, "uvlock": true }, - "east=none,north=up,south=none,west=side": { "model": "redstone_nue", "y": 270, "uvlock": true }, - "east=none,north=up,south=none,west=up": { "model": "redstone_unue", "y": 270, "uvlock": true }, - - "east=none,north=side,south=side,west=none": { "model": "redstone_n" }, - "east=none,north=up,south=side,west=none": { "model": "redstone_uns" }, - "east=none,north=side,south=up,west=none": { "model": "redstone_uns", "y": 180 }, - "east=none,north=up,south=up,west=none": { "model": "redstone_unus" }, - - "east=side,north=none,south=none,west=side": { "model": "redstone_n", "y": 90 }, - "east=up,north=none,south=none,west=side": { "model": "redstone_uns", "y": 90 }, - "east=side,north=none,south=none,west=up": { "model": "redstone_uns", "y": 270 }, - "east=up,north=none,south=none,west=up": { "model": "redstone_ueuw" }, - - "east=side,north=side,south=side,west=none": { "model": "redstone_nse", "uvlock": true }, - "east=side,north=up,south=side,west=none": { "model": "redstone_unse", "uvlock": true }, - "east=side,north=side,south=up,west=none": { "model": "redstone_nuse", "uvlock": true }, - "east=up,north=side,south=side,west=none": { "model": "redstone_nsue", "uvlock": true }, - "east=up,north=side,south=up,west=none": { "model": "redstone_nusue", "uvlock": true }, - "east=side,north=up,south=up,west=none": { "model": "redstone_unuse", "uvlock": true }, - "east=up,north=up,south=side,west=none": { "model": "redstone_unsue", "uvlock": true }, - "east=up,north=up,south=up,west=none": { "model": "redstone_unusue", "uvlock": true }, - - "east=side,north=none,south=side,west=side": { "model": "redstone_nse", "y": 90, "uvlock": true }, - "east=up,north=none,south=side,west=side": { "model": "redstone_unse", "y": 90, "uvlock": true }, - "east=side,north=none,south=side,west=up": { "model": "redstone_nuse", "y": 90, "uvlock": true }, - "east=side,north=none,south=up,west=side": { "model": "redstone_nsue", "y": 90, "uvlock": true }, - "east=side,north=none,south=up,west=up": { "model": "redstone_nusue", "y": 90, "uvlock": true }, - "east=up,north=none,south=side,west=up": { "model": "redstone_unuse", "y": 90, "uvlock": true }, - "east=up,north=none,south=up,west=side": { "model": "redstone_unsue", "y": 90, "uvlock": true }, - "east=up,north=none,south=up,west=up": { "model": "redstone_unusue", "y": 90, "uvlock": true }, - - "east=none,north=side,south=side,west=side": { "model": "redstone_nse", "y": 180, "uvlock": true }, - "east=none,north=side,south=up,west=side": { "model": "redstone_unse", "y": 180, "uvlock": true }, - "east=none,north=up,south=side,west=side": { "model": "redstone_nuse", "y": 180, "uvlock": true }, - "east=none,north=side,south=side,west=up": { "model": "redstone_nsue", "y": 180, "uvlock": true }, - "east=none,north=up,south=side,west=up": { "model": "redstone_nusue", "y": 180, "uvlock": true }, - "east=none,north=up,south=up,west=side": { "model": "redstone_unuse", "y": 180, "uvlock": true }, - "east=none,north=side,south=up,west=up": { "model": "redstone_unsue", "y": 180, "uvlock": true }, - "east=none,north=up,south=up,west=up": { "model": "redstone_unusue", "y": 180, "uvlock": true }, - - "east=side,north=side,south=none,west=side": { "model": "redstone_nse", "y": 270, "uvlock": true }, - "east=side,north=side,south=none,west=up": { "model": "redstone_unse", "y": 270, "uvlock": true }, - "east=up,north=side,south=none,west=side": { "model": "redstone_nuse", "y": 270, "uvlock": true }, - "east=side,north=up,south=none,west=side": { "model": "redstone_nsue", "y": 270, "uvlock": true }, - "east=up,north=up,south=none,west=side": { "model": "redstone_nusue", "y": 270, "uvlock": true }, - "east=up,north=side,south=none,west=up": { "model": "redstone_unuse", "y": 270, "uvlock": true }, - "east=side,north=up,south=none,west=up": { "model": "redstone_unsue", "y": 270, "uvlock": true }, - "east=up,north=up,south=none,west=up": { "model": "redstone_unusue", "y": 270, "uvlock": true }, - - "east=side,north=side,south=side,west=side": { "model": "redstone_nsew", "uvlock": true }, - - "east=side,north=up,south=side,west=side": { "model": "redstone_unsew", "uvlock": true }, - "east=side,north=side,south=up,west=side": { "model": "redstone_unsew", "y": 180, "uvlock": true }, - "east=up,north=side,south=side,west=side": { "model": "redstone_unsew", "y": 90, "uvlock": true }, - "east=side,north=side,south=side,west=up": { "model": "redstone_unsew", "y": 270, "uvlock": true }, - - "east=side,north=up,south=up,west=side": { "model": "redstone_unusew", "uvlock": true }, - "east=up,north=side,south=side,west=up": { "model": "redstone_unusew", "y": 90, "uvlock": true }, - - "east=up,north=up,south=side,west=side": { "model": "redstone_unsuew", "uvlock": true }, - "east=up,north=side,south=up,west=side": { "model": "redstone_unsuew", "y": 90, "uvlock": true }, - "east=side,north=side,south=up,west=up": { "model": "redstone_unsuew", "y": 180, "uvlock": true }, - "east=side,north=up,south=side,west=up": { "model": "redstone_unsuew", "y": 270, "uvlock": true }, - - "east=up,north=up,south=up,west=side": { "model": "redstone_unusuew", "uvlock": true }, - "east=up,north=side,south=up,west=up": { "model": "redstone_unusuew", "y": 90, "uvlock": true }, - "east=side,north=up,south=up,west=up": { "model": "redstone_unusuew", "y": 180, "uvlock": true }, - "east=up,north=up,south=side,west=up": { "model": "redstone_unusuew", "y": 270, "uvlock": true }, - - "east=up,north=up,south=up,west=up": { "model": "redstone_unusueuw", "uvlock": true } - } -} +{ + "variants": { + "east=none,north=none,south=none,west=none": { "model": "redstone_none" }, + + "east=none,north=side,south=none,west=none": { "model": "redstone_n" }, + "east=none,north=none,south=side,west=none": { "model": "redstone_n" }, + "east=side,north=none,south=none,west=none": { + "model": "redstone_n", + "y": 90 + }, + "east=none,north=none,south=none,west=side": { + "model": "redstone_n", + "y": 90 + }, + + "east=none,north=up,south=none,west=none": { "model": "redstone_uns" }, + "east=none,north=none,south=up,west=none": { + "model": "redstone_uns", + "y": 180, + "uvlock": true + }, + "east=up,north=none,south=none,west=none": { "model": "redstone_uew" }, + "east=none,north=none,south=none,west=up": { + "model": "redstone_uew", + "y": 180, + "uvlock": true + }, + + "east=side,north=side,south=none,west=none": { + "model": "redstone_ne", + "uvlock": true + }, + "east=side,north=up,south=none,west=none": { + "model": "redstone_une", + "uvlock": true + }, + "east=up,north=side,south=none,west=none": { + "model": "redstone_nue", + "uvlock": true + }, + "east=up,north=up,south=none,west=none": { + "model": "redstone_unue", + "uvlock": true + }, + + "east=side,north=none,south=side,west=none": { + "model": "redstone_ne", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=side,west=none": { + "model": "redstone_une", + "y": 90, + "uvlock": true + }, + "east=side,north=none,south=up,west=none": { + "model": "redstone_nue", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=up,west=none": { + "model": "redstone_unue", + "y": 90, + "uvlock": true + }, + + "east=none,north=none,south=side,west=side": { + "model": "redstone_ne", + "y": 180, + "uvlock": true + }, + "east=none,north=none,south=up,west=side": { + "model": "redstone_une", + "y": 180, + "uvlock": true + }, + "east=none,north=none,south=side,west=up": { + "model": "redstone_nue", + "y": 180, + "uvlock": true + }, + "east=none,north=none,south=up,west=up": { + "model": "redstone_unue", + "y": 180, + "uvlock": true + }, + + "east=none,north=side,south=none,west=side": { + "model": "redstone_ne", + "y": 270, + "uvlock": true + }, + "east=none,north=side,south=none,west=up": { + "model": "redstone_une", + "y": 270, + "uvlock": true + }, + "east=none,north=up,south=none,west=side": { + "model": "redstone_nue", + "y": 270, + "uvlock": true + }, + "east=none,north=up,south=none,west=up": { + "model": "redstone_unue", + "y": 270, + "uvlock": true + }, + + "east=none,north=side,south=side,west=none": { "model": "redstone_n" }, + "east=none,north=up,south=side,west=none": { "model": "redstone_uns" }, + "east=none,north=side,south=up,west=none": { + "model": "redstone_uns", + "y": 180 + }, + "east=none,north=up,south=up,west=none": { "model": "redstone_unus" }, + + "east=side,north=none,south=none,west=side": { + "model": "redstone_n", + "y": 90 + }, + "east=up,north=none,south=none,west=side": { + "model": "redstone_uns", + "y": 90 + }, + "east=side,north=none,south=none,west=up": { + "model": "redstone_uns", + "y": 270 + }, + "east=up,north=none,south=none,west=up": { "model": "redstone_ueuw" }, + + "east=side,north=side,south=side,west=none": { + "model": "redstone_nse", + "uvlock": true + }, + "east=side,north=up,south=side,west=none": { + "model": "redstone_unse", + "uvlock": true + }, + "east=side,north=side,south=up,west=none": { + "model": "redstone_nuse", + "uvlock": true + }, + "east=up,north=side,south=side,west=none": { + "model": "redstone_nsue", + "uvlock": true + }, + "east=up,north=side,south=up,west=none": { + "model": "redstone_nusue", + "uvlock": true + }, + "east=side,north=up,south=up,west=none": { + "model": "redstone_unuse", + "uvlock": true + }, + "east=up,north=up,south=side,west=none": { + "model": "redstone_unsue", + "uvlock": true + }, + "east=up,north=up,south=up,west=none": { + "model": "redstone_unusue", + "uvlock": true + }, + + "east=side,north=none,south=side,west=side": { + "model": "redstone_nse", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=side,west=side": { + "model": "redstone_unse", + "y": 90, + "uvlock": true + }, + "east=side,north=none,south=side,west=up": { + "model": "redstone_nuse", + "y": 90, + "uvlock": true + }, + "east=side,north=none,south=up,west=side": { + "model": "redstone_nsue", + "y": 90, + "uvlock": true + }, + "east=side,north=none,south=up,west=up": { + "model": "redstone_nusue", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=side,west=up": { + "model": "redstone_unuse", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=up,west=side": { + "model": "redstone_unsue", + "y": 90, + "uvlock": true + }, + "east=up,north=none,south=up,west=up": { + "model": "redstone_unusue", + "y": 90, + "uvlock": true + }, + + "east=none,north=side,south=side,west=side": { + "model": "redstone_nse", + "y": 180, + "uvlock": true + }, + "east=none,north=side,south=up,west=side": { + "model": "redstone_unse", + "y": 180, + "uvlock": true + }, + "east=none,north=up,south=side,west=side": { + "model": "redstone_nuse", + "y": 180, + "uvlock": true + }, + "east=none,north=side,south=side,west=up": { + "model": "redstone_nsue", + "y": 180, + "uvlock": true + }, + "east=none,north=up,south=side,west=up": { + "model": "redstone_nusue", + "y": 180, + "uvlock": true + }, + "east=none,north=up,south=up,west=side": { + "model": "redstone_unuse", + "y": 180, + "uvlock": true + }, + "east=none,north=side,south=up,west=up": { + "model": "redstone_unsue", + "y": 180, + "uvlock": true + }, + "east=none,north=up,south=up,west=up": { + "model": "redstone_unusue", + "y": 180, + "uvlock": true + }, + + "east=side,north=side,south=none,west=side": { + "model": "redstone_nse", + "y": 270, + "uvlock": true + }, + "east=side,north=side,south=none,west=up": { + "model": "redstone_unse", + "y": 270, + "uvlock": true + }, + "east=up,north=side,south=none,west=side": { + "model": "redstone_nuse", + "y": 270, + "uvlock": true + }, + "east=side,north=up,south=none,west=side": { + "model": "redstone_nsue", + "y": 270, + "uvlock": true + }, + "east=up,north=up,south=none,west=side": { + "model": "redstone_nusue", + "y": 270, + "uvlock": true + }, + "east=up,north=side,south=none,west=up": { + "model": "redstone_unuse", + "y": 270, + "uvlock": true + }, + "east=side,north=up,south=none,west=up": { + "model": "redstone_unsue", + "y": 270, + "uvlock": true + }, + "east=up,north=up,south=none,west=up": { + "model": "redstone_unusue", + "y": 270, + "uvlock": true + }, + + "east=side,north=side,south=side,west=side": { + "model": "redstone_nsew", + "uvlock": true + }, + + "east=side,north=up,south=side,west=side": { + "model": "redstone_unsew", + "uvlock": true + }, + "east=side,north=side,south=up,west=side": { + "model": "redstone_unsew", + "y": 180, + "uvlock": true + }, + "east=up,north=side,south=side,west=side": { + "model": "redstone_unsew", + "y": 90, + "uvlock": true + }, + "east=side,north=side,south=side,west=up": { + "model": "redstone_unsew", + "y": 270, + "uvlock": true + }, + + "east=side,north=up,south=up,west=side": { + "model": "redstone_unusew", + "uvlock": true + }, + "east=up,north=side,south=side,west=up": { + "model": "redstone_unusew", + "y": 90, + "uvlock": true + }, + + "east=up,north=up,south=side,west=side": { + "model": "redstone_unsuew", + "uvlock": true + }, + "east=up,north=side,south=up,west=side": { + "model": "redstone_unsuew", + "y": 90, + "uvlock": true + }, + "east=side,north=side,south=up,west=up": { + "model": "redstone_unsuew", + "y": 180, + "uvlock": true + }, + "east=side,north=up,south=side,west=up": { + "model": "redstone_unsuew", + "y": 270, + "uvlock": true + }, + + "east=up,north=up,south=up,west=side": { + "model": "redstone_unusuew", + "uvlock": true + }, + "east=up,north=side,south=up,west=up": { + "model": "redstone_unusuew", + "y": 90, + "uvlock": true + }, + "east=side,north=up,south=up,west=up": { + "model": "redstone_unusuew", + "y": 180, + "uvlock": true + }, + "east=up,north=up,south=side,west=up": { + "model": "redstone_unusuew", + "y": 270, + "uvlock": true + }, + + "east=up,north=up,south=up,west=up": { + "model": "redstone_unusueuw", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/reeds.json b/desktopRuntime/resources/assets/minecraft/blockstates/reeds.json index ca89a2ae..7324f4d1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/reeds.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/reeds.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "reeds" } - } -} +{ + "variants": { + "normal": { "model": "reeds" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sand.json b/desktopRuntime/resources/assets/minecraft/blockstates/sand.json index e8737b20..1257c7d0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sand.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sand.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "sand" }, - { "model": "sand", "y": 90 }, - { "model": "sand", "y": 180 }, - { "model": "sand", "y": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "sand" }, + { "model": "sand", "y": 90 }, + { "model": "sand", "y": 180 }, + { "model": "sand", "y": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone.json index fc65e675..c23e10a1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "sandstone_normal" } - } -} +{ + "variants": { + "normal": { "model": "sandstone_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_double_slab.json index b3f62fed..89abdb65 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "sandstone_normal" }, - "all": { "model": "sandstone_all" } - } -} +{ + "variants": { + "normal": { "model": "sandstone_normal" }, + "all": { "model": "sandstone_all" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_slab.json index a7d2f241..954ae58f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_sandstone" }, - "half=top": { "model": "upper_slab_sandstone" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_sandstone" }, + "half=top": { "model": "upper_slab_sandstone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_stairs.json index b43f5ae5..e22d89b5 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "sandstone_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "sandstone_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "sandstone_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "sandstone_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "sandstone_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "sandstone_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "sandstone_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "sandstone_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "sandstone_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "sandstone_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "sandstone_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "sandstone_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "sandstone_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "sandstone_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "sandstone_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "sandstone_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "sandstone_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "sandstone_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "sandstone_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "sandstone_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "sandstone_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "sandstone_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "sandstone_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "sandstone_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "sandstone_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "sandstone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "sandstone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "sandstone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "sandstone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "sandstone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "sandstone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "sandstone_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "sandstone_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "sandstone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "sandstone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "sandstone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "sandstone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "sandstone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "sandstone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "sandstone_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "sandstone_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "sandstone_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "sandstone_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "sandstone_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "sandstone_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "sandstone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "sandstone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "sandstone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "sandstone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "sandstone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "sandstone_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "sandstone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "sandstone_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "sandstone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "sandstone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "sandstone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "sandstone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "sandstone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "sandstone_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "sandstone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "sandstone_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "sandstone_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "sandstone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "sandstone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "sandstone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "sandstone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "sandstone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "sandstone_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "sandstone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "sandstone_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sea_lantern.json b/desktopRuntime/resources/assets/minecraft/blockstates/sea_lantern.json index 5b2b5354..16c1385f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sea_lantern.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sea_lantern.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "sea_lantern" } - } -} +{ + "variants": { + "normal": { "model": "sea_lantern" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/silver_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/silver_carpet.json index 031981d1..6339957f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/silver_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_silver" } - } -} +{ + "variants": { + "normal": { "model": "carpet_silver" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass.json index f23bb99a..83012f88 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_silver" } - } -} +{ + "variants": { + "normal": { "model": "glass_silver" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass_pane.json index aba229b4..d9757d5d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass_pane.json @@ -1,20 +1,53 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "silver_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "silver_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "silver_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "silver_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "silver_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "silver_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "silver_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "silver_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "silver_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "silver_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "silver_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "silver_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "silver_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "silver_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "silver_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "silver_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "silver_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "silver_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "silver_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "silver_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "silver_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "silver_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "silver_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "silver_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "silver_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "silver_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "silver_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "silver_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "silver_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "silver_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "silver_pane_new" + }, + "east=true,north=true,south=true,west=true": { "model": "silver_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_hardened_clay.json index fe793cee..aa7ff78c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_silver" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_silver" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/silver_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/silver_wool.json index 9727ea57..6ef5d472 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/silver_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "silver_wool" } - } -} +{ + "variants": { + "normal": { "model": "silver_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/slime.json b/desktopRuntime/resources/assets/minecraft/blockstates/slime.json index 1dd6afe0..5e39d26e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/slime.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/slime.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "slime" } - } -} +{ + "variants": { + "normal": { "model": "slime" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json index f3047952..52657d7d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "andesite_smooth" } - } -} +{ + "variants": { + "normal": { "model": "andesite_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_diorite.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_diorite.json index 02c83584..97d6555d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_diorite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_diorite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "diorite_smooth" } - } -} +{ + "variants": { + "normal": { "model": "diorite_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_granite.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_granite.json index 90d73d09..9ce2d1b0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_granite.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_granite.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "granite_smooth" } - } -} +{ + "variants": { + "normal": { "model": "granite_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_red_sandstone.json index cbe1115f..e47595be 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_red_sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "red_sandstone_smooth" } - } -} +{ + "variants": { + "normal": { "model": "red_sandstone_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_sandstone.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_sandstone.json index 2ef9e518..b671616e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_sandstone.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "sandstone_smooth" } - } -} +{ + "variants": { + "normal": { "model": "sandstone_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/snow.json b/desktopRuntime/resources/assets/minecraft/blockstates/snow.json index 0b7e15ea..48c9f5aa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/snow.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/snow.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "snow" } - } -} +{ + "variants": { + "normal": { "model": "snow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json b/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json index c9f0ac0f..7f1277a4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json @@ -1,12 +1,12 @@ -{ - "variants": { - "layers=1": { "model": "snow_height2" }, - "layers=2": { "model": "snow_height4" }, - "layers=3": { "model": "snow_height6" }, - "layers=4": { "model": "snow_height8" }, - "layers=5": { "model": "snow_height10" }, - "layers=6": { "model": "snow_height12" }, - "layers=7": { "model": "snow_height14" }, - "layers=8": { "model": "snow" } - } -} +{ + "variants": { + "layers=1": { "model": "snow_height2" }, + "layers=2": { "model": "snow_height4" }, + "layers=3": { "model": "snow_height6" }, + "layers=4": { "model": "snow_height8" }, + "layers=5": { "model": "snow_height10" }, + "layers=6": { "model": "snow_height12" }, + "layers=7": { "model": "snow_height14" }, + "layers=8": { "model": "snow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json b/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json index 43435402..a722bce2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "soul_sand" } - } -} +{ + "variants": { + "normal": { "model": "soul_sand" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json b/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json index 71ab2009..2c174ee4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json @@ -1,6 +1,6 @@ -{ - "variants": { - "wet=false": { "model": "sponge" }, - "wet=true": { "model": "sponge_wet" } - } -} +{ + "variants": { + "wet=false": { "model": "sponge" }, + "wet=true": { "model": "sponge_wet" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_door.json index a4ffbcca..2687adfa 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "spruce_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "spruce_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "spruce_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "spruce_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "spruce_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "spruce_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "spruce_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "spruce_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "spruce_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "spruce_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "spruce_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "spruce_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "spruce_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "spruce_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "spruce_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "spruce_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "spruce_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "spruce_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "spruce_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "spruce_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "spruce_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "spruce_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "spruce_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "spruce_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "spruce_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "spruce_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "spruce_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "spruce_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "spruce_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "spruce_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "spruce_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "spruce_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "spruce_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "spruce_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "spruce_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "spruce_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "spruce_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "spruce_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "spruce_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "spruce_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "spruce_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "spruce_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "spruce_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "spruce_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "spruce_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "spruce_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "spruce_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "spruce_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "spruce_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "spruce_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "spruce_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "spruce_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "spruce_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "spruce_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "spruce_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "spruce_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "spruce_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "spruce_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "spruce_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "spruce_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "spruce_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "spruce_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "spruce_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "spruce_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_double_slab.json index 3f0489c4..7986668a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_double_slab.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "spruce_planks" } - } -} +{ + "variants": { + "normal": { "model": "spruce_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence.json index a0b9d5fb..34d8705c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence.json @@ -1,20 +1,77 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "spruce_fence_post" }, - "east=false,north=true,south=false,west=false": { "model": "spruce_fence_n", "uvlock": true }, - "east=true,north=false,south=false,west=false": { "model": "spruce_fence_n", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=false": { "model": "spruce_fence_n", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,west=true": { "model": "spruce_fence_n", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,west=false": { "model": "spruce_fence_ne", "uvlock": true }, - "east=true,north=false,south=true,west=false": { "model": "spruce_fence_ne", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,west=true": { "model": "spruce_fence_ne", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,west=true": { "model": "spruce_fence_ne", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,west=false": { "model": "spruce_fence_ns", "uvlock": true }, - "east=true,north=false,south=false,west=true": { "model": "spruce_fence_ns", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,west=false": { "model": "spruce_fence_nse", "uvlock": true }, - "east=true,north=false,south=true,west=true": { "model": "spruce_fence_nse", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,west=true": { "model": "spruce_fence_nse", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,west=true": { "model": "spruce_fence_nse", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,west=true": { "model": "spruce_fence_nsew", "uvlock": true } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "spruce_fence_post" + }, + "east=false,north=true,south=false,west=false": { + "model": "spruce_fence_n", + "uvlock": true + }, + "east=true,north=false,south=false,west=false": { + "model": "spruce_fence_n", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=false": { + "model": "spruce_fence_n", + "y": 180, + "uvlock": true + }, + "east=false,north=false,south=false,west=true": { + "model": "spruce_fence_n", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=false,west=false": { + "model": "spruce_fence_ne", + "uvlock": true + }, + "east=true,north=false,south=true,west=false": { + "model": "spruce_fence_ne", + "y": 90, + "uvlock": true + }, + "east=false,north=false,south=true,west=true": { + "model": "spruce_fence_ne", + "y": 180, + "uvlock": true + }, + "east=false,north=true,south=false,west=true": { + "model": "spruce_fence_ne", + "y": 270, + "uvlock": true + }, + "east=false,north=true,south=true,west=false": { + "model": "spruce_fence_ns", + "uvlock": true + }, + "east=true,north=false,south=false,west=true": { + "model": "spruce_fence_ns", + "y": 90, + "uvlock": true + }, + "east=true,north=true,south=true,west=false": { + "model": "spruce_fence_nse", + "uvlock": true + }, + "east=true,north=false,south=true,west=true": { + "model": "spruce_fence_nse", + "y": 90, + "uvlock": true + }, + "east=false,north=true,south=true,west=true": { + "model": "spruce_fence_nse", + "y": 180, + "uvlock": true + }, + "east=true,north=true,south=false,west=true": { + "model": "spruce_fence_nse", + "y": 270, + "uvlock": true + }, + "east=true,north=true,south=true,west=true": { + "model": "spruce_fence_nsew", + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence_gate.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence_gate.json index fade719d..f0516d34 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence_gate.json @@ -1,20 +1,74 @@ -{ - "variants": { - "facing=south,in_wall=false,open=false": { "model": "spruce_fence_gate_closed" }, - "facing=west,in_wall=false,open=false": { "model": "spruce_fence_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=false": { "model": "spruce_fence_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=false": { "model": "spruce_fence_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=false,open=true": { "model": "spruce_fence_gate_open" }, - "facing=west,in_wall=false,open=true": { "model": "spruce_fence_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=false,open=true": { "model": "spruce_fence_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=false,open=true": { "model": "spruce_fence_gate_open", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=false": { "model": "spruce_wall_gate_closed" }, - "facing=west,in_wall=true,open=false": { "model": "spruce_wall_gate_closed", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=false": { "model": "spruce_wall_gate_closed", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=false": { "model": "spruce_wall_gate_closed", "y": 270, "uvlock": true }, - "facing=south,in_wall=true,open=true": { "model": "spruce_wall_gate_open" }, - "facing=west,in_wall=true,open=true": { "model": "spruce_wall_gate_open", "y": 90, "uvlock": true }, - "facing=north,in_wall=true,open=true": { "model": "spruce_wall_gate_open", "y": 180, "uvlock": true }, - "facing=east,in_wall=true,open=true": { "model": "spruce_wall_gate_open", "y": 270, "uvlock": true } - } -} +{ + "variants": { + "facing=south,in_wall=false,open=false": { + "model": "spruce_fence_gate_closed" + }, + "facing=west,in_wall=false,open=false": { + "model": "spruce_fence_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=false": { + "model": "spruce_fence_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=false": { + "model": "spruce_fence_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "spruce_fence_gate_open" + }, + "facing=west,in_wall=false,open=true": { + "model": "spruce_fence_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=false,open=true": { + "model": "spruce_fence_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=false,open=true": { + "model": "spruce_fence_gate_open", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "spruce_wall_gate_closed" + }, + "facing=west,in_wall=true,open=false": { + "model": "spruce_wall_gate_closed", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=false": { + "model": "spruce_wall_gate_closed", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=false": { + "model": "spruce_wall_gate_closed", + "y": 270, + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { "model": "spruce_wall_gate_open" }, + "facing=west,in_wall=true,open=true": { + "model": "spruce_wall_gate_open", + "y": 90, + "uvlock": true + }, + "facing=north,in_wall=true,open=true": { + "model": "spruce_wall_gate_open", + "y": 180, + "uvlock": true + }, + "facing=east,in_wall=true,open=true": { + "model": "spruce_wall_gate_open", + "y": 270, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_leaves.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_leaves.json index a1616dcc..958f7580 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_leaves.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "spruce_leaves" } - } -} +{ + "variants": { + "normal": { "model": "spruce_leaves" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_log.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_log.json index 1d43dc51..c8bcb0d6 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_log.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_log.json @@ -1,8 +1,8 @@ -{ - "variants": { - "axis=y": { "model": "spruce_log" }, - "axis=z": { "model": "spruce_log_side" }, - "axis=x": { "model": "spruce_log_side", "y": 90 }, - "axis=none": { "model": "spruce_bark" } - } -} +{ + "variants": { + "axis=y": { "model": "spruce_log" }, + "axis=z": { "model": "spruce_log_side" }, + "axis=x": { "model": "spruce_log_side", "y": 90 }, + "axis=none": { "model": "spruce_bark" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json index 3f0489c4..7986668a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "spruce_planks" } - } -} +{ + "variants": { + "normal": { "model": "spruce_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_sapling.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_sapling.json index 53153125..3702024a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_sapling.json @@ -1,6 +1,6 @@ -{ - "variants": { - "stage=0": { "model": "spruce_sapling" }, - "stage=1": { "model": "spruce_sapling" } - } -} +{ + "variants": { + "stage=0": { "model": "spruce_sapling" }, + "stage=1": { "model": "spruce_sapling" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_slab.json index a5592a86..1fae50bd 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_spruce" }, - "half=top": { "model": "upper_slab_spruce" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_spruce" }, + "half=top": { "model": "upper_slab_spruce" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_stairs.json index d4e9afb3..e72d6cc1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "spruce_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "spruce_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "spruce_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "spruce_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "spruce_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "spruce_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "spruce_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "spruce_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "spruce_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "spruce_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "spruce_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "spruce_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "spruce_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "spruce_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "spruce_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "spruce_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "spruce_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "spruce_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "spruce_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "spruce_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "spruce_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "spruce_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "spruce_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "spruce_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "spruce_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "spruce_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "spruce_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "spruce_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "spruce_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "spruce_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "spruce_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "spruce_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "spruce_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "spruce_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "spruce_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "spruce_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "spruce_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "spruce_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "spruce_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "spruce_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "spruce_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "spruce_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "spruce_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "spruce_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "spruce_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "spruce_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "spruce_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "spruce_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "spruce_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "spruce_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "spruce_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "spruce_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "spruce_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "spruce_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "spruce_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "spruce_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "spruce_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "spruce_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "spruce_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "spruce_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "spruce_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "spruce_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "spruce_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "spruce_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "spruce_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "spruce_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "spruce_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "spruce_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "spruce_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "spruce_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sticky_piston.json b/desktopRuntime/resources/assets/minecraft/blockstates/sticky_piston.json index 32f68473..eaac838b 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sticky_piston.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sticky_piston.json @@ -1,16 +1,22 @@ -{ - "variants": { - "extended=false,facing=down": { "model": "sticky_piston", "x": 90 }, - "extended=false,facing=up": { "model": "sticky_piston", "x": 270 }, - "extended=false,facing=north": { "model": "sticky_piston" }, - "extended=false,facing=south": { "model": "sticky_piston", "y": 180 }, - "extended=false,facing=west": { "model": "sticky_piston", "y": 270 }, - "extended=false,facing=east": { "model": "sticky_piston", "y": 90 }, - "extended=true,facing=down": { "model": "piston_extended_normal", "x": 90 }, - "extended=true,facing=up": { "model": "piston_extended_normal", "x": 270 }, - "extended=true,facing=north": { "model": "piston_extended_normal" }, - "extended=true,facing=south": { "model": "piston_extended_normal", "y": 180 }, - "extended=true,facing=west": { "model": "piston_extended_normal", "y": 270 }, - "extended=true,facing=east": { "model": "piston_extended_normal", "y": 90 } - } -} +{ + "variants": { + "extended=false,facing=down": { "model": "sticky_piston", "x": 90 }, + "extended=false,facing=up": { "model": "sticky_piston", "x": 270 }, + "extended=false,facing=north": { "model": "sticky_piston" }, + "extended=false,facing=south": { "model": "sticky_piston", "y": 180 }, + "extended=false,facing=west": { "model": "sticky_piston", "y": 270 }, + "extended=false,facing=east": { "model": "sticky_piston", "y": 90 }, + "extended=true,facing=down": { "model": "piston_extended_normal", "x": 90 }, + "extended=true,facing=up": { "model": "piston_extended_normal", "x": 270 }, + "extended=true,facing=north": { "model": "piston_extended_normal" }, + "extended=true,facing=south": { + "model": "piston_extended_normal", + "y": 180 + }, + "extended=true,facing=west": { + "model": "piston_extended_normal", + "y": 270 + }, + "extended=true,facing=east": { "model": "piston_extended_normal", "y": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone.json index bfa2c110..6d354415 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "stone" }, - { "model": "stone_mirrored" }, - { "model": "stone", "y": 180 }, - { "model": "stone_mirrored", "y": 180 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "stone" }, + { "model": "stone_mirrored" }, + { "model": "stone", "y": 180 }, + { "model": "stone_mirrored", "y": 180 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_double_slab.json index 04d4beb7..45de85a8 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "stonebrick_normal" }, - "all": { "model": "stonebrick_normal" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_normal" }, + "all": { "model": "stonebrick_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_monster_egg.json index e5a47973..65bcc668 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_normal" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_slab.json index 222787d3..8da5e5d4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_stone_brick" }, - "half=top": { "model": "upper_slab_stone_brick" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_stone_brick" }, + "half=top": { "model": "upper_slab_stone_brick" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_stairs.json index 499178ef..b3ecf716 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "stone_brick_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "stone_brick_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "stone_brick_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "stone_brick_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "stone_brick_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "stone_brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "stone_brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "stone_brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "stone_brick_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "stone_brick_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "stone_brick_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "stone_brick_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "stone_brick_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "stone_brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "stone_brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "stone_brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "stone_brick_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "stone_brick_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "stone_brick_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "stone_brick_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "stone_brick_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "stone_brick_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "stone_brick_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "stone_brick_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "stone_brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "stone_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "stone_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "stone_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "stone_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "stone_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "stone_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "stone_brick_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "stone_brick_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "stone_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "stone_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "stone_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "stone_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "stone_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "stone_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "stone_brick_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "stone_brick_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "stone_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stone_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stone_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "stone_brick_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "stone_brick_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "stone_brick_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "stone_brick_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stone_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stone_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stone_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stone_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "stone_brick_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "stone_brick_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_button.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_button.json index 33f10033..116b5c0f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_button.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_button.json @@ -1,16 +1,32 @@ -{ - "variants": { - "facing=up,powered=false": { "model": "stone_button" }, - "facing=down,powered=false": { "model": "stone_button", "x": 180 }, - "facing=east,powered=false": { "model": "stone_button", "x": 90, "y": 90 }, - "facing=west,powered=false": { "model": "stone_button", "x": 90, "y": 270 }, - "facing=south,powered=false": { "model": "stone_button", "x": 90, "y": 180 }, - "facing=north,powered=false": { "model": "stone_button", "x": 90 }, - "facing=up,powered=true": { "model": "stone_button_pressed" }, - "facing=down,powered=true": { "model": "stone_button_pressed", "x": 180 }, - "facing=east,powered=true": { "model": "stone_button_pressed", "x": 90, "y": 90 }, - "facing=west,powered=true": { "model": "stone_button_pressed", "x": 90, "y": 270 }, - "facing=south,powered=true": { "model": "stone_button_pressed", "x": 90, "y": 180 }, - "facing=north,powered=true": { "model": "stone_button_pressed", "x": 90 } - } -} +{ + "variants": { + "facing=up,powered=false": { "model": "stone_button" }, + "facing=down,powered=false": { "model": "stone_button", "x": 180 }, + "facing=east,powered=false": { "model": "stone_button", "x": 90, "y": 90 }, + "facing=west,powered=false": { "model": "stone_button", "x": 90, "y": 270 }, + "facing=south,powered=false": { + "model": "stone_button", + "x": 90, + "y": 180 + }, + "facing=north,powered=false": { "model": "stone_button", "x": 90 }, + "facing=up,powered=true": { "model": "stone_button_pressed" }, + "facing=down,powered=true": { "model": "stone_button_pressed", "x": 180 }, + "facing=east,powered=true": { + "model": "stone_button_pressed", + "x": 90, + "y": 90 + }, + "facing=west,powered=true": { + "model": "stone_button_pressed", + "x": 90, + "y": 270 + }, + "facing=south,powered=true": { + "model": "stone_button_pressed", + "x": 90, + "y": 180 + }, + "facing=north,powered=true": { "model": "stone_button_pressed", "x": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_double_slab.json index 2c34a430..0a3dca39 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "double_stone" }, - "all": { "model": "double_stone_top" } - } -} +{ + "variants": { + "normal": { "model": "double_stone" }, + "all": { "model": "double_stone_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_monster_egg.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_monster_egg.json index 7e6c9fca..5c31822e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_monster_egg.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stone" } - } -} +{ + "variants": { + "normal": { "model": "stone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_pressure_plate.json index 7e107746..b81be7bf 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_pressure_plate.json @@ -1,6 +1,6 @@ -{ - "variants": { - "powered=false": { "model": "stone_pressure_plate_up" }, - "powered=true": { "model": "stone_pressure_plate_down" } - } -} +{ + "variants": { + "powered=false": { "model": "stone_pressure_plate_up" }, + "powered=true": { "model": "stone_pressure_plate_down" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_slab.json index d03bf463..1d580acb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_stone" }, - "half=top": { "model": "upper_slab_stone" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_stone" }, + "half=top": { "model": "upper_slab_stone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stone_stairs.json b/desktopRuntime/resources/assets/minecraft/blockstates/stone_stairs.json index d4c6b5a8..23bf325d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_stairs.json @@ -1,44 +1,207 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "stone_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "stone_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "stone_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "stone_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "stone_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "stone_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "stone_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "stone_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "stone_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "stone_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "stone_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "stone_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "stone_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "stone_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "stone_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "stone_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "stone_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "stone_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "stone_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "stone_inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "stone_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "stone_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "stone_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "stone_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "stone_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "stone_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "stone_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "stone_inner_stairs", "x": 180, "uvlock": true } - } -} +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "stone_stairs" }, + "facing=west,half=bottom,shape=straight": { + "model": "stone_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stone_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stone_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "stone_outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "stone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "stone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "stone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "stone_outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "stone_outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "stone_outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "stone_outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "stone_inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "stone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "stone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "stone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "stone_inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "stone_inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "stone_inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "stone_inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stone_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stone_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stone_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stone_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "stone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "stone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "stone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "stone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "stone_outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "stone_outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "stone_outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "stone_outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "stone_inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "stone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "stone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "stone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "stone_inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "stone_inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "stone_inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "stone_inner_stairs", + "x": 180, + "uvlock": true + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/stonebrick.json b/desktopRuntime/resources/assets/minecraft/blockstates/stonebrick.json index e5a47973..65bcc668 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stonebrick.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "stonebrick_normal" } - } -} +{ + "variants": { + "normal": { "model": "stonebrick_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json b/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json index ce27265d..26b08ef0 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_sunflower_bottom" }, - "half=upper": { "model": "double_sunflower_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_sunflower_bottom" }, + "half=upper": { "model": "double_sunflower_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/syringa.json b/desktopRuntime/resources/assets/minecraft/blockstates/syringa.json index 2f11b5c4..f23028f3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/syringa.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/syringa.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=lower": { "model": "double_syringa_bottom" }, - "half=upper": { "model": "double_syringa_top" } - } -} +{ + "variants": { + "half=lower": { "model": "double_syringa_bottom" }, + "half=upper": { "model": "double_syringa_top" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/tall_grass.json b/desktopRuntime/resources/assets/minecraft/blockstates/tall_grass.json index 57228dad..d95f2735 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/tall_grass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tall_grass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "tall_grass" } - } -} +{ + "variants": { + "normal": { "model": "tall_grass" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json b/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json index 3386fa27..c80f96e2 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "tnt" }, - { "model": "tnt", "y": 90 }, - { "model": "tnt", "y": 180 }, - { "model": "tnt", "y": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "tnt" }, + { "model": "tnt", "y": 90 }, + { "model": "tnt", "y": 180 }, + { "model": "tnt", "y": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/torch.json b/desktopRuntime/resources/assets/minecraft/blockstates/torch.json index 479ce730..76a2088e 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/torch.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/torch.json @@ -1,9 +1,9 @@ -{ - "variants": { - "facing=up": { "model": "normal_torch" }, - "facing=east": { "model": "normal_torch_wall" }, - "facing=south": { "model": "normal_torch_wall", "y": 90 }, - "facing=west": { "model": "normal_torch_wall", "y": 180 }, - "facing=north": { "model": "normal_torch_wall", "y": 270 } - } -} +{ + "variants": { + "facing=up": { "model": "normal_torch" }, + "facing=east": { "model": "normal_torch_wall" }, + "facing=south": { "model": "normal_torch_wall", "y": 90 }, + "facing=west": { "model": "normal_torch_wall", "y": 180 }, + "facing=north": { "model": "normal_torch_wall", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json b/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json index 059c892c..5237cb46 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json @@ -1,20 +1,42 @@ -{ - "variants": { - "facing=north,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, - "facing=south,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, - "facing=east,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, - "facing=west,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, - "facing=north,half=top,open=false": { "model": "wooden_trapdoor_top" }, - "facing=south,half=top,open=false": { "model": "wooden_trapdoor_top" }, - "facing=east,half=top,open=false": { "model": "wooden_trapdoor_top" }, - "facing=west,half=top,open=false": { "model": "wooden_trapdoor_top" }, - "facing=north,half=bottom,open=true": { "model": "wooden_trapdoor_open" }, - "facing=south,half=bottom,open=true": { "model": "wooden_trapdoor_open", "y": 180 }, - "facing=east,half=bottom,open=true": { "model": "wooden_trapdoor_open", "y": 90 }, - "facing=west,half=bottom,open=true": { "model": "wooden_trapdoor_open", "y": 270 }, - "facing=north,half=top,open=true": { "model": "wooden_trapdoor_open" }, - "facing=south,half=top,open=true": { "model": "wooden_trapdoor_open", "y": 180 }, - "facing=east,half=top,open=true": { "model": "wooden_trapdoor_open", "y": 90 }, - "facing=west,half=top,open=true": { "model": "wooden_trapdoor_open", "y": 270 } - } -} +{ + "variants": { + "facing=north,half=bottom,open=false": { + "model": "wooden_trapdoor_bottom" + }, + "facing=south,half=bottom,open=false": { + "model": "wooden_trapdoor_bottom" + }, + "facing=east,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, + "facing=west,half=bottom,open=false": { "model": "wooden_trapdoor_bottom" }, + "facing=north,half=top,open=false": { "model": "wooden_trapdoor_top" }, + "facing=south,half=top,open=false": { "model": "wooden_trapdoor_top" }, + "facing=east,half=top,open=false": { "model": "wooden_trapdoor_top" }, + "facing=west,half=top,open=false": { "model": "wooden_trapdoor_top" }, + "facing=north,half=bottom,open=true": { "model": "wooden_trapdoor_open" }, + "facing=south,half=bottom,open=true": { + "model": "wooden_trapdoor_open", + "y": 180 + }, + "facing=east,half=bottom,open=true": { + "model": "wooden_trapdoor_open", + "y": 90 + }, + "facing=west,half=bottom,open=true": { + "model": "wooden_trapdoor_open", + "y": 270 + }, + "facing=north,half=top,open=true": { "model": "wooden_trapdoor_open" }, + "facing=south,half=top,open=true": { + "model": "wooden_trapdoor_open", + "y": 180 + }, + "facing=east,half=top,open=true": { + "model": "wooden_trapdoor_open", + "y": 90 + }, + "facing=west,half=top,open=true": { + "model": "wooden_trapdoor_open", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/tripwire.json b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire.json index 07a1ffe1..8416bc90 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/tripwire.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire.json @@ -1,68 +1,236 @@ -{ - "variants": { - "attached=false,east=false,north=false,south=false,suspended=false,west=false": { "model": "tripwire_ns" }, - "attached=false,east=false,north=true,south=false,suspended=false,west=false": { "model": "tripwire_n" }, - "attached=false,east=false,north=false,south=true,suspended=false,west=false": { "model": "tripwire_n", "y": 180 }, - "attached=false,east=true,north=false,south=false,suspended=false,west=false": { "model": "tripwire_n", "y": 90 }, - "attached=false,east=false,north=false,south=false,suspended=false,west=true": { "model": "tripwire_n", "y": 270 }, - "attached=false,east=true,north=true,south=false,suspended=false,west=false": { "model": "tripwire_ne" }, - "attached=false,east=true,north=false,south=true,suspended=false,west=false": { "model": "tripwire_ne", "y": 90 }, - "attached=false,east=false,north=false,south=true,suspended=false,west=true": { "model": "tripwire_ne", "y": 180 }, - "attached=false,east=false,north=true,south=false,suspended=false,west=true": { "model": "tripwire_ne", "y": 270 }, - "attached=false,east=false,north=true,south=true,suspended=false,west=false": { "model": "tripwire_ns" }, - "attached=false,east=true,north=false,south=false,suspended=false,west=true": { "model": "tripwire_ns", "y": 90 }, - "attached=false,east=true,north=true,south=true,suspended=false,west=false": { "model": "tripwire_nse" }, - "attached=false,east=true,north=false,south=true,suspended=false,west=true": { "model": "tripwire_nse", "y": 90 }, - "attached=false,east=false,north=true,south=true,suspended=false,west=true": { "model": "tripwire_nse", "y": 180 }, - "attached=false,east=true,north=true,south=false,suspended=false,west=true": { "model": "tripwire_nse", "y": 270 }, - "attached=false,east=true,north=true,south=true,suspended=false,west=true": { "model": "tripwire_nsew" }, - "attached=false,east=false,north=false,south=false,suspended=true,west=false": { "model": "tripwire_suspended_ns" }, - "attached=false,east=false,north=true,south=false,suspended=true,west=false": { "model": "tripwire_suspended_n" }, - "attached=false,east=false,north=false,south=true,suspended=true,west=false": { "model": "tripwire_suspended_n", "y": 180 }, - "attached=false,east=true,north=false,south=false,suspended=true,west=false": { "model": "tripwire_suspended_n", "y": 90 }, - "attached=false,east=false,north=false,south=false,suspended=true,west=true": { "model": "tripwire_suspended_n", "y": 270 }, - "attached=false,east=true,north=true,south=false,suspended=true,west=false": { "model": "tripwire_suspended_ne" }, - "attached=false,east=true,north=false,south=true,suspended=true,west=false": { "model": "tripwire_suspended_ne", "y": 90 }, - "attached=false,east=false,north=false,south=true,suspended=true,west=true": { "model": "tripwire_suspended_ne", "y": 180 }, - "attached=false,east=false,north=true,south=false,suspended=true,west=true": { "model": "tripwire_suspended_ne", "y": 270 }, - "attached=false,east=false,north=true,south=true,suspended=true,west=false": { "model": "tripwire_suspended_ns" }, - "attached=false,east=true,north=false,south=false,suspended=true,west=true": { "model": "tripwire_suspended_ns", "y": 90 }, - "attached=false,east=true,north=true,south=true,suspended=true,west=false": { "model": "tripwire_suspended_nse" }, - "attached=false,east=true,north=false,south=true,suspended=true,west=true": { "model": "tripwire_suspended_nse", "y": 90 }, - "attached=false,east=false,north=true,south=true,suspended=true,west=true": { "model": "tripwire_suspended_nse", "y": 180 }, - "attached=false,east=true,north=true,south=false,suspended=true,west=true": { "model": "tripwire_suspended_nse", "y": 270 }, - "attached=false,east=true,north=true,south=true,suspended=true,west=true": { "model": "tripwire_suspended_nsew" }, - "attached=true,east=false,north=false,south=false,suspended=false,west=false": { "model": "tripwire_attached_ns" }, - "attached=true,east=false,north=true,south=false,suspended=false,west=false": { "model": "tripwire_attached_n" }, - "attached=true,east=false,north=false,south=true,suspended=false,west=false": { "model": "tripwire_attached_n", "y": 180 }, - "attached=true,east=true,north=false,south=false,suspended=false,west=false": { "model": "tripwire_attached_n", "y": 90 }, - "attached=true,east=false,north=false,south=false,suspended=false,west=true": { "model": "tripwire_attached_n", "y": 270 }, - "attached=true,east=true,north=true,south=false,suspended=false,west=false": { "model": "tripwire_attached_ne" }, - "attached=true,east=true,north=false,south=true,suspended=false,west=false": { "model": "tripwire_attached_ne", "y": 90 }, - "attached=true,east=false,north=false,south=true,suspended=false,west=true": { "model": "tripwire_attached_ne", "y": 180 }, - "attached=true,east=false,north=true,south=false,suspended=false,west=true": { "model": "tripwire_attached_ne", "y": 270 }, - "attached=true,east=false,north=true,south=true,suspended=false,west=false": { "model": "tripwire_attached_ns" }, - "attached=true,east=true,north=false,south=false,suspended=false,west=true": { "model": "tripwire_attached_ns", "y": 90 }, - "attached=true,east=true,north=true,south=true,suspended=false,west=false": { "model": "tripwire_attached_nse" }, - "attached=true,east=true,north=false,south=true,suspended=false,west=true": { "model": "tripwire_attached_nse", "y": 90 }, - "attached=true,east=false,north=true,south=true,suspended=false,west=true": { "model": "tripwire_attached_nse", "y": 180 }, - "attached=true,east=true,north=true,south=false,suspended=false,west=true": { "model": "tripwire_attached_nse", "y": 270 }, - "attached=true,east=true,north=true,south=true,suspended=false,west=true": { "model": "tripwire_attached_nsew" }, - "attached=true,east=false,north=false,south=false,suspended=true,west=false": { "model": "tripwire_attached_suspended_ns" }, - "attached=true,east=false,north=true,south=false,suspended=true,west=false": { "model": "tripwire_attached_suspended_n" }, - "attached=true,east=false,north=false,south=true,suspended=true,west=false": { "model": "tripwire_attached_suspended_n", "y": 180 }, - "attached=true,east=true,north=false,south=false,suspended=true,west=false": { "model": "tripwire_attached_suspended_n", "y": 90 }, - "attached=true,east=false,north=false,south=false,suspended=true,west=true": { "model": "tripwire_attached_suspended_n", "y": 270 }, - "attached=true,east=true,north=true,south=false,suspended=true,west=false": { "model": "tripwire_attached_suspended_ne" }, - "attached=true,east=true,north=false,south=true,suspended=true,west=false": { "model": "tripwire_attached_suspended_ne", "y": 90 }, - "attached=true,east=false,north=false,south=true,suspended=true,west=true": { "model": "tripwire_attached_suspended_ne", "y": 180 }, - "attached=true,east=false,north=true,south=false,suspended=true,west=true": { "model": "tripwire_attached_suspended_ne", "y": 270 }, - "attached=true,east=false,north=true,south=true,suspended=true,west=false": { "model": "tripwire_attached_suspended_ns" }, - "attached=true,east=true,north=false,south=false,suspended=true,west=true": { "model": "tripwire_attached_suspended_ns", "y": 90 }, - "attached=true,east=true,north=true,south=true,suspended=true,west=false": { "model": "tripwire_attached_suspended_nse" }, - "attached=true,east=true,north=false,south=true,suspended=true,west=true": { "model": "tripwire_attached_suspended_nse", "y": 90 }, - "attached=true,east=false,north=true,south=true,suspended=true,west=true": { "model": "tripwire_attached_suspended_nse", "y": 180 }, - "attached=true,east=true,north=true,south=false,suspended=true,west=true": { "model": "tripwire_attached_suspended_nse", "y": 270 }, - "attached=true,east=true,north=true,south=true,suspended=true,west=true": { "model": "tripwire_attached_suspended_nsew" } - } -} +{ + "variants": { + "attached=false,east=false,north=false,south=false,suspended=false,west=false": { + "model": "tripwire_ns" + }, + "attached=false,east=false,north=true,south=false,suspended=false,west=false": { + "model": "tripwire_n" + }, + "attached=false,east=false,north=false,south=true,suspended=false,west=false": { + "model": "tripwire_n", + "y": 180 + }, + "attached=false,east=true,north=false,south=false,suspended=false,west=false": { + "model": "tripwire_n", + "y": 90 + }, + "attached=false,east=false,north=false,south=false,suspended=false,west=true": { + "model": "tripwire_n", + "y": 270 + }, + "attached=false,east=true,north=true,south=false,suspended=false,west=false": { + "model": "tripwire_ne" + }, + "attached=false,east=true,north=false,south=true,suspended=false,west=false": { + "model": "tripwire_ne", + "y": 90 + }, + "attached=false,east=false,north=false,south=true,suspended=false,west=true": { + "model": "tripwire_ne", + "y": 180 + }, + "attached=false,east=false,north=true,south=false,suspended=false,west=true": { + "model": "tripwire_ne", + "y": 270 + }, + "attached=false,east=false,north=true,south=true,suspended=false,west=false": { + "model": "tripwire_ns" + }, + "attached=false,east=true,north=false,south=false,suspended=false,west=true": { + "model": "tripwire_ns", + "y": 90 + }, + "attached=false,east=true,north=true,south=true,suspended=false,west=false": { + "model": "tripwire_nse" + }, + "attached=false,east=true,north=false,south=true,suspended=false,west=true": { + "model": "tripwire_nse", + "y": 90 + }, + "attached=false,east=false,north=true,south=true,suspended=false,west=true": { + "model": "tripwire_nse", + "y": 180 + }, + "attached=false,east=true,north=true,south=false,suspended=false,west=true": { + "model": "tripwire_nse", + "y": 270 + }, + "attached=false,east=true,north=true,south=true,suspended=false,west=true": { + "model": "tripwire_nsew" + }, + "attached=false,east=false,north=false,south=false,suspended=true,west=false": { + "model": "tripwire_suspended_ns" + }, + "attached=false,east=false,north=true,south=false,suspended=true,west=false": { + "model": "tripwire_suspended_n" + }, + "attached=false,east=false,north=false,south=true,suspended=true,west=false": { + "model": "tripwire_suspended_n", + "y": 180 + }, + "attached=false,east=true,north=false,south=false,suspended=true,west=false": { + "model": "tripwire_suspended_n", + "y": 90 + }, + "attached=false,east=false,north=false,south=false,suspended=true,west=true": { + "model": "tripwire_suspended_n", + "y": 270 + }, + "attached=false,east=true,north=true,south=false,suspended=true,west=false": { + "model": "tripwire_suspended_ne" + }, + "attached=false,east=true,north=false,south=true,suspended=true,west=false": { + "model": "tripwire_suspended_ne", + "y": 90 + }, + "attached=false,east=false,north=false,south=true,suspended=true,west=true": { + "model": "tripwire_suspended_ne", + "y": 180 + }, + "attached=false,east=false,north=true,south=false,suspended=true,west=true": { + "model": "tripwire_suspended_ne", + "y": 270 + }, + "attached=false,east=false,north=true,south=true,suspended=true,west=false": { + "model": "tripwire_suspended_ns" + }, + "attached=false,east=true,north=false,south=false,suspended=true,west=true": { + "model": "tripwire_suspended_ns", + "y": 90 + }, + "attached=false,east=true,north=true,south=true,suspended=true,west=false": { + "model": "tripwire_suspended_nse" + }, + "attached=false,east=true,north=false,south=true,suspended=true,west=true": { + "model": "tripwire_suspended_nse", + "y": 90 + }, + "attached=false,east=false,north=true,south=true,suspended=true,west=true": { + "model": "tripwire_suspended_nse", + "y": 180 + }, + "attached=false,east=true,north=true,south=false,suspended=true,west=true": { + "model": "tripwire_suspended_nse", + "y": 270 + }, + "attached=false,east=true,north=true,south=true,suspended=true,west=true": { + "model": "tripwire_suspended_nsew" + }, + "attached=true,east=false,north=false,south=false,suspended=false,west=false": { + "model": "tripwire_attached_ns" + }, + "attached=true,east=false,north=true,south=false,suspended=false,west=false": { + "model": "tripwire_attached_n" + }, + "attached=true,east=false,north=false,south=true,suspended=false,west=false": { + "model": "tripwire_attached_n", + "y": 180 + }, + "attached=true,east=true,north=false,south=false,suspended=false,west=false": { + "model": "tripwire_attached_n", + "y": 90 + }, + "attached=true,east=false,north=false,south=false,suspended=false,west=true": { + "model": "tripwire_attached_n", + "y": 270 + }, + "attached=true,east=true,north=true,south=false,suspended=false,west=false": { + "model": "tripwire_attached_ne" + }, + "attached=true,east=true,north=false,south=true,suspended=false,west=false": { + "model": "tripwire_attached_ne", + "y": 90 + }, + "attached=true,east=false,north=false,south=true,suspended=false,west=true": { + "model": "tripwire_attached_ne", + "y": 180 + }, + "attached=true,east=false,north=true,south=false,suspended=false,west=true": { + "model": "tripwire_attached_ne", + "y": 270 + }, + "attached=true,east=false,north=true,south=true,suspended=false,west=false": { + "model": "tripwire_attached_ns" + }, + "attached=true,east=true,north=false,south=false,suspended=false,west=true": { + "model": "tripwire_attached_ns", + "y": 90 + }, + "attached=true,east=true,north=true,south=true,suspended=false,west=false": { + "model": "tripwire_attached_nse" + }, + "attached=true,east=true,north=false,south=true,suspended=false,west=true": { + "model": "tripwire_attached_nse", + "y": 90 + }, + "attached=true,east=false,north=true,south=true,suspended=false,west=true": { + "model": "tripwire_attached_nse", + "y": 180 + }, + "attached=true,east=true,north=true,south=false,suspended=false,west=true": { + "model": "tripwire_attached_nse", + "y": 270 + }, + "attached=true,east=true,north=true,south=true,suspended=false,west=true": { + "model": "tripwire_attached_nsew" + }, + "attached=true,east=false,north=false,south=false,suspended=true,west=false": { + "model": "tripwire_attached_suspended_ns" + }, + "attached=true,east=false,north=true,south=false,suspended=true,west=false": { + "model": "tripwire_attached_suspended_n" + }, + "attached=true,east=false,north=false,south=true,suspended=true,west=false": { + "model": "tripwire_attached_suspended_n", + "y": 180 + }, + "attached=true,east=true,north=false,south=false,suspended=true,west=false": { + "model": "tripwire_attached_suspended_n", + "y": 90 + }, + "attached=true,east=false,north=false,south=false,suspended=true,west=true": { + "model": "tripwire_attached_suspended_n", + "y": 270 + }, + "attached=true,east=true,north=true,south=false,suspended=true,west=false": { + "model": "tripwire_attached_suspended_ne" + }, + "attached=true,east=true,north=false,south=true,suspended=true,west=false": { + "model": "tripwire_attached_suspended_ne", + "y": 90 + }, + "attached=true,east=false,north=false,south=true,suspended=true,west=true": { + "model": "tripwire_attached_suspended_ne", + "y": 180 + }, + "attached=true,east=false,north=true,south=false,suspended=true,west=true": { + "model": "tripwire_attached_suspended_ne", + "y": 270 + }, + "attached=true,east=false,north=true,south=true,suspended=true,west=false": { + "model": "tripwire_attached_suspended_ns" + }, + "attached=true,east=true,north=false,south=false,suspended=true,west=true": { + "model": "tripwire_attached_suspended_ns", + "y": 90 + }, + "attached=true,east=true,north=true,south=true,suspended=true,west=false": { + "model": "tripwire_attached_suspended_nse" + }, + "attached=true,east=true,north=false,south=true,suspended=true,west=true": { + "model": "tripwire_attached_suspended_nse", + "y": 90 + }, + "attached=true,east=false,north=true,south=true,suspended=true,west=true": { + "model": "tripwire_attached_suspended_nse", + "y": 180 + }, + "attached=true,east=true,north=true,south=false,suspended=true,west=true": { + "model": "tripwire_attached_suspended_nse", + "y": 270 + }, + "attached=true,east=true,north=true,south=true,suspended=true,west=true": { + "model": "tripwire_attached_suspended_nsew" + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/tripwire_hook.json b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire_hook.json index 3d223b14..d004b885 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/tripwire_hook.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire_hook.json @@ -1,36 +1,124 @@ -{ - "variants": { - "attached=false,facing=north,powered=false,suspended=false": { "model": "tripwire_hook" }, - "attached=false,facing=south,powered=false,suspended=false": { "model": "tripwire_hook", "y": 180 }, - "attached=false,facing=west,powered=false,suspended=false": { "model": "tripwire_hook", "y": 270 }, - "attached=false,facing=east,powered=false,suspended=false": { "model": "tripwire_hook", "y": 90 }, - "attached=false,facing=north,powered=false,suspended=true": { "model": "tripwire_hook" }, - "attached=false,facing=south,powered=false,suspended=true": { "model": "tripwire_hook", "y": 180 }, - "attached=false,facing=west,powered=false,suspended=true": { "model": "tripwire_hook", "y": 270 }, - "attached=false,facing=east,powered=false,suspended=true": { "model": "tripwire_hook", "y": 90 }, - "attached=true,facing=north,powered=false,suspended=false": { "model": "tripwire_hook_attached" }, - "attached=true,facing=south,powered=false,suspended=false": { "model": "tripwire_hook_attached", "y": 180 }, - "attached=true,facing=west,powered=false,suspended=false": { "model": "tripwire_hook_attached", "y": 270 }, - "attached=true,facing=east,powered=false,suspended=false": { "model": "tripwire_hook_attached", "y": 90 }, - "attached=true,facing=north,powered=false,suspended=true": { "model": "tripwire_hook_attached_suspended" }, - "attached=true,facing=south,powered=false,suspended=true": { "model": "tripwire_hook_attached_suspended", "y": 180 }, - "attached=true,facing=west,powered=false,suspended=true": { "model": "tripwire_hook_attached_suspended", "y": 270 }, - "attached=true,facing=east,powered=false,suspended=true": { "model": "tripwire_hook_attached_suspended", "y": 90 }, - "attached=false,facing=north,powered=true,suspended=false": { "model": "tripwire_hook_powered" }, - "attached=false,facing=south,powered=true,suspended=false": { "model": "tripwire_hook_powered", "y": 180 }, - "attached=false,facing=west,powered=true,suspended=false": { "model": "tripwire_hook_powered", "y": 270 }, - "attached=false,facing=east,powered=true,suspended=false": { "model": "tripwire_hook_powered", "y": 90 }, - "attached=false,facing=north,powered=true,suspended=true": { "model": "tripwire_hook_powered" }, - "attached=false,facing=south,powered=true,suspended=true": { "model": "tripwire_hook_powered", "y": 180 }, - "attached=false,facing=west,powered=true,suspended=true": { "model": "tripwire_hook_powered", "y": 270 }, - "attached=false,facing=east,powered=true,suspended=true": { "model": "tripwire_hook_powered", "y": 90 }, - "attached=true,facing=north,powered=true,suspended=false": { "model": "tripwire_hook_attached_powered" }, - "attached=true,facing=south,powered=true,suspended=false": { "model": "tripwire_hook_attached_powered", "y": 180 }, - "attached=true,facing=west,powered=true,suspended=false": { "model": "tripwire_hook_attached_powered", "y": 270 }, - "attached=true,facing=east,powered=true,suspended=false": { "model": "tripwire_hook_attached_powered", "y": 90 }, - "attached=true,facing=north,powered=true,suspended=true": { "model": "tripwire_hook_attached_suspended_powered" }, - "attached=true,facing=south,powered=true,suspended=true": { "model": "tripwire_hook_attached_suspended_powered", "y": 180 }, - "attached=true,facing=west,powered=true,suspended=true": { "model": "tripwire_hook_attached_suspended_powered", "y": 270 }, - "attached=true,facing=east,powered=true,suspended=true": { "model": "tripwire_hook_attached_suspended_powered", "y": 90 } - } -} +{ + "variants": { + "attached=false,facing=north,powered=false,suspended=false": { + "model": "tripwire_hook" + }, + "attached=false,facing=south,powered=false,suspended=false": { + "model": "tripwire_hook", + "y": 180 + }, + "attached=false,facing=west,powered=false,suspended=false": { + "model": "tripwire_hook", + "y": 270 + }, + "attached=false,facing=east,powered=false,suspended=false": { + "model": "tripwire_hook", + "y": 90 + }, + "attached=false,facing=north,powered=false,suspended=true": { + "model": "tripwire_hook" + }, + "attached=false,facing=south,powered=false,suspended=true": { + "model": "tripwire_hook", + "y": 180 + }, + "attached=false,facing=west,powered=false,suspended=true": { + "model": "tripwire_hook", + "y": 270 + }, + "attached=false,facing=east,powered=false,suspended=true": { + "model": "tripwire_hook", + "y": 90 + }, + "attached=true,facing=north,powered=false,suspended=false": { + "model": "tripwire_hook_attached" + }, + "attached=true,facing=south,powered=false,suspended=false": { + "model": "tripwire_hook_attached", + "y": 180 + }, + "attached=true,facing=west,powered=false,suspended=false": { + "model": "tripwire_hook_attached", + "y": 270 + }, + "attached=true,facing=east,powered=false,suspended=false": { + "model": "tripwire_hook_attached", + "y": 90 + }, + "attached=true,facing=north,powered=false,suspended=true": { + "model": "tripwire_hook_attached_suspended" + }, + "attached=true,facing=south,powered=false,suspended=true": { + "model": "tripwire_hook_attached_suspended", + "y": 180 + }, + "attached=true,facing=west,powered=false,suspended=true": { + "model": "tripwire_hook_attached_suspended", + "y": 270 + }, + "attached=true,facing=east,powered=false,suspended=true": { + "model": "tripwire_hook_attached_suspended", + "y": 90 + }, + "attached=false,facing=north,powered=true,suspended=false": { + "model": "tripwire_hook_powered" + }, + "attached=false,facing=south,powered=true,suspended=false": { + "model": "tripwire_hook_powered", + "y": 180 + }, + "attached=false,facing=west,powered=true,suspended=false": { + "model": "tripwire_hook_powered", + "y": 270 + }, + "attached=false,facing=east,powered=true,suspended=false": { + "model": "tripwire_hook_powered", + "y": 90 + }, + "attached=false,facing=north,powered=true,suspended=true": { + "model": "tripwire_hook_powered" + }, + "attached=false,facing=south,powered=true,suspended=true": { + "model": "tripwire_hook_powered", + "y": 180 + }, + "attached=false,facing=west,powered=true,suspended=true": { + "model": "tripwire_hook_powered", + "y": 270 + }, + "attached=false,facing=east,powered=true,suspended=true": { + "model": "tripwire_hook_powered", + "y": 90 + }, + "attached=true,facing=north,powered=true,suspended=false": { + "model": "tripwire_hook_attached_powered" + }, + "attached=true,facing=south,powered=true,suspended=false": { + "model": "tripwire_hook_attached_powered", + "y": 180 + }, + "attached=true,facing=west,powered=true,suspended=false": { + "model": "tripwire_hook_attached_powered", + "y": 270 + }, + "attached=true,facing=east,powered=true,suspended=false": { + "model": "tripwire_hook_attached_powered", + "y": 90 + }, + "attached=true,facing=north,powered=true,suspended=true": { + "model": "tripwire_hook_attached_suspended_powered" + }, + "attached=true,facing=south,powered=true,suspended=true": { + "model": "tripwire_hook_attached_suspended_powered", + "y": 180 + }, + "attached=true,facing=west,powered=true,suspended=true": { + "model": "tripwire_hook_attached_suspended_powered", + "y": 270 + }, + "attached=true,facing=east,powered=true,suspended=true": { + "model": "tripwire_hook_attached_suspended_powered", + "y": 90 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/unlit_redstone_torch.json b/desktopRuntime/resources/assets/minecraft/blockstates/unlit_redstone_torch.json index e21e1076..12e4f22a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/unlit_redstone_torch.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unlit_redstone_torch.json @@ -1,9 +1,9 @@ -{ - "variants": { - "facing=up": { "model": "unlit_redstone_torch" }, - "facing=east": { "model": "unlit_redstone_torch_wall" }, - "facing=south": { "model": "unlit_redstone_torch_wall", "y": 90 }, - "facing=west": { "model": "unlit_redstone_torch_wall", "y": 180 }, - "facing=north": { "model": "unlit_redstone_torch_wall", "y": 270 } - } -} +{ + "variants": { + "facing=up": { "model": "unlit_redstone_torch" }, + "facing=east": { "model": "unlit_redstone_torch_wall" }, + "facing=south": { "model": "unlit_redstone_torch_wall", "y": 90 }, + "facing=west": { "model": "unlit_redstone_torch_wall", "y": 180 }, + "facing=north": { "model": "unlit_redstone_torch_wall", "y": 270 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json index 012e0b4d..f114763d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json @@ -1,20 +1,60 @@ -{ - "variants": { - "facing=south,mode=compare,powered=false": { "model": "comparator_unlit" }, - "facing=west,mode=compare,powered=false": { "model": "comparator_unlit", "y": 90 }, - "facing=north,mode=compare,powered=false": { "model": "comparator_unlit", "y": 180 }, - "facing=east,mode=compare,powered=false": { "model": "comparator_unlit", "y": 270 }, - "facing=south,mode=subtract,powered=false": { "model": "comparator_unlit_subtract" }, - "facing=west,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 90 }, - "facing=north,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 180 }, - "facing=east,mode=subtract,powered=false": { "model": "comparator_unlit_subtract", "y": 270 }, - "facing=south,mode=compare,powered=true": { "model": "comparator_lit" }, - "facing=west,mode=compare,powered=true": { "model": "comparator_lit", "y": 90 }, - "facing=north,mode=compare,powered=true": { "model": "comparator_lit", "y": 180 }, - "facing=east,mode=compare,powered=true": { "model": "comparator_lit", "y": 270 }, - "facing=south,mode=subtract,powered=true": { "model": "comparator_lit_subtract" }, - "facing=west,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 90 }, - "facing=north,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 180 }, - "facing=east,mode=subtract,powered=true": { "model": "comparator_lit_subtract", "y": 270 } - } -} +{ + "variants": { + "facing=south,mode=compare,powered=false": { "model": "comparator_unlit" }, + "facing=west,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 90 + }, + "facing=north,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 180 + }, + "facing=east,mode=compare,powered=false": { + "model": "comparator_unlit", + "y": 270 + }, + "facing=south,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract" + }, + "facing=west,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 90 + }, + "facing=north,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 180 + }, + "facing=east,mode=subtract,powered=false": { + "model": "comparator_unlit_subtract", + "y": 270 + }, + "facing=south,mode=compare,powered=true": { "model": "comparator_lit" }, + "facing=west,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 90 + }, + "facing=north,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 180 + }, + "facing=east,mode=compare,powered=true": { + "model": "comparator_lit", + "y": 270 + }, + "facing=south,mode=subtract,powered=true": { + "model": "comparator_lit_subtract" + }, + "facing=west,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 90 + }, + "facing=north,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 180 + }, + "facing=east,mode=subtract,powered=true": { + "model": "comparator_lit_subtract", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_repeater.json b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_repeater.json index 99ee6125..bf985dbb 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_repeater.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_repeater.json @@ -1,36 +1,84 @@ -{ - "variants": { - "delay=1,facing=south,locked=false": { "model": "repeater_1tick" }, - "delay=1,facing=west,locked=false": { "model": "repeater_1tick", "y": 90 }, - "delay=1,facing=north,locked=false": { "model": "repeater_1tick", "y": 180 }, - "delay=1,facing=east,locked=false": { "model": "repeater_1tick", "y": 270 }, - "delay=2,facing=south,locked=false": { "model": "repeater_2tick" }, - "delay=2,facing=west,locked=false": { "model": "repeater_2tick", "y": 90 }, - "delay=2,facing=north,locked=false": { "model": "repeater_2tick", "y": 180 }, - "delay=2,facing=east,locked=false": { "model": "repeater_2tick", "y": 270 }, - "delay=3,facing=south,locked=false": { "model": "repeater_3tick" }, - "delay=3,facing=west,locked=false": { "model": "repeater_3tick", "y": 90 }, - "delay=3,facing=north,locked=false": { "model": "repeater_3tick", "y": 180 }, - "delay=3,facing=east,locked=false": { "model": "repeater_3tick", "y": 270 }, - "delay=4,facing=south,locked=false": { "model": "repeater_4tick" }, - "delay=4,facing=west,locked=false": { "model": "repeater_4tick", "y": 90 }, - "delay=4,facing=north,locked=false": { "model": "repeater_4tick", "y": 180 }, - "delay=4,facing=east,locked=false": { "model": "repeater_4tick", "y": 270 }, - "delay=1,facing=south,locked=true": { "model": "repeater_locked_1tick" }, - "delay=1,facing=west,locked=true": { "model": "repeater_locked_1tick", "y": 90 }, - "delay=1,facing=north,locked=true": { "model": "repeater_locked_1tick", "y": 180 }, - "delay=1,facing=east,locked=true": { "model": "repeater_locked_1tick", "y": 270 }, - "delay=2,facing=south,locked=true": { "model": "repeater_locked_2tick" }, - "delay=2,facing=west,locked=true": { "model": "repeater_locked_2tick", "y": 90 }, - "delay=2,facing=north,locked=true": { "model": "repeater_locked_2tick", "y": 180 }, - "delay=2,facing=east,locked=true": { "model": "repeater_locked_2tick", "y": 270 }, - "delay=3,facing=south,locked=true": { "model": "repeater_locked_3tick" }, - "delay=3,facing=west,locked=true": { "model": "repeater_locked_3tick", "y": 90 }, - "delay=3,facing=north,locked=true": { "model": "repeater_locked_3tick", "y": 180 }, - "delay=3,facing=east,locked=true": { "model": "repeater_locked_3tick", "y": 270 }, - "delay=4,facing=south,locked=true": { "model": "repeater_locked_4tick" }, - "delay=4,facing=west,locked=true": { "model": "repeater_locked_4tick", "y": 90 }, - "delay=4,facing=north,locked=true": { "model": "repeater_locked_4tick", "y": 180 }, - "delay=4,facing=east,locked=true": { "model": "repeater_locked_4tick", "y": 270 } - } -} +{ + "variants": { + "delay=1,facing=south,locked=false": { "model": "repeater_1tick" }, + "delay=1,facing=west,locked=false": { "model": "repeater_1tick", "y": 90 }, + "delay=1,facing=north,locked=false": { + "model": "repeater_1tick", + "y": 180 + }, + "delay=1,facing=east,locked=false": { "model": "repeater_1tick", "y": 270 }, + "delay=2,facing=south,locked=false": { "model": "repeater_2tick" }, + "delay=2,facing=west,locked=false": { "model": "repeater_2tick", "y": 90 }, + "delay=2,facing=north,locked=false": { + "model": "repeater_2tick", + "y": 180 + }, + "delay=2,facing=east,locked=false": { "model": "repeater_2tick", "y": 270 }, + "delay=3,facing=south,locked=false": { "model": "repeater_3tick" }, + "delay=3,facing=west,locked=false": { "model": "repeater_3tick", "y": 90 }, + "delay=3,facing=north,locked=false": { + "model": "repeater_3tick", + "y": 180 + }, + "delay=3,facing=east,locked=false": { "model": "repeater_3tick", "y": 270 }, + "delay=4,facing=south,locked=false": { "model": "repeater_4tick" }, + "delay=4,facing=west,locked=false": { "model": "repeater_4tick", "y": 90 }, + "delay=4,facing=north,locked=false": { + "model": "repeater_4tick", + "y": 180 + }, + "delay=4,facing=east,locked=false": { "model": "repeater_4tick", "y": 270 }, + "delay=1,facing=south,locked=true": { "model": "repeater_locked_1tick" }, + "delay=1,facing=west,locked=true": { + "model": "repeater_locked_1tick", + "y": 90 + }, + "delay=1,facing=north,locked=true": { + "model": "repeater_locked_1tick", + "y": 180 + }, + "delay=1,facing=east,locked=true": { + "model": "repeater_locked_1tick", + "y": 270 + }, + "delay=2,facing=south,locked=true": { "model": "repeater_locked_2tick" }, + "delay=2,facing=west,locked=true": { + "model": "repeater_locked_2tick", + "y": 90 + }, + "delay=2,facing=north,locked=true": { + "model": "repeater_locked_2tick", + "y": 180 + }, + "delay=2,facing=east,locked=true": { + "model": "repeater_locked_2tick", + "y": 270 + }, + "delay=3,facing=south,locked=true": { "model": "repeater_locked_3tick" }, + "delay=3,facing=west,locked=true": { + "model": "repeater_locked_3tick", + "y": 90 + }, + "delay=3,facing=north,locked=true": { + "model": "repeater_locked_3tick", + "y": 180 + }, + "delay=3,facing=east,locked=true": { + "model": "repeater_locked_3tick", + "y": 270 + }, + "delay=4,facing=south,locked=true": { "model": "repeater_locked_4tick" }, + "delay=4,facing=west,locked=true": { + "model": "repeater_locked_4tick", + "y": 90 + }, + "delay=4,facing=north,locked=true": { + "model": "repeater_locked_4tick", + "y": 180 + }, + "delay=4,facing=east,locked=true": { + "model": "repeater_locked_4tick", + "y": 270 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/vine.json b/desktopRuntime/resources/assets/minecraft/blockstates/vine.json index 32621ff4..e47fcede 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/vine.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/vine.json @@ -1,36 +1,116 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "vine_1" }, - "east=false,north=false,south=true,up=false,west=false": { "model": "vine_1" }, - "east=false,north=false,south=false,up=false,west=true": { "model": "vine_1", "y": 90 }, - "east=false,north=true,south=false,up=false,west=false": { "model": "vine_1", "y": 180 }, - "east=true,north=false,south=false,up=false,west=false": { "model": "vine_1", "y": 270 }, - "east=true,north=true,south=false,up=false,west=false": { "model": "vine_2" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "vine_2", "y": 90 }, - "east=false,north=false,south=true,up=false,west=true": { "model": "vine_2", "y": 180 }, - "east=false,north=true,south=false,up=false,west=true": { "model": "vine_2", "y": 270 }, - "east=true,north=false,south=false,up=false,west=true": { "model": "vine_2_opposite" }, - "east=false,north=true,south=true,up=false,west=false": { "model": "vine_2_opposite", "y": 90 }, - "east=true,north=true,south=true,up=false,west=false": { "model": "vine_3" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "vine_3", "y": 90 }, - "east=false,north=true,south=true,up=false,west=true": { "model": "vine_3", "y": 180 }, - "east=true,north=true,south=false,up=false,west=true": { "model": "vine_3", "y": 270 }, - "east=true,north=true,south=true,up=false,west=true": { "model": "vine_4" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "vine_u" }, - "east=false,north=false,south=true,up=true,west=false": { "model": "vine_1u" }, - "east=false,north=false,south=false,up=true,west=true": { "model": "vine_1u", "y": 90 }, - "east=false,north=true,south=false,up=true,west=false": { "model": "vine_1u", "y": 180 }, - "east=true,north=false,south=false,up=true,west=false": { "model": "vine_1u", "y": 270 }, - "east=true,north=true,south=false,up=true,west=false": { "model": "vine_2u" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "vine_2u", "y": 90 }, - "east=false,north=false,south=true,up=true,west=true": { "model": "vine_2u", "y": 180 }, - "east=false,north=true,south=false,up=true,west=true": { "model": "vine_2u", "y": 270 }, - "east=true,north=false,south=false,up=true,west=true": { "model": "vine_2u_opposite" }, - "east=false,north=true,south=true,up=true,west=false": { "model": "vine_2u_opposite", "y": 90 }, - "east=true,north=true,south=true,up=true,west=false": { "model": "vine_3u" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "vine_3u", "y": 90 }, - "east=false,north=true,south=true,up=true,west=true": { "model": "vine_3u", "y": 180 }, - "east=true,north=true,south=false,up=true,west=true": { "model": "vine_3u", "y": 270 }, - "east=true,north=true,south=true,up=true,west=true": { "model": "vine_4u" } - } -} +{ + "variants": { + "east=false,north=false,south=false,up=false,west=false": { + "model": "vine_1" + }, + "east=false,north=false,south=true,up=false,west=false": { + "model": "vine_1" + }, + "east=false,north=false,south=false,up=false,west=true": { + "model": "vine_1", + "y": 90 + }, + "east=false,north=true,south=false,up=false,west=false": { + "model": "vine_1", + "y": 180 + }, + "east=true,north=false,south=false,up=false,west=false": { + "model": "vine_1", + "y": 270 + }, + "east=true,north=true,south=false,up=false,west=false": { + "model": "vine_2" + }, + "east=true,north=false,south=true,up=false,west=false": { + "model": "vine_2", + "y": 90 + }, + "east=false,north=false,south=true,up=false,west=true": { + "model": "vine_2", + "y": 180 + }, + "east=false,north=true,south=false,up=false,west=true": { + "model": "vine_2", + "y": 270 + }, + "east=true,north=false,south=false,up=false,west=true": { + "model": "vine_2_opposite" + }, + "east=false,north=true,south=true,up=false,west=false": { + "model": "vine_2_opposite", + "y": 90 + }, + "east=true,north=true,south=true,up=false,west=false": { + "model": "vine_3" + }, + "east=true,north=false,south=true,up=false,west=true": { + "model": "vine_3", + "y": 90 + }, + "east=false,north=true,south=true,up=false,west=true": { + "model": "vine_3", + "y": 180 + }, + "east=true,north=true,south=false,up=false,west=true": { + "model": "vine_3", + "y": 270 + }, + "east=true,north=true,south=true,up=false,west=true": { "model": "vine_4" }, + "east=false,north=false,south=false,up=true,west=false": { + "model": "vine_u" + }, + "east=false,north=false,south=true,up=true,west=false": { + "model": "vine_1u" + }, + "east=false,north=false,south=false,up=true,west=true": { + "model": "vine_1u", + "y": 90 + }, + "east=false,north=true,south=false,up=true,west=false": { + "model": "vine_1u", + "y": 180 + }, + "east=true,north=false,south=false,up=true,west=false": { + "model": "vine_1u", + "y": 270 + }, + "east=true,north=true,south=false,up=true,west=false": { + "model": "vine_2u" + }, + "east=true,north=false,south=true,up=true,west=false": { + "model": "vine_2u", + "y": 90 + }, + "east=false,north=false,south=true,up=true,west=true": { + "model": "vine_2u", + "y": 180 + }, + "east=false,north=true,south=false,up=true,west=true": { + "model": "vine_2u", + "y": 270 + }, + "east=true,north=false,south=false,up=true,west=true": { + "model": "vine_2u_opposite" + }, + "east=false,north=true,south=true,up=true,west=false": { + "model": "vine_2u_opposite", + "y": 90 + }, + "east=true,north=true,south=true,up=true,west=false": { + "model": "vine_3u" + }, + "east=true,north=false,south=true,up=true,west=true": { + "model": "vine_3u", + "y": 90 + }, + "east=false,north=true,south=true,up=true,west=true": { + "model": "vine_3u", + "y": 180 + }, + "east=true,north=true,south=false,up=true,west=true": { + "model": "vine_3u", + "y": 270 + }, + "east=true,north=true,south=true,up=true,west=true": { "model": "vine_4u" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/waterlily.json b/desktopRuntime/resources/assets/minecraft/blockstates/waterlily.json index 094cb21c..2a7139ef 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/waterlily.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/waterlily.json @@ -1,10 +1,10 @@ -{ - "variants": { - "normal": [ - { "model": "waterlily" }, - { "model": "waterlily", "y": 90 }, - { "model": "waterlily", "y": 180 }, - { "model": "waterlily", "y": 270 } - ] - } -} +{ + "variants": { + "normal": [ + { "model": "waterlily" }, + { "model": "waterlily", "y": 90 }, + { "model": "waterlily", "y": 180 }, + { "model": "waterlily", "y": 270 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/web.json b/desktopRuntime/resources/assets/minecraft/blockstates/web.json index 45b6e8b5..cea7374a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/web.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/web.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "web" } - } -} +{ + "variants": { + "normal": { "model": "web" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json b/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json index 1750975c..814b6854 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json @@ -1,12 +1,12 @@ -{ - "variants": { - "age=0": { "model": "wheat_stage0" }, - "age=1": { "model": "wheat_stage1" }, - "age=2": { "model": "wheat_stage2" }, - "age=3": { "model": "wheat_stage3" }, - "age=4": { "model": "wheat_stage4" }, - "age=5": { "model": "wheat_stage5" }, - "age=6": { "model": "wheat_stage6" }, - "age=7": { "model": "wheat_stage7" } - } -} +{ + "variants": { + "age=0": { "model": "wheat_stage0" }, + "age=1": { "model": "wheat_stage1" }, + "age=2": { "model": "wheat_stage2" }, + "age=3": { "model": "wheat_stage3" }, + "age=4": { "model": "wheat_stage4" }, + "age=5": { "model": "wheat_stage5" }, + "age=6": { "model": "wheat_stage6" }, + "age=7": { "model": "wheat_stage7" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json index 86668da8..505b9e9a 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_white" } - } -} +{ + "variants": { + "normal": { "model": "carpet_white" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass.json index b8e935ee..2f97ac29 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_white" } - } -} +{ + "variants": { + "normal": { "model": "glass_white" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass_pane.json index b75118ed..6b71cbe4 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass_pane.json @@ -1,20 +1,31 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "white_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "white_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "white_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "white_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "white_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "white_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "white_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "white_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "white_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "white_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "white_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "white_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "white_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "white_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "white_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "white_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "white_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { "model": "white_pane_n" }, + "east=true,north=false,south=false,west=false": { + "model": "white_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { "model": "white_pane_s" }, + "east=false,north=false,south=false,west=true": { + "model": "white_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { "model": "white_pane_ne" }, + "east=true,north=false,south=true,west=false": { "model": "white_pane_se" }, + "east=false,north=false,south=true,west=true": { "model": "white_pane_sw" }, + "east=false,north=true,south=false,west=true": { "model": "white_pane_nw" }, + "east=false,north=true,south=true,west=false": { "model": "white_pane_ns" }, + "east=true,north=false,south=false,west=true": { + "model": "white_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { "model": "white_pane_nse" }, + "east=true,north=false,south=true,west=true": { "model": "white_pane_sew" }, + "east=false,north=true,south=true,west=true": { "model": "white_pane_nsw" }, + "east=true,north=true,south=false,west=true": { "model": "white_pane_new" }, + "east=true,north=true,south=true,west=true": { "model": "white_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_hardened_clay.json index 0a6eb7ad..8f635e26 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_white" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_white" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_tulip.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_tulip.json index f455a8f1..9a9cde8d 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_tulip.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "white_tulip" } - } -} +{ + "variants": { + "normal": { "model": "white_tulip" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_wool.json index 3c3d4e13..b02d65bc 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/white_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "white_wool" } - } -} +{ + "variants": { + "normal": { "model": "white_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_double_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_double_slab.json index 370321be..bfea5f7c 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_double_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_double_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "normal": { "model": "oak_planks" }, - "all": { "model": "oak_planks" } - } -} +{ + "variants": { + "normal": { "model": "oak_planks" }, + "all": { "model": "oak_planks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_slab.json index 8c99098d..d6f5231f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_slab.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_slab.json @@ -1,6 +1,6 @@ -{ - "variants": { - "half=bottom": { "model": "half_slab_oak" }, - "half=top": { "model": "upper_slab_oak" } - } -} +{ + "variants": { + "half=bottom": { "model": "half_slab_oak" }, + "half=top": { "model": "upper_slab_oak" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_button.json b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_button.json index 6188dc80..0749cc82 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_button.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_button.json @@ -1,16 +1,36 @@ -{ - "variants": { - "facing=up,powered=false": { "model": "wooden_button" }, - "facing=down,powered=false": { "model": "wooden_button", "x": 180 }, - "facing=east,powered=false": { "model": "wooden_button", "x": 90, "y": 90 }, - "facing=west,powered=false": { "model": "wooden_button", "x": 90, "y": 270 }, - "facing=south,powered=false": { "model": "wooden_button", "x": 90, "y": 180 }, - "facing=north,powered=false": { "model": "wooden_button", "x": 90 }, - "facing=up,powered=true": { "model": "wooden_button_pressed" }, - "facing=down,powered=true": { "model": "wooden_button_pressed", "x": 180 }, - "facing=east,powered=true": { "model": "wooden_button_pressed", "x": 90, "y": 90 }, - "facing=west,powered=true": { "model": "wooden_button_pressed", "x": 90, "y": 270 }, - "facing=south,powered=true": { "model": "wooden_button_pressed", "x": 90, "y": 180 }, - "facing=north,powered=true": { "model": "wooden_button_pressed", "x": 90 } - } -} +{ + "variants": { + "facing=up,powered=false": { "model": "wooden_button" }, + "facing=down,powered=false": { "model": "wooden_button", "x": 180 }, + "facing=east,powered=false": { "model": "wooden_button", "x": 90, "y": 90 }, + "facing=west,powered=false": { + "model": "wooden_button", + "x": 90, + "y": 270 + }, + "facing=south,powered=false": { + "model": "wooden_button", + "x": 90, + "y": 180 + }, + "facing=north,powered=false": { "model": "wooden_button", "x": 90 }, + "facing=up,powered=true": { "model": "wooden_button_pressed" }, + "facing=down,powered=true": { "model": "wooden_button_pressed", "x": 180 }, + "facing=east,powered=true": { + "model": "wooden_button_pressed", + "x": 90, + "y": 90 + }, + "facing=west,powered=true": { + "model": "wooden_button_pressed", + "x": 90, + "y": 270 + }, + "facing=south,powered=true": { + "model": "wooden_button_pressed", + "x": 90, + "y": 180 + }, + "facing=north,powered=true": { "model": "wooden_button_pressed", "x": 90 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_door.json index 6da109e7..d5b45672 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_door.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_door.json @@ -1,36 +1,124 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "wooden_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "wooden_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "wooden_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "wooden_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "wooden_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "wooden_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "wooden_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "wooden_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "wooden_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "wooden_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "wooden_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "wooden_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "wooden_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "wooden_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "wooden_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "wooden_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "wooden_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "wooden_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "wooden_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "wooden_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "wooden_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "wooden_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "wooden_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "wooden_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "wooden_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "wooden_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "wooden_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "wooden_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "wooden_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "wooden_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "wooden_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "wooden_door_top", "y": 180 } - } -} +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "wooden_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "wooden_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "wooden_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "wooden_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "wooden_door_bottom_rh" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "wooden_door_bottom_rh", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "wooden_door_bottom_rh", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "wooden_door_bottom_rh", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "wooden_door_bottom_rh", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "wooden_door_bottom_rh", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "wooden_door_bottom_rh", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "wooden_door_bottom_rh" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "wooden_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "wooden_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "wooden_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "wooden_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "wooden_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "wooden_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "wooden_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "wooden_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "wooden_door_top_rh" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "wooden_door_top_rh", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "wooden_door_top_rh", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "wooden_door_top_rh", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "wooden_door_top_rh", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "wooden_door_top_rh", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "wooden_door_top_rh", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "wooden_door_top_rh" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "wooden_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "wooden_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "wooden_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "wooden_door_top", + "y": 180 + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_pressure_plate.json index 20c051af..c7cf00c1 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/wooden_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_pressure_plate.json @@ -1,6 +1,6 @@ -{ - "variants": { - "powered=false": { "model": "wooden_pressure_plate_up" }, - "powered=true": { "model": "wooden_pressure_plate_down" } - } -} +{ + "variants": { + "powered=false": { "model": "wooden_pressure_plate_up" }, + "powered=true": { "model": "wooden_pressure_plate_down" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_carpet.json index 14b14427..5d69402f 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_carpet.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "carpet_yellow" } - } -} +{ + "variants": { + "normal": { "model": "carpet_yellow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass.json index a6ab5474..f8d68393 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "glass_yellow" } - } -} +{ + "variants": { + "normal": { "model": "glass_yellow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass_pane.json index 5a651c75..e547d999 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass_pane.json @@ -1,20 +1,53 @@ -{ - "variants": { - "east=false,north=false,south=false,west=false": { "model": "yellow_pane_nsew" }, - "east=false,north=true,south=false,west=false": { "model": "yellow_pane_n" }, - "east=true,north=false,south=false,west=false": { "model": "yellow_pane_n", "y": 90 }, - "east=false,north=false,south=true,west=false": { "model": "yellow_pane_s" }, - "east=false,north=false,south=false,west=true": { "model": "yellow_pane_s", "y": 90 }, - "east=true,north=true,south=false,west=false": { "model": "yellow_pane_ne" }, - "east=true,north=false,south=true,west=false": { "model": "yellow_pane_se" }, - "east=false,north=false,south=true,west=true": { "model": "yellow_pane_sw" }, - "east=false,north=true,south=false,west=true": { "model": "yellow_pane_nw" }, - "east=false,north=true,south=true,west=false": { "model": "yellow_pane_ns" }, - "east=true,north=false,south=false,west=true": { "model": "yellow_pane_ns", "y": 90 }, - "east=true,north=true,south=true,west=false": { "model": "yellow_pane_nse" }, - "east=true,north=false,south=true,west=true": { "model": "yellow_pane_sew" }, - "east=false,north=true,south=true,west=true": { "model": "yellow_pane_nsw" }, - "east=true,north=true,south=false,west=true": { "model": "yellow_pane_new" }, - "east=true,north=true,south=true,west=true": { "model": "yellow_pane_nsew" } - } -} +{ + "variants": { + "east=false,north=false,south=false,west=false": { + "model": "yellow_pane_nsew" + }, + "east=false,north=true,south=false,west=false": { + "model": "yellow_pane_n" + }, + "east=true,north=false,south=false,west=false": { + "model": "yellow_pane_n", + "y": 90 + }, + "east=false,north=false,south=true,west=false": { + "model": "yellow_pane_s" + }, + "east=false,north=false,south=false,west=true": { + "model": "yellow_pane_s", + "y": 90 + }, + "east=true,north=true,south=false,west=false": { + "model": "yellow_pane_ne" + }, + "east=true,north=false,south=true,west=false": { + "model": "yellow_pane_se" + }, + "east=false,north=false,south=true,west=true": { + "model": "yellow_pane_sw" + }, + "east=false,north=true,south=false,west=true": { + "model": "yellow_pane_nw" + }, + "east=false,north=true,south=true,west=false": { + "model": "yellow_pane_ns" + }, + "east=true,north=false,south=false,west=true": { + "model": "yellow_pane_ns", + "y": 90 + }, + "east=true,north=true,south=true,west=false": { + "model": "yellow_pane_nse" + }, + "east=true,north=false,south=true,west=true": { + "model": "yellow_pane_sew" + }, + "east=false,north=true,south=true,west=true": { + "model": "yellow_pane_nsw" + }, + "east=true,north=true,south=false,west=true": { + "model": "yellow_pane_new" + }, + "east=true,north=true,south=true,west=true": { "model": "yellow_pane_nsew" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_hardened_clay.json index 88e2c889..c4223cd3 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_hardened_clay.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "hardened_clay_yellow" } - } -} +{ + "variants": { + "normal": { "model": "hardened_clay_yellow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_wool.json b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_wool.json index d4f36465..57279c36 100644 --- a/desktopRuntime/resources/assets/minecraft/blockstates/yellow_wool.json +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_wool.json @@ -1,5 +1,5 @@ -{ - "variants": { - "normal": { "model": "yellow_wool" } - } -} +{ + "variants": { + "normal": { "model": "yellow_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png b/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png index 3066972a..0c8ee6e0 100644 Binary files a/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png and b/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png differ diff --git a/desktopRuntime/resources/assets/minecraft/icons/icon_32x32.png b/desktopRuntime/resources/assets/minecraft/icons/icon_32x32.png index 25f3cf6c..32e4f0af 100644 Binary files a/desktopRuntime/resources/assets/minecraft/icons/icon_32x32.png and b/desktopRuntime/resources/assets/minecraft/icons/icon_32x32.png differ diff --git a/desktopRuntime/resources/assets/minecraft/lang/en_US.lang b/desktopRuntime/resources/assets/minecraft/lang/en_US.lang index 50b0f866..d7689ebe 100644 --- a/desktopRuntime/resources/assets/minecraft/lang/en_US.lang +++ b/desktopRuntime/resources/assets/minecraft/lang/en_US.lang @@ -1,2670 +1,2670 @@ - -language.name=English -language.region=US -language.code=en_US - -gui.done=Done -gui.cancel=Cancel -gui.back=Back -gui.toTitle=Back to title screen -gui.toMenu=Back to server list -gui.up=Up -gui.down=Down -gui.yes=Yes -gui.no=No -gui.none=None -gui.all=All - -menu.game=Game menu -menu.singleplayer=Singleplayer -menu.multiplayer=Multiplayer -menu.online=Minecraft Realms -menu.options=Options... -menu.quit=Quit Game -menu.returnToMenu=Save and Quit to Title -menu.disconnect=Disconnect -menu.returnToGame=Back to Game -menu.switchingLevel=Switching worlds -menu.generatingLevel=Generating world -menu.loadingLevel=Loading world -menu.generatingTerrain=Building terrain -menu.convertingLevel=Converting world -menu.simulating=Simulating the world for a bit -menu.respawning=Respawning -menu.shareToLan=Open to LAN - -selectWorld.title=Select World -selectWorld.empty=empty -selectWorld.world=World -selectWorld.select=Play Selected World -selectWorld.create=Create New World -selectWorld.recreate=Re-Create -selectWorld.createDemo=Play New Demo World -selectWorld.delete=Delete -selectWorld.rename=Rename -selectWorld.deleteQuestion=Are you sure you want to delete this world? -selectWorld.deleteWarning=will be lost forever! (A long time!) -selectWorld.deleteButton=Delete -selectWorld.renameButton=Rename -selectWorld.renameTitle=Rename World -selectWorld.conversion=Must be converted! -selectWorld.newWorld=New World -selectWorld.newWorld.copyOf=Copy of %s -selectWorld.enterName=World Name -selectWorld.resultFolder=Will be saved in: -selectWorld.enterSeed=Seed for the World Generator -selectWorld.seedInfo=Leave blank for a random seed -selectWorld.cheats=Cheats -selectWorld.customizeType=Customize - -createWorld.customize.presets=Presets -createWorld.customize.presets.title=Select a Preset -createWorld.customize.presets.select=Use Preset -createWorld.customize.presets.share=Want to share your preset with someone? Use the below box! -createWorld.customize.presets.list=Alternatively, here's some we made earlier! -createWorld.customize.flat.title=Superflat Customization -createWorld.customize.flat.tile=Layer Material -createWorld.customize.flat.height=Height -createWorld.customize.flat.addLayer=Add Layer -createWorld.customize.flat.editLayer=Edit Layer -createWorld.customize.flat.removeLayer=Remove Layer -createWorld.customize.flat.layer.top=Top - %d -createWorld.customize.flat.layer=%d -createWorld.customize.flat.layer.bottom=Bottom - %d - -createWorld.customize.custom.page0=Basic Settings -createWorld.customize.custom.page1=Ore Settings -createWorld.customize.custom.page2=Advanced Settings (Expert Users Only!) -createWorld.customize.custom.page3=Extra Advanced Settings (Expert Users Only!) -createWorld.customize.custom.randomize=Randomize -createWorld.customize.custom.prev=Previous Page -createWorld.customize.custom.next=Next Page -createWorld.customize.custom.defaults=Defaults -createWorld.customize.custom.confirm1=This will overwrite your current -createWorld.customize.custom.confirm2=settings and cannot be undone. -createWorld.customize.custom.confirmTitle=Warning! -createWorld.customize.custom.mainNoiseScaleX=Main Noise Scale X -createWorld.customize.custom.mainNoiseScaleY=Main Noise Scale Y -createWorld.customize.custom.mainNoiseScaleZ=Main Noise Scale Z -createWorld.customize.custom.depthNoiseScaleX=Depth Noise Scale X -createWorld.customize.custom.depthNoiseScaleZ=Depth Noise Scale Z -createWorld.customize.custom.depthNoiseScaleExponent=Depth Noise Exponent -createWorld.customize.custom.baseSize=Depth Base Size -createWorld.customize.custom.coordinateScale=Coordinate Scale -createWorld.customize.custom.heightScale=Height Scale -createWorld.customize.custom.stretchY=Height Stretch -createWorld.customize.custom.upperLimitScale=Upper Limit Scale -createWorld.customize.custom.lowerLimitScale=Lower Limit Scale -createWorld.customize.custom.biomeDepthWeight=Biome Depth Weight -createWorld.customize.custom.biomeDepthOffset=Biome Depth Offset -createWorld.customize.custom.biomeScaleWeight=Biome Scale Weight -createWorld.customize.custom.biomeScaleOffset=Biome Scale Offset -createWorld.customize.custom.seaLevel=Sea Level -createWorld.customize.custom.useCaves=Caves -createWorld.customize.custom.useStrongholds=Strongholds -createWorld.customize.custom.useVillages=Villages -createWorld.customize.custom.useMineShafts=Mineshafts -createWorld.customize.custom.useTemples=Temples -createWorld.customize.custom.useMonuments=Ocean Monuments -createWorld.customize.custom.useRavines=Ravines -createWorld.customize.custom.useDungeons=Dungeons -createWorld.customize.custom.dungeonChance=Dungeon Count -createWorld.customize.custom.useWaterLakes=Water Lakes -createWorld.customize.custom.waterLakeChance=Water Lake Rarity -createWorld.customize.custom.useLavaLakes=Lava Lakes -createWorld.customize.custom.lavaLakeChance=Lava Lake Rarity -createWorld.customize.custom.useLavaOceans=Lava Oceans -createWorld.customize.custom.fixedBiome=Biome -createWorld.customize.custom.biomeSize=Biome Size -createWorld.customize.custom.riverSize=River Size - -createWorld.customize.custom.size= Spawn Size -createWorld.customize.custom.count= Spawn Tries -createWorld.customize.custom.minHeight= Min. Height -createWorld.customize.custom.maxHeight= Max. Height -createWorld.customize.custom.center= Center Height -createWorld.customize.custom.spread= Spread Height - -createWorld.customize.custom.presets.title=Customize World Presets -createWorld.customize.custom.presets=Presets -createWorld.customize.custom.preset.waterWorld=Water World -createWorld.customize.custom.preset.isleLand=Isle Land -createWorld.customize.custom.preset.caveDelight=Caver's Delight -createWorld.customize.custom.preset.mountains=Mountain Madness -createWorld.customize.custom.preset.drought=Drought -createWorld.customize.custom.preset.caveChaos=Caves of Chaos -createWorld.customize.custom.preset.goodLuck=Good Luck - -gameMode.survival=Survival Mode -gameMode.creative=Creative Mode -gameMode.adventure=Adventure Mode -gameMode.spectator=Spectator Mode -gameMode.hardcore=Hardcore Mode! -gameMode.changed=Your game mode has been updated - -selectWorld.gameMode=Game Mode -selectWorld.gameMode.survival=Survival -selectWorld.gameMode.survival.line1=Search for resources, crafting, gain -selectWorld.gameMode.survival.line2=levels, health and hunger -selectWorld.gameMode.creative=Creative -selectWorld.gameMode.creative.line1=Unlimited resources, free flying and -selectWorld.gameMode.creative.line2=destroy blocks instantly -selectWorld.gameMode.spectator=Spectator -selectWorld.gameMode.spectator.line1=You can look but don't touch -selectWorld.gameMode.spectator.line2= -selectWorld.gameMode.hardcore=Hardcore -selectWorld.gameMode.hardcore.line1=Same as survival mode, locked at hardest -selectWorld.gameMode.hardcore.line2=difficulty, and one life only -selectWorld.gameMode.adventure=Adventure -selectWorld.gameMode.adventure.line1=Same as survival mode, but blocks can't -selectWorld.gameMode.adventure.line2=be added or removed -selectWorld.moreWorldOptions=More World Options... -selectWorld.mapFeatures=Generate Structures: -selectWorld.mapFeatures.info=Villages, dungeons etc -selectWorld.mapType=World Type: -selectWorld.mapType.normal=Normal -selectWorld.allowCommands=Allow Cheats: -selectWorld.allowCommands.info=Commands like /gamemode, /xp -selectWorld.hardcoreMode=Hardcore: -selectWorld.hardcoreMode.info=World is deleted upon death -selectWorld.bonusItems=Bonus Chest: - -generator.default=Default -generator.flat=Superflat -generator.largeBiomes=Large Biomes -generator.amplified=AMPLIFIED -generator.customized=Customized -generator.debug_all_block_states=Debug Mode - -generator.amplified.info=Notice: Just for fun, requires beefy computer - -selectServer.title=Select Server -selectServer.empty=empty -selectServer.select=Join Server -selectServer.direct=Direct Connect -selectServer.edit=Edit -selectServer.delete=Delete -selectServer.add=Add server -selectServer.defaultName=Minecraft Server -selectServer.deleteQuestion=Are you sure you want to remove this server? -selectServer.deleteWarning=will be lost forever! (A long time!) -selectServer.deleteButton=Delete -selectServer.refresh=Refresh -selectServer.hiddenAddress=(Hidden) -addServer.title=Edit Server Info -addServer.enterName=Server Name -addServer.enterIp=Server Address -addServer.add=Done -addServer.hideAddress=Hide Address -addServer.resourcePack=Server Resource Packs -addServer.resourcePack.enabled=Enabled -addServer.resourcePack.disabled=Disabled -addServer.resourcePack.prompt=Prompt -lanServer.title=LAN World -lanServer.scanning=Scanning for games on your local network -lanServer.start=Start LAN World -lanServer.otherPlayers=Settings for Other Players -mcoServer.title=Minecraft Online World - -multiplayer.title=Play Multiplayer -multiplayer.connect=Connect -multiplayer.info1=Minecraft Multiplayer is currently not finished, but there -multiplayer.info2=is some buggy early testing going on. -multiplayer.ipinfo=Enter the IP of a server to connect to it: -multiplayer.texturePrompt.line1=This server recommends the use of a custom resource pack. -multiplayer.texturePrompt.line2=Would you like to download and install it automagically? -multiplayer.downloadingTerrain=Downloading terrain -multiplayer.downloadingStats=Downloading statistics & achievements... -multiplayer.stopSleeping=Leave Bed -multiplayer.player.joined=%s joined the game -multiplayer.player.joined.renamed=%s (formerly known as %s) joined the game -multiplayer.player.left=%s left the game - -chat.cannotSend=Cannot send chat message -chat.type.text=<%s> %s -chat.type.emote=* %s %s -chat.type.announcement=[%s] %s -chat.type.admin=[%s: %s] -chat.type.achievement=%s has just earned the achievement %s -chat.type.achievement.taken=%s has lost the achievement %s -chat.link.confirm=Are you sure you want to open the following website? -chat.link.warning=Never open links from people that you don't trust! -chat.copy=Copy to Clipboard -chat.link.confirmTrusted=Do you want to open this link or copy it to your clipboard? -chat.link.open=Open in browser - -chat.stream.text=(%s) <%s> %s -chat.stream.emote=(%s) * %s %s - -menu.playdemo=Play Demo World -menu.resetdemo=Reset Demo World - -demo.day.1=This demo will last five game days, do your best! -demo.day.2=Day Two -demo.day.3=Day Three -demo.day.4=Day Four -demo.day.5=This is your last day! -demo.day.warning=Your time is almost up! -demo.day.6=You have passed your fifth day, use F2 to save a screenshot of your creation -demo.reminder=The demo time has expired, buy the game to continue or start a new world! -demo.remainingTime=Remaining time: %s -demo.demoExpired=Demo time's up! -demo.help.movement=Use %1$s, %2$s, %3$s, %4$s and the mouse to move around -demo.help.movementShort=Move by pressing %1$s, %2$s, %3$s, %4$s -demo.help.movementMouse=Look around using the mouse -demo.help.jump=Jump by pressing %1$s -demo.help.inventory=Use %1$s to open your inventory -demo.help.title=Minecraft Demo Mode -demo.help.fullWrapped=This demo will last 5 ingame days (about 1 hour and 40 minutes of real time). Check the achievements for hints! Have fun! -demo.help.buy=Purchase Now! -demo.help.later=Continue Playing! - -connect.connecting=Connecting to the server... -connect.authorizing=Logging in... -connect.failed=Failed to connect to the server - -disconnect.genericReason=%s -disconnect.disconnected=Disconnected by Server -disconnect.lost=Connection Lost -disconnect.kicked=Was kicked from the game -disconnect.timeout=Timed out -disconnect.closed=Connection closed -disconnect.loginFailed=Failed to login -disconnect.loginFailedInfo=Failed to login: %s -disconnect.loginFailedInfo.serversUnavailable=The authentication servers are currently down for maintenance. -disconnect.loginFailedInfo.invalidSession=Invalid session (Try restarting your game) -disconnect.quitting=Quitting -disconnect.endOfStream=End of stream -disconnect.overflow=Buffer overflow -disconnect.spam=Kicked for spamming - -soundCategory.master=Master Volume -soundCategory.music=Music -soundCategory.record=Jukebox/Noteblocks -soundCategory.weather=Weather -soundCategory.hostile=Hostile Creatures -soundCategory.neutral=Friendly Creatures -soundCategory.player=Players -soundCategory.block=Blocks -soundCategory.ambient=Ambient/Environment - -record.nowPlaying=Now playing: %s - -options.off=OFF -options.on=ON -options.visible=Shown -options.hidden=Hidden -options.title=Options -options.controls=Controls... -options.video=Video Settings... -options.language=Language... -options.stream=Broadcast Settings... -options.sounds=Music & Sounds... -options.sounds.title=Music & Sound Options -options.languageWarning=Language translations may not be 100%% accurate -options.videoTitle=Video Settings -options.customizeTitle=Customize World Settings -options.music=Music -options.sound=Sound -options.invertMouse=Invert Mouse -options.fov=FOV -options.fov.min=Normal -options.fov.max=Quake Pro -options.saturation=Saturation -options.gamma=Brightness -options.gamma.min=Moody -options.gamma.max=Bright -options.sensitivity=Sensitivity -options.sensitivity.min=*yawn* -options.sensitivity.max=HYPERSPEED!!! -options.renderDistance=Render Distance -options.renderDistance.tiny=Tiny -options.renderDistance.short=Short -options.renderDistance.normal=Normal -options.renderDistance.far=Far -options.viewBobbing=View Bobbing -options.ao=Smooth Lighting -options.ao.off=OFF -options.ao.min=Minimum -options.ao.max=Maximum -options.anaglyph=3D Anaglyph -options.framerateLimit=Max Framerate -options.framerateLimit.max=Unlimited -options.difficulty=Difficulty -options.difficulty.peaceful=Peaceful -options.difficulty.easy=Easy -options.difficulty.normal=Normal -options.difficulty.hard=Hard -options.difficulty.hardcore=Hardcore -options.graphics=Graphics -options.graphics.fancy=Fancy -options.graphics.fast=Fast -options.guiScale=GUI Scale -options.guiScale.auto=Auto -options.guiScale.small=Small -options.guiScale.normal=Normal -options.guiScale.large=Large -options.advancedOpengl=Advanced OpenGL -options.fboEnable=Enable FBOs -options.postProcessEnable=Enable Post-Processing -options.renderClouds=Clouds -options.qualityButton=Video Quality Settings... -options.qualityVideoTitle=Video Quality Settings -options.performanceButton=Video Performance Settings... -options.performanceVideoTitle=Video Performance Settings -options.advancedButton=Advanced Video Settings... -options.advancedVideoTitle=Advanced Video Settings -options.postButton=Post-Processing Settings... -options.postVideoTitle=Post-Processing Settings -options.farWarning1=A 64 bit Java installation is recommended -options.farWarning2=for 'Far' render distance (you have 32 bit) -options.particles=Particles -options.particles.all=All -options.particles.decreased=Decreased -options.particles.minimal=Minimal -options.multiplayer.title=Multiplayer Settings... -options.chat.title=Chat Settings... -options.chat.visibility=Chat -options.chat.visibility.full=Shown -options.chat.visibility.system=Commands Only -options.chat.visibility.hidden=Hidden -options.chat.color=Colors -options.chat.opacity=Opacity -options.chat.links=Web Links -options.chat.links.prompt=Prompt on Links -options.chat.scale=Scale -options.chat.width=Width -options.chat.height.focused=Focused Height -options.chat.height.unfocused=Unfocused Height -options.skinCustomisation=Skin Customization... -options.skinCustomisation.title=Skin Customization -options.modelPart.cape=Cape -options.modelPart.hat=Hat -options.modelPart.jacket=Jacket -options.modelPart.left_sleeve=Left Sleeve -options.modelPart.right_sleeve=Right Sleeve -options.modelPart.left_pants_leg=Left Pants Leg -options.modelPart.right_pants_leg=Right Pants Leg -options.snooper=Allow Snooper -options.snooper.view=Snooper Settings... -options.snooper.title=Machine Specs Collection -options.snooper.desc=We want to collect information about your machine to help improve Minecraft by knowing what we can support and where the biggest problems are. All of this information is completely anonymous and viewable below. We promise we won't do anything bad with this data, but if you want to opt out then feel free to toggle it off! -options.resourcepack=Resource Packs... -options.fullscreen=Fullscreen -options.vsync=Use VSync -options.vbo=Use VBOs -options.touchscreen=Touchscreen Mode -options.blockAlternatives=Alternate Blocks -options.reducedDebugInfo=Reduced Debug Info -options.entityShadows=Entity Shadows - -options.mipmapLevels=Mipmap Levels -options.forceUnicodeFont=Force Unicode Font - -options.stream.title=Twitch Broadcast Settings -options.stream.bytesPerPixel=Quality -options.stream.micVolumne=Mic Volume -options.stream.micToggleBehavior=Push To -options.stream.mic_toggle.mute=Mute -options.stream.mic_toggle.talk=Talk -options.stream.systemVolume=System Volume -options.stream.kbps=Bandwidth -options.stream.fps=Framerate -options.stream.sendMetadata=Send Metadata -options.stream.compression=Compression -options.stream.compression.low=Low -options.stream.compression.medium=Medium -options.stream.compression.high=High -options.stream.estimation=Estimated resolution: %dx%d -options.stream.changes=You may need to restart your stream for these changes to take place. -options.stream.ingestSelection=Broadcast Server List -options.stream.ingest.title=Twitch Broadcast Servers -options.stream.ingest.reset=Reset Preference -options.stream.chat.title=Twitch Chat Settings -options.stream.chat.enabled=Enable -options.stream.chat.enabled.streaming=Whilst Streaming -options.stream.chat.enabled.always=Always -options.stream.chat.enabled.never=Never -options.stream.chat.userFilter=User Filter -options.stream.chat.userFilter.all=All Viewers -options.stream.chat.userFilter.subs=Subscribers -options.stream.chat.userFilter.mods=Moderators - -difficulty.lock.title=Lock World Difficulty -difficulty.lock.question=Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again. - -title.oldgl1=Old graphics card detected; this may prevent you from -title.oldgl2=playing in the future as OpenGL 2.0 will be required. - -controls.title=Controls -controls.reset=Reset -controls.resetAll=Reset Keys - -key.sprint=Sprint -key.forward=Walk Forwards -key.left=Strafe Left -key.back=Walk Backwards -key.right=Strafe Right -key.jump=Jump -key.inventory=Inventory -key.drop=Drop Item -key.chat=Open Chat -key.sneak=Sneak -key.playerlist=List Players -key.attack=Attack/Destroy -key.use=Use Item/Place Block -key.pickItem=Pick Block -key.mouseButton=Button %1$s -key.command=Open Command -key.screenshot=Take Screenshot -key.togglePerspective=Toggle Perspective -key.smoothCamera=Toggle Cinematic Camera -key.fullscreen=Toggle Fullscreen -key.spectatorOutlines=Highlight Players (Spectators) -key.hotbar.1=Hotbar Slot 1 -key.hotbar.2=Hotbar Slot 2 -key.hotbar.3=Hotbar Slot 3 -key.hotbar.4=Hotbar Slot 4 -key.hotbar.5=Hotbar Slot 5 -key.hotbar.6=Hotbar Slot 6 -key.hotbar.7=Hotbar Slot 7 -key.hotbar.8=Hotbar Slot 8 -key.hotbar.9=Hotbar Slot 9 -key.streamStartStop=Start/Stop Stream -key.streamPauseUnpause=Pause/Unpause Stream -key.streamCommercial=Show Stream Commercials -key.streamToggleMic=Push To Talk/Mute - -key.categories.movement=Movement -key.categories.misc=Miscellaneous -key.categories.multiplayer=Multiplayer -key.categories.gameplay=Gameplay -key.categories.ui=Game Interface -key.categories.inventory=Inventory -key.categories.stream=Streaming - -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=(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) -resourcePack.incompatible.confirm.title=Are you sure you want to load this resource pack? -resourcePack.incompatible.confirm.old=This resource pack was made for an older version of Minecraft and may no longer work correctly. -resourcePack.incompatible.confirm.new=This resource pack was made for a newer version of Minecraft and may no longer work correctly. - -sign.edit=Edit sign message - -book.pageIndicator=Page %1$s of %2$s -book.byAuthor=by %1$s -book.signButton=Sign -book.editTitle=Enter Book Title: -book.finalizeButton=Sign and Close -book.finalizeWarning=Note! When you sign the book, it will no longer be editable. -book.generation.0=Original -book.generation.1=Copy of original -book.generation.2=Copy of a copy -book.generation.3=Tattered - -merchant.deprecated=Trade something else to unlock! - -tile.barrier.name=Barrier -tile.stone.stone.name=Stone -tile.stone.granite.name=Granite -tile.stone.graniteSmooth.name=Polished Granite -tile.stone.diorite.name=Diorite -tile.stone.dioriteSmooth.name=Polished Diorite -tile.stone.andesite.name=Andesite -tile.stone.andesiteSmooth.name=Polished Andesite -tile.hayBlock.name=Hay Bale -tile.grass.name=Grass Block -tile.dirt.name=Dirt -tile.dirt.default.name=Dirt -tile.dirt.coarse.name=Coarse Dirt -tile.dirt.podzol.name=Podzol -tile.stonebrick.name=Cobblestone -tile.wood.name=Wooden Planks -tile.wood.oak.name=Oak Wood Planks -tile.wood.spruce.name=Spruce Wood Planks -tile.wood.birch.name=Birch Wood Planks -tile.wood.jungle.name=Jungle Wood Planks -tile.wood.acacia.name=Acacia Wood Planks -tile.wood.big_oak.name=Dark Oak Wood Planks -tile.sapling.oak.name=Oak Sapling -tile.sapling.spruce.name=Spruce Sapling -tile.sapling.birch.name=Birch Sapling -tile.sapling.jungle.name=Jungle Sapling -tile.sapling.acacia.name=Acacia Sapling -tile.sapling.big_oak.name=Dark Oak Sapling -tile.deadbush.name=Dead Bush -tile.bedrock.name=Bedrock -tile.water.name=Water -tile.lava.name=Lava -tile.sand.name=Sand -tile.sand.default.name=Sand -tile.sand.red.name=Red Sand -tile.sandStone.name=Sandstone -tile.sandStone.default.name=Sandstone -tile.sandStone.chiseled.name=Chiseled Sandstone -tile.sandStone.smooth.name=Smooth Sandstone -tile.redSandStone.name=Red Sandstone -tile.redSandStone.default.name=Red Sandstone -tile.redSandStone.chiseled.name=Chiseled Red Sandstone -tile.redSandStone.smooth.name=Smooth Red Sandstone -tile.gravel.name=Gravel -tile.oreGold.name=Gold Ore -tile.oreIron.name=Iron Ore -tile.oreCoal.name=Coal Ore -tile.log.name=Wood -tile.log.oak.name=Oak Wood -tile.log.spruce.name=Spruce Wood -tile.log.birch.name=Birch Wood -tile.log.jungle.name=Jungle Wood -tile.log.acacia.name=Acacia Wood -tile.log.big_oak.name=Dark Oak Wood -tile.leaves.name=Leaves -tile.leaves.oak.name=Oak Leaves -tile.leaves.spruce.name=Spruce Leaves -tile.leaves.birch.name=Birch Leaves -tile.leaves.jungle.name=Jungle Leaves -tile.leaves.acacia.name=Acacia Leaves -tile.leaves.big_oak.name=Dark Oak Leaves -tile.tallgrass.name=Grass -tile.tallgrass.shrub.name=Shrub -tile.tallgrass.grass.name=Grass -tile.tallgrass.fern.name=Fern -tile.sponge.dry.name=Sponge -tile.sponge.wet.name=Wet Sponge -tile.glass.name=Glass -tile.stainedGlass.name=Stained Glass -tile.stainedGlass.black.name=Black Stained Glass -tile.stainedGlass.red.name=Red Stained Glass -tile.stainedGlass.green.name=Green Stained Glass -tile.stainedGlass.brown.name=Brown Stained Glass -tile.stainedGlass.blue.name=Blue Stained Glass -tile.stainedGlass.purple.name=Purple Stained Glass -tile.stainedGlass.cyan.name=Cyan Stained Glass -tile.stainedGlass.silver.name=Light Gray Stained Glass -tile.stainedGlass.gray.name=Gray Stained Glass -tile.stainedGlass.pink.name=Pink Stained Glass -tile.stainedGlass.lime.name=Lime Stained Glass -tile.stainedGlass.yellow.name=Yellow Stained Glass -tile.stainedGlass.lightBlue.name=Light Blue Stained Glass -tile.stainedGlass.magenta.name=Magenta Stained Glass -tile.stainedGlass.orange.name=Orange Stained Glass -tile.stainedGlass.white.name=White Stained Glass -tile.thinStainedGlass.name=Stained Glass Pane -tile.thinStainedGlass.black.name=Black Stained Glass Pane -tile.thinStainedGlass.red.name=Red Stained Glass Pane -tile.thinStainedGlass.green.name=Green Stained Glass Pane -tile.thinStainedGlass.brown.name=Brown Stained Glass Pane -tile.thinStainedGlass.blue.name=Blue Stained Glass Pane -tile.thinStainedGlass.purple.name=Purple Stained Glass Pane -tile.thinStainedGlass.cyan.name=Cyan Stained Glass Pane -tile.thinStainedGlass.silver.name=Light Gray Stained Glass Pane -tile.thinStainedGlass.gray.name=Gray Stained Glass Pane -tile.thinStainedGlass.pink.name=Pink Stained Glass Pane -tile.thinStainedGlass.lime.name=Lime Stained Glass Pane -tile.thinStainedGlass.yellow.name=Yellow Stained Glass Pane -tile.thinStainedGlass.lightBlue.name=Light Blue Stained Glass Pane -tile.thinStainedGlass.magenta.name=Magenta Stained Glass Pane -tile.thinStainedGlass.orange.name=Orange Stained Glass Pane -tile.thinStainedGlass.white.name=White Stained Glass Pane -tile.thinGlass.name=Glass Pane -tile.cloth.name=Wool -tile.flower1.name=Flower -tile.flower1.dandelion.name=Dandelion -tile.flower2.name=Flower -tile.flower2.poppy.name=Poppy -tile.flower2.blueOrchid.name=Blue Orchid -tile.flower2.allium.name=Allium -tile.flower2.houstonia.name=Azure Bluet -tile.flower2.tulipRed.name=Red Tulip -tile.flower2.tulipOrange.name=Orange Tulip -tile.flower2.tulipWhite.name=White Tulip -tile.flower2.tulipPink.name=Pink Tulip -tile.flower2.oxeyeDaisy.name=Oxeye Daisy -tile.doublePlant.name=Plant -tile.doublePlant.sunflower.name=Sunflower -tile.doublePlant.syringa.name=Lilac -tile.doublePlant.grass.name=Double Tallgrass -tile.doublePlant.fern.name=Large Fern -tile.doublePlant.rose.name=Rose Bush -tile.doublePlant.paeonia.name=Peony -tile.mushroom.name=Mushroom -tile.blockGold.name=Block of Gold -tile.blockIron.name=Block of Iron -tile.stoneSlab.name=Stone Slab -tile.stoneSlab.stone.name=Stone Slab -tile.stoneSlab.sand.name=Sandstone Slab -tile.stoneSlab.wood.name=Wooden Slab -tile.stoneSlab.cobble.name=Cobblestone Slab -tile.stoneSlab.brick.name=Bricks Slab -tile.stoneSlab.smoothStoneBrick.name=Stone Bricks Slab -tile.stoneSlab.netherBrick.name=Nether Brick Slab -tile.stoneSlab.quartz.name=Quartz Slab -tile.stoneSlab2.red_sandstone.name=Red Sandstone Slab -tile.woodSlab.name=Wood Slab -tile.woodSlab.oak.name=Oak Wood Slab -tile.woodSlab.spruce.name=Spruce Wood Slab -tile.woodSlab.birch.name=Birch Wood Slab -tile.woodSlab.jungle.name=Jungle Wood Slab -tile.woodSlab.acacia.name=Acacia Wood Slab -tile.woodSlab.big_oak.name=Dark Oak Wood Slab -tile.brick.name=Bricks -tile.tnt.name=TNT -tile.bookshelf.name=Bookshelf -tile.stoneMoss.name=Moss Stone -tile.obsidian.name=Obsidian -tile.torch.name=Torch -tile.fire.name=Fire -tile.mobSpawner.name=Monster Spawner -tile.stairsWood.name=Oak Wood Stairs -tile.stairsWoodSpruce.name=Spruce Wood Stairs -tile.stairsWoodBirch.name=Birch Wood Stairs -tile.stairsWoodJungle.name=Jungle Wood Stairs -tile.stairsWoodAcacia.name=Acacia Wood Stairs -tile.stairsWoodDarkOak.name=Dark Oak Wood Stairs -tile.chest.name=Chest -tile.chestTrap.name=Trapped Chest -tile.redstoneDust.name=Redstone Dust -tile.oreDiamond.name=Diamond Ore -tile.blockCoal.name=Block of Coal -tile.blockDiamond.name=Block of Diamond -tile.workbench.name=Crafting Table -tile.crops.name=Crops -tile.farmland.name=Farmland -tile.furnace.name=Furnace -tile.sign.name=Sign -tile.doorWood.name=Wooden Door -tile.ladder.name=Ladder -tile.rail.name=Rail -tile.goldenRail.name=Powered Rail -tile.activatorRail.name=Activator Rail -tile.detectorRail.name=Detector Rail -tile.stairsStone.name=Cobblestone Stairs -tile.stairsSandStone.name=Sandstone Stairs -tile.stairsRedSandStone.name=Red Sandstone Stairs -tile.lever.name=Lever -tile.pressurePlateStone.name=Stone Pressure Plate -tile.pressurePlateWood.name=Wooden Pressure Plate -tile.weightedPlate_light.name=Weighted Pressure Plate (Light) -tile.weightedPlate_heavy.name=Weighted Pressure Plate (Heavy) -tile.doorIron.name=Iron Door -tile.oreRedstone.name=Redstone Ore -tile.notGate.name=Redstone Torch -tile.button.name=Button -tile.snow.name=Snow -tile.woolCarpet.name=Carpet -tile.woolCarpet.black.name=Black Carpet -tile.woolCarpet.red.name=Red Carpet -tile.woolCarpet.green.name=Green Carpet -tile.woolCarpet.brown.name=Brown Carpet -tile.woolCarpet.blue.name=Blue Carpet -tile.woolCarpet.purple.name=Purple Carpet -tile.woolCarpet.cyan.name=Cyan Carpet -tile.woolCarpet.silver.name=Light Gray Carpet -tile.woolCarpet.gray.name=Gray Carpet -tile.woolCarpet.pink.name=Pink Carpet -tile.woolCarpet.lime.name=Lime Carpet -tile.woolCarpet.yellow.name=Yellow Carpet -tile.woolCarpet.lightBlue.name=Light Blue Carpet -tile.woolCarpet.magenta.name=Magenta Carpet -tile.woolCarpet.orange.name=Orange Carpet -tile.woolCarpet.white.name=Carpet -tile.ice.name=Ice -tile.icePacked.name=Packed Ice -tile.cactus.name=Cactus -tile.clay.name=Clay -tile.clayHardenedStained.name=Terracotta -tile.clayHardenedStained.black.name=Black Terracotta -tile.clayHardenedStained.red.name=Red Terracotta -tile.clayHardenedStained.green.name=Green Terracotta -tile.clayHardenedStained.brown.name=Brown Terracotta -tile.clayHardenedStained.blue.name=Blue Terracotta -tile.clayHardenedStained.purple.name=Purple Terracotta -tile.clayHardenedStained.cyan.name=Cyan Terracotta -tile.clayHardenedStained.silver.name=Light Gray Terracotta -tile.clayHardenedStained.gray.name=Gray Terracotta -tile.clayHardenedStained.pink.name=Pink Terracotta -tile.clayHardenedStained.lime.name=Lime Terracotta -tile.clayHardenedStained.yellow.name=Yellow Terracotta -tile.clayHardenedStained.lightBlue.name=Light Blue Terracotta -tile.clayHardenedStained.magenta.name=Magenta Terracotta -tile.clayHardenedStained.orange.name=Orange Terracotta -tile.clayHardenedStained.white.name=White Terracotta -tile.clayHardened.name=Terracotta -tile.reeds.name=Sugar cane -tile.jukebox.name=Jukebox -tile.fence.name=Oak Fence -tile.spruceFence.name=Spruce Fence -tile.birchFence.name=Birch Fence -tile.jungleFence.name=Jungle Fence -tile.darkOakFence.name=Dark Oak Fence -tile.acaciaFence.name=Acacia Fence -tile.fenceGate.name=Oak Fence Gate -tile.spruceFenceGate.name=Spruce Fence Gate -tile.birchFenceGate.name=Birch Fence Gate -tile.jungleFenceGate.name=Jungle Fence Gate -tile.darkOakFenceGate.name=Dark Oak Fence Gate -tile.acaciaFenceGate.name=Acacia Fence Gate -tile.pumpkinStem.name=Pumpkin Stem -tile.pumpkin.name=Pumpkin -tile.litpumpkin.name=Jack o'Lantern -tile.hellrock.name=Netherrack -tile.hellsand.name=Soul Sand -tile.lightgem.name=Glowstone -tile.portal.name=Portal -tile.cloth.black.name=Black Wool -tile.cloth.red.name=Red Wool -tile.cloth.green.name=Green Wool -tile.cloth.brown.name=Brown Wool -tile.cloth.blue.name=Blue Wool -tile.cloth.purple.name=Purple Wool -tile.cloth.cyan.name=Cyan Wool -tile.cloth.silver.name=Light Gray Wool -tile.cloth.gray.name=Gray Wool -tile.cloth.pink.name=Pink Wool -tile.cloth.lime.name=Lime Wool -tile.cloth.yellow.name=Yellow Wool -tile.cloth.lightBlue.name=Light Blue Wool -tile.cloth.magenta.name=Magenta Wool -tile.cloth.orange.name=Orange Wool -tile.cloth.white.name=Wool -tile.oreLapis.name=Lapis Lazuli Ore -tile.blockLapis.name=Lapis Lazuli Block -tile.dispenser.name=Dispenser -tile.dropper.name=Dropper -tile.musicBlock.name=Note Block -tile.cake.name=Cake -tile.bed.name=Bed -tile.bed.occupied=This bed is occupied -tile.bed.noSleep=You can only sleep at night -tile.bed.notSafe=You may not rest now, there are monsters nearby -tile.bed.notValid=Your home bed was missing or obstructed -tile.lockedchest.name=Locked chest -tile.trapdoor.name=Wooden Trapdoor -tile.ironTrapdoor.name=Iron Trapdoor -tile.web.name=Cobweb -tile.stonebricksmooth.name=Stone Bricks -tile.stonebricksmooth.default.name=Stone Bricks -tile.stonebricksmooth.mossy.name=Mossy Stone Bricks -tile.stonebricksmooth.cracked.name=Cracked Stone Bricks -tile.stonebricksmooth.chiseled.name=Chiseled Stone Bricks -tile.monsterStoneEgg.name=Stone Monster Egg -tile.monsterStoneEgg.stone.name=Stone Monster Egg -tile.monsterStoneEgg.cobble.name=Cobblestone Monster Egg -tile.monsterStoneEgg.brick.name=Stone Brick Monster Egg -tile.monsterStoneEgg.mossybrick.name=Mossy Stone Brick Monster Egg -tile.monsterStoneEgg.crackedbrick.name=Cracked Stone Brick Monster Egg -tile.monsterStoneEgg.chiseledbrick.name=Chiseled Stone Brick Monster Egg -tile.pistonBase.name=Piston -tile.pistonStickyBase.name=Sticky Piston -tile.fenceIron.name=Iron Bars -tile.melon.name=Melon -tile.stairsBrick.name=Brick Stairs -tile.stairsStoneBrickSmooth.name=Stone Brick Stairs -tile.vine.name=Vines -tile.netherBrick.name=Nether Brick -tile.netherFence.name=Nether Brick Fence -tile.stairsNetherBrick.name=Nether Brick Stairs -tile.netherStalk.name=Nether Wart -tile.cauldron.name=Cauldron -tile.enchantmentTable.name=Enchantment Table -tile.anvil.name=Anvil -tile.anvil.intact.name=Anvil -tile.anvil.slightlyDamaged.name=Slightly Damaged Anvil -tile.anvil.veryDamaged.name=Very Damaged Anvil -tile.whiteStone.name=End Stone -tile.endPortalFrame.name=End Portal -tile.mycel.name=Mycelium -tile.waterlily.name=Lily Pad -tile.dragonEgg.name=Dragon Egg -tile.redstoneLight.name=Redstone Lamp -tile.cocoa.name=Cocoa -tile.enderChest.name=Ender Chest -tile.oreRuby.name=Ruby Ore -tile.oreEmerald.name=Emerald Ore -tile.blockEmerald.name=Block of Emerald -tile.blockRedstone.name=Block of Redstone -tile.tripWire.name=Tripwire -tile.tripWireSource.name=Tripwire Hook -tile.commandBlock.name=Command Block -tile.beacon.name=Beacon -tile.beacon.primary=Primary Power -tile.beacon.secondary=Secondary Power -tile.cobbleWall.normal.name=Cobblestone Wall -tile.cobbleWall.mossy.name=Mossy Cobblestone Wall -tile.carrots.name=Carrots -tile.potatoes.name=Potatoes -tile.daylightDetector.name=Daylight Sensor -tile.netherquartz.name=Nether Quartz Ore -tile.hopper.name=Hopper -tile.quartzBlock.name=Block of Quartz -tile.quartzBlock.default.name=Block of Quartz -tile.quartzBlock.chiseled.name=Chiseled Quartz Block -tile.quartzBlock.lines.name=Pillar Quartz Block -tile.stairsQuartz.name=Quartz Stairs -tile.slime.name=Slime Block -tile.prismarine.rough.name=Prismarine -tile.prismarine.bricks.name=Prismarine Bricks -tile.prismarine.dark.name=Dark Prismarine -tile.seaLantern.name=Sea Lantern - -item.nameTag.name=Name Tag -item.leash.name=Lead -item.shovelIron.name=Iron Shovel -item.pickaxeIron.name=Iron Pickaxe -item.hatchetIron.name=Iron Axe -item.flintAndSteel.name=Flint and Steel -item.apple.name=Apple -item.cookie.name=Cookie -item.bow.name=Bow -item.arrow.name=Arrow -item.coal.name=Coal -item.charcoal.name=Charcoal -item.diamond.name=Diamond -item.emerald.name=Emerald -item.ingotIron.name=Iron Ingot -item.ingotGold.name=Gold Ingot -item.swordIron.name=Iron Sword -item.swordWood.name=Wooden Sword -item.shovelWood.name=Wooden Shovel -item.pickaxeWood.name=Wooden Pickaxe -item.hatchetWood.name=Wooden Axe -item.swordStone.name=Stone Sword -item.shovelStone.name=Stone Shovel -item.pickaxeStone.name=Stone Pickaxe -item.hatchetStone.name=Stone Axe -item.swordDiamond.name=Diamond Sword -item.shovelDiamond.name=Diamond Shovel -item.pickaxeDiamond.name=Diamond Pickaxe -item.hatchetDiamond.name=Diamond Axe -item.stick.name=Stick -item.bowl.name=Bowl -item.mushroomStew.name=Mushroom Stew -item.swordGold.name=Golden Sword -item.shovelGold.name=Golden Shovel -item.pickaxeGold.name=Golden Pickaxe -item.hatchetGold.name=Golden Axe -item.string.name=String -item.feather.name=Feather -item.sulphur.name=Gunpowder -item.hoeWood.name=Wooden Hoe -item.hoeStone.name=Stone Hoe -item.hoeIron.name=Iron Hoe -item.hoeDiamond.name=Diamond Hoe -item.hoeGold.name=Golden Hoe -item.seeds.name=Seeds -item.seeds_pumpkin.name=Pumpkin Seeds -item.seeds_melon.name=Melon Seeds -item.melon.name=Melon -item.wheat.name=Wheat -item.bread.name=Bread -item.helmetCloth.name=Leather Cap -item.chestplateCloth.name=Leather Tunic -item.leggingsCloth.name=Leather Pants -item.bootsCloth.name=Leather Boots -item.helmetChain.name=Chain Helmet -item.chestplateChain.name=Chain Chestplate -item.leggingsChain.name=Chain Leggings -item.bootsChain.name=Chain Boots -item.helmetIron.name=Iron Helmet -item.chestplateIron.name=Iron Chestplate -item.leggingsIron.name=Iron Leggings -item.bootsIron.name=Iron Boots -item.helmetDiamond.name=Diamond Helmet -item.chestplateDiamond.name=Diamond Chestplate -item.leggingsDiamond.name=Diamond Leggings -item.bootsDiamond.name=Diamond Boots -item.helmetGold.name=Golden Helmet -item.chestplateGold.name=Golden Chestplate -item.leggingsGold.name=Golden Leggings -item.bootsGold.name=Golden Boots -item.flint.name=Flint -item.porkchopRaw.name=Raw Porkchop -item.porkchopCooked.name=Cooked Porkchop -item.chickenRaw.name=Raw Chicken -item.chickenCooked.name=Cooked Chicken -item.muttonRaw.name=Raw Mutton -item.muttonCooked.name=Cooked Mutton -item.rabbitRaw.name=Raw Rabbit -item.rabbitCooked.name=Cooked Rabbit -item.rabbitStew.name=Rabbit Stew -item.rabbitFoot.name=Rabbit's Foot -item.rabbitHide.name=Rabbit Hide -item.beefRaw.name=Raw Beef -item.beefCooked.name=Steak -item.painting.name=Painting -item.frame.name=Item Frame -item.appleGold.name=Golden Apple -item.sign.name=Sign -item.doorOak.name=Oak Door -item.doorSpruce.name=Spruce Door -item.doorBirch.name=Birch Door -item.doorJungle.name=Jungle Door -item.doorAcacia.name=Acacia Door -item.doorDarkOak.name=Dark Oak Door -item.bucket.name=Bucket -item.bucketWater.name=Water Bucket -item.bucketLava.name=Lava Bucket -item.minecart.name=Minecart -item.saddle.name=Saddle -item.doorIron.name=Iron Door -item.redstone.name=Redstone -item.snowball.name=Snowball -item.boat.name=Boat -item.leather.name=Leather -item.milk.name=Milk -item.brick.name=Brick -item.clay.name=Clay -item.reeds.name=Sugar Canes -item.paper.name=Paper -item.book.name=Book -item.slimeball.name=Slimeball -item.minecartChest.name=Minecart with Chest -item.minecartFurnace.name=Minecart with Furnace -item.minecartTnt.name=Minecart with TNT -item.minecartHopper.name=Minecart with Hopper -item.minecartCommandBlock.name=Minecart with Command Block -item.egg.name=Egg -item.compass.name=Compass -item.fishingRod.name=Fishing Rod -item.clock.name=Clock -item.yellowDust.name=Glowstone Dust -item.fish.cod.raw.name=Raw Fish -item.fish.salmon.raw.name=Raw Salmon -item.fish.pufferfish.raw.name=Pufferfish -item.fish.clownfish.raw.name=Clownfish -item.fish.cod.cooked.name=Cooked Fish -item.fish.salmon.cooked.name=Cooked Salmon -item.record.name=Music Disc -item.record.13.desc=C418 - 13 -item.record.cat.desc=C418 - cat -item.record.blocks.desc=C418 - blocks -item.record.chirp.desc=C418 - chirp -item.record.far.desc=C418 - far -item.record.mall.desc=C418 - mall -item.record.mellohi.desc=C418 - mellohi -item.record.stal.desc=C418 - stal -item.record.strad.desc=C418 - strad -item.record.ward.desc=C418 - ward -item.record.11.desc=C418 - 11 -item.record.wait.desc=C418 - wait -item.bone.name=Bone -item.dyePowder.black.name=Ink Sac -item.dyePowder.red.name=Rose Red -item.dyePowder.green.name=Cactus Green -item.dyePowder.brown.name=Cocoa Beans -item.dyePowder.blue.name=Lapis Lazuli -item.dyePowder.purple.name=Purple Dye -item.dyePowder.cyan.name=Cyan Dye -item.dyePowder.silver.name=Light Gray Dye -item.dyePowder.gray.name=Gray Dye -item.dyePowder.pink.name=Pink Dye -item.dyePowder.lime.name=Lime Dye -item.dyePowder.yellow.name=Dandelion Yellow -item.dyePowder.lightBlue.name=Light Blue Dye -item.dyePowder.magenta.name=Magenta Dye -item.dyePowder.orange.name=Orange Dye -item.dyePowder.white.name=Bone Meal -item.sugar.name=Sugar -item.cake.name=Cake -item.bed.name=Bed -item.diode.name=Redstone Repeater -item.comparator.name=Redstone Comparator -item.map.name=Map -item.leaves.name=Leaves -item.shears.name=Shears -item.rottenFlesh.name=Rotten Flesh -item.enderPearl.name=Ender Pearl -item.blazeRod.name=Blaze Rod -item.ghastTear.name=Ghast Tear -item.netherStalkSeeds.name=Nether Wart -item.potion.name=Potion -item.emptyPotion.name=Water Bottle -item.goldNugget.name=Gold Nugget -item.glassBottle.name=Glass Bottle -item.spiderEye.name=Spider Eye -item.fermentedSpiderEye.name=Fermented Spider Eye -item.blazePowder.name=Blaze Powder -item.magmaCream.name=Magma Cream -item.cauldron.name=Cauldron -item.brewingStand.name=Brewing Stand -item.eyeOfEnder.name=Eye of Ender -item.speckledMelon.name=Glistering Melon -item.monsterPlacer.name=Spawn -item.expBottle.name=Bottle o' Enchanting -item.fireball.name=Fire Charge -item.writingBook.name=Book and Quill -item.writtenBook.name=Written Book -item.ruby.name=Ruby -item.flowerPot.name=Flower Pot -item.emptyMap.name=Empty Map -item.carrots.name=Carrot -item.carrotGolden.name=Golden Carrot -item.potato.name=Potato -item.potatoBaked.name=Baked Potato -item.potatoPoisonous.name=Poisonous Potato -item.skull.skeleton.name=Skeleton Skull -item.skull.wither.name=Wither Skeleton Skull -item.skull.zombie.name=Zombie Head -item.skull.char.name=Head -item.skull.player.name=%s's Head -item.skull.creeper.name=Creeper Head -item.carrotOnAStick.name=Carrot on a Stick -item.netherStar.name=Nether Star -item.pumpkinPie.name=Pumpkin Pie -item.enchantedBook.name=Enchanted Book -item.fireworks.name=Firework Rocket -item.fireworks.flight=Flight Duration: -item.fireworksCharge.name=Firework Star -item.fireworksCharge.black=Black -item.fireworksCharge.red=Red -item.fireworksCharge.green=Green -item.fireworksCharge.brown=Brown -item.fireworksCharge.blue=Blue -item.fireworksCharge.purple=Purple -item.fireworksCharge.cyan=Cyan -item.fireworksCharge.silver=Light Gray -item.fireworksCharge.gray=Gray -item.fireworksCharge.pink=Pink -item.fireworksCharge.lime=Lime -item.fireworksCharge.yellow=Yellow -item.fireworksCharge.lightBlue=Light Blue -item.fireworksCharge.magenta=Magenta -item.fireworksCharge.orange=Orange -item.fireworksCharge.white=White -item.fireworksCharge.customColor=Custom -item.fireworksCharge.fadeTo=Fade to -item.fireworksCharge.flicker=Twinkle -item.fireworksCharge.trail=Trail -item.fireworksCharge.type.0=Small Ball -item.fireworksCharge.type.1=Large Ball -item.fireworksCharge.type.2=Star-shaped -item.fireworksCharge.type.3=Creeper-shaped -item.fireworksCharge.type.4=Burst -item.fireworksCharge.type=Unknown Shape -item.netherbrick.name=Nether Brick -item.netherquartz.name=Nether Quartz -item.armorStand.name=Armor Stand -item.horsearmormetal.name=Iron Horse Armor -item.horsearmorgold.name=Gold Horse Armor -item.horsearmordiamond.name=Diamond Horse Armor -item.prismarineShard.name=Prismarine Shard -item.prismarineCrystals.name=Prismarine Crystals - -container.inventory=Inventory -container.hopper=Item Hopper -container.crafting=Crafting -container.dispenser=Dispenser -container.dropper=Dropper -container.furnace=Furnace -container.enchant=Enchant -container.enchant.lapis.one=1 Lapis Lazuli -container.enchant.lapis.many=%d Lapis Lazuli -container.enchant.level.one=1 Enchantment Level -container.enchant.level.many=%d Enchantment Levels -container.enchant.clue=%s . . . ? -container.repair=Repair & Name -container.repair.cost=Enchantment Cost: %1$d -container.repair.expensive=Too Expensive! -container.creative=Item Selection -container.brewing=Brewing Stand -container.chest=Chest -container.chestDouble=Large Chest -container.minecart=Minecart -container.enderchest=Ender Chest -container.beacon=Beacon - -container.isLocked=%s is locked! - -item.dyed=Dyed -item.unbreakable=Unbreakable -item.canBreak=Can break: -item.canPlace=Can be placed on: - -entity.Item.name=Item -entity.XPOrb.name=Experience Orb -entity.SmallFireball.name=Small Fireball -entity.Fireball.name=Fireball -entity.ThrownPotion.name=Potion - -entity.Arrow.name=Arrow -entity.Snowball.name=Snowball -entity.Painting.name=Painting -entity.ArmorStand.name=Armor Stand - -entity.Mob.name=Mob -entity.Monster.name=Monster - -entity.Creeper.name=Creeper -entity.Skeleton.name=Skeleton -entity.Spider.name=Spider -entity.Giant.name=Giant -entity.Zombie.name=Zombie -entity.Slime.name=Slime -entity.Ghast.name=Ghast -entity.PigZombie.name=Zombie Pigman -entity.Enderman.name=Enderman -entity.Endermite.name=Endermite -entity.Silverfish.name=Silverfish -entity.CaveSpider.name=Cave Spider -entity.Blaze.name=Blaze -entity.LavaSlime.name=Magma Cube -entity.MushroomCow.name=Mooshroom -entity.Villager.name=Villager -entity.VillagerGolem.name=Iron Golem -entity.SnowMan.name=Snow Golem -entity.EnderDragon.name=Ender Dragon -entity.WitherBoss.name=Wither -entity.Witch.name=Witch -entity.Guardian.name=Guardian - -entity.Villager.farmer=Farmer -entity.Villager.fisherman=Fisherman -entity.Villager.shepherd=Shepherd -entity.Villager.fletcher=Fletcher -entity.Villager.librarian=Librarian -entity.Villager.cleric=Cleric -entity.Villager.armor=Armorer -entity.Villager.weapon=Weapon Smith -entity.Villager.tool=Tool Smith -entity.Villager.butcher=Butcher -entity.Villager.leather=Leatherworker - -entity.Pig.name=Pig -entity.Sheep.name=Sheep -entity.Cow.name=Cow -entity.Chicken.name=Chicken -entity.Squid.name=Squid -entity.Wolf.name=Wolf -entity.Ozelot.name=Ocelot -entity.Cat.name=Cat -entity.Bat.name=Bat -entity.EntityHorse.name=Horse -entity.horse.name=Horse -entity.donkey.name=Donkey -entity.mule.name=Mule -entity.skeletonhorse.name=Skeleton Horse -entity.zombiehorse.name=Zombie Horse -entity.Rabbit.name=Rabbit -entity.KillerBunny.name=The Killer Bunny - -entity.PrimedTnt.name=Block of TNT -entity.FallingSand.name=Falling Block - -entity.Minecart.name=Minecart -entity.Boat.name=Boat - -entity.generic.name=unknown - -death.fell.accident.ladder=%1$s fell off a ladder -death.fell.accident.vines=%1$s fell off some vines -death.fell.accident.water=%1$s fell out of the water -death.fell.accident.generic=%1$s fell from a high place -death.fell.killer=%1$s was doomed to fall -death.fell.assist=%1$s was doomed to fall by %2$s -death.fell.assist.item=%1$s was doomed to fall by %2$s using %3$s -death.fell.finish=%1$s fell too far and was finished by %2$s -death.fell.finish.item=%1$s fell too far and was finished by %2$s using %3$s - -death.attack.lightningBolt=%1$s was struck by lightning -death.attack.inFire=%1$s went up in flames -death.attack.inFire.player=%1$s walked into fire whilst fighting %2$s -death.attack.onFire=%1$s burned to death -death.attack.onFire.player=%1$s was burnt to a crisp whilst fighting %2$s -death.attack.lava=%1$s tried to swim in lava -death.attack.lava.player=%1$s tried to swim in lava to escape %2$s -death.attack.inWall=%1$s suffocated in a wall -death.attack.drown=%1$s drowned -death.attack.drown.player=%1$s drowned whilst trying to escape %2$s -death.attack.starve=%1$s starved to death -death.attack.cactus=%1$s was pricked to death -death.attack.cactus.player=%1$s walked into a cactus whilst trying to escape %2$s -death.attack.generic=%1$s died -death.attack.explosion=%1$s blew up -death.attack.explosion.player=%1$s was blown up by %2$s -death.attack.magic=%1$s was killed by magic -death.attack.wither=%1$s withered away -death.attack.anvil=%1$s was squashed by a falling anvil -death.attack.fallingBlock=%1$s was squashed by a falling block -death.attack.mob=%1$s was slain by %2$s -death.attack.player=%1$s was slain by %2$s -death.attack.player.item=%1$s was slain by %2$s using %3$s -death.attack.arrow=%1$s was shot by %2$s -death.attack.arrow.item=%1$s was shot by %2$s using %3$s -death.attack.fireball=%1$s was fireballed by %2$s -death.attack.fireball.item=%1$s was fireballed by %2$s using %3$s -death.attack.thrown=%1$s was pummeled by %2$s -death.attack.thrown.item=%1$s was pummeled by %2$s using %3$s -death.attack.indirectMagic=%1$s was killed by %2$s using magic -death.attack.indirectMagic.item=%1$s was killed by %2$s using %3$s -death.attack.thorns=%1$s was killed trying to hurt %2$s -death.attack.fall=%1$s hit the ground too hard -death.attack.outOfWorld=%1$s fell out of the world - -deathScreen.respawn=Respawn -deathScreen.deleteWorld=Delete world -deathScreen.titleScreen=Title screen -deathScreen.score=Score -deathScreen.title.hardcore=Game over! -deathScreen.hardcoreInfo=You cannot respawn in hardcore mode! -deathScreen.title=You died! -deathScreen.leaveServer=Leave server -deathScreen.quit.confirm=Are you sure you want to quit? - -potion.effects.whenDrank=When Applied: -potion.empty=No Effects -potion.moveSpeed=Speed -potion.moveSlowdown=Slowness -potion.digSpeed=Haste -potion.digSlowDown=Mining Fatigue -potion.damageBoost=Strength -potion.heal=Instant Health -potion.harm=Instant Damage -potion.jump=Jump Boost -potion.confusion=Nausea -potion.regeneration=Regeneration -potion.resistance=Resistance -potion.fireResistance=Fire Resistance -potion.waterBreathing=Water Breathing -potion.invisibility=Invisibility -potion.blindness=Blindness -potion.nightVision=Night Vision -potion.hunger=Hunger -potion.weakness=Weakness -potion.poison=Poison -potion.wither=Wither -potion.healthBoost=Health Boost -potion.absorption=Absorption -potion.saturation=Saturation - -potion.moveSpeed.postfix=Potion of Swiftness -potion.moveSlowdown.postfix=Potion of Slowness -potion.digSpeed.postfix=Potion of Haste -potion.digSlowDown.postfix=Potion of Dullness -potion.damageBoost.postfix=Potion of Strength -potion.weakness.postfix=Potion of Weakness -potion.heal.postfix=Potion of Healing -potion.harm.postfix=Potion of Harming -potion.jump.postfix=Potion of Leaping -potion.confusion.postfix=Potion of Nausea -potion.regeneration.postfix=Potion of Regeneration -potion.resistance.postfix=Potion of Resistance -potion.fireResistance.postfix=Potion of Fire Resistance -potion.waterBreathing.postfix=Potion of Water Breathing -potion.invisibility.postfix=Potion of Invisibility -potion.blindness.postfix=Potion of Blindness -potion.nightVision.postfix=Potion of Night Vision -potion.hunger.postfix=Potion of Hunger -potion.poison.postfix=Potion of Poison -potion.wither.postfix=Potion of Decay -potion.healthBoost.postfix=Potion of Health Boost -potion.absorption.postfix=Potion of Absorption -potion.saturation.postfix=Potion of Saturation - -potion.potency.0= -potion.potency.1=II -potion.potency.2=III -potion.potency.3=IV - -potion.prefix.grenade=Splash -potion.prefix.mundane=Mundane -potion.prefix.uninteresting=Uninteresting -potion.prefix.bland=Bland -potion.prefix.clear=Clear -potion.prefix.milky=Milky -potion.prefix.diffuse=Diffuse -potion.prefix.artless=Artless -potion.prefix.thin=Thin -potion.prefix.awkward=Awkward -potion.prefix.flat=Flat -potion.prefix.bulky=Bulky -potion.prefix.bungling=Bungling -potion.prefix.buttered=Buttered -potion.prefix.smooth=Smooth -potion.prefix.suave=Suave -potion.prefix.debonair=Debonair -potion.prefix.thick=Thick -potion.prefix.elegant=Elegant -potion.prefix.fancy=Fancy -potion.prefix.charming=Charming -potion.prefix.dashing=Dashing -potion.prefix.refined=Refined -potion.prefix.cordial=Cordial -potion.prefix.sparkling=Sparkling -potion.prefix.potent=Potent -potion.prefix.foul=Foul -potion.prefix.odorless=Odorless -potion.prefix.rank=Rank -potion.prefix.harsh=Harsh -potion.prefix.acrid=Acrid -potion.prefix.gross=Gross -potion.prefix.stinky=Stinky - -enchantment.damage.all=Sharpness -enchantment.damage.undead=Smite -enchantment.damage.arthropods=Bane of Arthropods -enchantment.knockback=Knockback -enchantment.fire=Fire Aspect -enchantment.protect.all=Protection -enchantment.protect.fire=Fire Protection -enchantment.protect.fall=Feather Falling -enchantment.protect.explosion=Blast Protection -enchantment.protect.projectile=Projectile Protection -enchantment.oxygen=Respiration -enchantment.waterWorker=Aqua Affinity -enchantment.waterWalker=Depth Strider -enchantment.digging=Efficiency -enchantment.untouching=Silk Touch -enchantment.durability=Unbreaking -enchantment.lootBonus=Looting -enchantment.lootBonusDigger=Fortune -enchantment.lootBonusFishing=Luck of the Sea -enchantment.fishingSpeed=Lure -enchantment.arrowDamage=Power -enchantment.arrowFire=Flame -enchantment.arrowKnockback=Punch -enchantment.arrowInfinite=Infinity -enchantment.thorns=Thorns - -enchantment.level.1=I -enchantment.level.2=II -enchantment.level.3=III -enchantment.level.4=IV -enchantment.level.5=V -enchantment.level.6=VI -enchantment.level.7=VII -enchantment.level.8=VIII -enchantment.level.9=IX -enchantment.level.10=X - -gui.achievements=Achievements -gui.stats=Statistics - -stats.tooltip.type.achievement=Achievement -stats.tooltip.type.statistic=Statistic -stat.generalButton=General -stat.blocksButton=Blocks -stat.itemsButton=Items -stat.mobsButton=Mobs - -stat.used=Times Used -stat.mined=Times Mined -stat.depleted=Times Depleted -stat.crafted=Times Crafted -stat.entityKills=You killed %d %s -stat.entityKilledBy=%s killed you %d time(s) -stat.entityKills.none=You have never killed %s -stat.entityKilledBy.none=You have never been killed by %s - -stat.startGame=Times played -stat.createWorld=Worlds created -stat.loadWorld=Saves loaded -stat.joinMultiplayer=Multiplayer joins -stat.leaveGame=Games quit - -stat.playOneMinute=Minutes Played -stat.timeSinceDeath=Since Last Death - -stat.walkOneCm=Distance Walked -stat.crouchOneCm=Distance Crouched -stat.sprintOneCm=Distance Sprinted -stat.fallOneCm=Distance Fallen -stat.swimOneCm=Distance Swum -stat.flyOneCm=Distance Flown -stat.climbOneCm=Distance Climbed -stat.diveOneCm=Distance Dove -stat.minecartOneCm=Distance by Minecart -stat.boatOneCm=Distance by Boat -stat.pigOneCm=Distance by Pig -stat.horseOneCm=Distance by Horse -stat.jump=Jumps -stat.drop=Items Dropped - -stat.damageDealt=Damage Dealt -stat.damageTaken=Damage Taken -stat.deaths=Number of Deaths -stat.mobKills=Mob Kills -stat.animalsBred=Animals Bred -stat.playerKills=Player Kills -stat.fishCaught=Fish Caught -stat.treasureFished=Treasure Fished -stat.junkFished=Junk Fished -stat.talkedToVillager=Talked to Villagers -stat.tradedWithVillager=Traded with Villagers - -stat.cakeSlicesEaten=Cake Slices Eaten -stat.cauldronFilled=Cauldrons Filled -stat.cauldronUsed=Water Taken from Cauldron -stat.armorCleaned=Armor Pieces Cleaned -stat.bannerCleaned=Banners Cleaned -stat.brewingstandInteraction=Interactions with Brewing Stand -stat.beaconInteraction=Interactions with Beacon -stat.dropperInspected=Droppers Searched -stat.hopperInspected=Hoppers Searched -stat.dispenserInspected=Dispensers Searched -stat.noteblockPlayed=Noteblocks played -stat.noteblockTuned=Noteblocks tuned -stat.flowerPotted=Plants potted -stat.trappedChestTriggered=Trapped Chests Triggered -stat.enderchestOpened=Ender Chests Opened -stat.itemEnchanted=Items Enchanted -stat.recordPlayed=Records Played -stat.furnaceInteraction=Interactions with Furnace -stat.workbenchInteraction=Interactions with Crafting Table -stat.chestOpened=Chests Opened - -stat.mineBlock=%1$s Mined -stat.craftItem=%1$s Crafted -stat.useItem=%1$s Used -stat.breakItem=%1$s Depleted - -achievement.get=Achievement get! - -achievement.taken=Taken! -achievement.unknown=??? - -achievement.requires=Requires '%1$s' -achievement.openInventory=Taking Inventory -achievement.openInventory.desc=Press '%1$s' to open your inventory. -achievement.mineWood=Getting Wood -achievement.mineWood.desc=Attack a tree until a block of wood pops out -achievement.buildWorkBench=Benchmarking -achievement.buildWorkBench.desc=Craft a workbench with four blocks of planks -achievement.buildPickaxe=Time to Mine! -achievement.buildPickaxe.desc=Use planks and sticks to make a pickaxe -achievement.buildFurnace=Hot Topic -achievement.buildFurnace.desc=Construct a furnace out of eight stone blocks -achievement.acquireIron=Acquire Hardware -achievement.acquireIron.desc=Smelt an iron ingot -achievement.buildHoe=Time to Farm! -achievement.buildHoe.desc=Use planks and sticks to make a hoe -achievement.makeBread=Bake Bread -achievement.makeBread.desc=Turn wheat into bread -achievement.bakeCake=The Lie -achievement.bakeCake.desc=Wheat, sugar, milk and eggs! -achievement.buildBetterPickaxe=Getting an Upgrade -achievement.buildBetterPickaxe.desc=Construct a better pickaxe -achievement.overpowered=Overpowered -achievement.overpowered.desc=Build a Notch apple -achievement.cookFish=Delicious Fish -achievement.cookFish.desc=Catch and cook fish! -achievement.onARail=On A Rail -achievement.onARail.desc=Travel by minecart at least 1 km from where you started -achievement.buildSword=Time to Strike! -achievement.buildSword.desc=Use planks and sticks to make a sword -achievement.killEnemy=Monster Hunter -achievement.killEnemy.desc=Attack and destroy a monster -achievement.killCow=Cow Tipper -achievement.killCow.desc=Harvest some leather -achievement.breedCow=Repopulation -achievement.breedCow.desc=Breed two cows with wheat -achievement.flyPig=When Pigs Fly -achievement.flyPig.desc=Fly a pig off a cliff -achievement.snipeSkeleton=Sniper Duel -achievement.snipeSkeleton.desc=Kill a skeleton with an arrow from more than 50 meters -achievement.diamonds=DIAMONDS! -achievement.diamonds.desc=Acquire diamonds with your iron tools -achievement.diamondsToYou=Diamonds to you! -achievement.diamondsToYou.desc=Throw diamonds at another player. -achievement.portal=We Need to Go Deeper -achievement.portal.desc=Build a portal to the Nether -achievement.ghast=Return to Sender -achievement.ghast.desc=Destroy a Ghast with a fireball -achievement.blazeRod=Into Fire -achievement.blazeRod.desc=Relieve a Blaze of its rod -achievement.potion=Local Brewery -achievement.potion.desc=Brew a potion -achievement.theEnd=The End? -achievement.theEnd.desc=Locate the End -achievement.theEnd2=The End. -achievement.theEnd2.desc=Defeat the Ender Dragon -achievement.spawnWither=The Beginning? -achievement.spawnWither.desc=Spawn the Wither -achievement.killWither=The Beginning. -achievement.killWither.desc=Kill the Wither -achievement.fullBeacon=Beaconator -achievement.fullBeacon.desc=Create a full beacon -achievement.exploreAllBiomes=Adventuring Time -achievement.exploreAllBiomes.desc=Discover all biomes -achievement.enchantments=Enchanter -achievement.enchantments.desc=Use a book, obsidian and diamonds to construct an enchantment table -achievement.overkill=Overkill -achievement.overkill.desc=Deal nine hearts of damage in a single hit -achievement.bookcase=Librarian -achievement.bookcase.desc=Build some bookshelves to improve your enchantment table - -commands.generic.exception=An unknown error occurred while attempting to perform this command -commands.generic.permission=You do not have permission to use this command -commands.generic.syntax=Invalid command syntax -commands.generic.player.notFound=That player cannot be found -commands.generic.entity.notFound=That entity cannot be found -commands.generic.entity.invalidUuid=The entity UUID provided is in an invalid format -commands.generic.entity.invalidType=Entity type '%s' is invalid -commands.generic.notFound=Unknown command. Try /help for a list of commands -commands.generic.parameter.invalid='%s' is not a valid parameter -commands.generic.num.invalid='%s' is not a valid number -commands.generic.boolean.invalid='%s' is not true or false -commands.generic.num.tooSmall=The number you have entered (%d) is too small, it must be at least %d -commands.generic.num.tooBig=The number you have entered (%d) is too big, it must be at most %d -commands.generic.double.tooSmall=The number you have entered (%.2f) is too small, it must be at least %.2f -commands.generic.double.tooBig=The number you have entered (%.2f) is too big, it must be at most %.2f -commands.generic.usage=Usage: %s - -commands.setidletimeout.usage=/setidletimeout -commands.setidletimeout.success=Successfully set the idle timeout to %d minutes. -commands.xp.failure.widthdrawXp=Cannot give player negative experience points -commands.xp.success=Given %d experience to %s -commands.xp.success.levels=Given %d levels to %s -commands.xp.success.negative.levels=Taken %d levels from %s -commands.xp.usage=/xp [player] OR /xp L [player] -commands.playsound.usage=/playsound [x] [y] [z] [volume] [pitch] [minimumVolume] -commands.playsound.success=Played sound '%s' to %s -commands.playsound.playerTooFar=Player %s is too far away to hear the sound -commands.give.usage=/give [amount] [data] [dataTag] -commands.give.item.notFound=There is no such item with name %d -commands.give.block.notFound=There is no such block with name %d -commands.give.success=Given %s * %d to %s -commands.give.tagError=Data tag parsing failed: %s -commands.replaceitem.usage=/replaceitem ... -commands.replaceitem.entity.usage=/replaceitem entity [amount] [data] [dataTag] -commands.replaceitem.block.usage=/replaceitem block [amount] [data] [dataTag] -commands.replaceitem.tagError=Data tag parsing failed: %s -commands.replaceitem.noContainer=Block at %d, %d, %d is not a container -commands.replaceitem.failed=Could not replace slot %d with %d * %s -commands.replaceitem.success=Replaced slot %d with %d * %s -commands.stats.usage=/stats ... -commands.stats.entity.usage=/stats entity -commands.stats.entity.set.usage=/stats entity set -commands.stats.entity.clear.usage=/stats entity clear -commands.stats.block.usage=/stats block ... -commands.stats.block.set.usage=/stats block set -commands.stats.block.clear.usage=/stats block clear -commands.stats.noCompatibleBlock=Block at %d, %d, %d can not track stats -commands.stats.failed=Invalid parameters -commands.stats.cleared=Cleared %s stats -commands.stats.success=Storing %s stats in %s on %s -commands.summon.usage=/summon [x] [y] [z] [dataTag] -commands.summon.success=Object successfully summoned -commands.summon.failed=Unable to summon object -commands.summon.tagError=Data tag parsing failed: %s -commands.summon.outOfWorld=Cannot summon the object out of the world -commands.testforblock.usage=/testforblock [dataValue] [dataTag] -commands.testforblock.failed.tile=The block at %d,%d,%d is %s (expected: %s). -commands.testforblock.failed.data=The block at %d,%d,%d had the data value of %s (expected: %s). -commands.testforblock.failed.nbt=The block at %d,%d,%d did not have the required NBT keys. -commands.testforblock.failed.tileEntity=The block at %d,%d,%d is not a tile entity and cannot support tag matching. -commands.testforblock.success=Successfully found the block at %d,%d,%d. -commands.testforblock.outOfWorld=Cannot test for block outside of the world -commands.setblock.usage=/setblock [dataValue] [oldBlockHandling] [dataTag] -commands.setblock.success=Block placed -commands.setblock.failed=Unable to place block -commands.setblock.tagError=Data tag parsing failed: %s -commands.setblock.outOfWorld=Cannot place block outside of the world -commands.setblock.notFound=There is no such block with ID/name %s -commands.setblock.noChange=The block couldn't be placed -commands.fill.usage=/fill [dataValue] [oldBlockHandling] [dataTag] -commands.fill.outOfWorld=Cannot place blocks outside of the world -commands.fill.tagError=Data tag parsing failed: %s -commands.fill.success=%d blocks filled -commands.fill.failed=No blocks filled -commands.fill.tooManyBlocks=Too many blocks in the specified area (%d > %d) -commands.clone.usage=/clone [maskMode] [cloneMode] -commands.clone.outOfWorld=Cannot access blocks outside of the world -commands.clone.noOverlap=Source and destination can not overlap -commands.clone.success=%d blocks cloned -commands.clone.failed=No blocks cloned -commands.clone.tooManyBlocks=Too many blocks in the specified area (%d > %d) -commands.compare.usage=/testforblocks [mode] -commands.compare.outOfWorld=Cannot access blocks outside of the world -commands.compare.failed=Source and destination are not identical -commands.compare.success=%d blocks compared -commands.compare.tooManyBlocks=Too many blocks in the specified area (%d > %d) -commands.blockdata.usage=/blockdata -commands.blockdata.success=Block data updated to: %s -commands.blockdata.tagError=Data tag parsing failed: %s -commands.blockdata.outOfWorld=Cannot change block outside of the world -commands.blockdata.notValid=The target block is not a data holder block -commands.blockdata.failed=The data tag did not change: %s -commands.entitydata.usage=/entitydata -commands.entitydata.success=Entity data updated to: %s -commands.entitydata.tagError=Data tag parsing failed: %s -commands.entitydata.noPlayers=%s is a player and cannot be changed -commands.entitydata.failed=The data tag did not change: %s -commands.effect.usage=/effect [seconds] [amplifier] [hideParticles] OR /effect clear -commands.effect.notFound=There is no such mob effect with ID %d -commands.effect.success=Given %1$s (ID %2$d) * %3$d to %4$s for %5$d seconds -commands.effect.success.removed=Took %1$s from %2$s -commands.effect.success.removed.all=Took all effects from %s -commands.effect.failure.notActive=Couldn't take %1$s from %2$s as they do not have the effect -commands.effect.failure.notActive.all=Couldn't take any effects from %s as they do not have any -commands.enchant.usage=/enchant [level] -commands.enchant.notFound=There is no such enchantment with ID %d -commands.enchant.noItem=The target doesn't hold an item -commands.enchant.cantEnchant=The selected enchantment can't be added to the target item -commands.enchant.cantCombine=%1$s can't be combined with %2$s -commands.enchant.success=Enchanting succeeded -commands.particle.usage=/particle [count] [mode] -commands.particle.success=Playing effect %s for %d times -commands.particle.notFound=Unknown effect name (%s) -commands.clear.usage=/clear [player] [item] [data] [maxCount] [dataTag] -commands.clear.success=Cleared the inventory of %s, removing %d items -commands.clear.testing=%s has %d items that match the criteria -commands.clear.failure=Could not clear the inventory of %s, no items to remove -commands.clear.tagError=Data tag parsing failed: %s -commands.downfall.usage=/toggledownfall -commands.downfall.success=Toggled downfall -commands.time.usage=/time -commands.time.added=Added %d to the time -commands.time.set=Set the time to %d -commands.time.query=Time is %d -commands.players.usage=/list -commands.players.list=There are %d/%d players online: -commands.banlist.ips=There are %d total banned IP addresses: -commands.banlist.players=There are %d total banned players: -commands.banlist.usage=/banlist [ips|players] -commands.kill.usage=/kill [player|entity] -commands.kill.successful=Killed %s -commands.kick.success=Kicked %s from the game -commands.kick.success.reason=Kicked %s from the game: '%s' -commands.kick.usage=/kick [reason ...] -commands.op.success=Opped %s -commands.op.failed=Could not op %s -commands.op.usage=/op -commands.deop.success=De-opped %s -commands.deop.failed=Could not de-op %s -commands.deop.usage=/deop -commands.say.usage=/say -commands.ban.success=Banned player %s -commands.ban.failed=Could not ban player %s -commands.ban.usage=/ban [reason ...] -commands.unban.success=Unbanned player %s -commands.unban.failed=Could not unban player %s -commands.unban.usage=/pardon -commands.banip.invalid=You have entered an invalid IP address or a player that is not online -commands.banip.success=Banned IP address %s -commands.banip.success.players=Banned IP address %s belonging to %s -commands.banip.usage=/ban-ip [reason ...] -commands.unbanip.invalid=You have entered an invalid IP address -commands.unbanip.success=Unbanned IP address %s -commands.unbanip.usage=/pardon-ip
-commands.save.usage=/save-all -commands.save-on.alreadyOn=Saving is already turned on. -commands.save-on.usage=/save-on -commands.save-off.alreadyOff=Saving is already turned off. -commands.save-off.usage=/save-off -commands.save.enabled=Turned on world auto-saving -commands.save.disabled=Turned off world auto-saving -commands.save.start=Saving... -commands.save.success=Saved the world -commands.save.failed=Saving failed: %s -commands.stop.usage=/stop -commands.stop.start=Stopping the server -commands.tp.success=Teleported %s to %s -commands.tp.success.coordinates=Teleported %s to %s, %s, %s -commands.tp.usage=/tp [target player] OR /tp [target player] [ ] -commands.tp.notSameDimension=Unable to teleport because players are not in the same dimension -commands.whitelist.list=There are %d (out of %d seen) whitelisted players: -commands.whitelist.enabled=Turned on the whitelist -commands.whitelist.disabled=Turned off the whitelist -commands.whitelist.reloaded=Reloaded the whitelist -commands.whitelist.add.success=Added %s to the whitelist -commands.whitelist.add.failed=Could not add %s to the whitelist -commands.whitelist.add.usage=/whitelist add -commands.whitelist.remove.success=Removed %s from the whitelist -commands.whitelist.remove.failed=Could not remove %s from the whitelist -commands.whitelist.remove.usage=/whitelist remove -commands.whitelist.usage=/whitelist -commands.scoreboard.usage=/scoreboard ... -commands.scoreboard.noMultiWildcard=Only one user wildcard allowed -commands.scoreboard.allMatchesFailed=All matches failed -commands.scoreboard.teamNotFound=No team was found by the name '%s' -commands.scoreboard.objectiveNotFound=No objective was found by the name '%s' -commands.scoreboard.objectiveReadOnly=The objective '%s' is read-only and cannot be set -commands.scoreboard.objectives.usage=/scoreboard objectives ... -commands.scoreboard.objectives.setdisplay.usage=/scoreboard objectives setdisplay [objective] -commands.scoreboard.objectives.setdisplay.invalidSlot=No such display slot '%s' -commands.scoreboard.objectives.setdisplay.successCleared=Cleared objective display slot '%s' -commands.scoreboard.objectives.setdisplay.successSet=Set the display objective in slot '%s' to '%s' -commands.scoreboard.objectives.add.usage=/scoreboard objectives add [display name ...] -commands.scoreboard.objectives.add.wrongType=Invalid objective criteria type '%s' -commands.scoreboard.objectives.add.alreadyExists=An objective with the name '%s' already exists -commands.scoreboard.objectives.add.tooLong=The name '%s' is too long for an objective, it can be at most %d characters long -commands.scoreboard.objectives.add.displayTooLong=The display name '%s' is too long for an objective, it can be at most %d characters long -commands.scoreboard.objectives.add.success=Added new objective '%s' successfully -commands.scoreboard.objectives.remove.usage=/scoreboard objectives remove -commands.scoreboard.objectives.remove.success=Removed objective '%s' successfully -commands.scoreboard.objectives.list.count=Showing %d objective(s) on scoreboard: -commands.scoreboard.objectives.list.entry=- %s: displays as '%s' and is type '%s' -commands.scoreboard.objectives.list.empty=There are no objectives on the scoreboard -commands.scoreboard.players.usage=/scoreboard players ... -commands.scoreboard.players.name.tooLong=The name '%s' is too long for a player, it can be at most %d characters long -commands.scoreboard.players.set.success=Set score of %s for player %s to %d -commands.scoreboard.players.set.tagMismatch=The dataTag does not match for %s -commands.scoreboard.players.set.tagError=Could not parse dataTag, reason: %s -commands.scoreboard.players.set.usage=/scoreboard players set [dataTag] -commands.scoreboard.players.add.usage=/scoreboard players add [dataTag] -commands.scoreboard.players.remove.usage=/scoreboard players remove [dataTag] -commands.scoreboard.players.reset.usage=/scoreboard players reset [objective] -commands.scoreboard.players.reset.success=Reset scores of player %s -commands.scoreboard.players.resetscore.success=Reset score %s of player %s -commands.scoreboard.players.list.usage=/scoreboard players list [name] -commands.scoreboard.players.list.count=Showing %d tracked players on the scoreboard: -commands.scoreboard.players.list.empty=There are no tracked players on the scoreboard -commands.scoreboard.players.list.player.count=Showing %d tracked objective(s) for %s: -commands.scoreboard.players.list.player.entry=- %2$s: %1$d (%3$s) -commands.scoreboard.players.list.player.empty=Player %s has no scores recorded -commands.scoreboard.players.enable.usage=/scoreboard players enable -commands.scoreboard.players.enable.success=Enabled trigger %s for %s -commands.scoreboard.players.enable.noTrigger=Objective %s is not a trigger -commands.scoreboard.players.test.usage=/scoreboard players test -commands.scoreboard.players.test.notFound=No %s score for %s found -commands.scoreboard.players.test.failed=Score %d is NOT in range %d to %d -commands.scoreboard.players.test.success=Score %d is in range %d to %d -commands.scoreboard.players.operation.usage=/scoreboard players operation -commands.scoreboard.players.operation.notFound=No %s score for %s found -commands.scoreboard.players.operation.invalidOperation=Invalid operation %s -commands.scoreboard.players.operation.success=Operation applied successfully -commands.scoreboard.teams.usage=/scoreboard teams ... -commands.scoreboard.teams.add.usage=/scoreboard teams add [display name ...] -commands.scoreboard.teams.add.alreadyExists=A team with the name '%s' already exists -commands.scoreboard.teams.add.tooLong=The name '%s' is too long for a team, it can be at most %d characters long -commands.scoreboard.teams.add.displayTooLong=The display name '%s' is too long for a team, it can be at most %d characters long -commands.scoreboard.teams.add.success=Added new team '%s' successfully -commands.scoreboard.teams.list.usage=/scoreboard teams list [name] -commands.scoreboard.teams.list.count=Showing %d teams on the scoreboard: -commands.scoreboard.teams.list.entry=- %1$s: '%2$s' has %3$d players -commands.scoreboard.teams.list.empty=There are no teams registered on the scoreboard -commands.scoreboard.teams.list.player.count=Showing %d player(s) in team %s: -commands.scoreboard.teams.list.player.entry=- %2$s: %1$d (%3$s) -commands.scoreboard.teams.list.player.empty=Team %s has no players -commands.scoreboard.teams.empty.usage=/scoreboard teams empty -commands.scoreboard.teams.empty.alreadyEmpty=Team %s is already empty, cannot remove nonexistant players -commands.scoreboard.teams.empty.success=Removed all %d player(s) from team %s -commands.scoreboard.teams.remove.usage=/scoreboard teams remove -commands.scoreboard.teams.remove.success=Removed team %s -commands.scoreboard.teams.join.usage=/scoreboard teams join [player] -commands.scoreboard.teams.join.success=Added %d player(s) to team %s: %s -commands.scoreboard.teams.join.failure=Could not add %d player(s) to team %s: %s -commands.scoreboard.teams.leave.usage=/scoreboard teams leave [player] -commands.scoreboard.teams.leave.success=Removed %d player(s) from their teams: %s -commands.scoreboard.teams.leave.failure=Could not remove %d player(s) from their teams: %s -commands.scoreboard.teams.leave.noTeam=You are not in a team -commands.scoreboard.teams.option.usage=/scoreboard teams option -commands.scoreboard.teams.option.noValue=Valid values for option %s are: %s -commands.scoreboard.teams.option.success=Set option %s for team %s to %s -commands.execute.usage=/execute OR /execute detect -commands.execute.allInvocationsFailed=All invocations failed: '%s' -commands.execute.failed=Failed to execute '%s' as %s -commands.gamemode.success.self=Set own game mode to %s -commands.gamemode.success.other=Set %s's game mode to %s -commands.gamemode.usage=/gamemode [player] -commands.defaultgamemode.usage=/defaultgamemode -commands.defaultgamemode.success=The world's default game mode is now %s -commands.me.usage=/me -commands.help.header=--- Showing help page %d of %d (/help ) --- -commands.help.footer=Tip: Use the key while typing a command to auto-complete the command or its arguments -commands.help.usage=/help [page|command name] -commands.trigger.usage=/trigger -commands.trigger.invalidObjective=Invalid trigger name %s -commands.trigger.invalidMode=Invalid trigger mode %s -commands.trigger.disabled=Trigger %s is not enabled -commands.trigger.invalidPlayer=Only players can use the /trigger command -commands.trigger.success=Trigger %s changed with %s %s -commands.publish.usage=/publish -commands.publish.started=Local game hosted on port %s -commands.publish.failed=Unable to host local game -commands.debug.start=Started debug profiling -commands.debug.stop=Stopped debug profiling after %.2f seconds (%d ticks) -commands.debug.notStarted=Can't stop profiling when we haven't started yet! -commands.debug.usage=/debug -commands.chunkinfo.usage=/chunkinfo [ ] -commands.chunkinfo.location=Chunk location: (%d, %d, %d) -commands.chunkinfo.noChunk=No chunk found at chunk position %d, %d, %d -commands.chunkinfo.notEmpty=Chunk is not empty. -commands.chunkinfo.empty=Chunk is empty. -commands.chunkinfo.notCompiled=Chunk is not compiled. -commands.chunkinfo.compiled=Chunk is compiled. -commands.chunkinfo.hasNoRenderableLayers=Chunk has no renderable layers. -commands.chunkinfo.hasLayers=Chunk has layers: %s -commands.chunkinfo.isEmpty=Chunk has empty layers: %s -commands.chunkinfo.vertices=%s layer's buffer contains %d vertices -commands.chunkinfo.data=First 64 vertices are: %s -commands.tellraw.usage=/tellraw -commands.tellraw.jsonException=Invalid json: %s -commands.message.usage=/tell -commands.message.sameTarget=You can't send a private message to yourself! -commands.message.display.outgoing=You whisper to %s: %s -commands.message.display.incoming=%s whispers to you: %s -commands.difficulty.usage=/difficulty -commands.difficulty.success=Set game difficulty to %s -commands.spawnpoint.usage=/spawnpoint [player] [ ] -commands.spawnpoint.success=Set %s's spawn point to (%d, %d, %d) -commands.setworldspawn.usage=/setworldspawn [ ] -commands.setworldspawn.success=Set the world spawn point to (%d, %d, %d) -commands.gamerule.usage=/gamerule [value] -commands.gamerule.success=Game rule has been updated -commands.gamerule.norule=No game rule called '%s' is available -commands.gamerule.nopermission=Only server owners can change '%s' -commands.weather.usage=/weather [duration in seconds] -commands.weather.clear=Changing to clear weather -commands.weather.rain=Changing to rainy weather -commands.weather.thunder=Changing to rain and thunder -commands.testfor.usage=/testfor [dataTag] -commands.testfor.failure=%s did not match the required data structure -commands.testfor.success=Found %s -commands.testfor.tagError=Data tag parsing failed: %s -commands.seed.usage=/seed -commands.seed.success=Seed: %s -commands.spreadplayers.usage=/spreadplayers -commands.spreadplayers.spreading.teams=Spreading %s teams %s blocks around %s,%s (min %s blocks apart) -commands.spreadplayers.spreading.players=Spreading %s players %s blocks around %s,%s (min %s blocks apart) -commands.spreadplayers.success.teams=Successfully spread %s teams around %s,%s -commands.spreadplayers.success.players=Successfully spread %s players around %s,%s -commands.spreadplayers.info.teams=(Average distance between teams is %s blocks apart after %s iterations) -commands.spreadplayers.info.players=(Average distance between players is %s blocks apart after %s iterations) -commands.spreadplayers.failure.teams=Could not spread %s teams around %s,%s (too many players for space - try using spread of at most %s) -commands.spreadplayers.failure.players=Could not spread %s players around %s,%s (too many players for space - try using spread of at most %s) -commands.achievement.usage=/achievement [player] -commands.achievement.unknownAchievement=Unknown achievement or statistic '%s' -commands.achievement.alreadyHave=Player %s already has achievement %s -commands.achievement.dontHave=Player %s doesn't have achievement %s -commands.achievement.give.success.all=Successfully given all achievements to %s -commands.achievement.give.success.one=Successfully given %s the stat %s -commands.achievement.take.success.all=Successfully taken all achievements from %s -commands.achievement.take.success.one=Successfully taken the stat %s from %s -commands.achievement.statTooLow=Player %s does not have the stat %s -commands.worldborder.usage=/worldborder ... -commands.worldborder.add.usage=/worldborder add [timeInSeconds] -commands.worldborder.set.usage=/worldborder set [timeInSeconds] -commands.worldborder.set.success=Set world border to %s blocks wide (from %s blocks) -commands.worldborder.get.success=World border is currently %s blocks wide -commands.worldborder.setSlowly.shrink.success=Shrinking world border to %s blocks wide (down from %s blocks) over %s seconds -commands.worldborder.setSlowly.grow.success=Growing world border to %s blocks wide (up from %s blocks) over %s seconds -commands.worldborder.center.usage=/worldborder center -commands.worldborder.center.success=Set world border center to %s,%s -commands.worldborder.damage.usage=/worldborder damage -commands.worldborder.damage.buffer.usage=/worldborder damage buffer -commands.worldborder.damage.buffer.success=Set world border damage buffer to %s blocks (from %s blocks) -commands.worldborder.damage.amount.usage=/worldborder damage amount -commands.worldborder.damage.amount.success=Set world border damage amount to %s per block (from %s per block) -commands.worldborder.warning.usage=/worldborder warning -commands.worldborder.warning.time.usage=/worldborder warning time -commands.worldborder.warning.time.success=Set world border warning to %s seconds away (from %s seconds) -commands.worldborder.warning.distance.usage=/worldborder warning distance -commands.worldborder.warning.distance.success=Set world border warning to %s blocks away (from %s blocks) -commands.title.usage=/title ... -commands.title.usage.title=/title title|subtitle -commands.title.usage.clear=/title clear|reset -commands.title.usage.times=/title times -commands.title.success=Title command successfully executed - -itemGroup.buildingBlocks=Building Blocks -itemGroup.decorations=Decoration Blocks -itemGroup.redstone=Redstone -itemGroup.transportation=Transportation -itemGroup.misc=Miscellaneous -itemGroup.search=Search Items -itemGroup.food=Foodstuffs -itemGroup.tools=Tools -itemGroup.combat=Combat -itemGroup.brewing=Consumables -itemGroup.materials=Materials -itemGroup.inventory=Survival Inventory - -inventory.binSlot=Destroy Item - -advMode.setCommand=Set Console Command for Block -advMode.setCommand.success=Command set: %s -advMode.command=Console Command -advMode.nearestPlayer=Use "@p" to target nearest player -advMode.randomPlayer=Use "@r" to target random player -advMode.allPlayers=Use "@a" to target all players -advMode.allEntities=Use "@e" to target all entities -advMode.previousOutput=Previous Output - -advMode.notEnabled=Command blocks are not enabled on this server -advMode.notAllowed=Must be an opped player in creative mode - -mount.onboard=Press %1$s to dismount - -build.tooHigh=Height limit for building is %s blocks - -attribute.modifier.plus.0=+%d %s -attribute.modifier.plus.1=+%d%% %s -attribute.modifier.plus.2=+%d%% %s -attribute.modifier.take.0=-%d %s -attribute.modifier.take.1=-%d%% %s -attribute.modifier.take.2=-%d%% %s - -attribute.name.horse.jumpStrength=Horse Jump Strength -attribute.name.zombie.spawnReinforcements=Zombie Reinforcements -attribute.name.generic.maxHealth=Max Health -attribute.name.generic.followRange=Mob Follow Range -attribute.name.generic.knockbackResistance=Knockback Resistance -attribute.name.generic.movementSpeed=Speed -attribute.name.generic.attackDamage=Attack Damage - -screenshot.success=Saved screenshot as %s -screenshot.failure=Couldn't save screenshot: %s - -stream.user.mode.moderator=Moderator -stream.user.mode.moderator.self=Moderator on your channel -stream.user.mode.moderator.other=Moderator on %s's channel -stream.user.mode.broadcaster=Broadcaster -stream.user.mode.broadcaster.self=Broadcaster (You!) -stream.user.mode.broadcaster.other=Broadcaster -stream.user.mode.administrator=Twitch Administrator -stream.user.mode.staff=Twitch Staff -stream.user.mode.banned=Banned -stream.user.mode.banned.self=Banned on your channel -stream.user.mode.banned.other=Banned on %s's channel -stream.user.subscription.subscriber=Subscriber -stream.user.subscription.subscriber.self=Subscriber to your channel -stream.user.subscription.subscriber.other=Subscriber to %s's channel -stream.user.subscription.turbo=Twitch Turbo - -stream.unavailable.title=Twitch Broadcasting Unavailable -stream.unavailable.report_to_mojang=Report to Mojang - -stream.confirm_start=Are you sure you want to start broadcasting? - -stream.unavailable.account_not_bound=Before you can broadcast Minecraft through Twitch, you will need to link your Twitch account on mojang.com. Would you like to do that now? -stream.unavailable.account_not_bound.okay=Link Accounts -stream.unavailable.account_not_migrated=Before you can broadcast Minecraft through Twitch, you will need to migrate your Minecraft account to a Mojang account. Would you like to do that now? -stream.unavailable.account_not_migrated.okay=Migrate Account -stream.unavailable.failed_auth=Authentication to Twitch failed. Please go to mojang.com and rebind your Twitch account. -stream.unavailable.failed_auth.okay=Rebind Accounts -stream.unavailable.failed_auth_error=Unable to authenticate to Twitch. Please try again later. -stream.unavailable.initialization_failure=Unable to initialize the Twitch SDK. -stream.unavailable.initialization_failure.extra=(Reason: %s) -stream.unavailable.library_arch_mismatch=The custom java version used to launch Minecraft has a different architecture than the one used to run the launcher. Please make sure these are the same, either 32-bit or 64-bit for both. -stream.unavailable.library_failure=Unable to load the libraries needed for the integrated Twitch broadcasting service. -stream.unavailable.no_fbo=Your video card needs to support at least OpenGL version 3.0 or support Framebuffer Objects via an extension to use the integrated Twitch broadcasting. -stream.unavailable.no_fbo.version=You are currently using: %s -stream.unavailable.no_fbo.blend=Separate blending support via EXT is: %s -stream.unavailable.no_fbo.arb=Framebuffer object support via ARB is: %s -stream.unavailable.no_fbo.ext=Framebuffer object support via EXT is: %s -stream.unavailable.not_supported.windows=Unfortunately the integrated Twitch broadcasting requires a newer version of Windows than you are on. You must have at least Windows Vista or newer. -stream.unavailable.not_supported.mac=Unfortunately the integrated Twitch broadcasting on Mac requires a version of OSX newer than the one you are on. You must use 10.7 (Mac OS X Lion) or newer to be able to use this service. Would you like to visit apple.com to learn about upgrading? -stream.unavailable.not_supported.mac.okay=Upgrade -stream.unavailable.not_supported.other=Unfortunately the integrated Twitch broadcasting service requires Windows (Vista or newer) or Mac OS X (10.7/Lion or newer) -stream.unavailable.unknown=Unfortunately you cannot broadcast to Twitch at this time. And we don't know why :'( -stream.unavailable.unknown.chat=Could not start stream: %s - -stream.unavailable.soundflower.chat=Soundflower is required to be able to stream on Mac. %s -stream.unavailable.soundflower.chat.link=Please click here to install it. - -stream.userinfo.chatTooltip=Click to manage user -stream.userinfo.timeout=Timeout -stream.userinfo.ban=Ban -stream.userinfo.unban=Unban -stream.userinfo.mod=Promote to Moderator -stream.userinfo.unmod=Demote from Moderator - -item.banner.black.name=Black Banner -item.banner.red.name=Red Banner -item.banner.green.name=Green Banner -item.banner.brown.name=Brown Banner -item.banner.blue.name=Blue Banner -item.banner.purple.name=Purple Banner -item.banner.cyan.name=Cyan Banner -item.banner.silver.name=Light Gray Banner -item.banner.gray.name=Gray Banner -item.banner.pink.name=Pink Banner -item.banner.lime.name=Lime Banner -item.banner.yellow.name=Yellow Banner -item.banner.lightBlue.name=Light Blue Banner -item.banner.magenta.name=Magenta Banner -item.banner.orange.name=Orange Banner -item.banner.white.name=White Banner - -item.banner.square_bottom_left.black=Black Base Dexter Canton -item.banner.square_bottom_left.red=Red Base Dexter Canton -item.banner.square_bottom_left.green=Green Base Dexter Canton -item.banner.square_bottom_left.brown=Brown Base Dexter Canton -item.banner.square_bottom_left.blue=Blue Base Dexter Canton -item.banner.square_bottom_left.purple=Purple Base Dexter Canton -item.banner.square_bottom_left.cyan=Cyan Base Dexter Canton -item.banner.square_bottom_left.silver=Light Gray Base Dexter Canton -item.banner.square_bottom_left.gray=Gray Base Dexter Canton -item.banner.square_bottom_left.pink=Pink Base Dexter Canton -item.banner.square_bottom_left.lime=Lime Base Dexter Canton -item.banner.square_bottom_left.yellow=Yellow Base Dexter Canton -item.banner.square_bottom_left.lightBlue=Light Blue Base Dexter Canton -item.banner.square_bottom_left.magenta=Magenta Base Dexter Canton -item.banner.square_bottom_left.orange=Orange Base Dexter Canton -item.banner.square_bottom_left.white=White Base Dexter Canton - -item.banner.square_bottom_right.black=Black Base Sinister Canton -item.banner.square_bottom_right.red=Red Base Sinister Canton -item.banner.square_bottom_right.green=Green Base Sinister Canton -item.banner.square_bottom_right.brown=Brown Base Sinister Canton -item.banner.square_bottom_right.blue=Blue Base Sinister Canton -item.banner.square_bottom_right.purple=Purple Base Sinister Canton -item.banner.square_bottom_right.cyan=Cyan Base Sinister Canton -item.banner.square_bottom_right.silver=Light Gray Base Sinister Canton -item.banner.square_bottom_right.gray=Gray Base Sinister Canton -item.banner.square_bottom_right.pink=Pink Base Sinister Canton -item.banner.square_bottom_right.lime=Lime Base Sinister Canton -item.banner.square_bottom_right.yellow=Yellow Base Sinister Canton -item.banner.square_bottom_right.lightBlue=Light Blue Base Sinister Canton -item.banner.square_bottom_right.magenta=Magenta Base Sinister Canton -item.banner.square_bottom_right.orange=Orange Base Sinister Canton -item.banner.square_bottom_right.white=White Base Sinister Canton - -item.banner.square_top_left.black=Black Chief Dexter Canton -item.banner.square_top_left.red=Red Chief Dexter Canton -item.banner.square_top_left.green=Green Chief Dexter Canton -item.banner.square_top_left.brown=Brown Chief Dexter Canton -item.banner.square_top_left.blue=Blue Chief Dexter Canton -item.banner.square_top_left.purple=Purple Chief Dexter Canton -item.banner.square_top_left.cyan=Cyan Chief Dexter Canton -item.banner.square_top_left.silver=Light Gray Chief Dexter Canton -item.banner.square_top_left.gray=Gray Chief Dexter Canton -item.banner.square_top_left.pink=Pink Chief Dexter Canton -item.banner.square_top_left.lime=Lime Chief Dexter Canton -item.banner.square_top_left.yellow=Yellow Chief Dexter Canton -item.banner.square_top_left.lightBlue=Light Blue Chief Dexter Canton -item.banner.square_top_left.magenta=Magenta Chief Dexter Canton -item.banner.square_top_left.orange=Orange Chief Dexter Canton -item.banner.square_top_left.white=White Chief Dexter Canton - -item.banner.square_top_right.black=Black Chief Sinister Canton -item.banner.square_top_right.red=Red Chief Sinister Canton -item.banner.square_top_right.green=Green Chief Sinister Canton -item.banner.square_top_right.brown=Brown Chief Sinister Canton -item.banner.square_top_right.blue=Blue Chief Sinister Canton -item.banner.square_top_right.purple=Purple Chief Sinister Canton -item.banner.square_top_right.cyan=Cyan Chief Sinister Canton -item.banner.square_top_right.silver=Light Gray Chief Sinister Canton -item.banner.square_top_right.gray=Gray Chief Sinister Canton -item.banner.square_top_right.pink=Pink Chief Sinister Canton -item.banner.square_top_right.lime=Lime Chief Sinister Canton -item.banner.square_top_right.yellow=Yellow Chief Sinister Canton -item.banner.square_top_right.lightBlue=Light Blue Chief Sinister Canton -item.banner.square_top_right.magenta=Magenta Chief Sinister Canton -item.banner.square_top_right.orange=Orange Chief Sinister Canton -item.banner.square_top_right.white=White Chief Sinister Canton - -item.banner.stripe_bottom.black=Black Base Fess -item.banner.stripe_bottom.red=Red Base Fess -item.banner.stripe_bottom.green=Green Base Fess -item.banner.stripe_bottom.brown=Brown Base Fess -item.banner.stripe_bottom.blue=Blue Base Fess -item.banner.stripe_bottom.purple=Purple Base Fess -item.banner.stripe_bottom.cyan=Cyan Base Fess -item.banner.stripe_bottom.silver=Light Gray Base Fess -item.banner.stripe_bottom.gray=Gray Base Fess -item.banner.stripe_bottom.pink=Pink Base Fess -item.banner.stripe_bottom.lime=Lime Base Fess -item.banner.stripe_bottom.yellow=Yellow Base Fess -item.banner.stripe_bottom.lightBlue=Light Blue Base Fess -item.banner.stripe_bottom.magenta=Magenta Base Fess -item.banner.stripe_bottom.orange=Orange Base Fess -item.banner.stripe_bottom.white=White Base Fess - -item.banner.stripe_top.black=Black Chief Fess -item.banner.stripe_top.red=Red Chief Fess -item.banner.stripe_top.green=Green Chief Fess -item.banner.stripe_top.brown=Brown Chief Fess -item.banner.stripe_top.blue=Blue Chief Fess -item.banner.stripe_top.purple=Purple Chief Fess -item.banner.stripe_top.cyan=Cyan Chief Fess -item.banner.stripe_top.silver=Light Gray Chief Fess -item.banner.stripe_top.gray=Gray Chief Fess -item.banner.stripe_top.pink=Pink Chief Fess -item.banner.stripe_top.lime=Lime Chief Fess -item.banner.stripe_top.yellow=Yellow Chief Fess -item.banner.stripe_top.lightBlue=Light Blue Chief Fess -item.banner.stripe_top.magenta=Magenta Chief Fess -item.banner.stripe_top.orange=Orange Chief Fess -item.banner.stripe_top.white=White Chief Fess - -item.banner.stripe_left.black=Black Pale Dexter -item.banner.stripe_left.red=Red Pale Dexter -item.banner.stripe_left.green=Green Pale Dexter -item.banner.stripe_left.brown=Brown Pale Dexter -item.banner.stripe_left.blue=Blue Pale Dexter -item.banner.stripe_left.purple=Purple Pale Dexter -item.banner.stripe_left.cyan=Cyan Pale Dexter -item.banner.stripe_left.silver=Light Gray Pale Dexter -item.banner.stripe_left.gray=Gray Pale Dexter -item.banner.stripe_left.pink=Pink Pale Dexter -item.banner.stripe_left.lime=Lime Pale Dexter -item.banner.stripe_left.yellow=Yellow Pale Dexter -item.banner.stripe_left.lightBlue=Light Blue Pale Dexter -item.banner.stripe_left.magenta=Magenta Pale Dexter -item.banner.stripe_left.orange=Orange Pale Dexter -item.banner.stripe_left.white=White Pale Dexter - -item.banner.stripe_right.black=Black Pale Sinister -item.banner.stripe_right.red=Red Pale Sinister -item.banner.stripe_right.green=Green Pale Sinister -item.banner.stripe_right.brown=Brown Pale Sinister -item.banner.stripe_right.blue=Blue Pale Sinister -item.banner.stripe_right.purple=Purple Pale Sinister -item.banner.stripe_right.cyan=Cyan Pale Sinister -item.banner.stripe_right.silver=Light Gray Pale Sinister -item.banner.stripe_right.gray=Gray Pale Sinister -item.banner.stripe_right.pink=Pink Pale Sinister -item.banner.stripe_right.lime=Lime Pale Sinister -item.banner.stripe_right.yellow=Yellow Pale Sinister -item.banner.stripe_right.lightBlue=Light Blue Pale Sinister -item.banner.stripe_right.magenta=Magenta Pale Sinister -item.banner.stripe_right.orange=Orange Pale Sinister -item.banner.stripe_right.white=White Pale Sinister - -item.banner.stripe_center.black=Black Pale -item.banner.stripe_center.red=Red Pale -item.banner.stripe_center.green=Green Pale -item.banner.stripe_center.brown=Brown Pale -item.banner.stripe_center.blue=Blue Pale -item.banner.stripe_center.purple=Purple Pale -item.banner.stripe_center.cyan=Cyan Pale -item.banner.stripe_center.silver=Light Gray Pale -item.banner.stripe_center.gray=Gray Pale -item.banner.stripe_center.pink=Pink Pale -item.banner.stripe_center.lime=Lime Pale -item.banner.stripe_center.yellow=Yellow Pale -item.banner.stripe_center.lightBlue=Light Blue Pale -item.banner.stripe_center.magenta=Magenta Pale -item.banner.stripe_center.orange=Orange Pale -item.banner.stripe_center.white=White Pale - -item.banner.stripe_middle.black=Black Fess -item.banner.stripe_middle.red=Red Fess -item.banner.stripe_middle.green=Green Fess -item.banner.stripe_middle.brown=Brown Fess -item.banner.stripe_middle.blue=Blue Fess -item.banner.stripe_middle.purple=Purple Fess -item.banner.stripe_middle.cyan=Cyan Fess -item.banner.stripe_middle.silver=Light Gray Fess -item.banner.stripe_middle.gray=Gray Fess -item.banner.stripe_middle.pink=Pink Fess -item.banner.stripe_middle.lime=Lime Fess -item.banner.stripe_middle.yellow=Yellow Fess -item.banner.stripe_middle.lightBlue=Light Blue Fess -item.banner.stripe_middle.magenta=Magenta Fess -item.banner.stripe_middle.orange=Orange Fess -item.banner.stripe_middle.white=White Fess - -item.banner.stripe_downright.black=Black Bend -item.banner.stripe_downright.red=Red Bend -item.banner.stripe_downright.green=Green Bend -item.banner.stripe_downright.brown=Brown Bend -item.banner.stripe_downright.blue=Blue Bend -item.banner.stripe_downright.purple=Purple Bend -item.banner.stripe_downright.cyan=Cyan Bend -item.banner.stripe_downright.silver=Light Gray Bend -item.banner.stripe_downright.gray=Gray Bend -item.banner.stripe_downright.pink=Pink Bend -item.banner.stripe_downright.lime=Lime Bend -item.banner.stripe_downright.yellow=Yellow Bend -item.banner.stripe_downright.lightBlue=Light Blue Bend -item.banner.stripe_downright.magenta=Magenta Bend -item.banner.stripe_downright.orange=Orange Bend -item.banner.stripe_downright.white=White Bend - -item.banner.stripe_downleft.black=Black Bend Sinister -item.banner.stripe_downleft.red=Red Bend Sinister -item.banner.stripe_downleft.green=Green Bend Sinister -item.banner.stripe_downleft.brown=Brown Bend Sinister -item.banner.stripe_downleft.blue=Blue Bend Sinister -item.banner.stripe_downleft.purple=Purple Bend Sinister -item.banner.stripe_downleft.cyan=Cyan Bend Sinister -item.banner.stripe_downleft.silver=Light Gray Bend Sinister -item.banner.stripe_downleft.gray=Gray Bend Sinister -item.banner.stripe_downleft.pink=Pink Bend Sinister -item.banner.stripe_downleft.lime=Lime Bend Sinister -item.banner.stripe_downleft.yellow=Yellow Bend Sinister -item.banner.stripe_downleft.lightBlue=Light Blue Bend Sinister -item.banner.stripe_downleft.magenta=Magenta Bend Sinister -item.banner.stripe_downleft.orange=Orange Bend Sinister -item.banner.stripe_downleft.white=White Bend Sinister - -item.banner.small_stripes.black=Black Paly -item.banner.small_stripes.red=Red Paly -item.banner.small_stripes.green=Green Paly -item.banner.small_stripes.brown=Brown Paly -item.banner.small_stripes.blue=Blue Paly -item.banner.small_stripes.purple=Purple Paly -item.banner.small_stripes.cyan=Cyan Paly -item.banner.small_stripes.silver=Light Gray Paly -item.banner.small_stripes.gray=Gray Paly -item.banner.small_stripes.pink=Pink Paly -item.banner.small_stripes.lime=Lime Paly -item.banner.small_stripes.yellow=Yellow Paly -item.banner.small_stripes.lightBlue=Light Blue Paly -item.banner.small_stripes.magenta=Magenta Paly -item.banner.small_stripes.orange=Orange Paly -item.banner.small_stripes.white=White Paly - -item.banner.cross.black=Black Saltire -item.banner.cross.red=Red Saltire -item.banner.cross.green=Green Saltire -item.banner.cross.brown=Brown Saltire -item.banner.cross.blue=Blue Saltire -item.banner.cross.purple=Purple Saltire -item.banner.cross.cyan=Cyan Saltire -item.banner.cross.silver=Light Gray Saltire -item.banner.cross.gray=Gray Saltire -item.banner.cross.pink=Pink Saltire -item.banner.cross.lime=Lime Saltire -item.banner.cross.yellow=Yellow Saltire -item.banner.cross.lightBlue=Light Blue Saltire -item.banner.cross.magenta=Magenta Saltire -item.banner.cross.orange=Orange Saltire -item.banner.cross.white=White Saltire - -item.banner.triangle_bottom.black=Black Chevron -item.banner.triangle_bottom.red=Red Chevron -item.banner.triangle_bottom.green=Green Chevron -item.banner.triangle_bottom.brown=Brown Chevron -item.banner.triangle_bottom.blue=Blue Chevron -item.banner.triangle_bottom.purple=Purple Chevron -item.banner.triangle_bottom.cyan=Cyan Chevron -item.banner.triangle_bottom.silver=Light Gray Chevron -item.banner.triangle_bottom.gray=Gray Chevron -item.banner.triangle_bottom.pink=Pink Chevron -item.banner.triangle_bottom.lime=Lime Chevron -item.banner.triangle_bottom.yellow=Yellow Chevron -item.banner.triangle_bottom.lightBlue=Light Blue Chevron -item.banner.triangle_bottom.magenta=Magenta Chevron -item.banner.triangle_bottom.orange=Orange Chevron -item.banner.triangle_bottom.white=White Chevron - -item.banner.triangle_top.black=Black Inverted Chevron -item.banner.triangle_top.red=Red Inverted Chevron -item.banner.triangle_top.green=Green Inverted Chevron -item.banner.triangle_top.brown=Brown Inverted Chevron -item.banner.triangle_top.blue=Blue Inverted Chevron -item.banner.triangle_top.purple=Purple Inverted Chevron -item.banner.triangle_top.cyan=Cyan Inverted Chevron -item.banner.triangle_top.silver=Light Gray Inverted Chevron -item.banner.triangle_top.gray=Gray Inverted Chevron -item.banner.triangle_top.pink=Pink Inverted Chevron -item.banner.triangle_top.lime=Lime Inverted Chevron -item.banner.triangle_top.yellow=Yellow Inverted Chevron -item.banner.triangle_top.lightBlue=Light Blue Inverted Chevron -item.banner.triangle_top.magenta=Magenta Inverted Chevron -item.banner.triangle_top.orange=Orange Inverted Chevron -item.banner.triangle_top.white=White Inverted Chevron - -item.banner.triangles_bottom.black=Black Base Indented -item.banner.triangles_bottom.red=Red Base Indented -item.banner.triangles_bottom.green=Green Base Indented -item.banner.triangles_bottom.brown=Brown Base Indented -item.banner.triangles_bottom.blue=Blue Base Indented -item.banner.triangles_bottom.purple=Purple Base Indented -item.banner.triangles_bottom.cyan=Cyan Base Indented -item.banner.triangles_bottom.silver=Light Gray Base Indented -item.banner.triangles_bottom.gray=Gray Base Indented -item.banner.triangles_bottom.pink=Pink Base Indented -item.banner.triangles_bottom.lime=Lime Base Indented -item.banner.triangles_bottom.yellow=Yellow Base Indented -item.banner.triangles_bottom.lightBlue=Light Blue Base Indented -item.banner.triangles_bottom.magenta=Magenta Base Indented -item.banner.triangles_bottom.orange=Orange Base Indented -item.banner.triangles_bottom.white=White Base Indented - -item.banner.triangles_top.black=Black Chief Indented -item.banner.triangles_top.red=Red Chief Indented -item.banner.triangles_top.green=Green Chief Indented -item.banner.triangles_top.brown=Brown Chief Indented -item.banner.triangles_top.blue=Blue Chief Indented -item.banner.triangles_top.purple=Purple Chief Indented -item.banner.triangles_top.cyan=Cyan Chief Indented -item.banner.triangles_top.silver=Light Gray Chief Indented -item.banner.triangles_top.gray=Gray Chief Indented -item.banner.triangles_top.pink=Pink Chief Indented -item.banner.triangles_top.lime=Lime Chief Indented -item.banner.triangles_top.yellow=Yellow Chief Indented -item.banner.triangles_top.lightBlue=Light Blue Chief Indented -item.banner.triangles_top.magenta=Magenta Chief Indented -item.banner.triangles_top.orange=Orange Chief Indented -item.banner.triangles_top.white=White Chief Indented - -item.banner.diagonal_left.black=Black Per Bend Sinister -item.banner.diagonal_left.red=Red Per Bend Sinister -item.banner.diagonal_left.green=Green Per Bend Sinister -item.banner.diagonal_left.brown=Brown Per Bend Sinister -item.banner.diagonal_left.blue=Blue Per Bend Sinister -item.banner.diagonal_left.purple=Purple Per Bend Sinister -item.banner.diagonal_left.cyan=Cyan Per Bend Sinister -item.banner.diagonal_left.silver=Light Gray Per Bend Sinister -item.banner.diagonal_left.gray=Gray Per Bend Sinister -item.banner.diagonal_left.pink=Pink Per Bend Sinister -item.banner.diagonal_left.lime=Lime Per Bend Sinister -item.banner.diagonal_left.yellow=Yellow Per Bend Sinister -item.banner.diagonal_left.lightBlue=Light Blue Per Bend Sinister -item.banner.diagonal_left.magenta=Magenta Per Bend Sinister -item.banner.diagonal_left.orange=Orange Per Bend Sinister -item.banner.diagonal_left.white=White Per Bend Sinister - -item.banner.diagonal_right.black=Black Per Bend -item.banner.diagonal_right.red=Red Per Bend -item.banner.diagonal_right.green=Green Per Bend -item.banner.diagonal_right.brown=Brown Per Bend -item.banner.diagonal_right.blue=Blue Per Bend -item.banner.diagonal_right.purple=Purple Per Bend -item.banner.diagonal_right.cyan=Cyan Per Bend -item.banner.diagonal_right.silver=Light Gray Per Bend -item.banner.diagonal_right.gray=Gray Per Bend -item.banner.diagonal_right.pink=Pink Per Bend -item.banner.diagonal_right.lime=Lime Per Bend -item.banner.diagonal_right.yellow=Yellow Per Bend -item.banner.diagonal_right.lightBlue=Light Blue Per Bend -item.banner.diagonal_right.magenta=Magenta Per Bend -item.banner.diagonal_right.orange=Orange Per Bend -item.banner.diagonal_right.white=White Per Bend - -item.banner.diagonal_up_left.black=Black Per Bend Inverted -item.banner.diagonal_up_left.red=Red Per Bend Inverted -item.banner.diagonal_up_left.green=Green Per Bend Inverted -item.banner.diagonal_up_left.brown=Brown Per Bend Inverted -item.banner.diagonal_up_left.blue=Blue Per Bend Inverted -item.banner.diagonal_up_left.purple=Purple Per Bend Inverted -item.banner.diagonal_up_left.cyan=Cyan Per Bend Inverted -item.banner.diagonal_up_left.silver=Light Gray Per Bend Inverted -item.banner.diagonal_up_left.gray=Gray Per Bend Inverted -item.banner.diagonal_up_left.pink=Pink Per Bend Inverted -item.banner.diagonal_up_left.lime=Lime Per Bend Inverted -item.banner.diagonal_up_left.yellow=Yellow Per Bend Inverted -item.banner.diagonal_up_left.lightBlue=Light Blue Per Bend Inverted -item.banner.diagonal_up_left.magenta=Magenta Per Bend Inverted -item.banner.diagonal_up_left.orange=Orange Per Bend Inverted -item.banner.diagonal_up_left.white=White Per Bend Inverted - -item.banner.diagonal_up_right.black=Black Per Bend Sinister Inverted -item.banner.diagonal_up_right.red=Red Per Bend Sinister Inverted -item.banner.diagonal_up_right.green=Green Per Bend Sinister Inverted -item.banner.diagonal_up_right.brown=Brown Per Bend Sinister Inverted -item.banner.diagonal_up_right.blue=Blue Per Bend Sinister Inverted -item.banner.diagonal_up_right.purple=Purple Per Bend Sinister Inverted -item.banner.diagonal_up_right.cyan=Cyan Per Bend Sinister Inverted -item.banner.diagonal_up_right.silver=Light Gray Per Bend Sinister Inverted -item.banner.diagonal_up_right.gray=Gray Per Bend Sinister Inverted -item.banner.diagonal_up_right.pink=Pink Per Bend Sinister Inverted -item.banner.diagonal_up_right.lime=Lime Per Bend Sinister Inverted -item.banner.diagonal_up_right.yellow=Yellow Per Bend Sinister Inverted -item.banner.diagonal_up_right.lightBlue=Light Blue Per Bend Sinister Inverted -item.banner.diagonal_up_right.magenta=Magenta Per Bend Sinister Inverted -item.banner.diagonal_up_right.orange=Orange Per Bend Sinister Inverted -item.banner.diagonal_up_right.white=White Per Bend Sinister Inverted - -item.banner.circle.black=Black Roundel -item.banner.circle.red=Red Roundel -item.banner.circle.green=Green Roundel -item.banner.circle.brown=Brown Roundel -item.banner.circle.blue=Blue Roundel -item.banner.circle.purple=Purple Roundel -item.banner.circle.cyan=Cyan Roundel -item.banner.circle.silver=Light Gray Roundel -item.banner.circle.gray=Gray Roundel -item.banner.circle.pink=Pink Roundel -item.banner.circle.lime=Lime Roundel -item.banner.circle.yellow=Yellow Roundel -item.banner.circle.lightBlue=Light Blue Roundel -item.banner.circle.magenta=Magenta Roundel -item.banner.circle.orange=Orange Roundel -item.banner.circle.white=White Roundel - -item.banner.rhombus.black=Black Lozenge -item.banner.rhombus.red=Red Lozenge -item.banner.rhombus.green=Green Lozenge -item.banner.rhombus.brown=Brown Lozenge -item.banner.rhombus.blue=Blue Lozenge -item.banner.rhombus.purple=Purple Lozenge -item.banner.rhombus.cyan=Cyan Lozenge -item.banner.rhombus.silver=Light Gray Lozenge -item.banner.rhombus.gray=Gray Lozenge -item.banner.rhombus.pink=Pink Lozenge -item.banner.rhombus.lime=Lime Lozenge -item.banner.rhombus.yellow=Yellow Lozenge -item.banner.rhombus.lightBlue=Light Blue Lozenge -item.banner.rhombus.magenta=Magenta Lozenge -item.banner.rhombus.orange=Orange Lozenge -item.banner.rhombus.white=White Lozenge - -item.banner.half_vertical.black=Black Per Pale -item.banner.half_vertical.red=Red Per Pale -item.banner.half_vertical.green=Green Per Pale -item.banner.half_vertical.brown=Brown Per Pale -item.banner.half_vertical.blue=Blue Per Pale -item.banner.half_vertical.purple=Purple Per Pale -item.banner.half_vertical.cyan=Cyan Per Pale -item.banner.half_vertical.silver=Light Gray Per Pale -item.banner.half_vertical.gray=Gray Per Pale -item.banner.half_vertical.pink=Pink Per Pale -item.banner.half_vertical.lime=Lime Per Pale -item.banner.half_vertical.yellow=Yellow Per Pale -item.banner.half_vertical.lightBlue=Light Blue Per Pale -item.banner.half_vertical.magenta=Magenta Per Pale -item.banner.half_vertical.orange=Orange Per Pale -item.banner.half_vertical.white=White Per Pale - -item.banner.half_horizontal.black=Black Per Fess -item.banner.half_horizontal.red=Red Per Fess -item.banner.half_horizontal.green=Green Per Fess -item.banner.half_horizontal.brown=Brown Per Fess -item.banner.half_horizontal.blue=Blue Per Fess -item.banner.half_horizontal.purple=Purple Per Fess -item.banner.half_horizontal.cyan=Cyan Per Fess -item.banner.half_horizontal.silver=Light Gray Per Fess -item.banner.half_horizontal.gray=Gray Per Fess -item.banner.half_horizontal.pink=Pink Per Fess -item.banner.half_horizontal.lime=Lime Per Fess -item.banner.half_horizontal.yellow=Yellow Per Fess -item.banner.half_horizontal.lightBlue=Light Blue Per Fess -item.banner.half_horizontal.magenta=Magenta Per Fess -item.banner.half_horizontal.orange=Orange Per Fess -item.banner.half_horizontal.white=White Per Fess - -item.banner.half_vertical_right.black=Black Per Pale Inverted -item.banner.half_vertical_right.red=Red Per Pale Inverted -item.banner.half_vertical_right.green=Green Per Pale Inverted -item.banner.half_vertical_right.brown=Brown Per Pale Inverted -item.banner.half_vertical_right.blue=Blue Per Pale Inverted -item.banner.half_vertical_right.purple=Purple Per Pale Inverted -item.banner.half_vertical_right.cyan=Cyan Per Pale Inverted -item.banner.half_vertical_right.silver=Light Gray Per Pale Inverted -item.banner.half_vertical_right.gray=Gray Per Pale Inverted -item.banner.half_vertical_right.pink=Pink Per Pale Inverted -item.banner.half_vertical_right.lime=Lime Per Pale Inverted -item.banner.half_vertical_right.yellow=Yellow Per Pale Inverted -item.banner.half_vertical_right.lightBlue=Light Blue Per Pale Inverted -item.banner.half_vertical_right.magenta=Magenta Per Pale Inverted -item.banner.half_vertical_right.orange=Orange Per Pale Inverted -item.banner.half_vertical_right.white=White Per Pale Inverted - -item.banner.half_horizontal_bottom.black=Black Per Fess Inverted -item.banner.half_horizontal_bottom.red=Red Per Fess Inverted -item.banner.half_horizontal_bottom.green=Green Per Fess Inverted -item.banner.half_horizontal_bottom.brown=Brown Per Fess Inverted -item.banner.half_horizontal_bottom.blue=Blue Per Fess Inverted -item.banner.half_horizontal_bottom.purple=Purple Per Fess Inverted -item.banner.half_horizontal_bottom.cyan=Cyan Per Fess Inverted -item.banner.half_horizontal_bottom.silver=Light Gray Per Fess Inverted -item.banner.half_horizontal_bottom.gray=Gray Per Fess Inverted -item.banner.half_horizontal_bottom.pink=Pink Per Fess Inverted -item.banner.half_horizontal_bottom.lime=Lime Per Fess Inverted -item.banner.half_horizontal_bottom.yellow=Yellow Per Fess Inverted -item.banner.half_horizontal_bottom.lightBlue=Light Blue Per Fess Inverted -item.banner.half_horizontal_bottom.magenta=Magenta Per Fess Inverted -item.banner.half_horizontal_bottom.orange=Orange Per Fess Inverted -item.banner.half_horizontal_bottom.white=White Per Fess Inverted - -item.banner.creeper.black=Black Creeper Charge -item.banner.creeper.red=Red Creeper Charge -item.banner.creeper.green=Green Creeper Charge -item.banner.creeper.brown=Brown Creeper Charge -item.banner.creeper.blue=Blue Creeper Charge -item.banner.creeper.purple=Purple Creeper Charge -item.banner.creeper.cyan=Cyan Creeper Charge -item.banner.creeper.silver=Light Gray Creeper Charge -item.banner.creeper.gray=Gray Creeper Charge -item.banner.creeper.pink=Pink Creeper Charge -item.banner.creeper.lime=Lime Creeper Charge -item.banner.creeper.yellow=Yellow Creeper Charge -item.banner.creeper.lightBlue=Light Blue Creeper Charge -item.banner.creeper.magenta=Magenta Creeper Charge -item.banner.creeper.orange=Orange Creeper Charge -item.banner.creeper.white=White Creeper Charge - -item.banner.bricks.black=Black Field Masoned -item.banner.bricks.red=Red Field Masoned -item.banner.bricks.green=Green Field Masoned -item.banner.bricks.brown=Brown Field Masoned -item.banner.bricks.blue=Blue Field Masoned -item.banner.bricks.purple=Purple Field Masoned -item.banner.bricks.cyan=Cyan Field Masoned -item.banner.bricks.silver=Light Gray Field Masoned -item.banner.bricks.gray=Gray Field Masoned -item.banner.bricks.pink=Pink Field Masoned -item.banner.bricks.lime=Lime Field Masoned -item.banner.bricks.yellow=Yellow Field Masoned -item.banner.bricks.lightBlue=Light Blue Field Masoned -item.banner.bricks.magenta=Magenta Field Masoned -item.banner.bricks.orange=Orange Field Masoned -item.banner.bricks.white=White Field Masoned - -item.banner.gradient.black=Black Gradient -item.banner.gradient.red=Red Gradient -item.banner.gradient.green=Green Gradient -item.banner.gradient.brown=Brown Gradient -item.banner.gradient.blue=Blue Gradient -item.banner.gradient.purple=Purple Gradient -item.banner.gradient.cyan=Cyan Gradient -item.banner.gradient.silver=Light Gray Gradient -item.banner.gradient.gray=Gray Gradient -item.banner.gradient.pink=Pink Gradient -item.banner.gradient.lime=Lime Gradient -item.banner.gradient.yellow=Yellow Gradient -item.banner.gradient.lightBlue=Light Blue Gradient -item.banner.gradient.magenta=Magenta Gradient -item.banner.gradient.orange=Orange Gradient -item.banner.gradient.white=White Gradient - -item.banner.gradient_up.black=Black Base Gradient -item.banner.gradient_up.red=Red Base Gradient -item.banner.gradient_up.green=Green Base Gradient -item.banner.gradient_up.brown=Brown Base Gradient -item.banner.gradient_up.blue=Blue Base Gradient -item.banner.gradient_up.purple=Purple Base Gradient -item.banner.gradient_up.cyan=Cyan Base Gradient -item.banner.gradient_up.silver=Light Gray Base Gradient -item.banner.gradient_up.gray=Gray Base Gradient -item.banner.gradient_up.pink=Pink Base Gradient -item.banner.gradient_up.lime=Lime Base Gradient -item.banner.gradient_up.yellow=Yellow Base Gradient -item.banner.gradient_up.lightBlue=Light Blue Base Gradient -item.banner.gradient_up.magenta=Magenta Base Gradient -item.banner.gradient_up.orange=Orange Base Gradient -item.banner.gradient_up.white=White Base Gradient - -item.banner.skull.black=Black Skull Charge -item.banner.skull.red=Red Skull Charge -item.banner.skull.green=Green Skull Charge -item.banner.skull.brown=Brown Skull Charge -item.banner.skull.blue=Blue Skull Charge -item.banner.skull.purple=Purple Skull Charge -item.banner.skull.cyan=Cyan Skull Charge -item.banner.skull.silver=Light Gray Skull Charge -item.banner.skull.gray=Gray Skull Charge -item.banner.skull.pink=Pink Skull Charge -item.banner.skull.lime=Lime Skull Charge -item.banner.skull.yellow=Yellow Skull Charge -item.banner.skull.lightBlue=Light Blue Skull Charge -item.banner.skull.magenta=Magenta Skull Charge -item.banner.skull.orange=Orange Skull Charge -item.banner.skull.white=White Skull Charge - -item.banner.flower.black=Black Flower Charge -item.banner.flower.red=Red Flower Charge -item.banner.flower.green=Green Flower Charge -item.banner.flower.brown=Brown Flower Charge -item.banner.flower.blue=Blue Flower Charge -item.banner.flower.purple=Purple Flower Charge -item.banner.flower.cyan=Cyan Flower Charge -item.banner.flower.silver=Light Gray Flower Charge -item.banner.flower.gray=Gray Flower Charge -item.banner.flower.pink=Pink Flower Charge -item.banner.flower.lime=Lime Flower Charge -item.banner.flower.yellow=Yellow Flower Charge -item.banner.flower.lightBlue=Light Blue Flower Charge -item.banner.flower.magenta=Magenta Flower Charge -item.banner.flower.orange=Orange Flower Charge -item.banner.flower.white=White Flower Charge - -item.banner.border.black=Black Bordure -item.banner.border.red=Red Bordure -item.banner.border.green=Green Bordure -item.banner.border.brown=Brown Bordure -item.banner.border.blue=Blue Bordure -item.banner.border.purple=Purple Bordure -item.banner.border.cyan=Cyan Bordure -item.banner.border.silver=Light Gray Bordure -item.banner.border.gray=Gray Bordure -item.banner.border.pink=Pink Bordure -item.banner.border.lime=Lime Bordure -item.banner.border.yellow=Yellow Bordure -item.banner.border.lightBlue=Light Blue Bordure -item.banner.border.magenta=Magenta Bordure -item.banner.border.orange=Orange Bordure -item.banner.border.white=White Bordure - -item.banner.curly_border.black=Black Bordure Indented -item.banner.curly_border.red=Red Bordure Indented -item.banner.curly_border.green=Green Bordure Indented -item.banner.curly_border.brown=Brown Bordure Indented -item.banner.curly_border.blue=Blue Bordure Indented -item.banner.curly_border.purple=Purple Bordure Indented -item.banner.curly_border.cyan=Cyan Bordure Indented -item.banner.curly_border.silver=Light Gray Bordure Indented -item.banner.curly_border.gray=Gray Bordure Indented -item.banner.curly_border.pink=Pink Bordure Indented -item.banner.curly_border.lime=Lime Bordure Indented -item.banner.curly_border.yellow=Yellow Bordure Indented -item.banner.curly_border.lightBlue=Light Blue Bordure Indented -item.banner.curly_border.magenta=Magenta Bordure Indented -item.banner.curly_border.orange=Orange Bordure Indented -item.banner.curly_border.white=White Bordure Indented - -item.banner.mojang.black=Black Thing -item.banner.mojang.red=Red Thing -item.banner.mojang.green=Green Thing -item.banner.mojang.brown=Brown Thing -item.banner.mojang.blue=Blue Thing -item.banner.mojang.purple=Purple Thing -item.banner.mojang.cyan=Cyan Thing -item.banner.mojang.silver=Light Gray Thing -item.banner.mojang.gray=Gray Thing -item.banner.mojang.pink=Pink Thing -item.banner.mojang.lime=Lime Thing -item.banner.mojang.yellow=Yellow Thing -item.banner.mojang.lightBlue=Light Blue Thing -item.banner.mojang.magenta=Magenta Thing -item.banner.mojang.orange=Orange Thing -item.banner.mojang.white=White Thing - -item.banner.straight_cross.black=Black Cross -item.banner.straight_cross.red=Red Cross -item.banner.straight_cross.green=Green Cross -item.banner.straight_cross.brown=Brown Cross -item.banner.straight_cross.blue=Blue Cross -item.banner.straight_cross.purple=Purple Cross -item.banner.straight_cross.cyan=Cyan Cross -item.banner.straight_cross.silver=Light Gray Cross -item.banner.straight_cross.gray=Gray Cross -item.banner.straight_cross.pink=Pink Cross -item.banner.straight_cross.lime=Lime Cross -item.banner.straight_cross.yellow=Yellow Cross -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 + +language.name=English +language.region=US +language.code=en_US + +gui.done=Done +gui.cancel=Cancel +gui.back=Back +gui.toTitle=Back to title screen +gui.toMenu=Back to server list +gui.up=Up +gui.down=Down +gui.yes=Yes +gui.no=No +gui.none=None +gui.all=All + +menu.game=Game menu +menu.singleplayer=Singleplayer +menu.multiplayer=Multiplayer +menu.online=Minecraft Realms +menu.options=Options... +menu.quit=Quit Game +menu.returnToMenu=Save and Quit to Title +menu.disconnect=Disconnect +menu.returnToGame=Back to Game +menu.switchingLevel=Switching worlds +menu.generatingLevel=Generating world +menu.loadingLevel=Loading world +menu.generatingTerrain=Building terrain +menu.convertingLevel=Converting world +menu.simulating=Simulating the world for a bit +menu.respawning=Respawning +menu.shareToLan=Open to LAN + +selectWorld.title=Select World +selectWorld.empty=empty +selectWorld.world=World +selectWorld.select=Play Selected World +selectWorld.create=Create New World +selectWorld.recreate=Re-Create +selectWorld.createDemo=Play New Demo World +selectWorld.delete=Delete +selectWorld.rename=Rename +selectWorld.deleteQuestion=Are you sure you want to delete this world? +selectWorld.deleteWarning=will be lost forever! (A long time!) +selectWorld.deleteButton=Delete +selectWorld.renameButton=Rename +selectWorld.renameTitle=Rename World +selectWorld.conversion=Must be converted! +selectWorld.newWorld=New World +selectWorld.newWorld.copyOf=Copy of %s +selectWorld.enterName=World Name +selectWorld.resultFolder=Will be saved in: +selectWorld.enterSeed=Seed for the World Generator +selectWorld.seedInfo=Leave blank for a random seed +selectWorld.cheats=Cheats +selectWorld.customizeType=Customize + +createWorld.customize.presets=Presets +createWorld.customize.presets.title=Select a Preset +createWorld.customize.presets.select=Use Preset +createWorld.customize.presets.share=Want to share your preset with someone? Use the below box! +createWorld.customize.presets.list=Alternatively, here's some we made earlier! +createWorld.customize.flat.title=Superflat Customization +createWorld.customize.flat.tile=Layer Material +createWorld.customize.flat.height=Height +createWorld.customize.flat.addLayer=Add Layer +createWorld.customize.flat.editLayer=Edit Layer +createWorld.customize.flat.removeLayer=Remove Layer +createWorld.customize.flat.layer.top=Top - %d +createWorld.customize.flat.layer=%d +createWorld.customize.flat.layer.bottom=Bottom - %d + +createWorld.customize.custom.page0=Basic Settings +createWorld.customize.custom.page1=Ore Settings +createWorld.customize.custom.page2=Advanced Settings (Expert Users Only!) +createWorld.customize.custom.page3=Extra Advanced Settings (Expert Users Only!) +createWorld.customize.custom.randomize=Randomize +createWorld.customize.custom.prev=Previous Page +createWorld.customize.custom.next=Next Page +createWorld.customize.custom.defaults=Defaults +createWorld.customize.custom.confirm1=This will overwrite your current +createWorld.customize.custom.confirm2=settings and cannot be undone. +createWorld.customize.custom.confirmTitle=Warning! +createWorld.customize.custom.mainNoiseScaleX=Main Noise Scale X +createWorld.customize.custom.mainNoiseScaleY=Main Noise Scale Y +createWorld.customize.custom.mainNoiseScaleZ=Main Noise Scale Z +createWorld.customize.custom.depthNoiseScaleX=Depth Noise Scale X +createWorld.customize.custom.depthNoiseScaleZ=Depth Noise Scale Z +createWorld.customize.custom.depthNoiseScaleExponent=Depth Noise Exponent +createWorld.customize.custom.baseSize=Depth Base Size +createWorld.customize.custom.coordinateScale=Coordinate Scale +createWorld.customize.custom.heightScale=Height Scale +createWorld.customize.custom.stretchY=Height Stretch +createWorld.customize.custom.upperLimitScale=Upper Limit Scale +createWorld.customize.custom.lowerLimitScale=Lower Limit Scale +createWorld.customize.custom.biomeDepthWeight=Biome Depth Weight +createWorld.customize.custom.biomeDepthOffset=Biome Depth Offset +createWorld.customize.custom.biomeScaleWeight=Biome Scale Weight +createWorld.customize.custom.biomeScaleOffset=Biome Scale Offset +createWorld.customize.custom.seaLevel=Sea Level +createWorld.customize.custom.useCaves=Caves +createWorld.customize.custom.useStrongholds=Strongholds +createWorld.customize.custom.useVillages=Villages +createWorld.customize.custom.useMineShafts=Mineshafts +createWorld.customize.custom.useTemples=Temples +createWorld.customize.custom.useMonuments=Ocean Monuments +createWorld.customize.custom.useRavines=Ravines +createWorld.customize.custom.useDungeons=Dungeons +createWorld.customize.custom.dungeonChance=Dungeon Count +createWorld.customize.custom.useWaterLakes=Water Lakes +createWorld.customize.custom.waterLakeChance=Water Lake Rarity +createWorld.customize.custom.useLavaLakes=Lava Lakes +createWorld.customize.custom.lavaLakeChance=Lava Lake Rarity +createWorld.customize.custom.useLavaOceans=Lava Oceans +createWorld.customize.custom.fixedBiome=Biome +createWorld.customize.custom.biomeSize=Biome Size +createWorld.customize.custom.riverSize=River Size + +createWorld.customize.custom.size= Spawn Size +createWorld.customize.custom.count= Spawn Tries +createWorld.customize.custom.minHeight= Min. Height +createWorld.customize.custom.maxHeight= Max. Height +createWorld.customize.custom.center= Center Height +createWorld.customize.custom.spread= Spread Height + +createWorld.customize.custom.presets.title=Customize World Presets +createWorld.customize.custom.presets=Presets +createWorld.customize.custom.preset.waterWorld=Water World +createWorld.customize.custom.preset.isleLand=Isle Land +createWorld.customize.custom.preset.caveDelight=Caver's Delight +createWorld.customize.custom.preset.mountains=Mountain Madness +createWorld.customize.custom.preset.drought=Drought +createWorld.customize.custom.preset.caveChaos=Caves of Chaos +createWorld.customize.custom.preset.goodLuck=Good Luck + +gameMode.survival=Survival Mode +gameMode.creative=Creative Mode +gameMode.adventure=Adventure Mode +gameMode.spectator=Spectator Mode +gameMode.hardcore=Hardcore Mode! +gameMode.changed=Your game mode has been updated + +selectWorld.gameMode=Game Mode +selectWorld.gameMode.survival=Survival +selectWorld.gameMode.survival.line1=Search for resources, crafting, gain +selectWorld.gameMode.survival.line2=levels, health and hunger +selectWorld.gameMode.creative=Creative +selectWorld.gameMode.creative.line1=Unlimited resources, free flying and +selectWorld.gameMode.creative.line2=destroy blocks instantly +selectWorld.gameMode.spectator=Spectator +selectWorld.gameMode.spectator.line1=You can look but don't touch +selectWorld.gameMode.spectator.line2= +selectWorld.gameMode.hardcore=Hardcore +selectWorld.gameMode.hardcore.line1=Same as survival mode, locked at hardest +selectWorld.gameMode.hardcore.line2=difficulty, and one life only +selectWorld.gameMode.adventure=Adventure +selectWorld.gameMode.adventure.line1=Same as survival mode, but blocks can't +selectWorld.gameMode.adventure.line2=be added or removed +selectWorld.moreWorldOptions=More World Options... +selectWorld.mapFeatures=Generate Structures: +selectWorld.mapFeatures.info=Villages, dungeons etc +selectWorld.mapType=World Type: +selectWorld.mapType.normal=Normal +selectWorld.allowCommands=Allow Cheats: +selectWorld.allowCommands.info=Commands like /gamemode, /xp +selectWorld.hardcoreMode=Hardcore: +selectWorld.hardcoreMode.info=World is deleted upon death +selectWorld.bonusItems=Bonus Chest: + +generator.default=Default +generator.flat=Superflat +generator.largeBiomes=Large Biomes +generator.amplified=AMPLIFIED +generator.customized=Customized +generator.debug_all_block_states=Debug Mode + +generator.amplified.info=Notice: Just for fun, requires beefy computer + +selectServer.title=Select Server +selectServer.empty=empty +selectServer.select=Join Server +selectServer.direct=Direct Connect +selectServer.edit=Edit +selectServer.delete=Delete +selectServer.add=Add server +selectServer.defaultName=Minecraft Server +selectServer.deleteQuestion=Are you sure you want to remove this server? +selectServer.deleteWarning=will be lost forever! (A long time!) +selectServer.deleteButton=Delete +selectServer.refresh=Refresh +selectServer.hiddenAddress=(Hidden) +addServer.title=Edit Server Info +addServer.enterName=Server Name +addServer.enterIp=Server Address +addServer.add=Done +addServer.hideAddress=Hide Address +addServer.resourcePack=Server Resource Packs +addServer.resourcePack.enabled=Enabled +addServer.resourcePack.disabled=Disabled +addServer.resourcePack.prompt=Prompt +lanServer.title=LAN World +lanServer.scanning=Scanning for games on your local network +lanServer.start=Start LAN World +lanServer.otherPlayers=Settings for Other Players +mcoServer.title=Minecraft Online World + +multiplayer.title=Play Multiplayer +multiplayer.connect=Connect +multiplayer.info1=Minecraft Multiplayer is currently not finished, but there +multiplayer.info2=is some buggy early testing going on. +multiplayer.ipinfo=Enter the IP of a server to connect to it: +multiplayer.texturePrompt.line1=This server recommends the use of a custom resource pack. +multiplayer.texturePrompt.line2=Would you like to download and install it automagically? +multiplayer.downloadingTerrain=Downloading terrain +multiplayer.downloadingStats=Downloading statistics & achievements... +multiplayer.stopSleeping=Leave Bed +multiplayer.player.joined=%s joined the game +multiplayer.player.joined.renamed=%s (formerly known as %s) joined the game +multiplayer.player.left=%s left the game + +chat.cannotSend=Cannot send chat message +chat.type.text=<%s> %s +chat.type.emote=* %s %s +chat.type.announcement=[%s] %s +chat.type.admin=[%s: %s] +chat.type.achievement=%s has just earned the achievement %s +chat.type.achievement.taken=%s has lost the achievement %s +chat.link.confirm=Are you sure you want to open the following website? +chat.link.warning=Never open links from people that you don't trust! +chat.copy=Copy to Clipboard +chat.link.confirmTrusted=Do you want to open this link or copy it to your clipboard? +chat.link.open=Open in browser + +chat.stream.text=(%s) <%s> %s +chat.stream.emote=(%s) * %s %s + +menu.playdemo=Play Demo World +menu.resetdemo=Reset Demo World + +demo.day.1=This demo will last five game days, do your best! +demo.day.2=Day Two +demo.day.3=Day Three +demo.day.4=Day Four +demo.day.5=This is your last day! +demo.day.warning=Your time is almost up! +demo.day.6=You have passed your fifth day, use F2 to save a screenshot of your creation +demo.reminder=The demo time has expired, buy the game to continue or start a new world! +demo.remainingTime=Remaining time: %s +demo.demoExpired=Demo time's up! +demo.help.movement=Use %1$s, %2$s, %3$s, %4$s and the mouse to move around +demo.help.movementShort=Move by pressing %1$s, %2$s, %3$s, %4$s +demo.help.movementMouse=Look around using the mouse +demo.help.jump=Jump by pressing %1$s +demo.help.inventory=Use %1$s to open your inventory +demo.help.title=Minecraft Demo Mode +demo.help.fullWrapped=This demo will last 5 ingame days (about 1 hour and 40 minutes of real time). Check the achievements for hints! Have fun! +demo.help.buy=Purchase Now! +demo.help.later=Continue Playing! + +connect.connecting=Connecting to the server... +connect.authorizing=Logging in... +connect.failed=Failed to connect to the server + +disconnect.genericReason=%s +disconnect.disconnected=Disconnected by Server +disconnect.lost=Connection Lost +disconnect.kicked=Was kicked from the game +disconnect.timeout=Timed out +disconnect.closed=Connection closed +disconnect.loginFailed=Failed to login +disconnect.loginFailedInfo=Failed to login: %s +disconnect.loginFailedInfo.serversUnavailable=The authentication servers are currently down for maintenance. +disconnect.loginFailedInfo.invalidSession=Invalid session (Try restarting your game) +disconnect.quitting=Quitting +disconnect.endOfStream=End of stream +disconnect.overflow=Buffer overflow +disconnect.spam=Kicked for spamming + +soundCategory.master=Master Volume +soundCategory.music=Music +soundCategory.record=Jukebox/Noteblocks +soundCategory.weather=Weather +soundCategory.hostile=Hostile Creatures +soundCategory.neutral=Friendly Creatures +soundCategory.player=Players +soundCategory.block=Blocks +soundCategory.ambient=Ambient/Environment + +record.nowPlaying=Now playing: %s + +options.off=OFF +options.on=ON +options.visible=Shown +options.hidden=Hidden +options.title=Options +options.controls=Controls... +options.video=Video Settings... +options.language=Language... +options.stream=Broadcast Settings... +options.sounds=Music & Sounds... +options.sounds.title=Music & Sound Options +options.languageWarning=Language translations may not be 100%% accurate +options.videoTitle=Video Settings +options.customizeTitle=Customize World Settings +options.music=Music +options.sound=Sound +options.invertMouse=Invert Mouse +options.fov=FOV +options.fov.min=Normal +options.fov.max=Quake Pro +options.saturation=Saturation +options.gamma=Brightness +options.gamma.min=Moody +options.gamma.max=Bright +options.sensitivity=Sensitivity +options.sensitivity.min=*yawn* +options.sensitivity.max=HYPERSPEED!!! +options.renderDistance=Render Distance +options.renderDistance.tiny=Tiny +options.renderDistance.short=Short +options.renderDistance.normal=Normal +options.renderDistance.far=Far +options.viewBobbing=View Bobbing +options.ao=Smooth Lighting +options.ao.off=OFF +options.ao.min=Minimum +options.ao.max=Maximum +options.anaglyph=3D Anaglyph +options.framerateLimit=Max Framerate +options.framerateLimit.max=Unlimited +options.difficulty=Difficulty +options.difficulty.peaceful=Peaceful +options.difficulty.easy=Easy +options.difficulty.normal=Normal +options.difficulty.hard=Hard +options.difficulty.hardcore=Hardcore +options.graphics=Graphics +options.graphics.fancy=Fancy +options.graphics.fast=Fast +options.guiScale=GUI Scale +options.guiScale.auto=Auto +options.guiScale.small=Small +options.guiScale.normal=Normal +options.guiScale.large=Large +options.advancedOpengl=Advanced OpenGL +options.fboEnable=Enable FBOs +options.postProcessEnable=Enable Post-Processing +options.renderClouds=Clouds +options.qualityButton=Video Quality Settings... +options.qualityVideoTitle=Video Quality Settings +options.performanceButton=Video Performance Settings... +options.performanceVideoTitle=Video Performance Settings +options.advancedButton=Advanced Video Settings... +options.advancedVideoTitle=Advanced Video Settings +options.postButton=Post-Processing Settings... +options.postVideoTitle=Post-Processing Settings +options.farWarning1=A 64 bit Java installation is recommended +options.farWarning2=for 'Far' render distance (you have 32 bit) +options.particles=Particles +options.particles.all=All +options.particles.decreased=Decreased +options.particles.minimal=Minimal +options.multiplayer.title=Multiplayer Settings... +options.chat.title=Chat Settings... +options.chat.visibility=Chat +options.chat.visibility.full=Shown +options.chat.visibility.system=Commands Only +options.chat.visibility.hidden=Hidden +options.chat.color=Colors +options.chat.opacity=Opacity +options.chat.links=Web Links +options.chat.links.prompt=Prompt on Links +options.chat.scale=Scale +options.chat.width=Width +options.chat.height.focused=Focused Height +options.chat.height.unfocused=Unfocused Height +options.skinCustomisation=Skin Customization... +options.skinCustomisation.title=Skin Customization +options.modelPart.cape=Cape +options.modelPart.hat=Hat +options.modelPart.jacket=Jacket +options.modelPart.left_sleeve=Left Sleeve +options.modelPart.right_sleeve=Right Sleeve +options.modelPart.left_pants_leg=Left Pants Leg +options.modelPart.right_pants_leg=Right Pants Leg +options.snooper=Allow Snooper +options.snooper.view=Snooper Settings... +options.snooper.title=Machine Specs Collection +options.snooper.desc=We want to collect information about your machine to help improve Minecraft by knowing what we can support and where the biggest problems are. All of this information is completely anonymous and viewable below. We promise we won't do anything bad with this data, but if you want to opt out then feel free to toggle it off! +options.resourcepack=Resource Packs... +options.fullscreen=Fullscreen +options.vsync=Use VSync +options.vbo=Use VBOs +options.touchscreen=Touchscreen Mode +options.blockAlternatives=Alternate Blocks +options.reducedDebugInfo=Reduced Debug Info +options.entityShadows=Entity Shadows + +options.mipmapLevels=Mipmap Levels +options.forceUnicodeFont=Force Unicode Font + +options.stream.title=Twitch Broadcast Settings +options.stream.bytesPerPixel=Quality +options.stream.micVolumne=Mic Volume +options.stream.micToggleBehavior=Push To +options.stream.mic_toggle.mute=Mute +options.stream.mic_toggle.talk=Talk +options.stream.systemVolume=System Volume +options.stream.kbps=Bandwidth +options.stream.fps=Framerate +options.stream.sendMetadata=Send Metadata +options.stream.compression=Compression +options.stream.compression.low=Low +options.stream.compression.medium=Medium +options.stream.compression.high=High +options.stream.estimation=Estimated resolution: %dx%d +options.stream.changes=You may need to restart your stream for these changes to take place. +options.stream.ingestSelection=Broadcast Server List +options.stream.ingest.title=Twitch Broadcast Servers +options.stream.ingest.reset=Reset Preference +options.stream.chat.title=Twitch Chat Settings +options.stream.chat.enabled=Enable +options.stream.chat.enabled.streaming=Whilst Streaming +options.stream.chat.enabled.always=Always +options.stream.chat.enabled.never=Never +options.stream.chat.userFilter=User Filter +options.stream.chat.userFilter.all=All Viewers +options.stream.chat.userFilter.subs=Subscribers +options.stream.chat.userFilter.mods=Moderators + +difficulty.lock.title=Lock World Difficulty +difficulty.lock.question=Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again. + +title.oldgl1=Old graphics card detected; this may prevent you from +title.oldgl2=playing in the future as OpenGL 2.0 will be required. + +controls.title=Controls +controls.reset=Reset +controls.resetAll=Reset Keys + +key.sprint=Sprint +key.forward=Walk Forwards +key.left=Strafe Left +key.back=Walk Backwards +key.right=Strafe Right +key.jump=Jump +key.inventory=Inventory +key.drop=Drop Item +key.chat=Open Chat +key.sneak=Sneak +key.playerlist=List Players +key.attack=Attack/Destroy +key.use=Use Item/Place Block +key.pickItem=Pick Block +key.mouseButton=Button %1$s +key.command=Open Command +key.screenshot=Take Screenshot +key.togglePerspective=Toggle Perspective +key.smoothCamera=Toggle Cinematic Camera +key.fullscreen=Toggle Fullscreen +key.spectatorOutlines=Highlight Players (Spectators) +key.hotbar.1=Hotbar Slot 1 +key.hotbar.2=Hotbar Slot 2 +key.hotbar.3=Hotbar Slot 3 +key.hotbar.4=Hotbar Slot 4 +key.hotbar.5=Hotbar Slot 5 +key.hotbar.6=Hotbar Slot 6 +key.hotbar.7=Hotbar Slot 7 +key.hotbar.8=Hotbar Slot 8 +key.hotbar.9=Hotbar Slot 9 +key.streamStartStop=Start/Stop Stream +key.streamPauseUnpause=Pause/Unpause Stream +key.streamCommercial=Show Stream Commercials +key.streamToggleMic=Push To Talk/Mute + +key.categories.movement=Movement +key.categories.misc=Miscellaneous +key.categories.multiplayer=Multiplayer +key.categories.gameplay=Gameplay +key.categories.ui=Game Interface +key.categories.inventory=Inventory +key.categories.stream=Streaming + +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=(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) +resourcePack.incompatible.confirm.title=Are you sure you want to load this resource pack? +resourcePack.incompatible.confirm.old=This resource pack was made for an older version of Minecraft and may no longer work correctly. +resourcePack.incompatible.confirm.new=This resource pack was made for a newer version of Minecraft and may no longer work correctly. + +sign.edit=Edit sign message + +book.pageIndicator=Page %1$s of %2$s +book.byAuthor=by %1$s +book.signButton=Sign +book.editTitle=Enter Book Title: +book.finalizeButton=Sign and Close +book.finalizeWarning=Note! When you sign the book, it will no longer be editable. +book.generation.0=Original +book.generation.1=Copy of original +book.generation.2=Copy of a copy +book.generation.3=Tattered + +merchant.deprecated=Trade something else to unlock! + +tile.barrier.name=Barrier +tile.stone.stone.name=Stone +tile.stone.granite.name=Granite +tile.stone.graniteSmooth.name=Polished Granite +tile.stone.diorite.name=Diorite +tile.stone.dioriteSmooth.name=Polished Diorite +tile.stone.andesite.name=Andesite +tile.stone.andesiteSmooth.name=Polished Andesite +tile.hayBlock.name=Hay Bale +tile.grass.name=Grass Block +tile.dirt.name=Dirt +tile.dirt.default.name=Dirt +tile.dirt.coarse.name=Coarse Dirt +tile.dirt.podzol.name=Podzol +tile.stonebrick.name=Cobblestone +tile.wood.name=Wooden Planks +tile.wood.oak.name=Oak Wood Planks +tile.wood.spruce.name=Spruce Wood Planks +tile.wood.birch.name=Birch Wood Planks +tile.wood.jungle.name=Jungle Wood Planks +tile.wood.acacia.name=Acacia Wood Planks +tile.wood.big_oak.name=Dark Oak Wood Planks +tile.sapling.oak.name=Oak Sapling +tile.sapling.spruce.name=Spruce Sapling +tile.sapling.birch.name=Birch Sapling +tile.sapling.jungle.name=Jungle Sapling +tile.sapling.acacia.name=Acacia Sapling +tile.sapling.big_oak.name=Dark Oak Sapling +tile.deadbush.name=Dead Bush +tile.bedrock.name=Bedrock +tile.water.name=Water +tile.lava.name=Lava +tile.sand.name=Sand +tile.sand.default.name=Sand +tile.sand.red.name=Red Sand +tile.sandStone.name=Sandstone +tile.sandStone.default.name=Sandstone +tile.sandStone.chiseled.name=Chiseled Sandstone +tile.sandStone.smooth.name=Smooth Sandstone +tile.redSandStone.name=Red Sandstone +tile.redSandStone.default.name=Red Sandstone +tile.redSandStone.chiseled.name=Chiseled Red Sandstone +tile.redSandStone.smooth.name=Smooth Red Sandstone +tile.gravel.name=Gravel +tile.oreGold.name=Gold Ore +tile.oreIron.name=Iron Ore +tile.oreCoal.name=Coal Ore +tile.log.name=Wood +tile.log.oak.name=Oak Wood +tile.log.spruce.name=Spruce Wood +tile.log.birch.name=Birch Wood +tile.log.jungle.name=Jungle Wood +tile.log.acacia.name=Acacia Wood +tile.log.big_oak.name=Dark Oak Wood +tile.leaves.name=Leaves +tile.leaves.oak.name=Oak Leaves +tile.leaves.spruce.name=Spruce Leaves +tile.leaves.birch.name=Birch Leaves +tile.leaves.jungle.name=Jungle Leaves +tile.leaves.acacia.name=Acacia Leaves +tile.leaves.big_oak.name=Dark Oak Leaves +tile.tallgrass.name=Grass +tile.tallgrass.shrub.name=Shrub +tile.tallgrass.grass.name=Grass +tile.tallgrass.fern.name=Fern +tile.sponge.dry.name=Sponge +tile.sponge.wet.name=Wet Sponge +tile.glass.name=Glass +tile.stainedGlass.name=Stained Glass +tile.stainedGlass.black.name=Black Stained Glass +tile.stainedGlass.red.name=Red Stained Glass +tile.stainedGlass.green.name=Green Stained Glass +tile.stainedGlass.brown.name=Brown Stained Glass +tile.stainedGlass.blue.name=Blue Stained Glass +tile.stainedGlass.purple.name=Purple Stained Glass +tile.stainedGlass.cyan.name=Cyan Stained Glass +tile.stainedGlass.silver.name=Light Gray Stained Glass +tile.stainedGlass.gray.name=Gray Stained Glass +tile.stainedGlass.pink.name=Pink Stained Glass +tile.stainedGlass.lime.name=Lime Stained Glass +tile.stainedGlass.yellow.name=Yellow Stained Glass +tile.stainedGlass.lightBlue.name=Light Blue Stained Glass +tile.stainedGlass.magenta.name=Magenta Stained Glass +tile.stainedGlass.orange.name=Orange Stained Glass +tile.stainedGlass.white.name=White Stained Glass +tile.thinStainedGlass.name=Stained Glass Pane +tile.thinStainedGlass.black.name=Black Stained Glass Pane +tile.thinStainedGlass.red.name=Red Stained Glass Pane +tile.thinStainedGlass.green.name=Green Stained Glass Pane +tile.thinStainedGlass.brown.name=Brown Stained Glass Pane +tile.thinStainedGlass.blue.name=Blue Stained Glass Pane +tile.thinStainedGlass.purple.name=Purple Stained Glass Pane +tile.thinStainedGlass.cyan.name=Cyan Stained Glass Pane +tile.thinStainedGlass.silver.name=Light Gray Stained Glass Pane +tile.thinStainedGlass.gray.name=Gray Stained Glass Pane +tile.thinStainedGlass.pink.name=Pink Stained Glass Pane +tile.thinStainedGlass.lime.name=Lime Stained Glass Pane +tile.thinStainedGlass.yellow.name=Yellow Stained Glass Pane +tile.thinStainedGlass.lightBlue.name=Light Blue Stained Glass Pane +tile.thinStainedGlass.magenta.name=Magenta Stained Glass Pane +tile.thinStainedGlass.orange.name=Orange Stained Glass Pane +tile.thinStainedGlass.white.name=White Stained Glass Pane +tile.thinGlass.name=Glass Pane +tile.cloth.name=Wool +tile.flower1.name=Flower +tile.flower1.dandelion.name=Dandelion +tile.flower2.name=Flower +tile.flower2.poppy.name=Poppy +tile.flower2.blueOrchid.name=Blue Orchid +tile.flower2.allium.name=Allium +tile.flower2.houstonia.name=Azure Bluet +tile.flower2.tulipRed.name=Red Tulip +tile.flower2.tulipOrange.name=Orange Tulip +tile.flower2.tulipWhite.name=White Tulip +tile.flower2.tulipPink.name=Pink Tulip +tile.flower2.oxeyeDaisy.name=Oxeye Daisy +tile.doublePlant.name=Plant +tile.doublePlant.sunflower.name=Sunflower +tile.doublePlant.syringa.name=Lilac +tile.doublePlant.grass.name=Double Tallgrass +tile.doublePlant.fern.name=Large Fern +tile.doublePlant.rose.name=Rose Bush +tile.doublePlant.paeonia.name=Peony +tile.mushroom.name=Mushroom +tile.blockGold.name=Block of Gold +tile.blockIron.name=Block of Iron +tile.stoneSlab.name=Stone Slab +tile.stoneSlab.stone.name=Stone Slab +tile.stoneSlab.sand.name=Sandstone Slab +tile.stoneSlab.wood.name=Wooden Slab +tile.stoneSlab.cobble.name=Cobblestone Slab +tile.stoneSlab.brick.name=Bricks Slab +tile.stoneSlab.smoothStoneBrick.name=Stone Bricks Slab +tile.stoneSlab.netherBrick.name=Nether Brick Slab +tile.stoneSlab.quartz.name=Quartz Slab +tile.stoneSlab2.red_sandstone.name=Red Sandstone Slab +tile.woodSlab.name=Wood Slab +tile.woodSlab.oak.name=Oak Wood Slab +tile.woodSlab.spruce.name=Spruce Wood Slab +tile.woodSlab.birch.name=Birch Wood Slab +tile.woodSlab.jungle.name=Jungle Wood Slab +tile.woodSlab.acacia.name=Acacia Wood Slab +tile.woodSlab.big_oak.name=Dark Oak Wood Slab +tile.brick.name=Bricks +tile.tnt.name=TNT +tile.bookshelf.name=Bookshelf +tile.stoneMoss.name=Moss Stone +tile.obsidian.name=Obsidian +tile.torch.name=Torch +tile.fire.name=Fire +tile.mobSpawner.name=Monster Spawner +tile.stairsWood.name=Oak Wood Stairs +tile.stairsWoodSpruce.name=Spruce Wood Stairs +tile.stairsWoodBirch.name=Birch Wood Stairs +tile.stairsWoodJungle.name=Jungle Wood Stairs +tile.stairsWoodAcacia.name=Acacia Wood Stairs +tile.stairsWoodDarkOak.name=Dark Oak Wood Stairs +tile.chest.name=Chest +tile.chestTrap.name=Trapped Chest +tile.redstoneDust.name=Redstone Dust +tile.oreDiamond.name=Diamond Ore +tile.blockCoal.name=Block of Coal +tile.blockDiamond.name=Block of Diamond +tile.workbench.name=Crafting Table +tile.crops.name=Crops +tile.farmland.name=Farmland +tile.furnace.name=Furnace +tile.sign.name=Sign +tile.doorWood.name=Wooden Door +tile.ladder.name=Ladder +tile.rail.name=Rail +tile.goldenRail.name=Powered Rail +tile.activatorRail.name=Activator Rail +tile.detectorRail.name=Detector Rail +tile.stairsStone.name=Cobblestone Stairs +tile.stairsSandStone.name=Sandstone Stairs +tile.stairsRedSandStone.name=Red Sandstone Stairs +tile.lever.name=Lever +tile.pressurePlateStone.name=Stone Pressure Plate +tile.pressurePlateWood.name=Wooden Pressure Plate +tile.weightedPlate_light.name=Weighted Pressure Plate (Light) +tile.weightedPlate_heavy.name=Weighted Pressure Plate (Heavy) +tile.doorIron.name=Iron Door +tile.oreRedstone.name=Redstone Ore +tile.notGate.name=Redstone Torch +tile.button.name=Button +tile.snow.name=Snow +tile.woolCarpet.name=Carpet +tile.woolCarpet.black.name=Black Carpet +tile.woolCarpet.red.name=Red Carpet +tile.woolCarpet.green.name=Green Carpet +tile.woolCarpet.brown.name=Brown Carpet +tile.woolCarpet.blue.name=Blue Carpet +tile.woolCarpet.purple.name=Purple Carpet +tile.woolCarpet.cyan.name=Cyan Carpet +tile.woolCarpet.silver.name=Light Gray Carpet +tile.woolCarpet.gray.name=Gray Carpet +tile.woolCarpet.pink.name=Pink Carpet +tile.woolCarpet.lime.name=Lime Carpet +tile.woolCarpet.yellow.name=Yellow Carpet +tile.woolCarpet.lightBlue.name=Light Blue Carpet +tile.woolCarpet.magenta.name=Magenta Carpet +tile.woolCarpet.orange.name=Orange Carpet +tile.woolCarpet.white.name=Carpet +tile.ice.name=Ice +tile.icePacked.name=Packed Ice +tile.cactus.name=Cactus +tile.clay.name=Clay +tile.clayHardenedStained.name=Terracotta +tile.clayHardenedStained.black.name=Black Terracotta +tile.clayHardenedStained.red.name=Red Terracotta +tile.clayHardenedStained.green.name=Green Terracotta +tile.clayHardenedStained.brown.name=Brown Terracotta +tile.clayHardenedStained.blue.name=Blue Terracotta +tile.clayHardenedStained.purple.name=Purple Terracotta +tile.clayHardenedStained.cyan.name=Cyan Terracotta +tile.clayHardenedStained.silver.name=Light Gray Terracotta +tile.clayHardenedStained.gray.name=Gray Terracotta +tile.clayHardenedStained.pink.name=Pink Terracotta +tile.clayHardenedStained.lime.name=Lime Terracotta +tile.clayHardenedStained.yellow.name=Yellow Terracotta +tile.clayHardenedStained.lightBlue.name=Light Blue Terracotta +tile.clayHardenedStained.magenta.name=Magenta Terracotta +tile.clayHardenedStained.orange.name=Orange Terracotta +tile.clayHardenedStained.white.name=White Terracotta +tile.clayHardened.name=Terracotta +tile.reeds.name=Sugar cane +tile.jukebox.name=Jukebox +tile.fence.name=Oak Fence +tile.spruceFence.name=Spruce Fence +tile.birchFence.name=Birch Fence +tile.jungleFence.name=Jungle Fence +tile.darkOakFence.name=Dark Oak Fence +tile.acaciaFence.name=Acacia Fence +tile.fenceGate.name=Oak Fence Gate +tile.spruceFenceGate.name=Spruce Fence Gate +tile.birchFenceGate.name=Birch Fence Gate +tile.jungleFenceGate.name=Jungle Fence Gate +tile.darkOakFenceGate.name=Dark Oak Fence Gate +tile.acaciaFenceGate.name=Acacia Fence Gate +tile.pumpkinStem.name=Pumpkin Stem +tile.pumpkin.name=Pumpkin +tile.litpumpkin.name=Jack o'Lantern +tile.hellrock.name=Netherrack +tile.hellsand.name=Soul Sand +tile.lightgem.name=Glowstone +tile.portal.name=Portal +tile.cloth.black.name=Black Wool +tile.cloth.red.name=Red Wool +tile.cloth.green.name=Green Wool +tile.cloth.brown.name=Brown Wool +tile.cloth.blue.name=Blue Wool +tile.cloth.purple.name=Purple Wool +tile.cloth.cyan.name=Cyan Wool +tile.cloth.silver.name=Light Gray Wool +tile.cloth.gray.name=Gray Wool +tile.cloth.pink.name=Pink Wool +tile.cloth.lime.name=Lime Wool +tile.cloth.yellow.name=Yellow Wool +tile.cloth.lightBlue.name=Light Blue Wool +tile.cloth.magenta.name=Magenta Wool +tile.cloth.orange.name=Orange Wool +tile.cloth.white.name=Wool +tile.oreLapis.name=Lapis Lazuli Ore +tile.blockLapis.name=Lapis Lazuli Block +tile.dispenser.name=Dispenser +tile.dropper.name=Dropper +tile.musicBlock.name=Note Block +tile.cake.name=Cake +tile.bed.name=Bed +tile.bed.occupied=This bed is occupied +tile.bed.noSleep=You can only sleep at night +tile.bed.notSafe=You may not rest now, there are monsters nearby +tile.bed.notValid=Your home bed was missing or obstructed +tile.lockedchest.name=Locked chest +tile.trapdoor.name=Wooden Trapdoor +tile.ironTrapdoor.name=Iron Trapdoor +tile.web.name=Cobweb +tile.stonebricksmooth.name=Stone Bricks +tile.stonebricksmooth.default.name=Stone Bricks +tile.stonebricksmooth.mossy.name=Mossy Stone Bricks +tile.stonebricksmooth.cracked.name=Cracked Stone Bricks +tile.stonebricksmooth.chiseled.name=Chiseled Stone Bricks +tile.monsterStoneEgg.name=Stone Monster Egg +tile.monsterStoneEgg.stone.name=Stone Monster Egg +tile.monsterStoneEgg.cobble.name=Cobblestone Monster Egg +tile.monsterStoneEgg.brick.name=Stone Brick Monster Egg +tile.monsterStoneEgg.mossybrick.name=Mossy Stone Brick Monster Egg +tile.monsterStoneEgg.crackedbrick.name=Cracked Stone Brick Monster Egg +tile.monsterStoneEgg.chiseledbrick.name=Chiseled Stone Brick Monster Egg +tile.pistonBase.name=Piston +tile.pistonStickyBase.name=Sticky Piston +tile.fenceIron.name=Iron Bars +tile.melon.name=Melon +tile.stairsBrick.name=Brick Stairs +tile.stairsStoneBrickSmooth.name=Stone Brick Stairs +tile.vine.name=Vines +tile.netherBrick.name=Nether Brick +tile.netherFence.name=Nether Brick Fence +tile.stairsNetherBrick.name=Nether Brick Stairs +tile.netherStalk.name=Nether Wart +tile.cauldron.name=Cauldron +tile.enchantmentTable.name=Enchantment Table +tile.anvil.name=Anvil +tile.anvil.intact.name=Anvil +tile.anvil.slightlyDamaged.name=Slightly Damaged Anvil +tile.anvil.veryDamaged.name=Very Damaged Anvil +tile.whiteStone.name=End Stone +tile.endPortalFrame.name=End Portal +tile.mycel.name=Mycelium +tile.waterlily.name=Lily Pad +tile.dragonEgg.name=Dragon Egg +tile.redstoneLight.name=Redstone Lamp +tile.cocoa.name=Cocoa +tile.enderChest.name=Ender Chest +tile.oreRuby.name=Ruby Ore +tile.oreEmerald.name=Emerald Ore +tile.blockEmerald.name=Block of Emerald +tile.blockRedstone.name=Block of Redstone +tile.tripWire.name=Tripwire +tile.tripWireSource.name=Tripwire Hook +tile.commandBlock.name=Command Block +tile.beacon.name=Beacon +tile.beacon.primary=Primary Power +tile.beacon.secondary=Secondary Power +tile.cobbleWall.normal.name=Cobblestone Wall +tile.cobbleWall.mossy.name=Mossy Cobblestone Wall +tile.carrots.name=Carrots +tile.potatoes.name=Potatoes +tile.daylightDetector.name=Daylight Sensor +tile.netherquartz.name=Nether Quartz Ore +tile.hopper.name=Hopper +tile.quartzBlock.name=Block of Quartz +tile.quartzBlock.default.name=Block of Quartz +tile.quartzBlock.chiseled.name=Chiseled Quartz Block +tile.quartzBlock.lines.name=Pillar Quartz Block +tile.stairsQuartz.name=Quartz Stairs +tile.slime.name=Slime Block +tile.prismarine.rough.name=Prismarine +tile.prismarine.bricks.name=Prismarine Bricks +tile.prismarine.dark.name=Dark Prismarine +tile.seaLantern.name=Sea Lantern + +item.nameTag.name=Name Tag +item.leash.name=Lead +item.shovelIron.name=Iron Shovel +item.pickaxeIron.name=Iron Pickaxe +item.hatchetIron.name=Iron Axe +item.flintAndSteel.name=Flint and Steel +item.apple.name=Apple +item.cookie.name=Cookie +item.bow.name=Bow +item.arrow.name=Arrow +item.coal.name=Coal +item.charcoal.name=Charcoal +item.diamond.name=Diamond +item.emerald.name=Emerald +item.ingotIron.name=Iron Ingot +item.ingotGold.name=Gold Ingot +item.swordIron.name=Iron Sword +item.swordWood.name=Wooden Sword +item.shovelWood.name=Wooden Shovel +item.pickaxeWood.name=Wooden Pickaxe +item.hatchetWood.name=Wooden Axe +item.swordStone.name=Stone Sword +item.shovelStone.name=Stone Shovel +item.pickaxeStone.name=Stone Pickaxe +item.hatchetStone.name=Stone Axe +item.swordDiamond.name=Diamond Sword +item.shovelDiamond.name=Diamond Shovel +item.pickaxeDiamond.name=Diamond Pickaxe +item.hatchetDiamond.name=Diamond Axe +item.stick.name=Stick +item.bowl.name=Bowl +item.mushroomStew.name=Mushroom Stew +item.swordGold.name=Golden Sword +item.shovelGold.name=Golden Shovel +item.pickaxeGold.name=Golden Pickaxe +item.hatchetGold.name=Golden Axe +item.string.name=String +item.feather.name=Feather +item.sulphur.name=Gunpowder +item.hoeWood.name=Wooden Hoe +item.hoeStone.name=Stone Hoe +item.hoeIron.name=Iron Hoe +item.hoeDiamond.name=Diamond Hoe +item.hoeGold.name=Golden Hoe +item.seeds.name=Seeds +item.seeds_pumpkin.name=Pumpkin Seeds +item.seeds_melon.name=Melon Seeds +item.melon.name=Melon +item.wheat.name=Wheat +item.bread.name=Bread +item.helmetCloth.name=Leather Cap +item.chestplateCloth.name=Leather Tunic +item.leggingsCloth.name=Leather Pants +item.bootsCloth.name=Leather Boots +item.helmetChain.name=Chain Helmet +item.chestplateChain.name=Chain Chestplate +item.leggingsChain.name=Chain Leggings +item.bootsChain.name=Chain Boots +item.helmetIron.name=Iron Helmet +item.chestplateIron.name=Iron Chestplate +item.leggingsIron.name=Iron Leggings +item.bootsIron.name=Iron Boots +item.helmetDiamond.name=Diamond Helmet +item.chestplateDiamond.name=Diamond Chestplate +item.leggingsDiamond.name=Diamond Leggings +item.bootsDiamond.name=Diamond Boots +item.helmetGold.name=Golden Helmet +item.chestplateGold.name=Golden Chestplate +item.leggingsGold.name=Golden Leggings +item.bootsGold.name=Golden Boots +item.flint.name=Flint +item.porkchopRaw.name=Raw Porkchop +item.porkchopCooked.name=Cooked Porkchop +item.chickenRaw.name=Raw Chicken +item.chickenCooked.name=Cooked Chicken +item.muttonRaw.name=Raw Mutton +item.muttonCooked.name=Cooked Mutton +item.rabbitRaw.name=Raw Rabbit +item.rabbitCooked.name=Cooked Rabbit +item.rabbitStew.name=Rabbit Stew +item.rabbitFoot.name=Rabbit's Foot +item.rabbitHide.name=Rabbit Hide +item.beefRaw.name=Raw Beef +item.beefCooked.name=Steak +item.painting.name=Painting +item.frame.name=Item Frame +item.appleGold.name=Golden Apple +item.sign.name=Sign +item.doorOak.name=Oak Door +item.doorSpruce.name=Spruce Door +item.doorBirch.name=Birch Door +item.doorJungle.name=Jungle Door +item.doorAcacia.name=Acacia Door +item.doorDarkOak.name=Dark Oak Door +item.bucket.name=Bucket +item.bucketWater.name=Water Bucket +item.bucketLava.name=Lava Bucket +item.minecart.name=Minecart +item.saddle.name=Saddle +item.doorIron.name=Iron Door +item.redstone.name=Redstone +item.snowball.name=Snowball +item.boat.name=Boat +item.leather.name=Leather +item.milk.name=Milk +item.brick.name=Brick +item.clay.name=Clay +item.reeds.name=Sugar Canes +item.paper.name=Paper +item.book.name=Book +item.slimeball.name=Slimeball +item.minecartChest.name=Minecart with Chest +item.minecartFurnace.name=Minecart with Furnace +item.minecartTnt.name=Minecart with TNT +item.minecartHopper.name=Minecart with Hopper +item.minecartCommandBlock.name=Minecart with Command Block +item.egg.name=Egg +item.compass.name=Compass +item.fishingRod.name=Fishing Rod +item.clock.name=Clock +item.yellowDust.name=Glowstone Dust +item.fish.cod.raw.name=Raw Fish +item.fish.salmon.raw.name=Raw Salmon +item.fish.pufferfish.raw.name=Pufferfish +item.fish.clownfish.raw.name=Clownfish +item.fish.cod.cooked.name=Cooked Fish +item.fish.salmon.cooked.name=Cooked Salmon +item.record.name=Music Disc +item.record.13.desc=C418 - 13 +item.record.cat.desc=C418 - cat +item.record.blocks.desc=C418 - blocks +item.record.chirp.desc=C418 - chirp +item.record.far.desc=C418 - far +item.record.mall.desc=C418 - mall +item.record.mellohi.desc=C418 - mellohi +item.record.stal.desc=C418 - stal +item.record.strad.desc=C418 - strad +item.record.ward.desc=C418 - ward +item.record.11.desc=C418 - 11 +item.record.wait.desc=C418 - wait +item.bone.name=Bone +item.dyePowder.black.name=Ink Sac +item.dyePowder.red.name=Rose Red +item.dyePowder.green.name=Cactus Green +item.dyePowder.brown.name=Cocoa Beans +item.dyePowder.blue.name=Lapis Lazuli +item.dyePowder.purple.name=Purple Dye +item.dyePowder.cyan.name=Cyan Dye +item.dyePowder.silver.name=Light Gray Dye +item.dyePowder.gray.name=Gray Dye +item.dyePowder.pink.name=Pink Dye +item.dyePowder.lime.name=Lime Dye +item.dyePowder.yellow.name=Dandelion Yellow +item.dyePowder.lightBlue.name=Light Blue Dye +item.dyePowder.magenta.name=Magenta Dye +item.dyePowder.orange.name=Orange Dye +item.dyePowder.white.name=Bone Meal +item.sugar.name=Sugar +item.cake.name=Cake +item.bed.name=Bed +item.diode.name=Redstone Repeater +item.comparator.name=Redstone Comparator +item.map.name=Map +item.leaves.name=Leaves +item.shears.name=Shears +item.rottenFlesh.name=Rotten Flesh +item.enderPearl.name=Ender Pearl +item.blazeRod.name=Blaze Rod +item.ghastTear.name=Ghast Tear +item.netherStalkSeeds.name=Nether Wart +item.potion.name=Potion +item.emptyPotion.name=Water Bottle +item.goldNugget.name=Gold Nugget +item.glassBottle.name=Glass Bottle +item.spiderEye.name=Spider Eye +item.fermentedSpiderEye.name=Fermented Spider Eye +item.blazePowder.name=Blaze Powder +item.magmaCream.name=Magma Cream +item.cauldron.name=Cauldron +item.brewingStand.name=Brewing Stand +item.eyeOfEnder.name=Eye of Ender +item.speckledMelon.name=Glistering Melon +item.monsterPlacer.name=Spawn +item.expBottle.name=Bottle o' Enchanting +item.fireball.name=Fire Charge +item.writingBook.name=Book and Quill +item.writtenBook.name=Written Book +item.ruby.name=Ruby +item.flowerPot.name=Flower Pot +item.emptyMap.name=Empty Map +item.carrots.name=Carrot +item.carrotGolden.name=Golden Carrot +item.potato.name=Potato +item.potatoBaked.name=Baked Potato +item.potatoPoisonous.name=Poisonous Potato +item.skull.skeleton.name=Skeleton Skull +item.skull.wither.name=Wither Skeleton Skull +item.skull.zombie.name=Zombie Head +item.skull.char.name=Head +item.skull.player.name=%s's Head +item.skull.creeper.name=Creeper Head +item.carrotOnAStick.name=Carrot on a Stick +item.netherStar.name=Nether Star +item.pumpkinPie.name=Pumpkin Pie +item.enchantedBook.name=Enchanted Book +item.fireworks.name=Firework Rocket +item.fireworks.flight=Flight Duration: +item.fireworksCharge.name=Firework Star +item.fireworksCharge.black=Black +item.fireworksCharge.red=Red +item.fireworksCharge.green=Green +item.fireworksCharge.brown=Brown +item.fireworksCharge.blue=Blue +item.fireworksCharge.purple=Purple +item.fireworksCharge.cyan=Cyan +item.fireworksCharge.silver=Light Gray +item.fireworksCharge.gray=Gray +item.fireworksCharge.pink=Pink +item.fireworksCharge.lime=Lime +item.fireworksCharge.yellow=Yellow +item.fireworksCharge.lightBlue=Light Blue +item.fireworksCharge.magenta=Magenta +item.fireworksCharge.orange=Orange +item.fireworksCharge.white=White +item.fireworksCharge.customColor=Custom +item.fireworksCharge.fadeTo=Fade to +item.fireworksCharge.flicker=Twinkle +item.fireworksCharge.trail=Trail +item.fireworksCharge.type.0=Small Ball +item.fireworksCharge.type.1=Large Ball +item.fireworksCharge.type.2=Star-shaped +item.fireworksCharge.type.3=Creeper-shaped +item.fireworksCharge.type.4=Burst +item.fireworksCharge.type=Unknown Shape +item.netherbrick.name=Nether Brick +item.netherquartz.name=Nether Quartz +item.armorStand.name=Armor Stand +item.horsearmormetal.name=Iron Horse Armor +item.horsearmorgold.name=Gold Horse Armor +item.horsearmordiamond.name=Diamond Horse Armor +item.prismarineShard.name=Prismarine Shard +item.prismarineCrystals.name=Prismarine Crystals + +container.inventory=Inventory +container.hopper=Item Hopper +container.crafting=Crafting +container.dispenser=Dispenser +container.dropper=Dropper +container.furnace=Furnace +container.enchant=Enchant +container.enchant.lapis.one=1 Lapis Lazuli +container.enchant.lapis.many=%d Lapis Lazuli +container.enchant.level.one=1 Enchantment Level +container.enchant.level.many=%d Enchantment Levels +container.enchant.clue=%s . . . ? +container.repair=Repair & Name +container.repair.cost=Enchantment Cost: %1$d +container.repair.expensive=Too Expensive! +container.creative=Item Selection +container.brewing=Brewing Stand +container.chest=Chest +container.chestDouble=Large Chest +container.minecart=Minecart +container.enderchest=Ender Chest +container.beacon=Beacon + +container.isLocked=%s is locked! + +item.dyed=Dyed +item.unbreakable=Unbreakable +item.canBreak=Can break: +item.canPlace=Can be placed on: + +entity.Item.name=Item +entity.XPOrb.name=Experience Orb +entity.SmallFireball.name=Small Fireball +entity.Fireball.name=Fireball +entity.ThrownPotion.name=Potion + +entity.Arrow.name=Arrow +entity.Snowball.name=Snowball +entity.Painting.name=Painting +entity.ArmorStand.name=Armor Stand + +entity.Mob.name=Mob +entity.Monster.name=Monster + +entity.Creeper.name=Creeper +entity.Skeleton.name=Skeleton +entity.Spider.name=Spider +entity.Giant.name=Giant +entity.Zombie.name=Zombie +entity.Slime.name=Slime +entity.Ghast.name=Ghast +entity.PigZombie.name=Zombie Pigman +entity.Enderman.name=Enderman +entity.Endermite.name=Endermite +entity.Silverfish.name=Silverfish +entity.CaveSpider.name=Cave Spider +entity.Blaze.name=Blaze +entity.LavaSlime.name=Magma Cube +entity.MushroomCow.name=Mooshroom +entity.Villager.name=Villager +entity.VillagerGolem.name=Iron Golem +entity.SnowMan.name=Snow Golem +entity.EnderDragon.name=Ender Dragon +entity.WitherBoss.name=Wither +entity.Witch.name=Witch +entity.Guardian.name=Guardian + +entity.Villager.farmer=Farmer +entity.Villager.fisherman=Fisherman +entity.Villager.shepherd=Shepherd +entity.Villager.fletcher=Fletcher +entity.Villager.librarian=Librarian +entity.Villager.cleric=Cleric +entity.Villager.armor=Armorer +entity.Villager.weapon=Weapon Smith +entity.Villager.tool=Tool Smith +entity.Villager.butcher=Butcher +entity.Villager.leather=Leatherworker + +entity.Pig.name=Pig +entity.Sheep.name=Sheep +entity.Cow.name=Cow +entity.Chicken.name=Chicken +entity.Squid.name=Squid +entity.Wolf.name=Wolf +entity.Ozelot.name=Ocelot +entity.Cat.name=Cat +entity.Bat.name=Bat +entity.EntityHorse.name=Horse +entity.horse.name=Horse +entity.donkey.name=Donkey +entity.mule.name=Mule +entity.skeletonhorse.name=Skeleton Horse +entity.zombiehorse.name=Zombie Horse +entity.Rabbit.name=Rabbit +entity.KillerBunny.name=The Killer Bunny + +entity.PrimedTnt.name=Block of TNT +entity.FallingSand.name=Falling Block + +entity.Minecart.name=Minecart +entity.Boat.name=Boat + +entity.generic.name=unknown + +death.fell.accident.ladder=%1$s fell off a ladder +death.fell.accident.vines=%1$s fell off some vines +death.fell.accident.water=%1$s fell out of the water +death.fell.accident.generic=%1$s fell from a high place +death.fell.killer=%1$s was doomed to fall +death.fell.assist=%1$s was doomed to fall by %2$s +death.fell.assist.item=%1$s was doomed to fall by %2$s using %3$s +death.fell.finish=%1$s fell too far and was finished by %2$s +death.fell.finish.item=%1$s fell too far and was finished by %2$s using %3$s + +death.attack.lightningBolt=%1$s was struck by lightning +death.attack.inFire=%1$s went up in flames +death.attack.inFire.player=%1$s walked into fire whilst fighting %2$s +death.attack.onFire=%1$s burned to death +death.attack.onFire.player=%1$s was burnt to a crisp whilst fighting %2$s +death.attack.lava=%1$s tried to swim in lava +death.attack.lava.player=%1$s tried to swim in lava to escape %2$s +death.attack.inWall=%1$s suffocated in a wall +death.attack.drown=%1$s drowned +death.attack.drown.player=%1$s drowned whilst trying to escape %2$s +death.attack.starve=%1$s starved to death +death.attack.cactus=%1$s was pricked to death +death.attack.cactus.player=%1$s walked into a cactus whilst trying to escape %2$s +death.attack.generic=%1$s died +death.attack.explosion=%1$s blew up +death.attack.explosion.player=%1$s was blown up by %2$s +death.attack.magic=%1$s was killed by magic +death.attack.wither=%1$s withered away +death.attack.anvil=%1$s was squashed by a falling anvil +death.attack.fallingBlock=%1$s was squashed by a falling block +death.attack.mob=%1$s was slain by %2$s +death.attack.player=%1$s was slain by %2$s +death.attack.player.item=%1$s was slain by %2$s using %3$s +death.attack.arrow=%1$s was shot by %2$s +death.attack.arrow.item=%1$s was shot by %2$s using %3$s +death.attack.fireball=%1$s was fireballed by %2$s +death.attack.fireball.item=%1$s was fireballed by %2$s using %3$s +death.attack.thrown=%1$s was pummeled by %2$s +death.attack.thrown.item=%1$s was pummeled by %2$s using %3$s +death.attack.indirectMagic=%1$s was killed by %2$s using magic +death.attack.indirectMagic.item=%1$s was killed by %2$s using %3$s +death.attack.thorns=%1$s was killed trying to hurt %2$s +death.attack.fall=%1$s hit the ground too hard +death.attack.outOfWorld=%1$s fell out of the world + +deathScreen.respawn=Respawn +deathScreen.deleteWorld=Delete world +deathScreen.titleScreen=Title screen +deathScreen.score=Score +deathScreen.title.hardcore=Game over! +deathScreen.hardcoreInfo=You cannot respawn in hardcore mode! +deathScreen.title=You died! +deathScreen.leaveServer=Leave server +deathScreen.quit.confirm=Are you sure you want to quit? + +potion.effects.whenDrank=When Applied: +potion.empty=No Effects +potion.moveSpeed=Speed +potion.moveSlowdown=Slowness +potion.digSpeed=Haste +potion.digSlowDown=Mining Fatigue +potion.damageBoost=Strength +potion.heal=Instant Health +potion.harm=Instant Damage +potion.jump=Jump Boost +potion.confusion=Nausea +potion.regeneration=Regeneration +potion.resistance=Resistance +potion.fireResistance=Fire Resistance +potion.waterBreathing=Water Breathing +potion.invisibility=Invisibility +potion.blindness=Blindness +potion.nightVision=Night Vision +potion.hunger=Hunger +potion.weakness=Weakness +potion.poison=Poison +potion.wither=Wither +potion.healthBoost=Health Boost +potion.absorption=Absorption +potion.saturation=Saturation + +potion.moveSpeed.postfix=Potion of Swiftness +potion.moveSlowdown.postfix=Potion of Slowness +potion.digSpeed.postfix=Potion of Haste +potion.digSlowDown.postfix=Potion of Dullness +potion.damageBoost.postfix=Potion of Strength +potion.weakness.postfix=Potion of Weakness +potion.heal.postfix=Potion of Healing +potion.harm.postfix=Potion of Harming +potion.jump.postfix=Potion of Leaping +potion.confusion.postfix=Potion of Nausea +potion.regeneration.postfix=Potion of Regeneration +potion.resistance.postfix=Potion of Resistance +potion.fireResistance.postfix=Potion of Fire Resistance +potion.waterBreathing.postfix=Potion of Water Breathing +potion.invisibility.postfix=Potion of Invisibility +potion.blindness.postfix=Potion of Blindness +potion.nightVision.postfix=Potion of Night Vision +potion.hunger.postfix=Potion of Hunger +potion.poison.postfix=Potion of Poison +potion.wither.postfix=Potion of Decay +potion.healthBoost.postfix=Potion of Health Boost +potion.absorption.postfix=Potion of Absorption +potion.saturation.postfix=Potion of Saturation + +potion.potency.0= +potion.potency.1=II +potion.potency.2=III +potion.potency.3=IV + +potion.prefix.grenade=Splash +potion.prefix.mundane=Mundane +potion.prefix.uninteresting=Uninteresting +potion.prefix.bland=Bland +potion.prefix.clear=Clear +potion.prefix.milky=Milky +potion.prefix.diffuse=Diffuse +potion.prefix.artless=Artless +potion.prefix.thin=Thin +potion.prefix.awkward=Awkward +potion.prefix.flat=Flat +potion.prefix.bulky=Bulky +potion.prefix.bungling=Bungling +potion.prefix.buttered=Buttered +potion.prefix.smooth=Smooth +potion.prefix.suave=Suave +potion.prefix.debonair=Debonair +potion.prefix.thick=Thick +potion.prefix.elegant=Elegant +potion.prefix.fancy=Fancy +potion.prefix.charming=Charming +potion.prefix.dashing=Dashing +potion.prefix.refined=Refined +potion.prefix.cordial=Cordial +potion.prefix.sparkling=Sparkling +potion.prefix.potent=Potent +potion.prefix.foul=Foul +potion.prefix.odorless=Odorless +potion.prefix.rank=Rank +potion.prefix.harsh=Harsh +potion.prefix.acrid=Acrid +potion.prefix.gross=Gross +potion.prefix.stinky=Stinky + +enchantment.damage.all=Sharpness +enchantment.damage.undead=Smite +enchantment.damage.arthropods=Bane of Arthropods +enchantment.knockback=Knockback +enchantment.fire=Fire Aspect +enchantment.protect.all=Protection +enchantment.protect.fire=Fire Protection +enchantment.protect.fall=Feather Falling +enchantment.protect.explosion=Blast Protection +enchantment.protect.projectile=Projectile Protection +enchantment.oxygen=Respiration +enchantment.waterWorker=Aqua Affinity +enchantment.waterWalker=Depth Strider +enchantment.digging=Efficiency +enchantment.untouching=Silk Touch +enchantment.durability=Unbreaking +enchantment.lootBonus=Looting +enchantment.lootBonusDigger=Fortune +enchantment.lootBonusFishing=Luck of the Sea +enchantment.fishingSpeed=Lure +enchantment.arrowDamage=Power +enchantment.arrowFire=Flame +enchantment.arrowKnockback=Punch +enchantment.arrowInfinite=Infinity +enchantment.thorns=Thorns + +enchantment.level.1=I +enchantment.level.2=II +enchantment.level.3=III +enchantment.level.4=IV +enchantment.level.5=V +enchantment.level.6=VI +enchantment.level.7=VII +enchantment.level.8=VIII +enchantment.level.9=IX +enchantment.level.10=X + +gui.achievements=Achievements +gui.stats=Statistics + +stats.tooltip.type.achievement=Achievement +stats.tooltip.type.statistic=Statistic +stat.generalButton=General +stat.blocksButton=Blocks +stat.itemsButton=Items +stat.mobsButton=Mobs + +stat.used=Times Used +stat.mined=Times Mined +stat.depleted=Times Depleted +stat.crafted=Times Crafted +stat.entityKills=You killed %d %s +stat.entityKilledBy=%s killed you %d time(s) +stat.entityKills.none=You have never killed %s +stat.entityKilledBy.none=You have never been killed by %s + +stat.startGame=Times played +stat.createWorld=Worlds created +stat.loadWorld=Saves loaded +stat.joinMultiplayer=Multiplayer joins +stat.leaveGame=Games quit + +stat.playOneMinute=Minutes Played +stat.timeSinceDeath=Since Last Death + +stat.walkOneCm=Distance Walked +stat.crouchOneCm=Distance Crouched +stat.sprintOneCm=Distance Sprinted +stat.fallOneCm=Distance Fallen +stat.swimOneCm=Distance Swum +stat.flyOneCm=Distance Flown +stat.climbOneCm=Distance Climbed +stat.diveOneCm=Distance Dove +stat.minecartOneCm=Distance by Minecart +stat.boatOneCm=Distance by Boat +stat.pigOneCm=Distance by Pig +stat.horseOneCm=Distance by Horse +stat.jump=Jumps +stat.drop=Items Dropped + +stat.damageDealt=Damage Dealt +stat.damageTaken=Damage Taken +stat.deaths=Number of Deaths +stat.mobKills=Mob Kills +stat.animalsBred=Animals Bred +stat.playerKills=Player Kills +stat.fishCaught=Fish Caught +stat.treasureFished=Treasure Fished +stat.junkFished=Junk Fished +stat.talkedToVillager=Talked to Villagers +stat.tradedWithVillager=Traded with Villagers + +stat.cakeSlicesEaten=Cake Slices Eaten +stat.cauldronFilled=Cauldrons Filled +stat.cauldronUsed=Water Taken from Cauldron +stat.armorCleaned=Armor Pieces Cleaned +stat.bannerCleaned=Banners Cleaned +stat.brewingstandInteraction=Interactions with Brewing Stand +stat.beaconInteraction=Interactions with Beacon +stat.dropperInspected=Droppers Searched +stat.hopperInspected=Hoppers Searched +stat.dispenserInspected=Dispensers Searched +stat.noteblockPlayed=Noteblocks played +stat.noteblockTuned=Noteblocks tuned +stat.flowerPotted=Plants potted +stat.trappedChestTriggered=Trapped Chests Triggered +stat.enderchestOpened=Ender Chests Opened +stat.itemEnchanted=Items Enchanted +stat.recordPlayed=Records Played +stat.furnaceInteraction=Interactions with Furnace +stat.workbenchInteraction=Interactions with Crafting Table +stat.chestOpened=Chests Opened + +stat.mineBlock=%1$s Mined +stat.craftItem=%1$s Crafted +stat.useItem=%1$s Used +stat.breakItem=%1$s Depleted + +achievement.get=Achievement get! + +achievement.taken=Taken! +achievement.unknown=??? + +achievement.requires=Requires '%1$s' +achievement.openInventory=Taking Inventory +achievement.openInventory.desc=Press '%1$s' to open your inventory. +achievement.mineWood=Getting Wood +achievement.mineWood.desc=Attack a tree until a block of wood pops out +achievement.buildWorkBench=Benchmarking +achievement.buildWorkBench.desc=Craft a workbench with four blocks of planks +achievement.buildPickaxe=Time to Mine! +achievement.buildPickaxe.desc=Use planks and sticks to make a pickaxe +achievement.buildFurnace=Hot Topic +achievement.buildFurnace.desc=Construct a furnace out of eight stone blocks +achievement.acquireIron=Acquire Hardware +achievement.acquireIron.desc=Smelt an iron ingot +achievement.buildHoe=Time to Farm! +achievement.buildHoe.desc=Use planks and sticks to make a hoe +achievement.makeBread=Bake Bread +achievement.makeBread.desc=Turn wheat into bread +achievement.bakeCake=The Lie +achievement.bakeCake.desc=Wheat, sugar, milk and eggs! +achievement.buildBetterPickaxe=Getting an Upgrade +achievement.buildBetterPickaxe.desc=Construct a better pickaxe +achievement.overpowered=Overpowered +achievement.overpowered.desc=Build a Notch apple +achievement.cookFish=Delicious Fish +achievement.cookFish.desc=Catch and cook fish! +achievement.onARail=On A Rail +achievement.onARail.desc=Travel by minecart at least 1 km from where you started +achievement.buildSword=Time to Strike! +achievement.buildSword.desc=Use planks and sticks to make a sword +achievement.killEnemy=Monster Hunter +achievement.killEnemy.desc=Attack and destroy a monster +achievement.killCow=Cow Tipper +achievement.killCow.desc=Harvest some leather +achievement.breedCow=Repopulation +achievement.breedCow.desc=Breed two cows with wheat +achievement.flyPig=When Pigs Fly +achievement.flyPig.desc=Fly a pig off a cliff +achievement.snipeSkeleton=Sniper Duel +achievement.snipeSkeleton.desc=Kill a skeleton with an arrow from more than 50 meters +achievement.diamonds=DIAMONDS! +achievement.diamonds.desc=Acquire diamonds with your iron tools +achievement.diamondsToYou=Diamonds to you! +achievement.diamondsToYou.desc=Throw diamonds at another player. +achievement.portal=We Need to Go Deeper +achievement.portal.desc=Build a portal to the Nether +achievement.ghast=Return to Sender +achievement.ghast.desc=Destroy a Ghast with a fireball +achievement.blazeRod=Into Fire +achievement.blazeRod.desc=Relieve a Blaze of its rod +achievement.potion=Local Brewery +achievement.potion.desc=Brew a potion +achievement.theEnd=The End? +achievement.theEnd.desc=Locate the End +achievement.theEnd2=The End. +achievement.theEnd2.desc=Defeat the Ender Dragon +achievement.spawnWither=The Beginning? +achievement.spawnWither.desc=Spawn the Wither +achievement.killWither=The Beginning. +achievement.killWither.desc=Kill the Wither +achievement.fullBeacon=Beaconator +achievement.fullBeacon.desc=Create a full beacon +achievement.exploreAllBiomes=Adventuring Time +achievement.exploreAllBiomes.desc=Discover all biomes +achievement.enchantments=Enchanter +achievement.enchantments.desc=Use a book, obsidian and diamonds to construct an enchantment table +achievement.overkill=Overkill +achievement.overkill.desc=Deal nine hearts of damage in a single hit +achievement.bookcase=Librarian +achievement.bookcase.desc=Build some bookshelves to improve your enchantment table + +commands.generic.exception=An unknown error occurred while attempting to perform this command +commands.generic.permission=You do not have permission to use this command +commands.generic.syntax=Invalid command syntax +commands.generic.player.notFound=That player cannot be found +commands.generic.entity.notFound=That entity cannot be found +commands.generic.entity.invalidUuid=The entity UUID provided is in an invalid format +commands.generic.entity.invalidType=Entity type '%s' is invalid +commands.generic.notFound=Unknown command. Try /help for a list of commands +commands.generic.parameter.invalid='%s' is not a valid parameter +commands.generic.num.invalid='%s' is not a valid number +commands.generic.boolean.invalid='%s' is not true or false +commands.generic.num.tooSmall=The number you have entered (%d) is too small, it must be at least %d +commands.generic.num.tooBig=The number you have entered (%d) is too big, it must be at most %d +commands.generic.double.tooSmall=The number you have entered (%.2f) is too small, it must be at least %.2f +commands.generic.double.tooBig=The number you have entered (%.2f) is too big, it must be at most %.2f +commands.generic.usage=Usage: %s + +commands.setidletimeout.usage=/setidletimeout +commands.setidletimeout.success=Successfully set the idle timeout to %d minutes. +commands.xp.failure.widthdrawXp=Cannot give player negative experience points +commands.xp.success=Given %d experience to %s +commands.xp.success.levels=Given %d levels to %s +commands.xp.success.negative.levels=Taken %d levels from %s +commands.xp.usage=/xp [player] OR /xp L [player] +commands.playsound.usage=/playsound [x] [y] [z] [volume] [pitch] [minimumVolume] +commands.playsound.success=Played sound '%s' to %s +commands.playsound.playerTooFar=Player %s is too far away to hear the sound +commands.give.usage=/give [amount] [data] [dataTag] +commands.give.item.notFound=There is no such item with name %d +commands.give.block.notFound=There is no such block with name %d +commands.give.success=Given %s * %d to %s +commands.give.tagError=Data tag parsing failed: %s +commands.replaceitem.usage=/replaceitem ... +commands.replaceitem.entity.usage=/replaceitem entity [amount] [data] [dataTag] +commands.replaceitem.block.usage=/replaceitem block [amount] [data] [dataTag] +commands.replaceitem.tagError=Data tag parsing failed: %s +commands.replaceitem.noContainer=Block at %d, %d, %d is not a container +commands.replaceitem.failed=Could not replace slot %d with %d * %s +commands.replaceitem.success=Replaced slot %d with %d * %s +commands.stats.usage=/stats ... +commands.stats.entity.usage=/stats entity +commands.stats.entity.set.usage=/stats entity set +commands.stats.entity.clear.usage=/stats entity clear +commands.stats.block.usage=/stats block ... +commands.stats.block.set.usage=/stats block set +commands.stats.block.clear.usage=/stats block clear +commands.stats.noCompatibleBlock=Block at %d, %d, %d can not track stats +commands.stats.failed=Invalid parameters +commands.stats.cleared=Cleared %s stats +commands.stats.success=Storing %s stats in %s on %s +commands.summon.usage=/summon [x] [y] [z] [dataTag] +commands.summon.success=Object successfully summoned +commands.summon.failed=Unable to summon object +commands.summon.tagError=Data tag parsing failed: %s +commands.summon.outOfWorld=Cannot summon the object out of the world +commands.testforblock.usage=/testforblock [dataValue] [dataTag] +commands.testforblock.failed.tile=The block at %d,%d,%d is %s (expected: %s). +commands.testforblock.failed.data=The block at %d,%d,%d had the data value of %s (expected: %s). +commands.testforblock.failed.nbt=The block at %d,%d,%d did not have the required NBT keys. +commands.testforblock.failed.tileEntity=The block at %d,%d,%d is not a tile entity and cannot support tag matching. +commands.testforblock.success=Successfully found the block at %d,%d,%d. +commands.testforblock.outOfWorld=Cannot test for block outside of the world +commands.setblock.usage=/setblock [dataValue] [oldBlockHandling] [dataTag] +commands.setblock.success=Block placed +commands.setblock.failed=Unable to place block +commands.setblock.tagError=Data tag parsing failed: %s +commands.setblock.outOfWorld=Cannot place block outside of the world +commands.setblock.notFound=There is no such block with ID/name %s +commands.setblock.noChange=The block couldn't be placed +commands.fill.usage=/fill [dataValue] [oldBlockHandling] [dataTag] +commands.fill.outOfWorld=Cannot place blocks outside of the world +commands.fill.tagError=Data tag parsing failed: %s +commands.fill.success=%d blocks filled +commands.fill.failed=No blocks filled +commands.fill.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.clone.usage=/clone [maskMode] [cloneMode] +commands.clone.outOfWorld=Cannot access blocks outside of the world +commands.clone.noOverlap=Source and destination can not overlap +commands.clone.success=%d blocks cloned +commands.clone.failed=No blocks cloned +commands.clone.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.compare.usage=/testforblocks [mode] +commands.compare.outOfWorld=Cannot access blocks outside of the world +commands.compare.failed=Source and destination are not identical +commands.compare.success=%d blocks compared +commands.compare.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.blockdata.usage=/blockdata +commands.blockdata.success=Block data updated to: %s +commands.blockdata.tagError=Data tag parsing failed: %s +commands.blockdata.outOfWorld=Cannot change block outside of the world +commands.blockdata.notValid=The target block is not a data holder block +commands.blockdata.failed=The data tag did not change: %s +commands.entitydata.usage=/entitydata +commands.entitydata.success=Entity data updated to: %s +commands.entitydata.tagError=Data tag parsing failed: %s +commands.entitydata.noPlayers=%s is a player and cannot be changed +commands.entitydata.failed=The data tag did not change: %s +commands.effect.usage=/effect [seconds] [amplifier] [hideParticles] OR /effect clear +commands.effect.notFound=There is no such mob effect with ID %d +commands.effect.success=Given %1$s (ID %2$d) * %3$d to %4$s for %5$d seconds +commands.effect.success.removed=Took %1$s from %2$s +commands.effect.success.removed.all=Took all effects from %s +commands.effect.failure.notActive=Couldn't take %1$s from %2$s as they do not have the effect +commands.effect.failure.notActive.all=Couldn't take any effects from %s as they do not have any +commands.enchant.usage=/enchant [level] +commands.enchant.notFound=There is no such enchantment with ID %d +commands.enchant.noItem=The target doesn't hold an item +commands.enchant.cantEnchant=The selected enchantment can't be added to the target item +commands.enchant.cantCombine=%1$s can't be combined with %2$s +commands.enchant.success=Enchanting succeeded +commands.particle.usage=/particle [count] [mode] +commands.particle.success=Playing effect %s for %d times +commands.particle.notFound=Unknown effect name (%s) +commands.clear.usage=/clear [player] [item] [data] [maxCount] [dataTag] +commands.clear.success=Cleared the inventory of %s, removing %d items +commands.clear.testing=%s has %d items that match the criteria +commands.clear.failure=Could not clear the inventory of %s, no items to remove +commands.clear.tagError=Data tag parsing failed: %s +commands.downfall.usage=/toggledownfall +commands.downfall.success=Toggled downfall +commands.time.usage=/time +commands.time.added=Added %d to the time +commands.time.set=Set the time to %d +commands.time.query=Time is %d +commands.players.usage=/list +commands.players.list=There are %d/%d players online: +commands.banlist.ips=There are %d total banned IP addresses: +commands.banlist.players=There are %d total banned players: +commands.banlist.usage=/banlist [ips|players] +commands.kill.usage=/kill [player|entity] +commands.kill.successful=Killed %s +commands.kick.success=Kicked %s from the game +commands.kick.success.reason=Kicked %s from the game: '%s' +commands.kick.usage=/kick [reason ...] +commands.op.success=Opped %s +commands.op.failed=Could not op %s +commands.op.usage=/op +commands.deop.success=De-opped %s +commands.deop.failed=Could not de-op %s +commands.deop.usage=/deop +commands.say.usage=/say +commands.ban.success=Banned player %s +commands.ban.failed=Could not ban player %s +commands.ban.usage=/ban [reason ...] +commands.unban.success=Unbanned player %s +commands.unban.failed=Could not unban player %s +commands.unban.usage=/pardon +commands.banip.invalid=You have entered an invalid IP address or a player that is not online +commands.banip.success=Banned IP address %s +commands.banip.success.players=Banned IP address %s belonging to %s +commands.banip.usage=/ban-ip [reason ...] +commands.unbanip.invalid=You have entered an invalid IP address +commands.unbanip.success=Unbanned IP address %s +commands.unbanip.usage=/pardon-ip
+commands.save.usage=/save-all +commands.save-on.alreadyOn=Saving is already turned on. +commands.save-on.usage=/save-on +commands.save-off.alreadyOff=Saving is already turned off. +commands.save-off.usage=/save-off +commands.save.enabled=Turned on world auto-saving +commands.save.disabled=Turned off world auto-saving +commands.save.start=Saving... +commands.save.success=Saved the world +commands.save.failed=Saving failed: %s +commands.stop.usage=/stop +commands.stop.start=Stopping the server +commands.tp.success=Teleported %s to %s +commands.tp.success.coordinates=Teleported %s to %s, %s, %s +commands.tp.usage=/tp [target player] OR /tp [target player] [ ] +commands.tp.notSameDimension=Unable to teleport because players are not in the same dimension +commands.whitelist.list=There are %d (out of %d seen) whitelisted players: +commands.whitelist.enabled=Turned on the whitelist +commands.whitelist.disabled=Turned off the whitelist +commands.whitelist.reloaded=Reloaded the whitelist +commands.whitelist.add.success=Added %s to the whitelist +commands.whitelist.add.failed=Could not add %s to the whitelist +commands.whitelist.add.usage=/whitelist add +commands.whitelist.remove.success=Removed %s from the whitelist +commands.whitelist.remove.failed=Could not remove %s from the whitelist +commands.whitelist.remove.usage=/whitelist remove +commands.whitelist.usage=/whitelist +commands.scoreboard.usage=/scoreboard ... +commands.scoreboard.noMultiWildcard=Only one user wildcard allowed +commands.scoreboard.allMatchesFailed=All matches failed +commands.scoreboard.teamNotFound=No team was found by the name '%s' +commands.scoreboard.objectiveNotFound=No objective was found by the name '%s' +commands.scoreboard.objectiveReadOnly=The objective '%s' is read-only and cannot be set +commands.scoreboard.objectives.usage=/scoreboard objectives ... +commands.scoreboard.objectives.setdisplay.usage=/scoreboard objectives setdisplay [objective] +commands.scoreboard.objectives.setdisplay.invalidSlot=No such display slot '%s' +commands.scoreboard.objectives.setdisplay.successCleared=Cleared objective display slot '%s' +commands.scoreboard.objectives.setdisplay.successSet=Set the display objective in slot '%s' to '%s' +commands.scoreboard.objectives.add.usage=/scoreboard objectives add [display name ...] +commands.scoreboard.objectives.add.wrongType=Invalid objective criteria type '%s' +commands.scoreboard.objectives.add.alreadyExists=An objective with the name '%s' already exists +commands.scoreboard.objectives.add.tooLong=The name '%s' is too long for an objective, it can be at most %d characters long +commands.scoreboard.objectives.add.displayTooLong=The display name '%s' is too long for an objective, it can be at most %d characters long +commands.scoreboard.objectives.add.success=Added new objective '%s' successfully +commands.scoreboard.objectives.remove.usage=/scoreboard objectives remove +commands.scoreboard.objectives.remove.success=Removed objective '%s' successfully +commands.scoreboard.objectives.list.count=Showing %d objective(s) on scoreboard: +commands.scoreboard.objectives.list.entry=- %s: displays as '%s' and is type '%s' +commands.scoreboard.objectives.list.empty=There are no objectives on the scoreboard +commands.scoreboard.players.usage=/scoreboard players ... +commands.scoreboard.players.name.tooLong=The name '%s' is too long for a player, it can be at most %d characters long +commands.scoreboard.players.set.success=Set score of %s for player %s to %d +commands.scoreboard.players.set.tagMismatch=The dataTag does not match for %s +commands.scoreboard.players.set.tagError=Could not parse dataTag, reason: %s +commands.scoreboard.players.set.usage=/scoreboard players set [dataTag] +commands.scoreboard.players.add.usage=/scoreboard players add [dataTag] +commands.scoreboard.players.remove.usage=/scoreboard players remove [dataTag] +commands.scoreboard.players.reset.usage=/scoreboard players reset [objective] +commands.scoreboard.players.reset.success=Reset scores of player %s +commands.scoreboard.players.resetscore.success=Reset score %s of player %s +commands.scoreboard.players.list.usage=/scoreboard players list [name] +commands.scoreboard.players.list.count=Showing %d tracked players on the scoreboard: +commands.scoreboard.players.list.empty=There are no tracked players on the scoreboard +commands.scoreboard.players.list.player.count=Showing %d tracked objective(s) for %s: +commands.scoreboard.players.list.player.entry=- %2$s: %1$d (%3$s) +commands.scoreboard.players.list.player.empty=Player %s has no scores recorded +commands.scoreboard.players.enable.usage=/scoreboard players enable +commands.scoreboard.players.enable.success=Enabled trigger %s for %s +commands.scoreboard.players.enable.noTrigger=Objective %s is not a trigger +commands.scoreboard.players.test.usage=/scoreboard players test +commands.scoreboard.players.test.notFound=No %s score for %s found +commands.scoreboard.players.test.failed=Score %d is NOT in range %d to %d +commands.scoreboard.players.test.success=Score %d is in range %d to %d +commands.scoreboard.players.operation.usage=/scoreboard players operation +commands.scoreboard.players.operation.notFound=No %s score for %s found +commands.scoreboard.players.operation.invalidOperation=Invalid operation %s +commands.scoreboard.players.operation.success=Operation applied successfully +commands.scoreboard.teams.usage=/scoreboard teams ... +commands.scoreboard.teams.add.usage=/scoreboard teams add [display name ...] +commands.scoreboard.teams.add.alreadyExists=A team with the name '%s' already exists +commands.scoreboard.teams.add.tooLong=The name '%s' is too long for a team, it can be at most %d characters long +commands.scoreboard.teams.add.displayTooLong=The display name '%s' is too long for a team, it can be at most %d characters long +commands.scoreboard.teams.add.success=Added new team '%s' successfully +commands.scoreboard.teams.list.usage=/scoreboard teams list [name] +commands.scoreboard.teams.list.count=Showing %d teams on the scoreboard: +commands.scoreboard.teams.list.entry=- %1$s: '%2$s' has %3$d players +commands.scoreboard.teams.list.empty=There are no teams registered on the scoreboard +commands.scoreboard.teams.list.player.count=Showing %d player(s) in team %s: +commands.scoreboard.teams.list.player.entry=- %2$s: %1$d (%3$s) +commands.scoreboard.teams.list.player.empty=Team %s has no players +commands.scoreboard.teams.empty.usage=/scoreboard teams empty +commands.scoreboard.teams.empty.alreadyEmpty=Team %s is already empty, cannot remove nonexistant players +commands.scoreboard.teams.empty.success=Removed all %d player(s) from team %s +commands.scoreboard.teams.remove.usage=/scoreboard teams remove +commands.scoreboard.teams.remove.success=Removed team %s +commands.scoreboard.teams.join.usage=/scoreboard teams join [player] +commands.scoreboard.teams.join.success=Added %d player(s) to team %s: %s +commands.scoreboard.teams.join.failure=Could not add %d player(s) to team %s: %s +commands.scoreboard.teams.leave.usage=/scoreboard teams leave [player] +commands.scoreboard.teams.leave.success=Removed %d player(s) from their teams: %s +commands.scoreboard.teams.leave.failure=Could not remove %d player(s) from their teams: %s +commands.scoreboard.teams.leave.noTeam=You are not in a team +commands.scoreboard.teams.option.usage=/scoreboard teams option +commands.scoreboard.teams.option.noValue=Valid values for option %s are: %s +commands.scoreboard.teams.option.success=Set option %s for team %s to %s +commands.execute.usage=/execute OR /execute detect +commands.execute.allInvocationsFailed=All invocations failed: '%s' +commands.execute.failed=Failed to execute '%s' as %s +commands.gamemode.success.self=Set own game mode to %s +commands.gamemode.success.other=Set %s's game mode to %s +commands.gamemode.usage=/gamemode [player] +commands.defaultgamemode.usage=/defaultgamemode +commands.defaultgamemode.success=The world's default game mode is now %s +commands.me.usage=/me +commands.help.header=--- Showing help page %d of %d (/help ) --- +commands.help.footer=Tip: Use the key while typing a command to auto-complete the command or its arguments +commands.help.usage=/help [page|command name] +commands.trigger.usage=/trigger +commands.trigger.invalidObjective=Invalid trigger name %s +commands.trigger.invalidMode=Invalid trigger mode %s +commands.trigger.disabled=Trigger %s is not enabled +commands.trigger.invalidPlayer=Only players can use the /trigger command +commands.trigger.success=Trigger %s changed with %s %s +commands.publish.usage=/publish +commands.publish.started=Local game hosted on port %s +commands.publish.failed=Unable to host local game +commands.debug.start=Started debug profiling +commands.debug.stop=Stopped debug profiling after %.2f seconds (%d ticks) +commands.debug.notStarted=Can't stop profiling when we haven't started yet! +commands.debug.usage=/debug +commands.chunkinfo.usage=/chunkinfo [ ] +commands.chunkinfo.location=Chunk location: (%d, %d, %d) +commands.chunkinfo.noChunk=No chunk found at chunk position %d, %d, %d +commands.chunkinfo.notEmpty=Chunk is not empty. +commands.chunkinfo.empty=Chunk is empty. +commands.chunkinfo.notCompiled=Chunk is not compiled. +commands.chunkinfo.compiled=Chunk is compiled. +commands.chunkinfo.hasNoRenderableLayers=Chunk has no renderable layers. +commands.chunkinfo.hasLayers=Chunk has layers: %s +commands.chunkinfo.isEmpty=Chunk has empty layers: %s +commands.chunkinfo.vertices=%s layer's buffer contains %d vertices +commands.chunkinfo.data=First 64 vertices are: %s +commands.tellraw.usage=/tellraw +commands.tellraw.jsonException=Invalid json: %s +commands.message.usage=/tell +commands.message.sameTarget=You can't send a private message to yourself! +commands.message.display.outgoing=You whisper to %s: %s +commands.message.display.incoming=%s whispers to you: %s +commands.difficulty.usage=/difficulty +commands.difficulty.success=Set game difficulty to %s +commands.spawnpoint.usage=/spawnpoint [player] [ ] +commands.spawnpoint.success=Set %s's spawn point to (%d, %d, %d) +commands.setworldspawn.usage=/setworldspawn [ ] +commands.setworldspawn.success=Set the world spawn point to (%d, %d, %d) +commands.gamerule.usage=/gamerule [value] +commands.gamerule.success=Game rule has been updated +commands.gamerule.norule=No game rule called '%s' is available +commands.gamerule.nopermission=Only server owners can change '%s' +commands.weather.usage=/weather [duration in seconds] +commands.weather.clear=Changing to clear weather +commands.weather.rain=Changing to rainy weather +commands.weather.thunder=Changing to rain and thunder +commands.testfor.usage=/testfor [dataTag] +commands.testfor.failure=%s did not match the required data structure +commands.testfor.success=Found %s +commands.testfor.tagError=Data tag parsing failed: %s +commands.seed.usage=/seed +commands.seed.success=Seed: %s +commands.spreadplayers.usage=/spreadplayers +commands.spreadplayers.spreading.teams=Spreading %s teams %s blocks around %s,%s (min %s blocks apart) +commands.spreadplayers.spreading.players=Spreading %s players %s blocks around %s,%s (min %s blocks apart) +commands.spreadplayers.success.teams=Successfully spread %s teams around %s,%s +commands.spreadplayers.success.players=Successfully spread %s players around %s,%s +commands.spreadplayers.info.teams=(Average distance between teams is %s blocks apart after %s iterations) +commands.spreadplayers.info.players=(Average distance between players is %s blocks apart after %s iterations) +commands.spreadplayers.failure.teams=Could not spread %s teams around %s,%s (too many players for space - try using spread of at most %s) +commands.spreadplayers.failure.players=Could not spread %s players around %s,%s (too many players for space - try using spread of at most %s) +commands.achievement.usage=/achievement [player] +commands.achievement.unknownAchievement=Unknown achievement or statistic '%s' +commands.achievement.alreadyHave=Player %s already has achievement %s +commands.achievement.dontHave=Player %s doesn't have achievement %s +commands.achievement.give.success.all=Successfully given all achievements to %s +commands.achievement.give.success.one=Successfully given %s the stat %s +commands.achievement.take.success.all=Successfully taken all achievements from %s +commands.achievement.take.success.one=Successfully taken the stat %s from %s +commands.achievement.statTooLow=Player %s does not have the stat %s +commands.worldborder.usage=/worldborder ... +commands.worldborder.add.usage=/worldborder add [timeInSeconds] +commands.worldborder.set.usage=/worldborder set [timeInSeconds] +commands.worldborder.set.success=Set world border to %s blocks wide (from %s blocks) +commands.worldborder.get.success=World border is currently %s blocks wide +commands.worldborder.setSlowly.shrink.success=Shrinking world border to %s blocks wide (down from %s blocks) over %s seconds +commands.worldborder.setSlowly.grow.success=Growing world border to %s blocks wide (up from %s blocks) over %s seconds +commands.worldborder.center.usage=/worldborder center +commands.worldborder.center.success=Set world border center to %s,%s +commands.worldborder.damage.usage=/worldborder damage +commands.worldborder.damage.buffer.usage=/worldborder damage buffer +commands.worldborder.damage.buffer.success=Set world border damage buffer to %s blocks (from %s blocks) +commands.worldborder.damage.amount.usage=/worldborder damage amount +commands.worldborder.damage.amount.success=Set world border damage amount to %s per block (from %s per block) +commands.worldborder.warning.usage=/worldborder warning +commands.worldborder.warning.time.usage=/worldborder warning time +commands.worldborder.warning.time.success=Set world border warning to %s seconds away (from %s seconds) +commands.worldborder.warning.distance.usage=/worldborder warning distance +commands.worldborder.warning.distance.success=Set world border warning to %s blocks away (from %s blocks) +commands.title.usage=/title ... +commands.title.usage.title=/title title|subtitle +commands.title.usage.clear=/title clear|reset +commands.title.usage.times=/title times +commands.title.success=Title command successfully executed + +itemGroup.buildingBlocks=Building Blocks +itemGroup.decorations=Decoration Blocks +itemGroup.redstone=Redstone +itemGroup.transportation=Transportation +itemGroup.misc=Miscellaneous +itemGroup.search=Search Items +itemGroup.food=Foodstuffs +itemGroup.tools=Tools +itemGroup.combat=Combat +itemGroup.brewing=Consumables +itemGroup.materials=Materials +itemGroup.inventory=Survival Inventory + +inventory.binSlot=Destroy Item + +advMode.setCommand=Set Console Command for Block +advMode.setCommand.success=Command set: %s +advMode.command=Console Command +advMode.nearestPlayer=Use "@p" to target nearest player +advMode.randomPlayer=Use "@r" to target random player +advMode.allPlayers=Use "@a" to target all players +advMode.allEntities=Use "@e" to target all entities +advMode.previousOutput=Previous Output + +advMode.notEnabled=Command blocks are not enabled on this server +advMode.notAllowed=Must be an opped player in creative mode + +mount.onboard=Press %1$s to dismount + +build.tooHigh=Height limit for building is %s blocks + +attribute.modifier.plus.0=+%d %s +attribute.modifier.plus.1=+%d%% %s +attribute.modifier.plus.2=+%d%% %s +attribute.modifier.take.0=-%d %s +attribute.modifier.take.1=-%d%% %s +attribute.modifier.take.2=-%d%% %s + +attribute.name.horse.jumpStrength=Horse Jump Strength +attribute.name.zombie.spawnReinforcements=Zombie Reinforcements +attribute.name.generic.maxHealth=Max Health +attribute.name.generic.followRange=Mob Follow Range +attribute.name.generic.knockbackResistance=Knockback Resistance +attribute.name.generic.movementSpeed=Speed +attribute.name.generic.attackDamage=Attack Damage + +screenshot.success=Saved screenshot as %s +screenshot.failure=Couldn't save screenshot: %s + +stream.user.mode.moderator=Moderator +stream.user.mode.moderator.self=Moderator on your channel +stream.user.mode.moderator.other=Moderator on %s's channel +stream.user.mode.broadcaster=Broadcaster +stream.user.mode.broadcaster.self=Broadcaster (You!) +stream.user.mode.broadcaster.other=Broadcaster +stream.user.mode.administrator=Twitch Administrator +stream.user.mode.staff=Twitch Staff +stream.user.mode.banned=Banned +stream.user.mode.banned.self=Banned on your channel +stream.user.mode.banned.other=Banned on %s's channel +stream.user.subscription.subscriber=Subscriber +stream.user.subscription.subscriber.self=Subscriber to your channel +stream.user.subscription.subscriber.other=Subscriber to %s's channel +stream.user.subscription.turbo=Twitch Turbo + +stream.unavailable.title=Twitch Broadcasting Unavailable +stream.unavailable.report_to_mojang=Report to Mojang + +stream.confirm_start=Are you sure you want to start broadcasting? + +stream.unavailable.account_not_bound=Before you can broadcast Minecraft through Twitch, you will need to link your Twitch account on mojang.com. Would you like to do that now? +stream.unavailable.account_not_bound.okay=Link Accounts +stream.unavailable.account_not_migrated=Before you can broadcast Minecraft through Twitch, you will need to migrate your Minecraft account to a Mojang account. Would you like to do that now? +stream.unavailable.account_not_migrated.okay=Migrate Account +stream.unavailable.failed_auth=Authentication to Twitch failed. Please go to mojang.com and rebind your Twitch account. +stream.unavailable.failed_auth.okay=Rebind Accounts +stream.unavailable.failed_auth_error=Unable to authenticate to Twitch. Please try again later. +stream.unavailable.initialization_failure=Unable to initialize the Twitch SDK. +stream.unavailable.initialization_failure.extra=(Reason: %s) +stream.unavailable.library_arch_mismatch=The custom java version used to launch Minecraft has a different architecture than the one used to run the launcher. Please make sure these are the same, either 32-bit or 64-bit for both. +stream.unavailable.library_failure=Unable to load the libraries needed for the integrated Twitch broadcasting service. +stream.unavailable.no_fbo=Your video card needs to support at least OpenGL version 3.0 or support Framebuffer Objects via an extension to use the integrated Twitch broadcasting. +stream.unavailable.no_fbo.version=You are currently using: %s +stream.unavailable.no_fbo.blend=Separate blending support via EXT is: %s +stream.unavailable.no_fbo.arb=Framebuffer object support via ARB is: %s +stream.unavailable.no_fbo.ext=Framebuffer object support via EXT is: %s +stream.unavailable.not_supported.windows=Unfortunately the integrated Twitch broadcasting requires a newer version of Windows than you are on. You must have at least Windows Vista or newer. +stream.unavailable.not_supported.mac=Unfortunately the integrated Twitch broadcasting on Mac requires a version of OSX newer than the one you are on. You must use 10.7 (Mac OS X Lion) or newer to be able to use this service. Would you like to visit apple.com to learn about upgrading? +stream.unavailable.not_supported.mac.okay=Upgrade +stream.unavailable.not_supported.other=Unfortunately the integrated Twitch broadcasting service requires Windows (Vista or newer) or Mac OS X (10.7/Lion or newer) +stream.unavailable.unknown=Unfortunately you cannot broadcast to Twitch at this time. And we don't know why :'( +stream.unavailable.unknown.chat=Could not start stream: %s + +stream.unavailable.soundflower.chat=Soundflower is required to be able to stream on Mac. %s +stream.unavailable.soundflower.chat.link=Please click here to install it. + +stream.userinfo.chatTooltip=Click to manage user +stream.userinfo.timeout=Timeout +stream.userinfo.ban=Ban +stream.userinfo.unban=Unban +stream.userinfo.mod=Promote to Moderator +stream.userinfo.unmod=Demote from Moderator + +item.banner.black.name=Black Banner +item.banner.red.name=Red Banner +item.banner.green.name=Green Banner +item.banner.brown.name=Brown Banner +item.banner.blue.name=Blue Banner +item.banner.purple.name=Purple Banner +item.banner.cyan.name=Cyan Banner +item.banner.silver.name=Light Gray Banner +item.banner.gray.name=Gray Banner +item.banner.pink.name=Pink Banner +item.banner.lime.name=Lime Banner +item.banner.yellow.name=Yellow Banner +item.banner.lightBlue.name=Light Blue Banner +item.banner.magenta.name=Magenta Banner +item.banner.orange.name=Orange Banner +item.banner.white.name=White Banner + +item.banner.square_bottom_left.black=Black Base Dexter Canton +item.banner.square_bottom_left.red=Red Base Dexter Canton +item.banner.square_bottom_left.green=Green Base Dexter Canton +item.banner.square_bottom_left.brown=Brown Base Dexter Canton +item.banner.square_bottom_left.blue=Blue Base Dexter Canton +item.banner.square_bottom_left.purple=Purple Base Dexter Canton +item.banner.square_bottom_left.cyan=Cyan Base Dexter Canton +item.banner.square_bottom_left.silver=Light Gray Base Dexter Canton +item.banner.square_bottom_left.gray=Gray Base Dexter Canton +item.banner.square_bottom_left.pink=Pink Base Dexter Canton +item.banner.square_bottom_left.lime=Lime Base Dexter Canton +item.banner.square_bottom_left.yellow=Yellow Base Dexter Canton +item.banner.square_bottom_left.lightBlue=Light Blue Base Dexter Canton +item.banner.square_bottom_left.magenta=Magenta Base Dexter Canton +item.banner.square_bottom_left.orange=Orange Base Dexter Canton +item.banner.square_bottom_left.white=White Base Dexter Canton + +item.banner.square_bottom_right.black=Black Base Sinister Canton +item.banner.square_bottom_right.red=Red Base Sinister Canton +item.banner.square_bottom_right.green=Green Base Sinister Canton +item.banner.square_bottom_right.brown=Brown Base Sinister Canton +item.banner.square_bottom_right.blue=Blue Base Sinister Canton +item.banner.square_bottom_right.purple=Purple Base Sinister Canton +item.banner.square_bottom_right.cyan=Cyan Base Sinister Canton +item.banner.square_bottom_right.silver=Light Gray Base Sinister Canton +item.banner.square_bottom_right.gray=Gray Base Sinister Canton +item.banner.square_bottom_right.pink=Pink Base Sinister Canton +item.banner.square_bottom_right.lime=Lime Base Sinister Canton +item.banner.square_bottom_right.yellow=Yellow Base Sinister Canton +item.banner.square_bottom_right.lightBlue=Light Blue Base Sinister Canton +item.banner.square_bottom_right.magenta=Magenta Base Sinister Canton +item.banner.square_bottom_right.orange=Orange Base Sinister Canton +item.banner.square_bottom_right.white=White Base Sinister Canton + +item.banner.square_top_left.black=Black Chief Dexter Canton +item.banner.square_top_left.red=Red Chief Dexter Canton +item.banner.square_top_left.green=Green Chief Dexter Canton +item.banner.square_top_left.brown=Brown Chief Dexter Canton +item.banner.square_top_left.blue=Blue Chief Dexter Canton +item.banner.square_top_left.purple=Purple Chief Dexter Canton +item.banner.square_top_left.cyan=Cyan Chief Dexter Canton +item.banner.square_top_left.silver=Light Gray Chief Dexter Canton +item.banner.square_top_left.gray=Gray Chief Dexter Canton +item.banner.square_top_left.pink=Pink Chief Dexter Canton +item.banner.square_top_left.lime=Lime Chief Dexter Canton +item.banner.square_top_left.yellow=Yellow Chief Dexter Canton +item.banner.square_top_left.lightBlue=Light Blue Chief Dexter Canton +item.banner.square_top_left.magenta=Magenta Chief Dexter Canton +item.banner.square_top_left.orange=Orange Chief Dexter Canton +item.banner.square_top_left.white=White Chief Dexter Canton + +item.banner.square_top_right.black=Black Chief Sinister Canton +item.banner.square_top_right.red=Red Chief Sinister Canton +item.banner.square_top_right.green=Green Chief Sinister Canton +item.banner.square_top_right.brown=Brown Chief Sinister Canton +item.banner.square_top_right.blue=Blue Chief Sinister Canton +item.banner.square_top_right.purple=Purple Chief Sinister Canton +item.banner.square_top_right.cyan=Cyan Chief Sinister Canton +item.banner.square_top_right.silver=Light Gray Chief Sinister Canton +item.banner.square_top_right.gray=Gray Chief Sinister Canton +item.banner.square_top_right.pink=Pink Chief Sinister Canton +item.banner.square_top_right.lime=Lime Chief Sinister Canton +item.banner.square_top_right.yellow=Yellow Chief Sinister Canton +item.banner.square_top_right.lightBlue=Light Blue Chief Sinister Canton +item.banner.square_top_right.magenta=Magenta Chief Sinister Canton +item.banner.square_top_right.orange=Orange Chief Sinister Canton +item.banner.square_top_right.white=White Chief Sinister Canton + +item.banner.stripe_bottom.black=Black Base Fess +item.banner.stripe_bottom.red=Red Base Fess +item.banner.stripe_bottom.green=Green Base Fess +item.banner.stripe_bottom.brown=Brown Base Fess +item.banner.stripe_bottom.blue=Blue Base Fess +item.banner.stripe_bottom.purple=Purple Base Fess +item.banner.stripe_bottom.cyan=Cyan Base Fess +item.banner.stripe_bottom.silver=Light Gray Base Fess +item.banner.stripe_bottom.gray=Gray Base Fess +item.banner.stripe_bottom.pink=Pink Base Fess +item.banner.stripe_bottom.lime=Lime Base Fess +item.banner.stripe_bottom.yellow=Yellow Base Fess +item.banner.stripe_bottom.lightBlue=Light Blue Base Fess +item.banner.stripe_bottom.magenta=Magenta Base Fess +item.banner.stripe_bottom.orange=Orange Base Fess +item.banner.stripe_bottom.white=White Base Fess + +item.banner.stripe_top.black=Black Chief Fess +item.banner.stripe_top.red=Red Chief Fess +item.banner.stripe_top.green=Green Chief Fess +item.banner.stripe_top.brown=Brown Chief Fess +item.banner.stripe_top.blue=Blue Chief Fess +item.banner.stripe_top.purple=Purple Chief Fess +item.banner.stripe_top.cyan=Cyan Chief Fess +item.banner.stripe_top.silver=Light Gray Chief Fess +item.banner.stripe_top.gray=Gray Chief Fess +item.banner.stripe_top.pink=Pink Chief Fess +item.banner.stripe_top.lime=Lime Chief Fess +item.banner.stripe_top.yellow=Yellow Chief Fess +item.banner.stripe_top.lightBlue=Light Blue Chief Fess +item.banner.stripe_top.magenta=Magenta Chief Fess +item.banner.stripe_top.orange=Orange Chief Fess +item.banner.stripe_top.white=White Chief Fess + +item.banner.stripe_left.black=Black Pale Dexter +item.banner.stripe_left.red=Red Pale Dexter +item.banner.stripe_left.green=Green Pale Dexter +item.banner.stripe_left.brown=Brown Pale Dexter +item.banner.stripe_left.blue=Blue Pale Dexter +item.banner.stripe_left.purple=Purple Pale Dexter +item.banner.stripe_left.cyan=Cyan Pale Dexter +item.banner.stripe_left.silver=Light Gray Pale Dexter +item.banner.stripe_left.gray=Gray Pale Dexter +item.banner.stripe_left.pink=Pink Pale Dexter +item.banner.stripe_left.lime=Lime Pale Dexter +item.banner.stripe_left.yellow=Yellow Pale Dexter +item.banner.stripe_left.lightBlue=Light Blue Pale Dexter +item.banner.stripe_left.magenta=Magenta Pale Dexter +item.banner.stripe_left.orange=Orange Pale Dexter +item.banner.stripe_left.white=White Pale Dexter + +item.banner.stripe_right.black=Black Pale Sinister +item.banner.stripe_right.red=Red Pale Sinister +item.banner.stripe_right.green=Green Pale Sinister +item.banner.stripe_right.brown=Brown Pale Sinister +item.banner.stripe_right.blue=Blue Pale Sinister +item.banner.stripe_right.purple=Purple Pale Sinister +item.banner.stripe_right.cyan=Cyan Pale Sinister +item.banner.stripe_right.silver=Light Gray Pale Sinister +item.banner.stripe_right.gray=Gray Pale Sinister +item.banner.stripe_right.pink=Pink Pale Sinister +item.banner.stripe_right.lime=Lime Pale Sinister +item.banner.stripe_right.yellow=Yellow Pale Sinister +item.banner.stripe_right.lightBlue=Light Blue Pale Sinister +item.banner.stripe_right.magenta=Magenta Pale Sinister +item.banner.stripe_right.orange=Orange Pale Sinister +item.banner.stripe_right.white=White Pale Sinister + +item.banner.stripe_center.black=Black Pale +item.banner.stripe_center.red=Red Pale +item.banner.stripe_center.green=Green Pale +item.banner.stripe_center.brown=Brown Pale +item.banner.stripe_center.blue=Blue Pale +item.banner.stripe_center.purple=Purple Pale +item.banner.stripe_center.cyan=Cyan Pale +item.banner.stripe_center.silver=Light Gray Pale +item.banner.stripe_center.gray=Gray Pale +item.banner.stripe_center.pink=Pink Pale +item.banner.stripe_center.lime=Lime Pale +item.banner.stripe_center.yellow=Yellow Pale +item.banner.stripe_center.lightBlue=Light Blue Pale +item.banner.stripe_center.magenta=Magenta Pale +item.banner.stripe_center.orange=Orange Pale +item.banner.stripe_center.white=White Pale + +item.banner.stripe_middle.black=Black Fess +item.banner.stripe_middle.red=Red Fess +item.banner.stripe_middle.green=Green Fess +item.banner.stripe_middle.brown=Brown Fess +item.banner.stripe_middle.blue=Blue Fess +item.banner.stripe_middle.purple=Purple Fess +item.banner.stripe_middle.cyan=Cyan Fess +item.banner.stripe_middle.silver=Light Gray Fess +item.banner.stripe_middle.gray=Gray Fess +item.banner.stripe_middle.pink=Pink Fess +item.banner.stripe_middle.lime=Lime Fess +item.banner.stripe_middle.yellow=Yellow Fess +item.banner.stripe_middle.lightBlue=Light Blue Fess +item.banner.stripe_middle.magenta=Magenta Fess +item.banner.stripe_middle.orange=Orange Fess +item.banner.stripe_middle.white=White Fess + +item.banner.stripe_downright.black=Black Bend +item.banner.stripe_downright.red=Red Bend +item.banner.stripe_downright.green=Green Bend +item.banner.stripe_downright.brown=Brown Bend +item.banner.stripe_downright.blue=Blue Bend +item.banner.stripe_downright.purple=Purple Bend +item.banner.stripe_downright.cyan=Cyan Bend +item.banner.stripe_downright.silver=Light Gray Bend +item.banner.stripe_downright.gray=Gray Bend +item.banner.stripe_downright.pink=Pink Bend +item.banner.stripe_downright.lime=Lime Bend +item.banner.stripe_downright.yellow=Yellow Bend +item.banner.stripe_downright.lightBlue=Light Blue Bend +item.banner.stripe_downright.magenta=Magenta Bend +item.banner.stripe_downright.orange=Orange Bend +item.banner.stripe_downright.white=White Bend + +item.banner.stripe_downleft.black=Black Bend Sinister +item.banner.stripe_downleft.red=Red Bend Sinister +item.banner.stripe_downleft.green=Green Bend Sinister +item.banner.stripe_downleft.brown=Brown Bend Sinister +item.banner.stripe_downleft.blue=Blue Bend Sinister +item.banner.stripe_downleft.purple=Purple Bend Sinister +item.banner.stripe_downleft.cyan=Cyan Bend Sinister +item.banner.stripe_downleft.silver=Light Gray Bend Sinister +item.banner.stripe_downleft.gray=Gray Bend Sinister +item.banner.stripe_downleft.pink=Pink Bend Sinister +item.banner.stripe_downleft.lime=Lime Bend Sinister +item.banner.stripe_downleft.yellow=Yellow Bend Sinister +item.banner.stripe_downleft.lightBlue=Light Blue Bend Sinister +item.banner.stripe_downleft.magenta=Magenta Bend Sinister +item.banner.stripe_downleft.orange=Orange Bend Sinister +item.banner.stripe_downleft.white=White Bend Sinister + +item.banner.small_stripes.black=Black Paly +item.banner.small_stripes.red=Red Paly +item.banner.small_stripes.green=Green Paly +item.banner.small_stripes.brown=Brown Paly +item.banner.small_stripes.blue=Blue Paly +item.banner.small_stripes.purple=Purple Paly +item.banner.small_stripes.cyan=Cyan Paly +item.banner.small_stripes.silver=Light Gray Paly +item.banner.small_stripes.gray=Gray Paly +item.banner.small_stripes.pink=Pink Paly +item.banner.small_stripes.lime=Lime Paly +item.banner.small_stripes.yellow=Yellow Paly +item.banner.small_stripes.lightBlue=Light Blue Paly +item.banner.small_stripes.magenta=Magenta Paly +item.banner.small_stripes.orange=Orange Paly +item.banner.small_stripes.white=White Paly + +item.banner.cross.black=Black Saltire +item.banner.cross.red=Red Saltire +item.banner.cross.green=Green Saltire +item.banner.cross.brown=Brown Saltire +item.banner.cross.blue=Blue Saltire +item.banner.cross.purple=Purple Saltire +item.banner.cross.cyan=Cyan Saltire +item.banner.cross.silver=Light Gray Saltire +item.banner.cross.gray=Gray Saltire +item.banner.cross.pink=Pink Saltire +item.banner.cross.lime=Lime Saltire +item.banner.cross.yellow=Yellow Saltire +item.banner.cross.lightBlue=Light Blue Saltire +item.banner.cross.magenta=Magenta Saltire +item.banner.cross.orange=Orange Saltire +item.banner.cross.white=White Saltire + +item.banner.triangle_bottom.black=Black Chevron +item.banner.triangle_bottom.red=Red Chevron +item.banner.triangle_bottom.green=Green Chevron +item.banner.triangle_bottom.brown=Brown Chevron +item.banner.triangle_bottom.blue=Blue Chevron +item.banner.triangle_bottom.purple=Purple Chevron +item.banner.triangle_bottom.cyan=Cyan Chevron +item.banner.triangle_bottom.silver=Light Gray Chevron +item.banner.triangle_bottom.gray=Gray Chevron +item.banner.triangle_bottom.pink=Pink Chevron +item.banner.triangle_bottom.lime=Lime Chevron +item.banner.triangle_bottom.yellow=Yellow Chevron +item.banner.triangle_bottom.lightBlue=Light Blue Chevron +item.banner.triangle_bottom.magenta=Magenta Chevron +item.banner.triangle_bottom.orange=Orange Chevron +item.banner.triangle_bottom.white=White Chevron + +item.banner.triangle_top.black=Black Inverted Chevron +item.banner.triangle_top.red=Red Inverted Chevron +item.banner.triangle_top.green=Green Inverted Chevron +item.banner.triangle_top.brown=Brown Inverted Chevron +item.banner.triangle_top.blue=Blue Inverted Chevron +item.banner.triangle_top.purple=Purple Inverted Chevron +item.banner.triangle_top.cyan=Cyan Inverted Chevron +item.banner.triangle_top.silver=Light Gray Inverted Chevron +item.banner.triangle_top.gray=Gray Inverted Chevron +item.banner.triangle_top.pink=Pink Inverted Chevron +item.banner.triangle_top.lime=Lime Inverted Chevron +item.banner.triangle_top.yellow=Yellow Inverted Chevron +item.banner.triangle_top.lightBlue=Light Blue Inverted Chevron +item.banner.triangle_top.magenta=Magenta Inverted Chevron +item.banner.triangle_top.orange=Orange Inverted Chevron +item.banner.triangle_top.white=White Inverted Chevron + +item.banner.triangles_bottom.black=Black Base Indented +item.banner.triangles_bottom.red=Red Base Indented +item.banner.triangles_bottom.green=Green Base Indented +item.banner.triangles_bottom.brown=Brown Base Indented +item.banner.triangles_bottom.blue=Blue Base Indented +item.banner.triangles_bottom.purple=Purple Base Indented +item.banner.triangles_bottom.cyan=Cyan Base Indented +item.banner.triangles_bottom.silver=Light Gray Base Indented +item.banner.triangles_bottom.gray=Gray Base Indented +item.banner.triangles_bottom.pink=Pink Base Indented +item.banner.triangles_bottom.lime=Lime Base Indented +item.banner.triangles_bottom.yellow=Yellow Base Indented +item.banner.triangles_bottom.lightBlue=Light Blue Base Indented +item.banner.triangles_bottom.magenta=Magenta Base Indented +item.banner.triangles_bottom.orange=Orange Base Indented +item.banner.triangles_bottom.white=White Base Indented + +item.banner.triangles_top.black=Black Chief Indented +item.banner.triangles_top.red=Red Chief Indented +item.banner.triangles_top.green=Green Chief Indented +item.banner.triangles_top.brown=Brown Chief Indented +item.banner.triangles_top.blue=Blue Chief Indented +item.banner.triangles_top.purple=Purple Chief Indented +item.banner.triangles_top.cyan=Cyan Chief Indented +item.banner.triangles_top.silver=Light Gray Chief Indented +item.banner.triangles_top.gray=Gray Chief Indented +item.banner.triangles_top.pink=Pink Chief Indented +item.banner.triangles_top.lime=Lime Chief Indented +item.banner.triangles_top.yellow=Yellow Chief Indented +item.banner.triangles_top.lightBlue=Light Blue Chief Indented +item.banner.triangles_top.magenta=Magenta Chief Indented +item.banner.triangles_top.orange=Orange Chief Indented +item.banner.triangles_top.white=White Chief Indented + +item.banner.diagonal_left.black=Black Per Bend Sinister +item.banner.diagonal_left.red=Red Per Bend Sinister +item.banner.diagonal_left.green=Green Per Bend Sinister +item.banner.diagonal_left.brown=Brown Per Bend Sinister +item.banner.diagonal_left.blue=Blue Per Bend Sinister +item.banner.diagonal_left.purple=Purple Per Bend Sinister +item.banner.diagonal_left.cyan=Cyan Per Bend Sinister +item.banner.diagonal_left.silver=Light Gray Per Bend Sinister +item.banner.diagonal_left.gray=Gray Per Bend Sinister +item.banner.diagonal_left.pink=Pink Per Bend Sinister +item.banner.diagonal_left.lime=Lime Per Bend Sinister +item.banner.diagonal_left.yellow=Yellow Per Bend Sinister +item.banner.diagonal_left.lightBlue=Light Blue Per Bend Sinister +item.banner.diagonal_left.magenta=Magenta Per Bend Sinister +item.banner.diagonal_left.orange=Orange Per Bend Sinister +item.banner.diagonal_left.white=White Per Bend Sinister + +item.banner.diagonal_right.black=Black Per Bend +item.banner.diagonal_right.red=Red Per Bend +item.banner.diagonal_right.green=Green Per Bend +item.banner.diagonal_right.brown=Brown Per Bend +item.banner.diagonal_right.blue=Blue Per Bend +item.banner.diagonal_right.purple=Purple Per Bend +item.banner.diagonal_right.cyan=Cyan Per Bend +item.banner.diagonal_right.silver=Light Gray Per Bend +item.banner.diagonal_right.gray=Gray Per Bend +item.banner.diagonal_right.pink=Pink Per Bend +item.banner.diagonal_right.lime=Lime Per Bend +item.banner.diagonal_right.yellow=Yellow Per Bend +item.banner.diagonal_right.lightBlue=Light Blue Per Bend +item.banner.diagonal_right.magenta=Magenta Per Bend +item.banner.diagonal_right.orange=Orange Per Bend +item.banner.diagonal_right.white=White Per Bend + +item.banner.diagonal_up_left.black=Black Per Bend Inverted +item.banner.diagonal_up_left.red=Red Per Bend Inverted +item.banner.diagonal_up_left.green=Green Per Bend Inverted +item.banner.diagonal_up_left.brown=Brown Per Bend Inverted +item.banner.diagonal_up_left.blue=Blue Per Bend Inverted +item.banner.diagonal_up_left.purple=Purple Per Bend Inverted +item.banner.diagonal_up_left.cyan=Cyan Per Bend Inverted +item.banner.diagonal_up_left.silver=Light Gray Per Bend Inverted +item.banner.diagonal_up_left.gray=Gray Per Bend Inverted +item.banner.diagonal_up_left.pink=Pink Per Bend Inverted +item.banner.diagonal_up_left.lime=Lime Per Bend Inverted +item.banner.diagonal_up_left.yellow=Yellow Per Bend Inverted +item.banner.diagonal_up_left.lightBlue=Light Blue Per Bend Inverted +item.banner.diagonal_up_left.magenta=Magenta Per Bend Inverted +item.banner.diagonal_up_left.orange=Orange Per Bend Inverted +item.banner.diagonal_up_left.white=White Per Bend Inverted + +item.banner.diagonal_up_right.black=Black Per Bend Sinister Inverted +item.banner.diagonal_up_right.red=Red Per Bend Sinister Inverted +item.banner.diagonal_up_right.green=Green Per Bend Sinister Inverted +item.banner.diagonal_up_right.brown=Brown Per Bend Sinister Inverted +item.banner.diagonal_up_right.blue=Blue Per Bend Sinister Inverted +item.banner.diagonal_up_right.purple=Purple Per Bend Sinister Inverted +item.banner.diagonal_up_right.cyan=Cyan Per Bend Sinister Inverted +item.banner.diagonal_up_right.silver=Light Gray Per Bend Sinister Inverted +item.banner.diagonal_up_right.gray=Gray Per Bend Sinister Inverted +item.banner.diagonal_up_right.pink=Pink Per Bend Sinister Inverted +item.banner.diagonal_up_right.lime=Lime Per Bend Sinister Inverted +item.banner.diagonal_up_right.yellow=Yellow Per Bend Sinister Inverted +item.banner.diagonal_up_right.lightBlue=Light Blue Per Bend Sinister Inverted +item.banner.diagonal_up_right.magenta=Magenta Per Bend Sinister Inverted +item.banner.diagonal_up_right.orange=Orange Per Bend Sinister Inverted +item.banner.diagonal_up_right.white=White Per Bend Sinister Inverted + +item.banner.circle.black=Black Roundel +item.banner.circle.red=Red Roundel +item.banner.circle.green=Green Roundel +item.banner.circle.brown=Brown Roundel +item.banner.circle.blue=Blue Roundel +item.banner.circle.purple=Purple Roundel +item.banner.circle.cyan=Cyan Roundel +item.banner.circle.silver=Light Gray Roundel +item.banner.circle.gray=Gray Roundel +item.banner.circle.pink=Pink Roundel +item.banner.circle.lime=Lime Roundel +item.banner.circle.yellow=Yellow Roundel +item.banner.circle.lightBlue=Light Blue Roundel +item.banner.circle.magenta=Magenta Roundel +item.banner.circle.orange=Orange Roundel +item.banner.circle.white=White Roundel + +item.banner.rhombus.black=Black Lozenge +item.banner.rhombus.red=Red Lozenge +item.banner.rhombus.green=Green Lozenge +item.banner.rhombus.brown=Brown Lozenge +item.banner.rhombus.blue=Blue Lozenge +item.banner.rhombus.purple=Purple Lozenge +item.banner.rhombus.cyan=Cyan Lozenge +item.banner.rhombus.silver=Light Gray Lozenge +item.banner.rhombus.gray=Gray Lozenge +item.banner.rhombus.pink=Pink Lozenge +item.banner.rhombus.lime=Lime Lozenge +item.banner.rhombus.yellow=Yellow Lozenge +item.banner.rhombus.lightBlue=Light Blue Lozenge +item.banner.rhombus.magenta=Magenta Lozenge +item.banner.rhombus.orange=Orange Lozenge +item.banner.rhombus.white=White Lozenge + +item.banner.half_vertical.black=Black Per Pale +item.banner.half_vertical.red=Red Per Pale +item.banner.half_vertical.green=Green Per Pale +item.banner.half_vertical.brown=Brown Per Pale +item.banner.half_vertical.blue=Blue Per Pale +item.banner.half_vertical.purple=Purple Per Pale +item.banner.half_vertical.cyan=Cyan Per Pale +item.banner.half_vertical.silver=Light Gray Per Pale +item.banner.half_vertical.gray=Gray Per Pale +item.banner.half_vertical.pink=Pink Per Pale +item.banner.half_vertical.lime=Lime Per Pale +item.banner.half_vertical.yellow=Yellow Per Pale +item.banner.half_vertical.lightBlue=Light Blue Per Pale +item.banner.half_vertical.magenta=Magenta Per Pale +item.banner.half_vertical.orange=Orange Per Pale +item.banner.half_vertical.white=White Per Pale + +item.banner.half_horizontal.black=Black Per Fess +item.banner.half_horizontal.red=Red Per Fess +item.banner.half_horizontal.green=Green Per Fess +item.banner.half_horizontal.brown=Brown Per Fess +item.banner.half_horizontal.blue=Blue Per Fess +item.banner.half_horizontal.purple=Purple Per Fess +item.banner.half_horizontal.cyan=Cyan Per Fess +item.banner.half_horizontal.silver=Light Gray Per Fess +item.banner.half_horizontal.gray=Gray Per Fess +item.banner.half_horizontal.pink=Pink Per Fess +item.banner.half_horizontal.lime=Lime Per Fess +item.banner.half_horizontal.yellow=Yellow Per Fess +item.banner.half_horizontal.lightBlue=Light Blue Per Fess +item.banner.half_horizontal.magenta=Magenta Per Fess +item.banner.half_horizontal.orange=Orange Per Fess +item.banner.half_horizontal.white=White Per Fess + +item.banner.half_vertical_right.black=Black Per Pale Inverted +item.banner.half_vertical_right.red=Red Per Pale Inverted +item.banner.half_vertical_right.green=Green Per Pale Inverted +item.banner.half_vertical_right.brown=Brown Per Pale Inverted +item.banner.half_vertical_right.blue=Blue Per Pale Inverted +item.banner.half_vertical_right.purple=Purple Per Pale Inverted +item.banner.half_vertical_right.cyan=Cyan Per Pale Inverted +item.banner.half_vertical_right.silver=Light Gray Per Pale Inverted +item.banner.half_vertical_right.gray=Gray Per Pale Inverted +item.banner.half_vertical_right.pink=Pink Per Pale Inverted +item.banner.half_vertical_right.lime=Lime Per Pale Inverted +item.banner.half_vertical_right.yellow=Yellow Per Pale Inverted +item.banner.half_vertical_right.lightBlue=Light Blue Per Pale Inverted +item.banner.half_vertical_right.magenta=Magenta Per Pale Inverted +item.banner.half_vertical_right.orange=Orange Per Pale Inverted +item.banner.half_vertical_right.white=White Per Pale Inverted + +item.banner.half_horizontal_bottom.black=Black Per Fess Inverted +item.banner.half_horizontal_bottom.red=Red Per Fess Inverted +item.banner.half_horizontal_bottom.green=Green Per Fess Inverted +item.banner.half_horizontal_bottom.brown=Brown Per Fess Inverted +item.banner.half_horizontal_bottom.blue=Blue Per Fess Inverted +item.banner.half_horizontal_bottom.purple=Purple Per Fess Inverted +item.banner.half_horizontal_bottom.cyan=Cyan Per Fess Inverted +item.banner.half_horizontal_bottom.silver=Light Gray Per Fess Inverted +item.banner.half_horizontal_bottom.gray=Gray Per Fess Inverted +item.banner.half_horizontal_bottom.pink=Pink Per Fess Inverted +item.banner.half_horizontal_bottom.lime=Lime Per Fess Inverted +item.banner.half_horizontal_bottom.yellow=Yellow Per Fess Inverted +item.banner.half_horizontal_bottom.lightBlue=Light Blue Per Fess Inverted +item.banner.half_horizontal_bottom.magenta=Magenta Per Fess Inverted +item.banner.half_horizontal_bottom.orange=Orange Per Fess Inverted +item.banner.half_horizontal_bottom.white=White Per Fess Inverted + +item.banner.creeper.black=Black Creeper Charge +item.banner.creeper.red=Red Creeper Charge +item.banner.creeper.green=Green Creeper Charge +item.banner.creeper.brown=Brown Creeper Charge +item.banner.creeper.blue=Blue Creeper Charge +item.banner.creeper.purple=Purple Creeper Charge +item.banner.creeper.cyan=Cyan Creeper Charge +item.banner.creeper.silver=Light Gray Creeper Charge +item.banner.creeper.gray=Gray Creeper Charge +item.banner.creeper.pink=Pink Creeper Charge +item.banner.creeper.lime=Lime Creeper Charge +item.banner.creeper.yellow=Yellow Creeper Charge +item.banner.creeper.lightBlue=Light Blue Creeper Charge +item.banner.creeper.magenta=Magenta Creeper Charge +item.banner.creeper.orange=Orange Creeper Charge +item.banner.creeper.white=White Creeper Charge + +item.banner.bricks.black=Black Field Masoned +item.banner.bricks.red=Red Field Masoned +item.banner.bricks.green=Green Field Masoned +item.banner.bricks.brown=Brown Field Masoned +item.banner.bricks.blue=Blue Field Masoned +item.banner.bricks.purple=Purple Field Masoned +item.banner.bricks.cyan=Cyan Field Masoned +item.banner.bricks.silver=Light Gray Field Masoned +item.banner.bricks.gray=Gray Field Masoned +item.banner.bricks.pink=Pink Field Masoned +item.banner.bricks.lime=Lime Field Masoned +item.banner.bricks.yellow=Yellow Field Masoned +item.banner.bricks.lightBlue=Light Blue Field Masoned +item.banner.bricks.magenta=Magenta Field Masoned +item.banner.bricks.orange=Orange Field Masoned +item.banner.bricks.white=White Field Masoned + +item.banner.gradient.black=Black Gradient +item.banner.gradient.red=Red Gradient +item.banner.gradient.green=Green Gradient +item.banner.gradient.brown=Brown Gradient +item.banner.gradient.blue=Blue Gradient +item.banner.gradient.purple=Purple Gradient +item.banner.gradient.cyan=Cyan Gradient +item.banner.gradient.silver=Light Gray Gradient +item.banner.gradient.gray=Gray Gradient +item.banner.gradient.pink=Pink Gradient +item.banner.gradient.lime=Lime Gradient +item.banner.gradient.yellow=Yellow Gradient +item.banner.gradient.lightBlue=Light Blue Gradient +item.banner.gradient.magenta=Magenta Gradient +item.banner.gradient.orange=Orange Gradient +item.banner.gradient.white=White Gradient + +item.banner.gradient_up.black=Black Base Gradient +item.banner.gradient_up.red=Red Base Gradient +item.banner.gradient_up.green=Green Base Gradient +item.banner.gradient_up.brown=Brown Base Gradient +item.banner.gradient_up.blue=Blue Base Gradient +item.banner.gradient_up.purple=Purple Base Gradient +item.banner.gradient_up.cyan=Cyan Base Gradient +item.banner.gradient_up.silver=Light Gray Base Gradient +item.banner.gradient_up.gray=Gray Base Gradient +item.banner.gradient_up.pink=Pink Base Gradient +item.banner.gradient_up.lime=Lime Base Gradient +item.banner.gradient_up.yellow=Yellow Base Gradient +item.banner.gradient_up.lightBlue=Light Blue Base Gradient +item.banner.gradient_up.magenta=Magenta Base Gradient +item.banner.gradient_up.orange=Orange Base Gradient +item.banner.gradient_up.white=White Base Gradient + +item.banner.skull.black=Black Skull Charge +item.banner.skull.red=Red Skull Charge +item.banner.skull.green=Green Skull Charge +item.banner.skull.brown=Brown Skull Charge +item.banner.skull.blue=Blue Skull Charge +item.banner.skull.purple=Purple Skull Charge +item.banner.skull.cyan=Cyan Skull Charge +item.banner.skull.silver=Light Gray Skull Charge +item.banner.skull.gray=Gray Skull Charge +item.banner.skull.pink=Pink Skull Charge +item.banner.skull.lime=Lime Skull Charge +item.banner.skull.yellow=Yellow Skull Charge +item.banner.skull.lightBlue=Light Blue Skull Charge +item.banner.skull.magenta=Magenta Skull Charge +item.banner.skull.orange=Orange Skull Charge +item.banner.skull.white=White Skull Charge + +item.banner.flower.black=Black Flower Charge +item.banner.flower.red=Red Flower Charge +item.banner.flower.green=Green Flower Charge +item.banner.flower.brown=Brown Flower Charge +item.banner.flower.blue=Blue Flower Charge +item.banner.flower.purple=Purple Flower Charge +item.banner.flower.cyan=Cyan Flower Charge +item.banner.flower.silver=Light Gray Flower Charge +item.banner.flower.gray=Gray Flower Charge +item.banner.flower.pink=Pink Flower Charge +item.banner.flower.lime=Lime Flower Charge +item.banner.flower.yellow=Yellow Flower Charge +item.banner.flower.lightBlue=Light Blue Flower Charge +item.banner.flower.magenta=Magenta Flower Charge +item.banner.flower.orange=Orange Flower Charge +item.banner.flower.white=White Flower Charge + +item.banner.border.black=Black Bordure +item.banner.border.red=Red Bordure +item.banner.border.green=Green Bordure +item.banner.border.brown=Brown Bordure +item.banner.border.blue=Blue Bordure +item.banner.border.purple=Purple Bordure +item.banner.border.cyan=Cyan Bordure +item.banner.border.silver=Light Gray Bordure +item.banner.border.gray=Gray Bordure +item.banner.border.pink=Pink Bordure +item.banner.border.lime=Lime Bordure +item.banner.border.yellow=Yellow Bordure +item.banner.border.lightBlue=Light Blue Bordure +item.banner.border.magenta=Magenta Bordure +item.banner.border.orange=Orange Bordure +item.banner.border.white=White Bordure + +item.banner.curly_border.black=Black Bordure Indented +item.banner.curly_border.red=Red Bordure Indented +item.banner.curly_border.green=Green Bordure Indented +item.banner.curly_border.brown=Brown Bordure Indented +item.banner.curly_border.blue=Blue Bordure Indented +item.banner.curly_border.purple=Purple Bordure Indented +item.banner.curly_border.cyan=Cyan Bordure Indented +item.banner.curly_border.silver=Light Gray Bordure Indented +item.banner.curly_border.gray=Gray Bordure Indented +item.banner.curly_border.pink=Pink Bordure Indented +item.banner.curly_border.lime=Lime Bordure Indented +item.banner.curly_border.yellow=Yellow Bordure Indented +item.banner.curly_border.lightBlue=Light Blue Bordure Indented +item.banner.curly_border.magenta=Magenta Bordure Indented +item.banner.curly_border.orange=Orange Bordure Indented +item.banner.curly_border.white=White Bordure Indented + +item.banner.mojang.black=Black Thing +item.banner.mojang.red=Red Thing +item.banner.mojang.green=Green Thing +item.banner.mojang.brown=Brown Thing +item.banner.mojang.blue=Blue Thing +item.banner.mojang.purple=Purple Thing +item.banner.mojang.cyan=Cyan Thing +item.banner.mojang.silver=Light Gray Thing +item.banner.mojang.gray=Gray Thing +item.banner.mojang.pink=Pink Thing +item.banner.mojang.lime=Lime Thing +item.banner.mojang.yellow=Yellow Thing +item.banner.mojang.lightBlue=Light Blue Thing +item.banner.mojang.magenta=Magenta Thing +item.banner.mojang.orange=Orange Thing +item.banner.mojang.white=White Thing + +item.banner.straight_cross.black=Black Cross +item.banner.straight_cross.red=Red Cross +item.banner.straight_cross.green=Green Cross +item.banner.straight_cross.brown=Brown Cross +item.banner.straight_cross.blue=Blue Cross +item.banner.straight_cross.purple=Purple Cross +item.banner.straight_cross.cyan=Cyan Cross +item.banner.straight_cross.silver=Light Gray Cross +item.banner.straight_cross.gray=Gray Cross +item.banner.straight_cross.pink=Pink Cross +item.banner.straight_cross.lime=Lime Cross +item.banner.straight_cross.yellow=Yellow Cross +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 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/color.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/color.properties index f9d7414a..ec4966ad 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/color.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/color.properties @@ -1,82 +1,82 @@ -sheep.white=ffffff -sheep.orange=f2b233 -sheep.magenta=e57fd8 -sheep.light_blue=99b2f2 -sheep.yellow=e5e533 -sheep.lime=7fcc19 -sheep.pink=f2b2cc -sheep.gray=4c4c4c -sheep.light_gray=999999 -sheep.cyan=4c99b2 -sheep.purple=b266e5 -sheep.blue=3366cc -sheep.brown=7f664c -sheep.green=667f33 -sheep.red=cc4c4c -sheep.black=191919 -collar.white=ffffff -collar.orange=f2b233 -collar.magenta=e57fd8 -collar.light_blue=99b2f2 -collar.yellow=e5e533 -collar.lime=7fcc19 -collar.pink=f2b2cc -collar.gray=4c4c4c -collar.light_gray=999999 -collar.cyan=4c99b2 -collar.purple=b266e5 -collar.blue=3366cc -collar.brown=7f664c -collar.green=667f33 -collar.red=cc4c4c -collar.black=191919 -dye.white=f9fffe -dye.orange=f9801d -dye.magenta=c74ebd -dye.light_blue=3ab3da -dye.yellow=fed83d -dye.lime=80c71f -dye.pink=f38baa -dye.gray=474f52 -dye.light_gray=9d9d97 -dye.cyan=169c9c -dye.purple=8932b8 -dye.blue=3c44aa -dye.brown=835432 -dye.green=5e7c16 -dye.red=b02e26 -dye.black=1d1d21 -text.boss=ff00ff -text.sign=000000 -text.code.0=000000 -text.code.1=0000aa -text.code.2=00aa00 -text.code.3=00aaaa -text.code.4=aa0000 -text.code.5=aa00aa -text.code.6=ffaa00 -text.code.7=aaaaaa -text.code.8=555555 -text.code.9=5555ff -text.code.10=55ff55 -text.code.11=55ffff -text.code.12=ff5555 -text.code.13=ff55ff -text.code.14=ffff55 -text.code.15=ffffff -text.code.16=000000 -text.code.17=00002a -text.code.18=002a00 -text.code.19=002a2a -text.code.20=2a0000 -text.code.21=2a002a -text.code.22=2a2a00 -text.code.23=2a2a2a -text.code.24=151515 -text.code.25=15153f -text.code.26=153f15 -text.code.27=153f3f -text.code.28=3f1515 -text.code.29=3f153f -text.code.30=3f3f15 -text.code.31=3f3f3f \ No newline at end of file +sheep.white=ffffff +sheep.orange=f2b233 +sheep.magenta=e57fd8 +sheep.light_blue=99b2f2 +sheep.yellow=e5e533 +sheep.lime=7fcc19 +sheep.pink=f2b2cc +sheep.gray=4c4c4c +sheep.light_gray=999999 +sheep.cyan=4c99b2 +sheep.purple=b266e5 +sheep.blue=3366cc +sheep.brown=7f664c +sheep.green=667f33 +sheep.red=cc4c4c +sheep.black=191919 +collar.white=ffffff +collar.orange=f2b233 +collar.magenta=e57fd8 +collar.light_blue=99b2f2 +collar.yellow=e5e533 +collar.lime=7fcc19 +collar.pink=f2b2cc +collar.gray=4c4c4c +collar.light_gray=999999 +collar.cyan=4c99b2 +collar.purple=b266e5 +collar.blue=3366cc +collar.brown=7f664c +collar.green=667f33 +collar.red=cc4c4c +collar.black=191919 +dye.white=f9fffe +dye.orange=f9801d +dye.magenta=c74ebd +dye.light_blue=3ab3da +dye.yellow=fed83d +dye.lime=80c71f +dye.pink=f38baa +dye.gray=474f52 +dye.light_gray=9d9d97 +dye.cyan=169c9c +dye.purple=8932b8 +dye.blue=3c44aa +dye.brown=835432 +dye.green=5e7c16 +dye.red=b02e26 +dye.black=1d1d21 +text.boss=ff00ff +text.sign=000000 +text.code.0=000000 +text.code.1=0000aa +text.code.2=00aa00 +text.code.3=00aaaa +text.code.4=aa0000 +text.code.5=aa00aa +text.code.6=ffaa00 +text.code.7=aaaaaa +text.code.8=555555 +text.code.9=5555ff +text.code.10=55ff55 +text.code.11=55ffff +text.code.12=ff5555 +text.code.13=ff55ff +text.code.14=ffff55 +text.code.15=ffffff +text.code.16=000000 +text.code.17=00002a +text.code.18=002a00 +text.code.19=002a2a +text.code.20=2a0000 +text.code.21=2a002a +text.code.22=2a2a00 +text.code.23=2a2a2a +text.code.24=151515 +text.code.25=15153f +text.code.26=153f15 +text.code.27=153f3f +text.code.28=3f1515 +text.code.29=3f153f +text.code.30=3f3f15 +text.code.31=3f3f3f diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/glass_white.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/glass_white.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/glass_white.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/glass_white.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass.properties index 820469ef..43e811c9 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=white_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=white_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass_pane.properties index 46a136ad..b675931c 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/00_glass_white/white_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=white_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=white_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_orange.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_orange.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_orange.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_orange.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_pane.properties index 0f6c53c5..050ab93d 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=orange_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=orange_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/orange_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/orange_stained_glass.properties index df5ea68c..48ccde11 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/orange_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/01_glass_orange/orange_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=orange_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=orange_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/glass_magenta.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/glass_magenta.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/glass_magenta.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/glass_magenta.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magenta_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magenta_stained_glass.properties index aad022e2..f20c6445 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magenta_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magenta_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=magenta_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=magenta_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magentia_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magentia_stained_glass_pane.properties index fd7dd5be..3eef33f4 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magentia_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/02_glass_magenta/magentia_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=magenta_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=magenta_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/glass_light_blue.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/glass_light_blue.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/glass_light_blue.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/glass_light_blue.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass.properties index 0825a605..75e88b1f 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=light_blue_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=light_blue_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass_pane.properties index 1b5d372f..e6d1fc7b 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/03_glass_light_blue/light_blue_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=light_blue_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=light_blue_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/glass_yellow.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/glass_yellow.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/glass_yellow.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/glass_yellow.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass.properties index b8545e34..4aeb2d92 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=yellow_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=yellow_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass_pane.properties index 358514ee..494ddfe1 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/04_glass_yellow/yellow_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=yellow_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=yellow_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_lime.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_lime.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_lime.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_lime.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_pane.properties index 9bd938fb..1a1f3fea 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=lime_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=lime_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/lime_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/lime_stained_glass.properties index 9136cd70..006fc6d6 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/lime_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/05_glass_lime/lime_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=lime_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=lime_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/glass_pink.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/glass_pink.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/glass_pink.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/glass_pink.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass.properties index d9acfd33..eea95c4c 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=pink_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=pink_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass_pane.properties index b5b5d354..323787df 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/06_glass_pink/pink_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=pink_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=pink_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_gray.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_gray.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_gray.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_gray.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_pane.properties index b9ea5615..89e5279a 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=gray_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=gray_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/gray_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/gray_stained_glass.properties index 625e48e0..577ccc3f 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/gray_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/07_glass_gray/gray_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=gray_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=gray_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/glass_silver.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/glass_silver.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/glass_silver.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/glass_silver.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass.properties index 4af9b35f..c201f6e2 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=light_gray_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=light_gray_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass_pane.properties index 605b1748..d308c4eb 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/08_glass_light_gray/light_gray_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=light_gray_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=light_gray_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass.properties index bf475404..0c3c7a1d 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=cyan_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=cyan_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass_pane.properties index e1d42d54..2cde6076 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/cyan_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=cyan_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=cyan_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/glass_cyan.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/glass_cyan.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/glass_cyan.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/09_glass_cyan/glass_cyan.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/glass_purple.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/glass_purple.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/glass_purple.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/glass_purple.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass.properties index 110a11b1..ec301529 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=purple_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=purple_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass_pane.properties index 4999e33f..c2d0e5a7 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/10_glass_purple/purple_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=purple_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=purple_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass.properties index 87b53356..64b225fc 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=blue_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=blue_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass_pane.properties index e4139d81..9f5b1afe 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/blue_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=blue_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=blue_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/glass_blue.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/glass_blue.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/glass_blue.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/11_glass_blue/glass_blue.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass.properties index b25937c8..f7db4322 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=brown_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=brown_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass_pane.properties index a20b24fa..d7207535 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/brown_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=brown_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=brown_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/glass_brown.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/glass_brown.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/glass_brown.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/12_glass_brown/glass_brown.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/glass_green.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/glass_green.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/glass_green.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/glass_green.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass.properties index 052a9259..a836270b 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=green_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=green_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass_pane.properties index 9e79252e..78589c9b 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/13_glass_green/green_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=green_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=green_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_pane.properties index 9bc465be..b2e3f4b5 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=red_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=red_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_red.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_red.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_red.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/glass_red.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/red_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/red_stained_glass.properties index eb39fc8a..be158e51 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/red_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/14_glass_red/red_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=red_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=red_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass.properties index 67a8aec7..6a9e5dbe 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass.properties @@ -1,3 +1,3 @@ -matchBlocks=black_stained_glass -method=ctm -tiles=0-46 \ No newline at end of file +matchBlocks=black_stained_glass +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass_pane.properties index 5edd1183..d253466c 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/black_stained_glass_pane.properties @@ -1,4 +1,4 @@ -matchBlocks=black_stained_glass_pane -method=ctm -tiles=0-46 -faces=sides \ No newline at end of file +matchBlocks=black_stained_glass_pane +method=ctm +tiles=0-46 +faces=sides diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/glass_black.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/glass_black.properties index 43843d6e..369f1656 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/glass_black.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/15_glass_black/glass_black.properties @@ -1,2 +1,2 @@ -method=ctm -tiles=0-46 \ No newline at end of file +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass.properties index 0034d199..af090f96 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass.properties @@ -1,5 +1,5 @@ -# Glass -matchBlocks=glass -connect=block -method=ctm -tiles=0-46 \ No newline at end of file +# Glass +matchBlocks=glass +connect=block +method=ctm +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass_pane.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass_pane.properties index dc3a3323..3484d050 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass_pane.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/20_glass/glass_pane.properties @@ -1,6 +1,6 @@ -# Glass pane -matchBlocks=glass_pane -connect=block -method=ctm -faces=sides -tiles=0-46 \ No newline at end of file +# Glass pane +matchBlocks=glass_pane +connect=block +method=ctm +faces=sides +tiles=0-46 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/0.png b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/0.png index ebd028ce..c6ce7150 100644 Binary files a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/0.png and b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/0.png differ diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/1.png b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/1.png index 9a972771..1a556c06 100644 Binary files a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/1.png and b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/1.png differ diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/2.png b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/2.png index e957f76d..01676dbb 100644 Binary files a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/2.png and b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/2.png differ diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/bookshelf.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/bookshelf.properties index f2b079d3..2e37ebf0 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/bookshelf.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/30_bookshelf/bookshelf.properties @@ -1,4 +1,4 @@ -matchBlocks=minecraft:bookshelf -faces=sides -method=horizontal -tiles=0-3 \ No newline at end of file +matchBlocks=minecraft:bookshelf +faces=sides +method=horizontal +tiles=0-3 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/40_sandstone/sandstone.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/40_sandstone/sandstone.properties index 6ce9b00b..9eb444a3 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/40_sandstone/sandstone.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/40_sandstone/sandstone.properties @@ -1,3 +1,3 @@ -method=vertical -matchTiles=sandstone_normal -tiles=0-3 \ No newline at end of file +method=vertical +matchTiles=sandstone_normal +tiles=0-3 diff --git a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/41_red_sandstone/red_sandstone.properties b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/41_red_sandstone/red_sandstone.properties index 30b140c4..dca1b472 100644 --- a/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/41_red_sandstone/red_sandstone.properties +++ b/desktopRuntime/resources/assets/minecraft/mcpatcher/ctm/default/41_red_sandstone/red_sandstone.properties @@ -1,3 +1,3 @@ -method=vertical -matchTiles=red_sandstone_normal -tiles=0-3 \ No newline at end of file +method=vertical +matchTiles=red_sandstone_normal +tiles=0-3 diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json index ec6bdd6e..738b73e6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_acacia" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom.json index 2717e3fe..6ea6b93e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_acacia_lower", - "top": "blocks/door_acacia_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_acacia_lower", + "top": "blocks/door_acacia_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom_rh.json index 53862dec..1a48a24f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_acacia_lower", - "top": "blocks/door_acacia_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_acacia_lower", + "top": "blocks/door_acacia_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top.json index cb8d9896..3e9d590e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_acacia_lower", - "top": "blocks/door_acacia_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_acacia_lower", + "top": "blocks/door_acacia_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top_rh.json index 7c66df36..c31dfd34 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_acacia_lower", - "top": "blocks/door_acacia_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_acacia_lower", + "top": "blocks/door_acacia_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_closed.json index eb82f8ad..83d778f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_open.json index 48b5e8a8..a175d379 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_inventory.json index 4bd3f84c..ae4ffbb5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_n.json index 0127f8cb..f71c41ef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ne.json index eeb11681..b2e327d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ns.json index cc9ddd4e..2e3ff651 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nse.json index 43badb64..bf5525f3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nsew.json index 86bf686d..2026a28d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_post.json index 3dc5e637..1cc8b5d4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_inner_stairs.json index 2d0a351e..922d1ff3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_acacia", - "top": "blocks/planks_acacia", - "side": "blocks/planks_acacia" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_acacia", + "top": "blocks/planks_acacia", + "side": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_leaves.json index e4f02a57..3f2aa4b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_acacia" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_log.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log.json index 52d97838..c666b4a1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_acacia_top", - "side": "blocks/log_acacia" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_acacia_top", + "side": "blocks/log_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log_side.json index 7c41d8e5..a2e8021a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_acacia_top", - "side": "blocks/log_acacia" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_acacia_top", + "side": "blocks/log_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_outer_stairs.json index 037eba3c..18598f93 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_acacia", - "top": "blocks/planks_acacia", - "side": "blocks/planks_acacia" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_acacia", + "top": "blocks/planks_acacia", + "side": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_planks.json index 8ab214dd..71628449 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_acacia" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_sapling.json index 753a7b98..da8f89c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_acacia" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_stairs.json index fb80c959..b8177e4a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_acacia", - "top": "blocks/planks_acacia", - "side": "blocks/planks_acacia" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_acacia", + "top": "blocks/planks_acacia", + "side": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_closed.json index 6165109a..614d0f9a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_open.json index df736bb1..c858ece5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_acacia" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_flat.json index 6cf2596d..eedf13f3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_activator_powered" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_activator_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_ne.json index 1033b74a..db5ad64a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_activator_powered" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_activator_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_sw.json index a3519347..a87a8294 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_activator_powered" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_activator_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_flat.json index db8f9968..dd3b5154 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_activator" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_activator" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_ne.json index 10a3f573..7850455e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_activator" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_activator" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_sw.json index c69a9b15..7e6edd77 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_activator" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_activator" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/allium.json b/desktopRuntime/resources/assets/minecraft/models/block/allium.json index 96c99410..1cee2687 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/allium.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/allium.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cross", - "textures": { - "particle": "blocks/flower_allium", - "cross": "blocks/flower_allium" - } -} +{ + "parent": "block/cross", + "textures": { + "particle": "blocks/flower_allium", + "cross": "blocks/flower_allium" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/andesite.json b/desktopRuntime/resources/assets/minecraft/models/block/andesite.json index 44ab92eb..1e403283 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/andesite.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/andesite.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_andesite" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_andesite" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/andesite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/block/andesite_smooth.json index 1ca47c7d..90a3025f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/andesite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/andesite_smooth.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_andesite_smooth" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_andesite_smooth" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/anvil.json b/desktopRuntime/resources/assets/minecraft/models/block/anvil.json index e814f924..d70e249c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/anvil.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil.json @@ -1,52 +1,61 @@ -{ - "elements": [ - { "__comment": "Anvil base", - "from": [ 2, 0, 2 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#body", "rotation": 180, "cullface": "down" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#body", "rotation": 180 }, - "north": { "uv": [ 2, 12, 14, 16 ], "texture": "#body" }, - "south": { "uv": [ 2, 12, 14, 16 ], "texture": "#body" }, - "west": { "uv": [ 0, 2, 4, 14 ], "texture": "#body", "rotation": 90 }, - "east": { "uv": [ 4, 2, 0, 14 ], "texture": "#body", "rotation": 270 } - } - }, - { "__comment": "Lower narrow portion", - "from": [ 4, 4, 3 ], - "to": [ 12, 5, 13 ], - "faces": { - "down": { "uv": [ 4, 3, 12, 13 ], "texture": "#body", "rotation": 180 }, - "up": { "uv": [ 4, 3, 12, 13 ], "texture": "#body", "rotation": 180 }, - "north": { "uv": [ 4, 11, 12, 12 ], "texture": "#body" }, - "south": { "uv": [ 4, 11, 12, 12 ], "texture": "#body" }, - "west": { "uv": [ 4, 3, 5, 13 ], "texture": "#body", "rotation": 90 }, - "east": { "uv": [ 5, 3, 4, 13 ], "texture": "#body", "rotation": 270 } - } - }, - { "__comment": "Wider section beneath top portion", - "from": [ 6, 5, 4 ], - "to": [ 10, 10, 12 ], - "faces": { - "down": { "uv": [ 10, 12, 6, 4 ], "texture": "#body", "rotation": 180 }, - "up": { "uv": [ 10, 12, 6, 4 ], "texture": "#body", "rotation": 180 }, - "north": { "uv": [ 6, 6, 10, 11 ], "texture": "#body" }, - "south": { "uv": [ 6, 6, 10, 11 ], "texture": "#body" }, - "west": { "uv": [ 5, 4, 10, 12 ], "texture": "#body", "rotation": 90 }, - "east": { "uv": [ 10, 4, 5, 12 ], "texture": "#body", "rotation": 270 } - } - }, - { "__comment": "Anvil top", - "from": [ 3, 10, 0 ], - "to": [ 13, 16, 16 ], - "faces": { - "down": { "uv": [ 3, 0, 13, 16 ], "texture": "#body", "rotation": 180 }, - "up": { "uv": [ 3, 0, 13, 16 ], "texture": "#top", "rotation": 180 }, - "north": { "uv": [ 3, 0, 13, 6 ], "texture": "#body" }, - "south": { "uv": [ 3, 0, 13, 6 ], "texture": "#body" }, - "west": { "uv": [ 10, 0, 16, 16 ], "texture": "#body", "rotation": 90 }, - "east": { "uv": [ 16, 0, 10, 16 ], "texture": "#body", "rotation": 270 } - } - } - ] -} +{ + "elements": [ + { + "__comment": "Anvil base", + "from": [2, 0, 2], + "to": [14, 4, 14], + "faces": { + "down": { + "uv": [2, 2, 14, 14], + "texture": "#body", + "rotation": 180, + "cullface": "down" + }, + "up": { "uv": [2, 2, 14, 14], "texture": "#body", "rotation": 180 }, + "north": { "uv": [2, 12, 14, 16], "texture": "#body" }, + "south": { "uv": [2, 12, 14, 16], "texture": "#body" }, + "west": { "uv": [0, 2, 4, 14], "texture": "#body", "rotation": 90 }, + "east": { "uv": [4, 2, 0, 14], "texture": "#body", "rotation": 270 } + } + }, + { + "__comment": "Lower narrow portion", + "from": [4, 4, 3], + "to": [12, 5, 13], + "faces": { + "down": { "uv": [4, 3, 12, 13], "texture": "#body", "rotation": 180 }, + "up": { "uv": [4, 3, 12, 13], "texture": "#body", "rotation": 180 }, + "north": { "uv": [4, 11, 12, 12], "texture": "#body" }, + "south": { "uv": [4, 11, 12, 12], "texture": "#body" }, + "west": { "uv": [4, 3, 5, 13], "texture": "#body", "rotation": 90 }, + "east": { "uv": [5, 3, 4, 13], "texture": "#body", "rotation": 270 } + } + }, + { + "__comment": "Wider section beneath top portion", + "from": [6, 5, 4], + "to": [10, 10, 12], + "faces": { + "down": { "uv": [10, 12, 6, 4], "texture": "#body", "rotation": 180 }, + "up": { "uv": [10, 12, 6, 4], "texture": "#body", "rotation": 180 }, + "north": { "uv": [6, 6, 10, 11], "texture": "#body" }, + "south": { "uv": [6, 6, 10, 11], "texture": "#body" }, + "west": { "uv": [5, 4, 10, 12], "texture": "#body", "rotation": 90 }, + "east": { "uv": [10, 4, 5, 12], "texture": "#body", "rotation": 270 } + } + }, + { + "__comment": "Anvil top", + "from": [3, 10, 0], + "to": [13, 16, 16], + "faces": { + "down": { "uv": [3, 0, 13, 16], "texture": "#body", "rotation": 180 }, + "up": { "uv": [3, 0, 13, 16], "texture": "#top", "rotation": 180 }, + "north": { "uv": [3, 0, 13, 6], "texture": "#body" }, + "south": { "uv": [3, 0, 13, 6], "texture": "#body" }, + "west": { "uv": [10, 0, 16, 16], "texture": "#body", "rotation": 90 }, + "east": { "uv": [16, 0, 10, 16], "texture": "#body", "rotation": 270 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/anvil_slightly_damaged.json b/desktopRuntime/resources/assets/minecraft/models/block/anvil_slightly_damaged.json index a35a375b..2a8c4dfe 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/anvil_slightly_damaged.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_slightly_damaged.json @@ -1,8 +1,8 @@ -{ - "parent": "block/anvil", - "textures": { - "particle": "blocks/anvil_base", - "body": "blocks/anvil_base", - "top": "blocks/anvil_top_damaged_1" - } -} +{ + "parent": "block/anvil", + "textures": { + "particle": "blocks/anvil_base", + "body": "blocks/anvil_base", + "top": "blocks/anvil_top_damaged_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/anvil_undamaged.json b/desktopRuntime/resources/assets/minecraft/models/block/anvil_undamaged.json index ff270916..68b4589e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/anvil_undamaged.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_undamaged.json @@ -1,8 +1,8 @@ -{ - "parent": "block/anvil", - "textures": { - "particle": "blocks/anvil_base", - "body": "blocks/anvil_base", - "top": "blocks/anvil_top_damaged_0" - } -} +{ + "parent": "block/anvil", + "textures": { + "particle": "blocks/anvil_base", + "body": "blocks/anvil_base", + "top": "blocks/anvil_top_damaged_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/anvil_very_damaged.json b/desktopRuntime/resources/assets/minecraft/models/block/anvil_very_damaged.json index 5c9d1baf..355e720c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/anvil_very_damaged.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_very_damaged.json @@ -1,8 +1,8 @@ -{ - "parent": "block/anvil", - "textures": { - "particle": "blocks/anvil_base", - "body": "blocks/anvil_base", - "top": "blocks/anvil_top_damaged_2" - } -} +{ + "parent": "block/anvil", + "textures": { + "particle": "blocks/anvil_base", + "body": "blocks/anvil_base", + "top": "blocks/anvil_top_damaged_2" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bars_n.json b/desktopRuntime/resources/assets/minecraft/models/block/bars_n.json index 7053815b..7abd0221 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bars_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_n.json @@ -1,31 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/iron_bars", - "bars": "blocks/iron_bars", - "edge": "blocks/iron_bars" - }, - "elements": [ - { "from": [ 8, 0, 0 ], - "to": [ 8, 16, 8 ], - "faces": { - "west": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" }, - "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 9 ], - "faces": { - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" } - } - }, - { "from": [ 7, 0.005, 0 ], - "to": [ 9, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 0, 7, 9 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/iron_bars", + "bars": "blocks/iron_bars", + "edge": "blocks/iron_bars" + }, + "elements": [ + { + "from": [8, 0, 0], + "to": [8, 16, 8], + "faces": { + "west": { "uv": [8, 0, 16, 16], "texture": "#bars" }, + "east": { "uv": [8, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 9], + "faces": { + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" } + } + }, + { + "from": [7, 0.005, 0], + "to": [9, 15.995, 9], + "faces": { + "down": { "uv": [9, 0, 7, 9], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#edge" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bars_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/bars_ne.json index 1648bcfd..c09caaaf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bars_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_ne.json @@ -1,50 +1,60 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/iron_bars", - "bars": "blocks/iron_bars", - "edge": "blocks/iron_bars" - }, - "elements": [ - { "from": [ 8, 0, 0 ], - "to": [ 8, 16, 8 ], - "faces": { - "west": { "uv": [ 0, 0, 8, 16 ], "texture": "#bars" }, - "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 0 ], - "faces": { - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" } - } - }, - { "from": [ 7, 0.005, 0 ], - "to": [ 9, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 0, 7, 9 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#bars" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "faces": { - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - }, - { "from": [ 9, 0.005, 7 ], - "to": [ 16, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 0, 7, 7 ], "texture": "#edge", "rotation": 90 }, - "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/iron_bars", + "bars": "blocks/iron_bars", + "edge": "blocks/iron_bars" + }, + "elements": [ + { + "from": [8, 0, 0], + "to": [8, 16, 8], + "faces": { + "west": { "uv": [0, 0, 8, 16], "texture": "#bars" }, + "east": { "uv": [8, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 0], + "faces": { + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + } + } + }, + { + "from": [7, 0.005, 0], + "to": [9, 15.995, 9], + "faces": { + "down": { "uv": [9, 0, 7, 9], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#edge" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#bars" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "faces": { + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + }, + { + "from": [9, 0.005, 7], + "to": [16, 15.995, 9], + "faces": { + "down": { "uv": [9, 0, 7, 7], "texture": "#edge", "rotation": 90 }, + "up": { "uv": [7, 0, 9, 7], "texture": "#edge", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bars_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/bars_ns.json index 5f5bfa7f..4f4b51ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bars_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_ns.json @@ -1,31 +1,42 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/iron_bars", - "bars": "blocks/iron_bars", - "edge": "blocks/iron_bars" - }, - "elements": [ - { "from": [ 8, 0, 0 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "faces": { - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" } - } - }, - { "from": [ 7, 0.005, 0 ], - "to": [ 9, 15.995, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 9, 0, 7, 16 ], "texture": "#edge" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/iron_bars", + "bars": "blocks/iron_bars", + "edge": "blocks/iron_bars" + }, + "elements": [ + { + "from": [8, 0, 0], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#bars" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "faces": { + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + } + } + }, + { + "from": [7, 0.005, 0], + "to": [9, 15.995, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [9, 0, 7, 16], "texture": "#edge" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bars_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/bars_nse.json index c598678d..f89a254d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bars_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_nse.json @@ -1,51 +1,65 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/iron_bars", - "bars": "blocks/iron_bars", - "edge": "blocks/iron_bars" - }, - "elements": [ - { "from": [ 8, 0, 0 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "faces": { - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" } - } - }, - { "from": [ 7, 0.005, 0 ], - "to": [ 9, 15.995, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 9, 0, 7, 16 ], "texture": "#edge" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#bars" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "faces": { - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - }, - { "from": [ 9, 0.005, 7 ], - "to": [ 16, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 0, 7, 7 ], "texture": "#edge", "rotation": 90 }, - "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/iron_bars", + "bars": "blocks/iron_bars", + "edge": "blocks/iron_bars" + }, + "elements": [ + { + "from": [8, 0, 0], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#bars" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "faces": { + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + } + } + }, + { + "from": [7, 0.005, 0], + "to": [9, 15.995, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [9, 0, 7, 16], "texture": "#edge" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#bars" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "faces": { + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + }, + { + "from": [9, 0.005, 7], + "to": [16, 15.995, 9], + "faces": { + "down": { "uv": [9, 0, 7, 7], "texture": "#edge", "rotation": 90 }, + "up": { "uv": [7, 0, 9, 7], "texture": "#edge", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bars_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/bars_nsew.json index caf5e95a..61db9753 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bars_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_nsew.json @@ -1,59 +1,74 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/iron_bars", - "bars": "blocks/iron_bars", - "edge": "blocks/iron_bars" - }, - "elements": [ - { "from": [ 8, 0, 0 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "faces": { - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" } - } - }, - { "from": [ 7, 0.005, 0 ], - "to": [ 9, 15.995, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 9, 0, 7, 16 ], "texture": "#edge" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bars" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "faces": { - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - }, - { "from": [ 0, 0.005, 7 ], - "to": [ 7, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 9, 7, 16 ], "texture": "#edge", "rotation": 90 }, - "up": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge", "rotation": 90 } - } - }, - { "from": [ 9, 0.005, 7 ], - "to": [ 16, 15.995, 9 ], - "faces": { - "down": { "uv": [ 9, 0, 7, 7 ], "texture": "#edge", "rotation": 90 }, - "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/iron_bars", + "bars": "blocks/iron_bars", + "edge": "blocks/iron_bars" + }, + "elements": [ + { + "from": [8, 0, 0], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#bars" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "faces": { + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + } + } + }, + { + "from": [7, 0.005, 0], + "to": [9, 15.995, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [9, 0, 7, 16], "texture": "#edge" } + } + }, + { + "from": [0, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#bars" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#bars" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "faces": { + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + }, + { + "from": [0, 0.005, 7], + "to": [7, 15.995, 9], + "faces": { + "down": { "uv": [9, 9, 7, 16], "texture": "#edge", "rotation": 90 }, + "up": { "uv": [7, 9, 9, 16], "texture": "#edge", "rotation": 90 } + } + }, + { + "from": [9, 0.005, 7], + "to": [16, 15.995, 9], + "faces": { + "down": { "uv": [9, 0, 7, 7], "texture": "#edge", "rotation": 90 }, + "up": { "uv": [7, 0, 9, 7], "texture": "#edge", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/beacon.json b/desktopRuntime/resources/assets/minecraft/models/block/beacon.json index 4b0fad1b..194239c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/beacon.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/beacon.json @@ -1,47 +1,50 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/glass", - "glass": "blocks/glass", - "obsidian": "blocks/obsidian", - "beacon": "blocks/beacon" - }, - "elements": [ - { "__comment": "Glass shell", - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#glass" } - } - }, - { "__comment": "Obsidian base", - "from": [ 2, 0.1, 2 ], - "to": [ 14, 3, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#obsidian" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#obsidian" }, - "north": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, - "south": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, - "west": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" }, - "east": { "uv": [ 2, 13, 14, 16 ], "texture": "#obsidian" } - } - }, - { "__comment": "Inner beacon texture", - "from": [ 3, 3, 3 ], - "to": [ 13, 14, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#beacon" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#beacon" }, - "north": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, - "south": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, - "west": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" }, - "east": { "uv": [ 3, 2, 13, 13 ], "texture": "#beacon" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/glass", + "glass": "blocks/glass", + "obsidian": "blocks/obsidian", + "beacon": "blocks/beacon" + }, + "elements": [ + { + "__comment": "Glass shell", + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#glass" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#glass" }, + "north": { "uv": [0, 0, 16, 16], "texture": "#glass" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glass" }, + "west": { "uv": [0, 0, 16, 16], "texture": "#glass" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#glass" } + } + }, + { + "__comment": "Obsidian base", + "from": [2, 0.1, 2], + "to": [14, 3, 14], + "faces": { + "down": { "uv": [2, 2, 14, 14], "texture": "#obsidian" }, + "up": { "uv": [2, 2, 14, 14], "texture": "#obsidian" }, + "north": { "uv": [2, 13, 14, 16], "texture": "#obsidian" }, + "south": { "uv": [2, 13, 14, 16], "texture": "#obsidian" }, + "west": { "uv": [2, 13, 14, 16], "texture": "#obsidian" }, + "east": { "uv": [2, 13, 14, 16], "texture": "#obsidian" } + } + }, + { + "__comment": "Inner beacon texture", + "from": [3, 3, 3], + "to": [13, 14, 13], + "faces": { + "down": { "uv": [3, 3, 13, 13], "texture": "#beacon" }, + "up": { "uv": [3, 3, 13, 13], "texture": "#beacon" }, + "north": { "uv": [3, 2, 13, 13], "texture": "#beacon" }, + "south": { "uv": [3, 2, 13, 13], "texture": "#beacon" }, + "west": { "uv": [3, 2, 13, 13], "texture": "#beacon" }, + "east": { "uv": [3, 2, 13, 13], "texture": "#beacon" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bed_foot.json b/desktopRuntime/resources/assets/minecraft/models/block/bed_foot.json index 101a22e1..7b0f78f9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bed_foot.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bed_foot.json @@ -1,39 +1,42 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "bottom": "blocks/planks_oak", - "feet": "blocks/bed_feet" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 16, 9, 16 ], - "faces": { - "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#feet" }, - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "north": { "uv": [ 8, 8, 16, 11 ], "texture": "#feet" }, - "west": { "uv": [ 8, 4, 16, 7 ], "texture": "#feet" }, - "east": { "uv": [ 0, 8, 8, 11 ], "texture": "#feet" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 3, 3, 3 ], - "faces": { - "down": { "uv": [ 8, 0, 9.5, 1.5 ], "texture": "#feet" }, - "north": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#feet" }, - "west": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#feet" }, - "south": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#feet" }, - "east": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#feet" } - } - }, - { "from": [ 13, 0, 0 ], - "to": [ 16, 3, 3 ], - "faces": { - "down": { "uv": [ 10, 0, 11.5, 1.5 ], "texture": "#feet" }, - "north": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#feet" }, - "west": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#feet" }, - "south": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#feet" }, - "east": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#feet" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "bottom": "blocks/planks_oak", + "feet": "blocks/bed_feet" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [16, 9, 16], + "faces": { + "up": { "uv": [0, 0, 8, 8], "texture": "#feet" }, + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "north": { "uv": [8, 8, 16, 11], "texture": "#feet" }, + "west": { "uv": [8, 4, 16, 7], "texture": "#feet" }, + "east": { "uv": [0, 8, 8, 11], "texture": "#feet" } + } + }, + { + "from": [0, 0, 0], + "to": [3, 3, 3], + "faces": { + "down": { "uv": [8, 0, 9.5, 1.5], "texture": "#feet" }, + "north": { "uv": [8, 2, 9.5, 3.5], "texture": "#feet" }, + "west": { "uv": [10, 2, 11.5, 3.5], "texture": "#feet" }, + "south": { "uv": [12, 2, 13.5, 3.5], "texture": "#feet" }, + "east": { "uv": [14, 2, 15.5, 3.5], "texture": "#feet" } + } + }, + { + "from": [13, 0, 0], + "to": [16, 3, 3], + "faces": { + "down": { "uv": [10, 0, 11.5, 1.5], "texture": "#feet" }, + "north": { "uv": [10, 2, 11.5, 3.5], "texture": "#feet" }, + "west": { "uv": [12, 2, 13.5, 3.5], "texture": "#feet" }, + "south": { "uv": [14, 2, 15.5, 3.5], "texture": "#feet" }, + "east": { "uv": [8, 2, 9.5, 3.5], "texture": "#feet" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json b/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json index 61fb9a0c..0de5ac97 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json @@ -1,39 +1,42 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "bottom": "blocks/planks_oak", - "head": "blocks/bed_head" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 16, 9, 16 ], - "faces": { - "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#head" }, - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "south": { "uv": [ 8, 8, 16, 11 ], "texture": "#head" }, - "west": { "uv": [ 0, 8, 8, 11 ], "texture": "#head" }, - "east": { "uv": [ 8, 4, 16, 7 ], "texture": "#head" } - } - }, - { "from": [ 0, 0, 13 ], - "to": [ 3, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 15.5, 1.5 ], "texture": "#head" }, - "north": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#head" }, - "west": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#head" }, - "south": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#head" }, - "east": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#head" } - } - }, - { "from": [ 13, 0, 13 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 12, 0, 13.5, 1.5 ], "texture": "#head" }, - "north": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#head" }, - "west": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#head" }, - "south": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#head" }, - "east": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#head" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "bottom": "blocks/planks_oak", + "head": "blocks/bed_head" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [16, 9, 16], + "faces": { + "up": { "uv": [0, 0, 8, 8], "texture": "#head" }, + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "south": { "uv": [8, 8, 16, 11], "texture": "#head" }, + "west": { "uv": [0, 8, 8, 11], "texture": "#head" }, + "east": { "uv": [8, 4, 16, 7], "texture": "#head" } + } + }, + { + "from": [0, 0, 13], + "to": [3, 3, 16], + "faces": { + "down": { "uv": [14, 0, 15.5, 1.5], "texture": "#head" }, + "north": { "uv": [14, 2, 15.5, 3.5], "texture": "#head" }, + "west": { "uv": [8, 2, 9.5, 3.5], "texture": "#head" }, + "south": { "uv": [10, 2, 11.5, 3.5], "texture": "#head" }, + "east": { "uv": [12, 2, 13.5, 3.5], "texture": "#head" } + } + }, + { + "from": [13, 0, 13], + "to": [16, 3, 16], + "faces": { + "down": { "uv": [12, 0, 13.5, 1.5], "texture": "#head" }, + "north": { "uv": [12, 2, 13.5, 3.5], "texture": "#head" }, + "west": { "uv": [14, 2, 15.5, 3.5], "texture": "#head" }, + "south": { "uv": [8, 2, 9.5, 3.5], "texture": "#head" }, + "east": { "uv": [10, 2, 11.5, 3.5], "texture": "#head" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bed_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/bed_inventory.json index 79c4de40..b039c1bb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bed_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bed_inventory.json @@ -1,70 +1,76 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "bottom": "blocks/planks_oak", - "feet": "blocks/bed_feet", - "head": "blocks/bed_head" - }, - "elements": [ - { "from": [ 4, 1.5, 0 ], - "to": [ 12, 4.5, 8 ], - "faces": { - "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#feet" }, - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "north": { "uv": [ 8, 8, 16, 11 ], "texture": "#feet" }, - "west": { "uv": [ 8, 4, 16, 7 ], "texture": "#feet" }, - "east": { "uv": [ 0, 8, 8, 11 ], "texture": "#feet" } - } - }, - { "from": [ 4, 0, 0 ], - "to": [ 5.5, 1.5, 1.5 ], - "faces": { - "down": { "uv": [ 8, 0, 9.5, 1.5 ], "texture": "#feet" }, - "north": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#feet" }, - "west": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#feet" }, - "south": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#feet" }, - "east": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#feet" } - } - }, - { "from": [ 10.5, 0, 0 ], - "to": [ 12, 1.5, 1.5 ], - "faces": { - "down": { "uv": [ 10, 0, 11.5, 1.5 ], "texture": "#feet" }, - "north": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#feet" }, - "west": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#feet" }, - "south": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#feet" }, - "east": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#feet" } - } - }, - { "from": [ 4, 1.5, 8 ], - "to": [ 12, 4.5, 16 ], - "faces": { - "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#head" }, - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "south": { "uv": [ 8, 8, 16, 11 ], "texture": "#head" }, - "west": { "uv": [ 0, 8, 8, 11 ], "texture": "#head" }, - "east": { "uv": [ 8, 4, 16, 7 ], "texture": "#head" } - } - }, - { "from": [ 4, 0, 14.5 ], - "to": [ 5.5, 1.5, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 15.5, 1.5 ], "texture": "#head" }, - "north": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#head" }, - "west": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#head" }, - "south": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#head" }, - "east": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#head" } - } - }, - { "from": [ 10.5, 0, 14.5 ], - "to": [ 12, 1.5, 16 ], - "faces": { - "down": { "uv": [ 12, 0, 13.5, 1.5 ], "texture": "#head" }, - "north": { "uv": [ 12, 2, 13.5, 3.5 ], "texture": "#head" }, - "west": { "uv": [ 14, 2, 15.5, 3.5 ], "texture": "#head" }, - "south": { "uv": [ 8, 2, 9.5, 3.5 ], "texture": "#head" }, - "east": { "uv": [ 10, 2, 11.5, 3.5 ], "texture": "#head" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "bottom": "blocks/planks_oak", + "feet": "blocks/bed_feet", + "head": "blocks/bed_head" + }, + "elements": [ + { + "from": [4, 1.5, 0], + "to": [12, 4.5, 8], + "faces": { + "up": { "uv": [0, 0, 8, 8], "texture": "#feet" }, + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "north": { "uv": [8, 8, 16, 11], "texture": "#feet" }, + "west": { "uv": [8, 4, 16, 7], "texture": "#feet" }, + "east": { "uv": [0, 8, 8, 11], "texture": "#feet" } + } + }, + { + "from": [4, 0, 0], + "to": [5.5, 1.5, 1.5], + "faces": { + "down": { "uv": [8, 0, 9.5, 1.5], "texture": "#feet" }, + "north": { "uv": [8, 2, 9.5, 3.5], "texture": "#feet" }, + "west": { "uv": [10, 2, 11.5, 3.5], "texture": "#feet" }, + "south": { "uv": [12, 2, 13.5, 3.5], "texture": "#feet" }, + "east": { "uv": [14, 2, 15.5, 3.5], "texture": "#feet" } + } + }, + { + "from": [10.5, 0, 0], + "to": [12, 1.5, 1.5], + "faces": { + "down": { "uv": [10, 0, 11.5, 1.5], "texture": "#feet" }, + "north": { "uv": [10, 2, 11.5, 3.5], "texture": "#feet" }, + "west": { "uv": [12, 2, 13.5, 3.5], "texture": "#feet" }, + "south": { "uv": [14, 2, 15.5, 3.5], "texture": "#feet" }, + "east": { "uv": [8, 2, 9.5, 3.5], "texture": "#feet" } + } + }, + { + "from": [4, 1.5, 8], + "to": [12, 4.5, 16], + "faces": { + "up": { "uv": [0, 0, 8, 8], "texture": "#head" }, + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "south": { "uv": [8, 8, 16, 11], "texture": "#head" }, + "west": { "uv": [0, 8, 8, 11], "texture": "#head" }, + "east": { "uv": [8, 4, 16, 7], "texture": "#head" } + } + }, + { + "from": [4, 0, 14.5], + "to": [5.5, 1.5, 16], + "faces": { + "down": { "uv": [14, 0, 15.5, 1.5], "texture": "#head" }, + "north": { "uv": [14, 2, 15.5, 3.5], "texture": "#head" }, + "west": { "uv": [8, 2, 9.5, 3.5], "texture": "#head" }, + "south": { "uv": [10, 2, 11.5, 3.5], "texture": "#head" }, + "east": { "uv": [12, 2, 13.5, 3.5], "texture": "#head" } + } + }, + { + "from": [10.5, 0, 14.5], + "to": [12, 1.5, 16], + "faces": { + "down": { "uv": [12, 0, 13.5, 1.5], "texture": "#head" }, + "north": { "uv": [12, 2, 13.5, 3.5], "texture": "#head" }, + "west": { "uv": [14, 2, 15.5, 3.5], "texture": "#head" }, + "south": { "uv": [8, 2, 9.5, 3.5], "texture": "#head" }, + "east": { "uv": [10, 2, 11.5, 3.5], "texture": "#head" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json b/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json index a91bd64f..453d8e56 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/bedrock" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/bedrock" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bedrock_mirrored.json b/desktopRuntime/resources/assets/minecraft/models/block/bedrock_mirrored.json index 496f6f10..f86a8940 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bedrock_mirrored.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bedrock_mirrored.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_mirrored_all", - "textures": { - "all": "blocks/bedrock" - } -} +{ + "parent": "block/cube_mirrored_all", + "textures": { + "all": "blocks/bedrock" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_bark.json index 448c39a5..21f67d6e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_birch" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom.json index a33af78c..8ff584f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_birch_lower", - "top": "blocks/door_birch_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_birch_lower", + "top": "blocks/door_birch_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom_rh.json index daff3fe7..b5c5f52e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_birch_lower", - "top": "blocks/door_birch_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_birch_lower", + "top": "blocks/door_birch_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top.json index 30e855b7..207438df 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_birch_lower", - "top": "blocks/door_birch_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_birch_lower", + "top": "blocks/door_birch_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top_rh.json index 8cc9e6eb..fc6a6630 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_birch_lower", - "top": "blocks/door_birch_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_birch_lower", + "top": "blocks/door_birch_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_closed.json index 4b1b802b..c67fbc62 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_open.json index 8c40d2d9..e05c0093 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_inventory.json index 7db961c8..4cd49a62 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_n.json index f0e573a4..7319b3b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ne.json index bf17f81b..b270a83e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ns.json index 69ea1613..a891b117 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nse.json index 1412e9b8..1cc85553 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nsew.json index bc6aed0f..a2490dda 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_post.json index 92ab98b0..24e30638 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_inner_stairs.json index 4bd1aa36..a943a355 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_birch", - "top": "blocks/planks_birch", - "side": "blocks/planks_birch" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_birch", + "top": "blocks/planks_birch", + "side": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_leaves.json index 92007fb7..15e25949 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_birch" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_log.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_log.json index cab93b62..d6abddf5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_birch_top", - "side": "blocks/log_birch" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_birch_top", + "side": "blocks/log_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_log_side.json index d9c111aa..64776299 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_birch_top", - "side": "blocks/log_birch" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_birch_top", + "side": "blocks/log_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_outer_stairs.json index 695e444e..7eda311a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_birch", - "top": "blocks/planks_birch", - "side": "blocks/planks_birch" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_birch", + "top": "blocks/planks_birch", + "side": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_planks.json index c250c27b..6b1c2954 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_birch" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_sapling.json index 0e8ed9e1..a5b6c65b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_birch" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_stairs.json index 3114534b..c5f5cc50 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_birch", - "top": "blocks/planks_birch", - "side": "blocks/planks_birch" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_birch", + "top": "blocks/planks_birch", + "side": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_closed.json index 51d49822..f8843ddd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_open.json index 42104b91..ffb9965b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_birch" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_n.json index dcadebd2..3a48a185 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ne.json index 391f3a4d..b7e3cf70 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_new.json index c0873d76..6f85a001 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ns.json index 4cc43e77..c52ed5c3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nse.json index 90e5ec98..21afb2c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsew.json index 81c74709..91517ae8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsw.json index 5a041770..4c6a073e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nw.json index d3bcb501..e066be80 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_s.json index cc1a8695..112fae1a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_se.json index 799d3bf5..ec3ef8e4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sew.json index cb7b625e..c300544f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sw.json index 160e36de..d832d73c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_black", - "pane": "blocks/glass_black" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_black", + "pane": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/black_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/black_wool.json index bb56552f..e2c4afdf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/black_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_black" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_n.json index 457061c9..4f4b08ae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ne.json index f01962b2..4df8105e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_new.json index cbb93ad1..62734a34 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ns.json index 824d1ae0..2f281a6e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nse.json index 0e45414b..ab18f572 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsew.json index 1c9db327..fe72fdc6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsw.json index 230c153b..a89bd7ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nw.json index 4373d31e..31041ec0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_s.json index 901e7ba4..57cd0f47 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_se.json index 87168de5..314c984b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sew.json index 88fb5d6b..07b47f06 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sw.json index 9472ad00..7aa60d59 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_blue", - "pane": "blocks/glass_blue" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_blue", + "pane": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/blue_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/blue_wool.json index 50be4793..6b20ce3c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bookshelf.json b/desktopRuntime/resources/assets/minecraft/models/block/bookshelf.json index 12491fe0..475f7903 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/bookshelf.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/bookshelf.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/planks_oak", - "side": "blocks/bookshelf" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/planks_oak", + "side": "blocks/bookshelf" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_1.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_1.json index 3d027e73..2e475ee4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_1.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 0, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_12.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_12.json index c03a8af4..82120f23 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_12.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_12.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 0, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_123.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_123.json index e9969e6d..2fd61ab6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_123.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_123.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 0, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_13.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_13.json index 176a0642..359eda19 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_13.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_13.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [0, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 0, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_2.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_2.json index ff8367dc..0a4e4a67 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_2.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [16, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_23.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_23.json index fb731803..99e6c974 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_23.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_23.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [16, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_3.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_3.json index a001215e..ad4747e4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_3.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 0, 16 ], "texture": "#stand" }, - "south": { "uv": [ 0, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [16, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 0, 16], "texture": "#stand" }, + "south": { "uv": [0, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_empty.json b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_empty.json index cb4f5116..9b708cd0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_empty.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_empty.json @@ -1,86 +1,93 @@ -{ - "textures": { - "particle": "blocks/brewing_stand", - "base": "blocks/brewing_stand_base", - "stand": "blocks/brewing_stand" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 14, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stand" }, - "north": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "south": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "west": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" }, - "east": { "uv": [ 7, 2, 9, 16 ], "texture": "#stand" } - } - }, - { "from": [ 9, 0, 5 ], - "to": [ 15, 2, 11 ], - "faces": { - "down": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "up": { "uv": [ 9, 5, 15, 11 ], "texture": "#base" }, - "north": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" }, - "east": { "uv": [ 5, 14, 11, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 1 ], - "to": [ 8, 2, 7 ], - "faces": { - "down": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "up": { "uv": [ 2, 1, 8, 7 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 7, 16 ], "texture": "#base" } - } - }, - { "from": [ 2, 0, 9 ], - "to": [ 8, 2, 15 ], - "faces": { - "down": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "up": { "uv": [ 2, 9, 8, 15 ], "texture": "#base" }, - "north": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "south": { "uv": [ 2, 14, 8, 16 ], "texture": "#base" }, - "west": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 9, 14, 15, 16 ], "texture": "#base" } - } - }, - { "from": [ 8, 0, 8 ], - "to": [ 16, 16, 8 ], - "faces": { - "north": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" }, - "south": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 8, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": -45, - "rescale": true - }, - "faces": { - "north": { "uv": [ 8, 0, 16, 16 ], "texture": "#stand" }, - "south": { "uv": [ 16, 0, 8, 16 ], "texture": "#stand" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/brewing_stand", + "base": "blocks/brewing_stand_base", + "stand": "blocks/brewing_stand" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 14, 9], + "faces": { + "down": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "up": { "uv": [7, 7, 9, 9], "texture": "#stand" }, + "north": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "south": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "west": { "uv": [7, 2, 9, 16], "texture": "#stand" }, + "east": { "uv": [7, 2, 9, 16], "texture": "#stand" } + } + }, + { + "from": [9, 0, 5], + "to": [15, 2, 11], + "faces": { + "down": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "up": { "uv": [9, 5, 15, 11], "texture": "#base" }, + "north": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "south": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "west": { "uv": [5, 14, 11, 16], "texture": "#base" }, + "east": { "uv": [5, 14, 11, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 1], + "to": [8, 2, 7], + "faces": { + "down": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "up": { "uv": [2, 1, 8, 7], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [1, 14, 7, 16], "texture": "#base" }, + "east": { "uv": [1, 14, 7, 16], "texture": "#base" } + } + }, + { + "from": [2, 0, 9], + "to": [8, 2, 15], + "faces": { + "down": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "up": { "uv": [2, 9, 8, 15], "texture": "#base" }, + "north": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "south": { "uv": [2, 14, 8, 16], "texture": "#base" }, + "west": { "uv": [9, 14, 15, 16], "texture": "#base" }, + "east": { "uv": [9, 14, 15, 16], "texture": "#base" } + } + }, + { + "from": [8, 0, 8], + "to": [16, 16, 8], + "faces": { + "north": { "uv": [16, 0, 8, 16], "texture": "#stand" }, + "south": { "uv": [8, 0, 16, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + }, + { + "from": [0, 0, 8], + "to": [8, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": -45, + "rescale": true + }, + "faces": { + "north": { "uv": [8, 0, 16, 16], "texture": "#stand" }, + "south": { "uv": [16, 0, 8, 16], "texture": "#stand" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brick.json b/desktopRuntime/resources/assets/minecraft/models/block/brick.json index 5ec04fc0..f41ec6cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brick.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/brick" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brick_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/brick_inner_stairs.json index 6f99e9c9..be61bde0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brick_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brick_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/brick", - "top": "blocks/brick", - "side": "blocks/brick" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/brick", + "top": "blocks/brick", + "side": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brick_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/brick_outer_stairs.json index 75168a00..ffa3128c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brick_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brick_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/brick", - "top": "blocks/brick", - "side": "blocks/brick" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/brick", + "top": "blocks/brick", + "side": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/brick_stairs.json index dc3e0611..5f6414c2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brick_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/brick", - "top": "blocks/brick", - "side": "blocks/brick" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/brick", + "top": "blocks/brick", + "side": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom.json index 0871842a..d52d5e97 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/mushroom_brown" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/mushroom_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_c.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_c.json index 6bf257fc..5af28284 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_c.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_c.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_cap_all.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_cap_all.json index 9003de4b..19dd1541 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_cap_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_cap_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_skin_brown" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_skin_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_e.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_e.json index d7e169dc..99cb9e69 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_e.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_e.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_skin_brown", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_skin_brown", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_inside_all.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_inside_all.json index e7e960e5..ca2d70fc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_inside_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_inside_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_n.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_n.json index 8f7c4bfb..2016dd51 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_n.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_skin_brown", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_skin_brown", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_ne.json index e707527d..e6dea9c5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_ne.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_skin_brown", - "east": "blocks/mushroom_block_skin_brown", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_skin_brown", + "east": "blocks/mushroom_block_skin_brown", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_nw.json index 51021621..dbeb0575 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_nw.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_skin_brown", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_skin_brown" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_skin_brown", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_skin_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_s.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_s.json index b1a8aca4..cb122768 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_s.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_skin_brown", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_skin_brown", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_se.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_se.json index b5c3832f..915024f5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_se.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_skin_brown", - "south": "blocks/mushroom_block_skin_brown", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_skin_brown", + "south": "blocks/mushroom_block_skin_brown", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem.json index 0151cf75..0ffbe74c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "side": "blocks/mushroom_block_skin_stem", - "end": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube_column", + "textures": { + "side": "blocks/mushroom_block_skin_stem", + "end": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem_all.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem_all.json index f312a784..1439d9d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_stem_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_skin_stem" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_skin_stem" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_sw.json index e73fc9eb..60c7e45d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_sw.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_skin_brown", - "west": "blocks/mushroom_block_skin_brown" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_skin_brown", + "west": "blocks/mushroom_block_skin_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_w.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_w.json index f71cc9de..0691ec6b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_w.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_mushroom_block_w.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_brown", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_skin_brown" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_brown", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_skin_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_n.json index f43d70b1..2f051c4a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ne.json index a48f7f23..2ae516cd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_new.json index 9e138642..8d3b3360 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ns.json index 42b9a9bb..0b8ba29c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nse.json index a1c44f6d..e4ed61b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsew.json index fa1d4a95..f7339091 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsw.json index b2f41215..e502683d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nw.json index bb28ee5b..57494391 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_s.json index c5de38a6..4f81a8c4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_se.json index ef156de7..9c96a277 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sew.json index 6de6fb49..1ccbc1fb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sw.json index 7e368462..566b5878 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_brown", - "pane": "blocks/glass_brown" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_brown", + "pane": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/brown_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/brown_wool.json index 1b162906..85398ad2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/brown_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/brown_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_brown" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/button.json b/desktopRuntime/resources/assets/minecraft/models/block/button.json index f27ecbe6..ce8f8f8d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/button.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/button.json @@ -1,18 +1,23 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 5, 0, 6 ], - "to": [ 11, 2, 10 ], - "faces": { - "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, - "north": { "uv": [ 5, 14, 11, 16 ], "texture": "#texture" }, - "south": { "uv": [ 5, 14, 11, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 14, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 14, 10, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [5, 0, 6], + "to": [11, 2, 10], + "faces": { + "down": { + "uv": [5, 6, 11, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [5, 10, 11, 6], "texture": "#texture" }, + "north": { "uv": [5, 14, 11, 16], "texture": "#texture" }, + "south": { "uv": [5, 14, 11, 16], "texture": "#texture" }, + "west": { "uv": [6, 14, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 14, 10, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/button_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/button_inventory.json index be9d598b..dfdf2f64 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/button_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/button_inventory.json @@ -1,18 +1,19 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 5, 6, 6 ], - "to": [ 11, 10, 10 ], - "faces": { - "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture" }, - "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, - "north": { "uv": [ 5, 12, 11, 16 ], "texture": "#texture" }, - "south": { "uv": [ 5, 12, 11, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [5, 6, 6], + "to": [11, 10, 10], + "faces": { + "down": { "uv": [5, 6, 11, 10], "texture": "#texture" }, + "up": { "uv": [5, 10, 11, 6], "texture": "#texture" }, + "north": { "uv": [5, 12, 11, 16], "texture": "#texture" }, + "south": { "uv": [5, 12, 11, 16], "texture": "#texture" }, + "west": { "uv": [6, 12, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 12, 10, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/button_pressed.json b/desktopRuntime/resources/assets/minecraft/models/block/button_pressed.json index 751c2d4b..6b90da9c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/button_pressed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/button_pressed.json @@ -1,18 +1,23 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 5, 0, 6 ], - "to": [ 11, 1, 10 ], - "faces": { - "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 5, 10, 11, 6 ], "texture": "#texture" }, - "north": { "uv": [ 5, 15, 11, 16 ], "texture": "#texture" }, - "south": { "uv": [ 5, 15, 11, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 15, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 15, 10, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [5, 0, 6], + "to": [11, 1, 10], + "faces": { + "down": { + "uv": [5, 6, 11, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [5, 10, 11, 6], "texture": "#texture" }, + "north": { "uv": [5, 15, 11, 16], "texture": "#texture" }, + "south": { "uv": [5, 15, 11, 16], "texture": "#texture" }, + "west": { "uv": [6, 15, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 15, 10, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cactus.json b/desktopRuntime/resources/assets/minecraft/models/block/cactus.json index 4590a39d..66bcff7a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cactus.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cactus.json @@ -1,32 +1,39 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cactus_side", - "bottom": "blocks/cactus_bottom", - "top": "blocks/cactus_top", - "side": "blocks/cactus_side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" } - } - }, - { "from": [ 0, 0, 1 ], - "to": [ 16, 16, 15 ], - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 1, 0, 0 ], - "to": [ 15, 16, 16 ], - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cactus_side", + "bottom": "blocks/cactus_bottom", + "top": "blocks/cactus_top", + "side": "blocks/cactus_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up" } + } + }, + { + "from": [0, 0, 1], + "to": [16, 16, 15], + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#side" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#side" } + } + }, + { + "from": [1, 0, 0], + "to": [15, 16, 16], + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice1.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice1.json index 19a9d562..99ac9fb0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice1.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 3, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 3, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 3, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 13, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 13, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [3, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [3, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [3, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 13, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 13, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice2.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice2.json index ea188bed..549cb9ec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice2.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 5, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 5, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 5, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 11, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 11, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [5, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [5, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [5, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 11, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 11, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice3.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice3.json index 3abcc75b..6c959fd3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice3.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 7, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 7, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 7, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 9, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 9, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [7, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [7, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [7, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 9, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 9, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice4.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice4.json index f501d092..ee8f0fea 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice4.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 9, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 9, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 9, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 7, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 7, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [9, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [9, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [9, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 7, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 7, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice5.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice5.json index 3572a1b5..57a76629 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice5.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice5.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 11, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 11, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 11, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 5, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 5, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [11, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [11, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [11, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 5, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 5, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice6.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice6.json index 2a2446ce..00ad30e7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_slice6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_slice6.json @@ -1,22 +1,27 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side", - "inside": "blocks/cake_inner" - }, - "elements": [ - { "from": [ 13, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 13, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 13, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 3, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 3, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#inside" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side", + "inside": "blocks/cake_inner" + }, + "elements": [ + { + "from": [13, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [13, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [13, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 3, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 3, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#inside" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cake_uneaten.json b/desktopRuntime/resources/assets/minecraft/models/block/cake_uneaten.json index f092b168..db7e5fe1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cake_uneaten.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cake_uneaten.json @@ -1,21 +1,26 @@ -{ - "textures": { - "particle": "blocks/cake_side", - "bottom": "blocks/cake_bottom", - "top": "blocks/cake_top", - "side": "blocks/cake_side" - }, - "elements": [ - { "from": [ 1, 0, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" }, - "south": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" }, - "west": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" }, - "east": { "uv": [ 1, 8, 15, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/cake_side", + "bottom": "blocks/cake_bottom", + "top": "blocks/cake_top", + "side": "blocks/cake_side" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 8, 15], + "faces": { + "down": { + "uv": [1, 1, 15, 15], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [1, 1, 15, 15], "texture": "#top" }, + "north": { "uv": [1, 8, 15, 16], "texture": "#side" }, + "south": { "uv": [1, 8, 15, 16], "texture": "#side" }, + "west": { "uv": [1, 8, 15, 16], "texture": "#side" }, + "east": { "uv": [1, 8, 15, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet.json index 837c7c3c..f1327ef8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet.json @@ -1,15 +1,36 @@ -{ - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 1, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#wool", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#wool" }, - "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "north" }, - "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "south" }, - "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "west" }, - "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#wool", "cullface": "east" } - } - } - ] -} +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 1, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#wool", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#wool" }, + "north": { + "uv": [0, 15, 16, 16], + "texture": "#wool", + "cullface": "north" + }, + "south": { + "uv": [0, 15, 16, 16], + "texture": "#wool", + "cullface": "south" + }, + "west": { + "uv": [0, 15, 16, 16], + "texture": "#wool", + "cullface": "west" + }, + "east": { + "uv": [0, 15, 16, 16], + "texture": "#wool", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_black.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_black.json index 8687c110..9fdba7c0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_black.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_black.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_black", - "wool": "blocks/wool_colored_black" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_black", + "wool": "blocks/wool_colored_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_blue.json index 50613307..39f29f45 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_blue.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_blue", - "wool": "blocks/wool_colored_blue" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_blue", + "wool": "blocks/wool_colored_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_brown.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_brown.json index 35175ddd..27669f85 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_brown.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_brown.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_brown", - "wool": "blocks/wool_colored_brown" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_brown", + "wool": "blocks/wool_colored_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_cyan.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_cyan.json index 2a7eacb1..efd51256 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_cyan.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_cyan.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_cyan", - "wool": "blocks/wool_colored_cyan" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_cyan", + "wool": "blocks/wool_colored_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_gray.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_gray.json index e2142815..1ea883ce 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_gray.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_gray.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_gray", - "wool": "blocks/wool_colored_gray" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_gray", + "wool": "blocks/wool_colored_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_green.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_green.json index b2f9d821..8262a209 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_green.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_green.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_green", - "wool": "blocks/wool_colored_green" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_green", + "wool": "blocks/wool_colored_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_light_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_light_blue.json index 13129d4a..92cad90f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_light_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_light_blue.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_light_blue", - "wool": "blocks/wool_colored_light_blue" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_light_blue", + "wool": "blocks/wool_colored_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_lime.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_lime.json index c68c17ee..6d29e20d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_lime.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_lime.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_lime", - "wool": "blocks/wool_colored_lime" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_lime", + "wool": "blocks/wool_colored_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_magenta.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_magenta.json index 747f4bff..480cca7c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_magenta.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_magenta.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_magenta", - "wool": "blocks/wool_colored_magenta" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_magenta", + "wool": "blocks/wool_colored_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_orange.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_orange.json index 0f0c368d..087d84d7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_orange.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_orange.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_orange", - "wool": "blocks/wool_colored_orange" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_orange", + "wool": "blocks/wool_colored_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_pink.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_pink.json index 64ca23e1..518c49d9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_pink.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_pink.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_pink", - "wool": "blocks/wool_colored_pink" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_pink", + "wool": "blocks/wool_colored_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_purple.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_purple.json index 62d63b94..0dafd139 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_purple.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_purple.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_purple", - "wool": "blocks/wool_colored_purple" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_purple", + "wool": "blocks/wool_colored_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_red.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_red.json index a4e0bb54..8f4ba21b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_red.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_red", - "wool": "blocks/wool_colored_red" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_red", + "wool": "blocks/wool_colored_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_silver.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_silver.json index 0a5ef8ed..fcc5be8f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_silver.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_silver.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_silver", - "wool": "blocks/wool_colored_silver" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_silver", + "wool": "blocks/wool_colored_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_white.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_white.json index bb77933e..54cab925 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_white.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_white.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_white", - "wool": "blocks/wool_colored_white" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_white", + "wool": "blocks/wool_colored_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carpet_yellow.json b/desktopRuntime/resources/assets/minecraft/models/block/carpet_yellow.json index 8f7d2ecf..549883f0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carpet_yellow.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carpet_yellow.json @@ -1,7 +1,7 @@ -{ - "parent": "block/carpet", - "textures": { - "particle": "blocks/wool_colored_yellow", - "wool": "blocks/wool_colored_yellow" - } -} +{ + "parent": "block/carpet", + "textures": { + "particle": "blocks/wool_colored_yellow", + "wool": "blocks/wool_colored_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage0.json b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage0.json index c2e37379..d7dac0c0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/carrots_stage_0" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/carrots_stage_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage1.json b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage1.json index 94f2875c..e9a91fb1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/carrots_stage_1" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/carrots_stage_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage2.json b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage2.json index 95029b7e..508f1772 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/carrots_stage_2" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/carrots_stage_2" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage3.json b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage3.json index 505e0382..a1f87314 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/carrots_stage3.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/carrots_stage_3" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/carrots_stage_3" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_empty.json b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_empty.json index 5c06de6a..6c0e5675 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_empty.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_empty.json @@ -1,155 +1,284 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cauldron_side", - "top": "blocks/cauldron_top", - "bottom": "blocks/cauldron_bottom", - "side": "blocks/cauldron_side", - "inside": "blocks/cauldron_inner" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" } - } - }, - { "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 3, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 4, 3, 2 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 2 ], - "to": [ 2, 3, 4 ], - "faces": { - "down": { "uv": [ 0, 2, 2, 4 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 12, 0, 0 ], - "to": [ 16, 3, 2 ], - "faces": { - "down": { "uv": [ 12, 0, 16, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 0, 2 ], - "to": [ 16, 3, 4 ], - "faces": { - "down": { "uv": [ 14, 2, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" }, - "east": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 14 ], - "to": [ 4, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 12 ], - "to": [ 2, 3, 14 ], - "faces": { - "down": { "uv": [ 12, 0, 14, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side" }, - "west": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" }, - "east": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" } - } - }, - { "from": [ 12, 0, 14 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 14, 0, 12 ], - "to": [ 16, 3, 14 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 14 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cauldron_side", + "top": "blocks/cauldron_top", + "bottom": "blocks/cauldron_bottom", + "side": "blocks/cauldron_side", + "inside": "blocks/cauldron_inner" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [2, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 2, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side" } + } + }, + { + "from": [2, 3, 2], + "to": [14, 4, 14], + "faces": { + "down": { + "uv": [2, 2, 14, 14], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 2, 14, 14], "texture": "#inside", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 3, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [14, 0, 16, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 13], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 0], + "to": [14, 16, 2], + "faces": { + "down": { + "uv": [2, 0, 14, 2], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 14], + "to": [14, 16, 16], + "faces": { + "down": { + "uv": [2, 14, 14, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "south": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [0, 0, 0], + "to": [4, 3, 2], + "faces": { + "down": { + "uv": [0, 0, 4, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [4, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 4, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 2], + "to": [2, 3, 4], + "faces": { + "down": { + "uv": [0, 2, 2, 4], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [2, 13, 4, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [2, 13, 4, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [12, 0, 0], + "to": [16, 3, 2], + "faces": { + "down": { + "uv": [12, 0, 16, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 13, 12, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [12, 13, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 0, 2], + "to": [16, 3, 4], + "faces": { + "down": { "uv": [14, 2, 16, 4], "texture": "#bottom" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [4, 13, 2, 16], "texture": "#side" }, + "east": { "uv": [4, 13, 2, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 14], + "to": [4, 3, 16], + "faces": { + "down": { "uv": [14, 0, 16, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [4, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 4, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 12], + "to": [2, 3, 14], + "faces": { + "down": { "uv": [12, 0, 14, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [2, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 2, 16], "texture": "#side" }, + "west": { "uv": [12, 13, 14, 16], "texture": "#side" }, + "east": { "uv": [12, 13, 14, 16], "texture": "#side" } + } + }, + { + "from": [12, 0, 14], + "to": [16, 3, 16], + "faces": { + "down": { "uv": [14, 12, 16, 16], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 12, 16], "texture": "#side" }, + "south": { "uv": [12, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [14, 0, 12], + "to": [16, 3, 14], + "faces": { + "down": { "uv": [14, 12, 16, 14], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 12, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 12, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level1.json b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level1.json index 2b2cb935..a98274b0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level1.json @@ -1,162 +1,292 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cauldron_side", - "top": "blocks/cauldron_top", - "bottom": "blocks/cauldron_bottom", - "side": "blocks/cauldron_side", - "inside": "blocks/cauldron_inner", - "water": "blocks/water_still" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" } - } - }, - { "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 3, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 4, 3, 2 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 2 ], - "to": [ 2, 3, 4 ], - "faces": { - "down": { "uv": [ 0, 2, 2, 4 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 12, 0, 0 ], - "to": [ 16, 3, 2 ], - "faces": { - "down": { "uv": [ 12, 0, 16, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 0, 2 ], - "to": [ 16, 3, 4 ], - "faces": { - "down": { "uv": [ 14, 2, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" }, - "east": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 14 ], - "to": [ 4, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 12 ], - "to": [ 2, 3, 14 ], - "faces": { - "down": { "uv": [ 12, 0, 14, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side" }, - "west": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" }, - "east": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" } - } - }, - { "from": [ 12, 0, 14 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 14, 0, 12 ], - "to": [ 16, 3, 14 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 14 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" } - } - }, - { "from": [ 2, 9, 2 ], - "to": [ 14, 9, 14 ], - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#water" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cauldron_side", + "top": "blocks/cauldron_top", + "bottom": "blocks/cauldron_bottom", + "side": "blocks/cauldron_side", + "inside": "blocks/cauldron_inner", + "water": "blocks/water_still" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [2, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 2, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side" } + } + }, + { + "from": [2, 3, 2], + "to": [14, 4, 14], + "faces": { + "down": { + "uv": [2, 2, 14, 14], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 2, 14, 14], "texture": "#inside", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 3, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [14, 0, 16, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 13], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 0], + "to": [14, 16, 2], + "faces": { + "down": { + "uv": [2, 0, 14, 2], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 14], + "to": [14, 16, 16], + "faces": { + "down": { + "uv": [2, 14, 14, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "south": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [0, 0, 0], + "to": [4, 3, 2], + "faces": { + "down": { + "uv": [0, 0, 4, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [4, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 4, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 2], + "to": [2, 3, 4], + "faces": { + "down": { + "uv": [0, 2, 2, 4], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [2, 13, 4, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [2, 13, 4, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [12, 0, 0], + "to": [16, 3, 2], + "faces": { + "down": { + "uv": [12, 0, 16, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 13, 12, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [12, 13, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 0, 2], + "to": [16, 3, 4], + "faces": { + "down": { "uv": [14, 2, 16, 4], "texture": "#bottom" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [4, 13, 2, 16], "texture": "#side" }, + "east": { "uv": [4, 13, 2, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 14], + "to": [4, 3, 16], + "faces": { + "down": { "uv": [14, 0, 16, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [4, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 4, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 12], + "to": [2, 3, 14], + "faces": { + "down": { "uv": [12, 0, 14, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [2, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 2, 16], "texture": "#side" }, + "west": { "uv": [12, 13, 14, 16], "texture": "#side" }, + "east": { "uv": [12, 13, 14, 16], "texture": "#side" } + } + }, + { + "from": [12, 0, 14], + "to": [16, 3, 16], + "faces": { + "down": { "uv": [14, 12, 16, 16], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 12, 16], "texture": "#side" }, + "south": { "uv": [12, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [14, 0, 12], + "to": [16, 3, 14], + "faces": { + "down": { "uv": [14, 12, 16, 14], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 12, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 12, 16], "texture": "#side" } + } + }, + { + "from": [2, 9, 2], + "to": [14, 9, 14], + "faces": { + "up": { "uv": [2, 2, 14, 14], "texture": "#water" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level2.json b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level2.json index 943f8694..22e82fc3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level2.json @@ -1,162 +1,292 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cauldron_side", - "top": "blocks/cauldron_top", - "bottom": "blocks/cauldron_bottom", - "side": "blocks/cauldron_side", - "inside": "blocks/cauldron_inner", - "water": "blocks/water_still" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" } - } - }, - { "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 3, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 4, 3, 2 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 2 ], - "to": [ 2, 3, 4 ], - "faces": { - "down": { "uv": [ 0, 2, 2, 4 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 12, 0, 0 ], - "to": [ 16, 3, 2 ], - "faces": { - "down": { "uv": [ 12, 0, 16, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 0, 2 ], - "to": [ 16, 3, 4 ], - "faces": { - "down": { "uv": [ 14, 2, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" }, - "east": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 14 ], - "to": [ 4, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 12 ], - "to": [ 2, 3, 14 ], - "faces": { - "down": { "uv": [ 12, 0, 14, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side" }, - "west": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" }, - "east": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" } - } - }, - { "from": [ 12, 0, 14 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 14, 0, 12 ], - "to": [ 16, 3, 14 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 14 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" } - } - }, - { "from": [ 2, 12, 2 ], - "to": [ 14, 12, 14 ], - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#water" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cauldron_side", + "top": "blocks/cauldron_top", + "bottom": "blocks/cauldron_bottom", + "side": "blocks/cauldron_side", + "inside": "blocks/cauldron_inner", + "water": "blocks/water_still" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [2, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 2, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side" } + } + }, + { + "from": [2, 3, 2], + "to": [14, 4, 14], + "faces": { + "down": { + "uv": [2, 2, 14, 14], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 2, 14, 14], "texture": "#inside", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 3, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [14, 0, 16, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 13], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 0], + "to": [14, 16, 2], + "faces": { + "down": { + "uv": [2, 0, 14, 2], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 14], + "to": [14, 16, 16], + "faces": { + "down": { + "uv": [2, 14, 14, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "south": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [0, 0, 0], + "to": [4, 3, 2], + "faces": { + "down": { + "uv": [0, 0, 4, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [4, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 4, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 2], + "to": [2, 3, 4], + "faces": { + "down": { + "uv": [0, 2, 2, 4], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [2, 13, 4, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [2, 13, 4, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [12, 0, 0], + "to": [16, 3, 2], + "faces": { + "down": { + "uv": [12, 0, 16, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 13, 12, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [12, 13, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 0, 2], + "to": [16, 3, 4], + "faces": { + "down": { "uv": [14, 2, 16, 4], "texture": "#bottom" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [4, 13, 2, 16], "texture": "#side" }, + "east": { "uv": [4, 13, 2, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 14], + "to": [4, 3, 16], + "faces": { + "down": { "uv": [14, 0, 16, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [4, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 4, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 12], + "to": [2, 3, 14], + "faces": { + "down": { "uv": [12, 0, 14, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [2, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 2, 16], "texture": "#side" }, + "west": { "uv": [12, 13, 14, 16], "texture": "#side" }, + "east": { "uv": [12, 13, 14, 16], "texture": "#side" } + } + }, + { + "from": [12, 0, 14], + "to": [16, 3, 16], + "faces": { + "down": { "uv": [14, 12, 16, 16], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 12, 16], "texture": "#side" }, + "south": { "uv": [12, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [14, 0, 12], + "to": [16, 3, 14], + "faces": { + "down": { "uv": [14, 12, 16, 14], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 12, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 12, 16], "texture": "#side" } + } + }, + { + "from": [2, 12, 2], + "to": [14, 12, 14], + "faces": { + "up": { "uv": [2, 2, 14, 14], "texture": "#water" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level3.json b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level3.json index 6d9983a6..5f54d630 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cauldron_level3.json @@ -1,162 +1,292 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cauldron_side", - "top": "blocks/cauldron_top", - "bottom": "blocks/cauldron_bottom", - "side": "blocks/cauldron_side", - "inside": "blocks/cauldron_inner", - "water": "blocks/water_still" - }, - "elements": [ - { "from": [ 0, 3, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" } - } - }, - { "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#inside", "cullface": "up" }, - "north": { "uv": [ 2, 0, 0, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 3, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 13 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 2, 3, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#inside", "cullface": "down" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 0, 14, 13 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 13 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 14, 0, 16, 13 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 4, 3, 2 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 2 ], - "to": [ 2, 3, 4 ], - "faces": { - "down": { "uv": [ 0, 2, 2, 4 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 2, 13, 4, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 12, 0, 0 ], - "to": [ 16, 3, 2 ], - "faces": { - "down": { "uv": [ 12, 0, 16, 2 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 13, 2, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 14, 0, 2 ], - "to": [ 16, 3, 4 ], - "faces": { - "down": { "uv": [ 14, 2, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" }, - "east": { "uv": [ 4, 13, 2, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 14 ], - "to": [ 4, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 4, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 4, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 0, 0, 12 ], - "to": [ 2, 3, 14 ], - "faces": { - "down": { "uv": [ 12, 0, 14, 4 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 13, 0, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 13, 2, 16 ], "texture": "#side" }, - "west": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" }, - "east": { "uv": [ 12, 13, 14, 16 ], "texture": "#side" } - } - }, - { "from": [ 12, 0, 14 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 12, 16 ], "texture": "#side" }, - "south": { "uv": [ 12, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 14, 0, 12 ], - "to": [ 16, 3, 14 ], - "faces": { - "down": { "uv": [ 14, 12, 16, 14 ], "texture": "#bottom" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 16, 13, 14, 16 ], "texture": "#side" }, - "south": { "uv": [ 14, 13, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" }, - "east": { "uv": [ 14, 13, 12, 16 ], "texture": "#side" } - } - }, - { "from": [ 2, 15, 2 ], - "to": [ 14, 15, 14 ], - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#water" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cauldron_side", + "top": "blocks/cauldron_top", + "bottom": "blocks/cauldron_bottom", + "side": "blocks/cauldron_side", + "inside": "blocks/cauldron_inner", + "water": "blocks/water_still" + }, + "elements": [ + { + "from": [0, 3, 0], + "to": [2, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 2, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side" } + } + }, + { + "from": [2, 3, 2], + "to": [14, 4, 14], + "faces": { + "down": { + "uv": [2, 2, 14, 14], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 2, 14, 14], "texture": "#inside", "cullface": "up" }, + "north": { + "uv": [2, 0, 0, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 2, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 3, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [14, 0, 16, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 13], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 0], + "to": [14, 16, 2], + "faces": { + "down": { + "uv": [2, 0, 14, 2], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "north" + }, + "south": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 2, 13], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [2, 3, 14], + "to": [14, 16, 16], + "faces": { + "down": { + "uv": [2, 14, 14, 16], + "texture": "#inside", + "cullface": "down" + }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [2, 0, 14, 13], "texture": "#side" }, + "south": { + "uv": [2, 0, 14, 13], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [14, 0, 16, 13], + "texture": "#side", + "cullface": "east" + } + } + }, + { + "from": [0, 0, 0], + "to": [4, 3, 2], + "faces": { + "down": { + "uv": [0, 0, 4, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [4, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 4, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 2], + "to": [2, 3, 4], + "faces": { + "down": { + "uv": [0, 2, 2, 4], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [2, 13, 0, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [2, 13, 4, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [2, 13, 4, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [12, 0, 0], + "to": [16, 3, 2], + "faces": { + "down": { + "uv": [12, 0, 16, 2], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [16, 13, 12, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [12, 13, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 13, 2, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 13, 2, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [14, 0, 2], + "to": [16, 3, 4], + "faces": { + "down": { "uv": [14, 2, 16, 4], "texture": "#bottom" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [4, 13, 2, 16], "texture": "#side" }, + "east": { "uv": [4, 13, 2, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 14], + "to": [4, 3, 16], + "faces": { + "down": { "uv": [14, 0, 16, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [4, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 4, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [0, 0, 12], + "to": [2, 3, 14], + "faces": { + "down": { "uv": [12, 0, 14, 4], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [2, 13, 0, 16], "texture": "#side" }, + "south": { "uv": [0, 13, 2, 16], "texture": "#side" }, + "west": { "uv": [12, 13, 14, 16], "texture": "#side" }, + "east": { "uv": [12, 13, 14, 16], "texture": "#side" } + } + }, + { + "from": [12, 0, 14], + "to": [16, 3, 16], + "faces": { + "down": { "uv": [14, 12, 16, 16], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 12, 16], "texture": "#side" }, + "south": { "uv": [12, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 16, 16], "texture": "#side" } + } + }, + { + "from": [14, 0, 12], + "to": [16, 3, 14], + "faces": { + "down": { "uv": [14, 12, 16, 14], "texture": "#bottom" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [16, 13, 14, 16], "texture": "#side" }, + "south": { "uv": [14, 13, 16, 16], "texture": "#side" }, + "west": { "uv": [14, 13, 12, 16], "texture": "#side" }, + "east": { "uv": [14, 13, 12, 16], "texture": "#side" } + } + }, + { + "from": [2, 15, 2], + "to": [14, 15, 14], + "faces": { + "up": { "uv": [2, 2, 14, 14], "texture": "#water" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/clay.json b/desktopRuntime/resources/assets/minecraft/models/block/clay.json index 8d6a8b4d..a5a783f4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/clay.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/clay" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/clay" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/coal_block.json b/desktopRuntime/resources/assets/minecraft/models/block/coal_block.json index 04900f5b..c8a11b66 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/coal_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/coal_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/coal_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/coal_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/coal_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/coal_ore.json index ca30faac..2ec548f8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/coal_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/coal_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/coal_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/coal_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/coarse_dirt.json b/desktopRuntime/resources/assets/minecraft/models/block/coarse_dirt.json index 1ad94cc2..1d2e9877 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/coarse_dirt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/coarse_dirt.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/coarse_dirt" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/coarse_dirt" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone.json index 2ae97d87..4acf0bc0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/cobblestone" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_inventory.json index f006948a..1e592857 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_mossy_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_mossy_inventory.json index 1cdcb265..b1fcfe44 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_mossy_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_mossy_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_n.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_n.json index 759ea317..bacbfc79 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_n", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ne.json index 2b1ee8c7..3cc7341c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_ne", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns.json index 702db759..0b35220e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_ns", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns_above.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns_above.json index a4fdef2a..30a4a157 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns_above.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_ns_above.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_ns_above", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nse.json index 0f04f0b2..630df171 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_nse", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nsew.json index 52e201b7..003d3c0b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_nsew", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_post.json b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_post.json index 80997e02..405f1e73 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cobblestone_wall_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "blocks/cobblestone" - } -} +{ + "parent": "block/wall_post", + "textures": { + "wall": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age0_s.json b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age0_s.json index 138a19b2..793dbdc8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age0_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age0_s.json @@ -1,27 +1,29 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cocoa_stage_0", - "cocoa": "blocks/cocoa_stage_0" - }, - "elements": [ - { "from": [ 6, 7, 11 ], - "to": [ 10, 12, 15 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#cocoa" }, - "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#cocoa" }, - "north": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, - "south": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, - "west": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" }, - "east": { "uv": [ 11, 4, 15, 9 ], "texture": "#cocoa" } - } - }, - { "from": [ 8, 12, 12 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, - "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cocoa_stage_0", + "cocoa": "blocks/cocoa_stage_0" + }, + "elements": [ + { + "from": [6, 7, 11], + "to": [10, 12, 15], + "faces": { + "down": { "uv": [0, 0, 4, 4], "texture": "#cocoa" }, + "up": { "uv": [0, 0, 4, 4], "texture": "#cocoa" }, + "north": { "uv": [11, 4, 15, 9], "texture": "#cocoa" }, + "south": { "uv": [11, 4, 15, 9], "texture": "#cocoa" }, + "west": { "uv": [11, 4, 15, 9], "texture": "#cocoa" }, + "east": { "uv": [11, 4, 15, 9], "texture": "#cocoa" } + } + }, + { + "from": [8, 12, 12], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [12, 0, 16, 4], "texture": "#cocoa" }, + "east": { "uv": [16, 0, 12, 4], "texture": "#cocoa" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age1_s.json b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age1_s.json index 66d548e3..22c8e507 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age1_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age1_s.json @@ -1,27 +1,29 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cocoa_stage_1", - "cocoa": "blocks/cocoa_stage_1" - }, - "elements": [ - { "from": [ 5, 5, 9 ], - "to": [ 11, 12, 15 ], - "faces": { - "down": { "uv": [ 0, 0, 6, 6 ], "texture": "#cocoa" }, - "up": { "uv": [ 0, 0, 6, 6 ], "texture": "#cocoa" }, - "north": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, - "south": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, - "west": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" }, - "east": { "uv": [ 9, 4, 15, 11 ], "texture": "#cocoa" } - } - }, - { "from": [ 8, 12, 12 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, - "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cocoa_stage_1", + "cocoa": "blocks/cocoa_stage_1" + }, + "elements": [ + { + "from": [5, 5, 9], + "to": [11, 12, 15], + "faces": { + "down": { "uv": [0, 0, 6, 6], "texture": "#cocoa" }, + "up": { "uv": [0, 0, 6, 6], "texture": "#cocoa" }, + "north": { "uv": [9, 4, 15, 11], "texture": "#cocoa" }, + "south": { "uv": [9, 4, 15, 11], "texture": "#cocoa" }, + "west": { "uv": [9, 4, 15, 11], "texture": "#cocoa" }, + "east": { "uv": [9, 4, 15, 11], "texture": "#cocoa" } + } + }, + { + "from": [8, 12, 12], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [12, 0, 16, 4], "texture": "#cocoa" }, + "east": { "uv": [16, 0, 12, 4], "texture": "#cocoa" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age2_s.json b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age2_s.json index b4af58e6..1f598833 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age2_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cocoa_age2_s.json @@ -1,27 +1,29 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cocoa_stage_2", - "cocoa": "blocks/cocoa_stage_2" - }, - "elements": [ - { "from": [ 4, 3, 7 ], - "to": [ 12, 12, 15 ], - "faces": { - "down": { "uv": [ 0, 0, 7, 7 ], "texture": "#cocoa" }, - "up": { "uv": [ 0, 0, 7, 7 ], "texture": "#cocoa" }, - "north": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, - "south": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, - "west": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" }, - "east": { "uv": [ 7, 4, 15, 13 ], "texture": "#cocoa" } - } - }, - { "from": [ 8, 12, 12 ], - "to": [ 8, 16, 16 ], - "faces": { - "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#cocoa" }, - "east": { "uv": [ 16, 0, 12, 4 ], "texture": "#cocoa" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cocoa_stage_2", + "cocoa": "blocks/cocoa_stage_2" + }, + "elements": [ + { + "from": [4, 3, 7], + "to": [12, 12, 15], + "faces": { + "down": { "uv": [0, 0, 7, 7], "texture": "#cocoa" }, + "up": { "uv": [0, 0, 7, 7], "texture": "#cocoa" }, + "north": { "uv": [7, 4, 15, 13], "texture": "#cocoa" }, + "south": { "uv": [7, 4, 15, 13], "texture": "#cocoa" }, + "west": { "uv": [7, 4, 15, 13], "texture": "#cocoa" }, + "east": { "uv": [7, 4, 15, 13], "texture": "#cocoa" } + } + }, + { + "from": [8, 12, 12], + "to": [8, 16, 16], + "faces": { + "west": { "uv": [12, 0, 16, 4], "texture": "#cocoa" }, + "east": { "uv": [16, 0, 12, 4], "texture": "#cocoa" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/column_side.json b/desktopRuntime/resources/assets/minecraft/models/block/column_side.json index ada38394..4c998972 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/column_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/column_side.json @@ -1,18 +1,41 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west", "rotation": 270 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east", "rotation": 90 } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#side", "cullface": "up" }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#end", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#end", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "west", + "rotation": 270 + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "east", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/command_block.json b/desktopRuntime/resources/assets/minecraft/models/block/command_block.json index cfa9a288..e237d965 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/command_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/command_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/command_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/command_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit.json b/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit.json index a60af8e0..e594d241 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit.json @@ -1,74 +1,102 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/comparator_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/comparator_on", - "unlit": "blocks/redstone_torch_off", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 4, 7, 11 ], - "to": [ 6, 7, 13 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 4, 2, 10 ], - "to": [ 6, 8, 14 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 3, 2, 11 ], - "to": [ 7, 8, 13 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 10, 7, 11 ], - "to": [ 12, 7, 13 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 10, 2, 10 ], - "to": [ 12, 8, 14 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 9, 2, 11 ], - "to": [ 13, 8, 13 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 4, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/comparator_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/comparator_on", + "unlit": "blocks/redstone_torch_off", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [4, 7, 11], + "to": [6, 7, 13], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [4, 2, 10], + "to": [6, 8, 14], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [3, 2, 11], + "to": [7, 8, 13], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [10, 7, 11], + "to": [12, 7, 13], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [10, 2, 10], + "to": [12, 8, 14], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [9, 2, 11], + "to": [13, 8, 13], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 4, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 8], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit_subtract.json b/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit_subtract.json index 80fc7a74..00d4db07 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit_subtract.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/comparator_lit_subtract.json @@ -1,83 +1,113 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/comparator_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/comparator_on", - "unlit": "blocks/redstone_torch_off", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 4, 7, 11 ], - "to": [ 6, 7, 13 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 4, 2, 10 ], - "to": [ 6, 8, 14 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 3, 2, 11 ], - "to": [ 7, 8, 13 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 10, 7, 11 ], - "to": [ 12, 7, 13 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 10, 2, 10 ], - "to": [ 12, 8, 14 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 9, 2, 11 ], - "to": [ 13, 8, 13 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 5, 2 ], - "to": [ 9, 5, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 6, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 6, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/comparator_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/comparator_on", + "unlit": "blocks/redstone_torch_off", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [4, 7, 11], + "to": [6, 7, 13], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [4, 2, 10], + "to": [6, 8, 14], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [3, 2, 11], + "to": [7, 8, 13], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [10, 7, 11], + "to": [12, 7, 13], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [10, 2, 10], + "to": [12, 8, 14], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [9, 2, 11], + "to": [13, 8, 13], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 5, 2], + "to": [9, 5, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 6, 5], + "faces": { + "west": { "uv": [6, 5, 10, 9], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 9], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 6, 4], + "faces": { + "north": { "uv": [6, 5, 10, 9], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 9], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit.json b/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit.json index 84d7dcff..57f176ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit.json @@ -1,56 +1,80 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/comparator_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/comparator_off", - "unlit": "blocks/redstone_torch_off", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 4, 2, 11 ], - "to": [ 6, 7, 13 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 10, 2, 11 ], - "to": [ 12, 7, 13 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 4, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/comparator_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/comparator_off", + "unlit": "blocks/redstone_torch_off", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [4, 2, 11], + "to": [6, 7, 13], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [10, 2, 11], + "to": [12, 7, 13], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 4, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 8], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit_subtract.json b/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit_subtract.json index d79ab65f..d5bfb8fa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit_subtract.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/comparator_unlit_subtract.json @@ -1,65 +1,91 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/comparator_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/comparator_off", - "unlit": "blocks/redstone_torch_off", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 4, 2, 11 ], - "to": [ 6, 7, 13 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 10, 2, 11 ], - "to": [ 12, 7, 13 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 5, 2 ], - "to": [ 9, 5, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 6, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 6, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 9 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/comparator_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/comparator_off", + "unlit": "blocks/redstone_torch_off", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [4, 2, 11], + "to": [6, 7, 13], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [10, 2, 11], + "to": [12, 7, 13], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 5, 2], + "to": [9, 5, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 6, 5], + "faces": { + "west": { "uv": [6, 5, 10, 9], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 9], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 6, 4], + "faces": { + "north": { "uv": [6, 5, 10, 9], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 9], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/crafting_table.json b/desktopRuntime/resources/assets/minecraft/models/block/crafting_table.json index 78f11983..ec3d3f19 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/crafting_table.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/crafting_table.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/crafting_table_front", - "down": "blocks/planks_oak", - "up": "blocks/crafting_table_top", - "north": "blocks/crafting_table_front", - "east": "blocks/crafting_table_side", - "south": "blocks/crafting_table_side", - "west": "blocks/crafting_table_front" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/crafting_table_front", + "down": "blocks/planks_oak", + "up": "blocks/crafting_table_top", + "north": "blocks/crafting_table_front", + "east": "blocks/crafting_table_side", + "south": "blocks/crafting_table_side", + "west": "blocks/crafting_table_front" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/crop.json b/desktopRuntime/resources/assets/minecraft/models/block/crop.json index ea961b8b..1a041457 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/crop.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/crop.json @@ -1,40 +1,44 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#crop" - }, - "elements": [ - { "from": [ 4, -1, 0 ], - "to": [ 4, 15, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - }, - { "from": [ 12, -1, 0 ], - "to": [ 12, 15, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - }, - { "from": [ 0, -1, 4 ], - "to": [ 16, 15, 4 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - }, - { "from": [ 0, -1, 12 ], - "to": [ 16, 15, 12 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#crop" + }, + "elements": [ + { + "from": [4, -1, 0], + "to": [4, 15, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#crop" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#crop" } + } + }, + { + "from": [12, -1, 0], + "to": [12, 15, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#crop" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#crop" } + } + }, + { + "from": [0, -1, 4], + "to": [16, 15, 4], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#crop" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#crop" } + } + }, + { + "from": [0, -1, 12], + "to": [16, 15, 12], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#crop" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#crop" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cross.json b/desktopRuntime/resources/assets/minecraft/models/block/cross.json index 14a494ec..7e912be7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cross.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cross.json @@ -1,26 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#cross" - }, - "elements": [ - { "from": [ 0.8, 0, 8 ], - "to": [ 15.2, 16, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } - } - }, - { "from": [ 8, 0, 0.8 ], - "to": [ 8, 16, 15.2 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { + "from": [0.8, 0, 8], + "to": [15.2, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#cross" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#cross" } + } + }, + { + "from": [8, 0, 0.8], + "to": [8, 16, 15.2], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#cross" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#cross" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube.json b/desktopRuntime/resources/assets/minecraft/models/block/cube.json index 568af097..fd228f19 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube.json @@ -1,15 +1,16 @@ -{ - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "texture": "#down", "cullface": "down" }, - "up": { "texture": "#up", "cullface": "up" }, - "north": { "texture": "#north", "cullface": "north" }, - "south": { "texture": "#south", "cullface": "south" }, - "west": { "texture": "#west", "cullface": "west" }, - "east": { "texture": "#east", "cullface": "east" } - } - } - ] -} +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_all.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_all.json index 26780101..53a19fac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_all.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#all", - "down": "#all", - "up": "#all", - "north": "#all", - "east": "#all", - "south": "#all", - "west": "#all" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#all", + "down": "#all", + "up": "#all", + "north": "#all", + "east": "#all", + "south": "#all", + "west": "#all" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_bottom_top.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_bottom_top.json index 0a17bb4f..cb38893f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_bottom_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_bottom_top.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#side", - "down": "#bottom", - "up": "#top", - "north": "#side", - "east": "#side", - "south": "#side", - "west": "#side" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#bottom", + "up": "#top", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_column.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_column.json index 3f8610e7..72e9f1c5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_column.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_column.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#side", - "down": "#end", - "up": "#end", - "north": "#side", - "east": "#side", - "south": "#side", - "west": "#side" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#end", + "up": "#end", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored.json index eab2b041..59fea58a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored.json @@ -1,15 +1,32 @@ -{ - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [16, 0, 0, 16], "texture": "#down", "cullface": "down" }, - "up": { "uv": [16, 0, 0, 16], "texture": "#up", "cullface": "up" }, - "north": { "uv": [16, 0, 0, 16], "texture": "#north", "cullface": "north" }, - "south": { "uv": [16, 0, 0, 16], "texture": "#south", "cullface": "south" }, - "west": { "uv": [16, 0, 0, 16], "texture": "#west", "cullface": "west" }, - "east": { "uv": [16, 0, 0, 16], "texture": "#east", "cullface": "east" } - } - } - ] -} +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [16, 0, 0, 16], + "texture": "#down", + "cullface": "down" + }, + "up": { "uv": [16, 0, 0, 16], "texture": "#up", "cullface": "up" }, + "north": { + "uv": [16, 0, 0, 16], + "texture": "#north", + "cullface": "north" + }, + "south": { + "uv": [16, 0, 0, 16], + "texture": "#south", + "cullface": "south" + }, + "west": { + "uv": [16, 0, 0, 16], + "texture": "#west", + "cullface": "west" + }, + "east": { "uv": [16, 0, 0, 16], "texture": "#east", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored_all.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored_all.json index b3f008c1..9349c0c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_mirrored_all.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube_mirrored", - "textures": { - "particle": "#all", - "down": "#all", - "up": "#all", - "north": "#all", - "east": "#all", - "south": "#all", - "west": "#all" - } -} +{ + "parent": "block/cube_mirrored", + "textures": { + "particle": "#all", + "down": "#all", + "up": "#all", + "north": "#all", + "east": "#all", + "south": "#all", + "west": "#all" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cube_top.json b/desktopRuntime/resources/assets/minecraft/models/block/cube_top.json index 197af0c2..87f8d641 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cube_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cube_top.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#side", - "down": "#side", - "up": "#top", - "north": "#side", - "east": "#side", - "south": "#side", - "west": "#side" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#side", + "up": "#top", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_n.json index 646f81d7..41da57b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ne.json index 11c68ddf..221ea80c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_new.json index 72d5c6af..a468669d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ns.json index 700212ce..47dca55d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nse.json index 88f2a8f2..589121bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsew.json index deb86b84..ac117b03 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsw.json index f34c7243..58c89d48 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nw.json index 0cc803db..784b0f10 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_s.json index 84627b97..4dfb0bd9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_se.json index 321dca13..1d8623ea 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sew.json index 0edf2da3..a9725bfa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sw.json index a135a9cf..6cc36c39 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_cyan", - "pane": "blocks/glass_cyan" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_cyan", + "pane": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/cyan_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/cyan_wool.json index 07158496..9c86eb05 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/cyan_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/cyan_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_cyan" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/daisy.json b/desktopRuntime/resources/assets/minecraft/models/block/daisy.json index 750278e8..9f5ae6d1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/daisy.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/daisy.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_oxeye_daisy" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_oxeye_daisy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dandelion.json b/desktopRuntime/resources/assets/minecraft/models/block/dandelion.json index fe9a6ee1..fdb5331e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dandelion.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dandelion.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_dandelion" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_dandelion" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_bark.json index f38f1b39..1cd6ad2e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_big_oak" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom.json index 2a549847..78197786 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_dark_oak_lower", - "top": "blocks/door_dark_oak_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_dark_oak_lower", + "top": "blocks/door_dark_oak_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom_rh.json index d30e8ac2..2e580453 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_dark_oak_lower", - "top": "blocks/door_dark_oak_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_dark_oak_lower", + "top": "blocks/door_dark_oak_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top.json index d022cf00..5a906d29 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_dark_oak_lower", - "top": "blocks/door_dark_oak_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_dark_oak_lower", + "top": "blocks/door_dark_oak_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top_rh.json index 4b45482a..8d0c63b1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_dark_oak_lower", - "top": "blocks/door_dark_oak_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_dark_oak_lower", + "top": "blocks/door_dark_oak_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_closed.json index 06080604..34be2f78 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_open.json index 98bd20fc..5416d854 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_inventory.json index 10604434..f2cdc9f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_n.json index 3143ca5a..eac783d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ne.json index 35d2cfc3..b2b80ef5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ns.json index a4434117..725258b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nse.json index ab4e703f..77f897ab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nsew.json index 4af6fdda..4db4b96c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_post.json index c99976d1..599a2b48 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_inner_stairs.json index 7129e5f5..71c977bc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_big_oak", - "top": "blocks/planks_big_oak", - "side": "blocks/planks_big_oak" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_big_oak", + "top": "blocks/planks_big_oak", + "side": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_leaves.json index b4ce0536..773f89c0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_big_oak" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log.json index fcd7b3f6..fff4edf5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_big_oak_top", - "side": "blocks/log_big_oak" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_big_oak_top", + "side": "blocks/log_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log_side.json index 85a5e85f..980adeb9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_big_oak_top", - "side": "blocks/log_big_oak" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_big_oak_top", + "side": "blocks/log_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_outer_stairs.json index a65a42fc..0d78c918 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_big_oak", - "top": "blocks/planks_big_oak", - "side": "blocks/planks_big_oak" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_big_oak", + "top": "blocks/planks_big_oak", + "side": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_planks.json index 0f6bb0ad..75a376bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_big_oak" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_sapling.json index ac154904..d98963fc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_roofed_oak" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_roofed_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_stairs.json index cc14ba56..453db089 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_big_oak", - "top": "blocks/planks_big_oak", - "side": "blocks/planks_big_oak" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_big_oak", + "top": "blocks/planks_big_oak", + "side": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_closed.json index 5eb880cf..37b95dd0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_open.json index fd829b23..35a02058 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dark_oak_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_big_oak" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector.json b/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector.json index 88653d4f..c0931182 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector.json @@ -1,20 +1,41 @@ -{ - "textures": { - "particle": "blocks/daylight_detector_top", - "top": "blocks/daylight_detector_top", - "side": "blocks/daylight_detector_side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 6, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/daylight_detector_top", + "top": "blocks/daylight_detector_top", + "side": "blocks/daylight_detector_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector_inverted.json b/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector_inverted.json index 7961620c..e96b2ce0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector_inverted.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/daylight_detector_inverted.json @@ -1,20 +1,41 @@ -{ - "textures": { - "particle": "blocks/daylight_detector_inverted_top", - "top": "blocks/daylight_detector_inverted_top", - "side": "blocks/daylight_detector_side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 6, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/daylight_detector_inverted_top", + "top": "blocks/daylight_detector_inverted_top", + "side": "blocks/daylight_detector_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { + "uv": [0, 10, 16, 16], + "texture": "#side", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dead_bush.json b/desktopRuntime/resources/assets/minecraft/models/block/dead_bush.json index f1d4fa34..f370e72e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dead_bush.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dead_bush.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/deadbush" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/deadbush" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_flat.json index 3fcd4ce6..9f4c7331 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_detector" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_detector" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_flat.json index 578ded85..bcb0c070 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_detector_powered" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_detector_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_ne.json index d867a6f7..bea519d0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_detector_powered" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_detector_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_sw.json index abe961c1..9c698b04 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_powered_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_detector_powered" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_detector_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_ne.json index aede6942..9282a217 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_detector" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_detector" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_sw.json index 1bf2ece2..4d28b52d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/detector_rail_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_detector" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_detector" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/diamond_block.json b/desktopRuntime/resources/assets/minecraft/models/block/diamond_block.json index 26a95ac6..fb8da713 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/diamond_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/diamond_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/diamond_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/diamond_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/diamond_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/diamond_ore.json index 08dad4a8..2cfffef3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/diamond_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/diamond_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/diamond_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/diamond_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/diorite.json b/desktopRuntime/resources/assets/minecraft/models/block/diorite.json index 895e5a95..9be51584 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/diorite.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/diorite.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_diorite" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_diorite" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/diorite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/block/diorite_smooth.json index f8142693..2f7c6322 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/diorite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/diorite_smooth.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_diorite_smooth" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_diorite_smooth" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dirt.json b/desktopRuntime/resources/assets/minecraft/models/block/dirt.json index 5dca7ca6..552d6f1c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dirt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dirt.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/dirt" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/dirt" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dispenser.json b/desktopRuntime/resources/assets/minecraft/models/block/dispenser.json index 076d0cc9..f1e13caa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dispenser.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dispenser.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/furnace_top", - "front": "blocks/dispenser_front_horizontal", - "side": "blocks/furnace_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/furnace_top", + "front": "blocks/dispenser_front_horizontal", + "side": "blocks/furnace_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dispenser_vertical.json b/desktopRuntime/resources/assets/minecraft/models/block/dispenser_vertical.json index 3bb8e043..acf8f05b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dispenser_vertical.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dispenser_vertical.json @@ -1,7 +1,7 @@ -{ - "parent": "block/orientable_vertical", - "textures": { - "front": "blocks/dispenser_front_vertical", - "side": "blocks/furnace_top" - } -} +{ + "parent": "block/orientable_vertical", + "textures": { + "front": "blocks/dispenser_front_vertical", + "side": "blocks/furnace_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/door_bottom.json index ee70c4e5..fbbee659 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/door_bottom.json @@ -1,18 +1,35 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#bottom" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "west" }, - "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#bottom" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "down": { + "uv": [13, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "north": { + "uv": [3, 0, 0, 16], + "texture": "#bottom", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 3, 16], + "texture": "#bottom", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "west" + }, + "east": { "uv": [16, 0, 0, 16], "texture": "#bottom" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/door_bottom_rh.json index f96df0a3..347808e3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/door_bottom_rh.json @@ -1,18 +1,35 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#bottom" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#bottom" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "down": { + "uv": [13, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "north": { + "uv": [3, 0, 0, 16], + "texture": "#bottom", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 3, 16], + "texture": "#bottom", + "cullface": "south" + }, + "west": { + "uv": [16, 0, 0, 16], + "texture": "#bottom", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 16], "texture": "#bottom" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/door_top.json index 4774772a..42533ba2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/door_top.json @@ -1,18 +1,27 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#top" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "west" }, - "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#top" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#top" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "up": { "uv": [13, 0, 16, 16], "texture": "#bottom", "cullface": "up" }, + "north": { + "uv": [3, 0, 0, 16], + "texture": "#top", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 3, 16], + "texture": "#top", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "west" }, + "east": { "uv": [16, 0, 0, 16], "texture": "#top" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/door_top_rh.json index f8df22b4..5af91b6c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/door_top_rh.json @@ -1,18 +1,27 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#top" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#top", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#top" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "up": { "uv": [13, 0, 16, 16], "texture": "#bottom", "cullface": "up" }, + "north": { + "uv": [3, 0, 0, 16], + "texture": "#top", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 3, 16], + "texture": "#top", + "cullface": "south" + }, + "west": { "uv": [16, 0, 0, 16], "texture": "#top", "cullface": "west" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#top" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_fern_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_fern_bottom.json index 889e8ee6..533e064a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_fern_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_fern_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/double_plant_fern_bottom" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/double_plant_fern_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_fern_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_fern_top.json index ea84c3f8..c35baf55 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_fern_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_fern_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/double_plant_fern_top" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/double_plant_fern_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_grass_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_grass_bottom.json index f0dfbaf8..a94b6e76 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_grass_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_grass_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/double_plant_grass_bottom" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/double_plant_grass_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_grass_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_grass_top.json index 342fd5d0..5e18f738 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_grass_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_grass_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/double_plant_grass_top" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/double_plant_grass_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_bottom.json index 07e53f39..01252986 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_paeonia_bottom" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_paeonia_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_top.json index dd20d5b7..c2fb282b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_paeonia_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_paeonia_top" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_paeonia_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_rose_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_rose_bottom.json index 486abb89..67a0886b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_rose_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_rose_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_rose_bottom" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_rose_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_rose_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_rose_top.json index a6a6254a..fe33a788 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_rose_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_rose_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_rose_top" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_rose_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_stone.json b/desktopRuntime/resources/assets/minecraft/models/block/double_stone.json index 7a344804..0b691c43 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_stone.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/stone_slab_top", - "side": "blocks/stone_slab_side" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/stone_slab_top", + "side": "blocks/stone_slab_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_stone_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_stone_top.json index beca1bb2..8e1da5f4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_stone_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_stone_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_slab_top" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_slab_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_bottom.json index 9a8a0c37..7bda55dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_sunflower_bottom" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_sunflower_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_top.json index e5d30b71..b88e39c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_sunflower_top.json @@ -1,53 +1,56 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/double_plant_sunflower_front", - "cross": "blocks/double_plant_sunflower_top", - "back": "blocks/double_plant_sunflower_back", - "front": "blocks/double_plant_sunflower_front" - }, - "elements": [ - { "from": [ 0.8, 0, 8 ], - "to": [ 15.2, 8, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" } - } - }, - { "from": [ 8, 0, 0.8 ], - "to": [ 8, 8, 15.2 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#cross" } - } - }, - { "from": [ 9.6, -1, 1 ], - "to": [ 9.6, 15, 15 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "z", - "angle": 22.5, - "rescale": true - }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#back" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#front" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/double_plant_sunflower_front", + "cross": "blocks/double_plant_sunflower_top", + "back": "blocks/double_plant_sunflower_back", + "front": "blocks/double_plant_sunflower_front" + }, + "elements": [ + { + "from": [0.8, 0, 8], + "to": [15.2, 8, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { "uv": [0, 8, 16, 16], "texture": "#cross" }, + "south": { "uv": [0, 8, 16, 16], "texture": "#cross" } + } + }, + { + "from": [8, 0, 0.8], + "to": [8, 8, 15.2], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [0, 8, 16, 16], "texture": "#cross" }, + "east": { "uv": [0, 8, 16, 16], "texture": "#cross" } + } + }, + { + "from": [9.6, -1, 1], + "to": [9.6, 15, 15], + "rotation": { + "origin": [8, 8, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#back" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#front" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_bottom.json index 83df2f2a..bba700af 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_syringa_bottom" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_syringa_bottom" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_top.json b/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_top.json index 5655a6ea..eb00fce1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/double_syringa_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/double_plant_syringa_top" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/double_plant_syringa_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dragon_egg.json b/desktopRuntime/resources/assets/minecraft/models/block/dragon_egg.json index 6c70366f..f2b2d49f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dragon_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dragon_egg.json @@ -1,97 +1,105 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/dragon_egg", - "all": "blocks/dragon_egg" - }, - "elements": [ - { "from": [ 6, 15, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, - "north": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, - "south": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, - "west": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, - "east": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" } - } - }, - { "from": [ 5, 14, 5 ], - "to": [ 11, 15, 11 ], - "faces": { - "down": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, - "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, - "north": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, - "south": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, - "west": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, - "east": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" } - } - }, - { "from": [ 5, 13, 5 ], - "to": [ 11, 14, 11 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, - "north": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, - "south": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, - "west": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, - "east": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" } - } - }, - { "from": [ 3, 11, 3 ], - "to": [ 13, 13, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, - "north": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, - "south": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, - "west": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, - "east": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" } - } - }, - { "from": [ 2, 8, 2 ], - "to": [ 14, 11, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, - "north": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, - "south": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, - "west": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, - "east": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" } - } - }, - { "from": [ 1, 3, 1 ], - "to": [ 15, 8, 15 ], - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, - "north": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, - "south": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, - "west": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, - "east": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" } - } - }, - { "from": [ 2, 1, 2 ], - "to": [ 14, 3, 14 ], - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, - "north": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, - "south": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, - "west": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, - "east": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" } - } - }, - { "from": [ 3, 0, 3 ], - "to": [ 13, 1, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, - "north": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, - "south": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, - "west": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, - "east": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/dragon_egg", + "all": "blocks/dragon_egg" + }, + "elements": [ + { + "from": [6, 15, 6], + "to": [10, 16, 10], + "faces": { + "down": { "uv": [6, 6, 10, 10], "texture": "#all" }, + "up": { "uv": [6, 6, 10, 10], "texture": "#all" }, + "north": { "uv": [6, 15, 10, 16], "texture": "#all" }, + "south": { "uv": [6, 15, 10, 16], "texture": "#all" }, + "west": { "uv": [6, 15, 10, 16], "texture": "#all" }, + "east": { "uv": [6, 15, 10, 16], "texture": "#all" } + } + }, + { + "from": [5, 14, 5], + "to": [11, 15, 11], + "faces": { + "down": { "uv": [5, 5, 11, 11], "texture": "#all" }, + "up": { "uv": [5, 5, 11, 11], "texture": "#all" }, + "north": { "uv": [5, 14, 11, 15], "texture": "#all" }, + "south": { "uv": [5, 14, 11, 15], "texture": "#all" }, + "west": { "uv": [5, 14, 11, 15], "texture": "#all" }, + "east": { "uv": [5, 14, 11, 15], "texture": "#all" } + } + }, + { + "from": [5, 13, 5], + "to": [11, 14, 11], + "faces": { + "down": { "uv": [4, 4, 12, 12], "texture": "#all" }, + "up": { "uv": [4, 4, 12, 12], "texture": "#all" }, + "north": { "uv": [4, 13, 12, 14], "texture": "#all" }, + "south": { "uv": [4, 13, 12, 14], "texture": "#all" }, + "west": { "uv": [4, 13, 12, 14], "texture": "#all" }, + "east": { "uv": [4, 13, 12, 14], "texture": "#all" } + } + }, + { + "from": [3, 11, 3], + "to": [13, 13, 13], + "faces": { + "down": { "uv": [3, 3, 13, 13], "texture": "#all" }, + "up": { "uv": [3, 3, 13, 13], "texture": "#all" }, + "north": { "uv": [3, 11, 13, 13], "texture": "#all" }, + "south": { "uv": [3, 11, 13, 13], "texture": "#all" }, + "west": { "uv": [3, 11, 13, 13], "texture": "#all" }, + "east": { "uv": [3, 11, 13, 13], "texture": "#all" } + } + }, + { + "from": [2, 8, 2], + "to": [14, 11, 14], + "faces": { + "down": { "uv": [2, 2, 14, 14], "texture": "#all" }, + "up": { "uv": [2, 2, 14, 14], "texture": "#all" }, + "north": { "uv": [2, 8, 14, 11], "texture": "#all" }, + "south": { "uv": [2, 8, 14, 11], "texture": "#all" }, + "west": { "uv": [2, 8, 14, 11], "texture": "#all" }, + "east": { "uv": [2, 8, 14, 11], "texture": "#all" } + } + }, + { + "from": [1, 3, 1], + "to": [15, 8, 15], + "faces": { + "down": { "uv": [1, 1, 15, 15], "texture": "#all" }, + "up": { "uv": [1, 1, 15, 15], "texture": "#all" }, + "north": { "uv": [1, 3, 15, 8], "texture": "#all" }, + "south": { "uv": [1, 3, 15, 8], "texture": "#all" }, + "west": { "uv": [1, 3, 15, 8], "texture": "#all" }, + "east": { "uv": [1, 3, 15, 8], "texture": "#all" } + } + }, + { + "from": [2, 1, 2], + "to": [14, 3, 14], + "faces": { + "down": { "uv": [2, 2, 14, 14], "texture": "#all" }, + "up": { "uv": [2, 2, 14, 14], "texture": "#all" }, + "north": { "uv": [2, 1, 14, 3], "texture": "#all" }, + "south": { "uv": [2, 1, 14, 3], "texture": "#all" }, + "west": { "uv": [2, 1, 14, 3], "texture": "#all" }, + "east": { "uv": [2, 1, 14, 3], "texture": "#all" } + } + }, + { + "from": [3, 0, 3], + "to": [13, 1, 13], + "faces": { + "down": { "uv": [3, 3, 13, 13], "texture": "#all" }, + "up": { "uv": [3, 3, 13, 13], "texture": "#all" }, + "north": { "uv": [3, 0, 13, 1], "texture": "#all" }, + "south": { "uv": [3, 0, 13, 1], "texture": "#all" }, + "west": { "uv": [3, 0, 13, 1], "texture": "#all" }, + "east": { "uv": [3, 0, 13, 1], "texture": "#all" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dropper.json b/desktopRuntime/resources/assets/minecraft/models/block/dropper.json index d1a4430d..05434c9c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dropper.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dropper.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/furnace_top", - "front": "blocks/dropper_front_horizontal", - "side": "blocks/furnace_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/furnace_top", + "front": "blocks/dropper_front_horizontal", + "side": "blocks/furnace_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/dropper_vertical.json b/desktopRuntime/resources/assets/minecraft/models/block/dropper_vertical.json index a9d3bf3a..98f0a639 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/dropper_vertical.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/dropper_vertical.json @@ -1,7 +1,7 @@ -{ - "parent": "block/orientable_vertical", - "textures": { - "front": "blocks/dropper_front_vertical", - "side": "blocks/furnace_top" - } -} +{ + "parent": "block/orientable_vertical", + "textures": { + "front": "blocks/dropper_front_vertical", + "side": "blocks/furnace_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/emerald_block.json b/desktopRuntime/resources/assets/minecraft/models/block/emerald_block.json index 8b71001b..ef330ea0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/emerald_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/emerald_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/emerald_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/emerald_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/emerald_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/emerald_ore.json index 85c940e4..60a0d05c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/emerald_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/emerald_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/emerald_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/emerald_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/enchanting_table_base.json b/desktopRuntime/resources/assets/minecraft/models/block/enchanting_table_base.json index 3980094f..d3936b46 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/enchanting_table_base.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/enchanting_table_base.json @@ -1,21 +1,38 @@ -{ - "textures": { - "particle": "blocks/enchanting_table_bottom", - "bottom": "blocks/enchanting_table_bottom", - "top": "blocks/enchanting_table_top", - "side": "blocks/enchanting_table_side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 12, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/enchanting_table_bottom", + "bottom": "blocks/enchanting_table_bottom", + "top": "blocks/enchanting_table_top", + "side": "blocks/enchanting_table_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 4, 16, 16], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_empty.json b/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_empty.json index a266dc0d..8c01c1cc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_empty.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_empty.json @@ -1,21 +1,22 @@ -{ - "textures": { - "particle": "blocks/endframe_side", - "bottom": "blocks/end_stone", - "top": "blocks/endframe_top", - "side": "blocks/endframe_side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 13, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/endframe_side", + "bottom": "blocks/end_stone", + "top": "blocks/endframe_top", + "side": "blocks/endframe_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 13, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "south": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "west": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "east": { "uv": [0, 3, 16, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_filled.json b/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_filled.json index 4d4c105d..69a39a98 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_filled.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/end_portal_frame_filled.json @@ -1,33 +1,35 @@ -{ - "textures": { - "particle": "blocks/endframe_side", - "bottom": "blocks/end_stone", - "top": "blocks/endframe_top", - "side": "blocks/endframe_side", - "eye": "blocks/endframe_eye" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 13, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "south": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" }, - "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#side" } - } - }, - { "from": [ 4, 13, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#eye" }, - "north": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, - "south": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, - "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" }, - "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#eye" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/endframe_side", + "bottom": "blocks/end_stone", + "top": "blocks/endframe_top", + "side": "blocks/endframe_side", + "eye": "blocks/endframe_eye" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 13, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "south": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "west": { "uv": [0, 3, 16, 16], "texture": "#side" }, + "east": { "uv": [0, 3, 16, 16], "texture": "#side" } + } + }, + { + "from": [4, 13, 4], + "to": [12, 16, 12], + "faces": { + "down": { "uv": [4, 4, 12, 12], "texture": "#eye" }, + "up": { "uv": [4, 4, 12, 12], "texture": "#eye" }, + "north": { "uv": [4, 0, 12, 3], "texture": "#eye" }, + "south": { "uv": [4, 0, 12, 3], "texture": "#eye" }, + "west": { "uv": [4, 0, 12, 3], "texture": "#eye" }, + "east": { "uv": [4, 0, 12, 3], "texture": "#eye" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/end_stone.json b/desktopRuntime/resources/assets/minecraft/models/block/end_stone.json index e7eb48ab..1644c629 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/end_stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/end_stone.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/end_stone" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/end_stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/farmland.json b/desktopRuntime/resources/assets/minecraft/models/block/farmland.json index 87b81261..c04d5b26 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/farmland.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/farmland.json @@ -1,15 +1,32 @@ -{ - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 15, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#dirt", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "north" }, - "south": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "south" }, - "west": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "west" }, - "east": { "uv": [ 0, 1, 16, 16 ], "texture": "#dirt", "cullface": "east" } - } - } - ] -} +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 15, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#dirt", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 1, 16, 16], + "texture": "#dirt", + "cullface": "north" + }, + "south": { + "uv": [0, 1, 16, 16], + "texture": "#dirt", + "cullface": "south" + }, + "west": { + "uv": [0, 1, 16, 16], + "texture": "#dirt", + "cullface": "west" + }, + "east": { "uv": [0, 1, 16, 16], "texture": "#dirt", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/farmland_dry.json b/desktopRuntime/resources/assets/minecraft/models/block/farmland_dry.json index fd4aae8d..5c46a0db 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/farmland_dry.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/farmland_dry.json @@ -1,8 +1,8 @@ -{ - "parent": "block/farmland", - "textures": { - "particle": "blocks/dirt", - "dirt": "blocks/dirt", - "top": "blocks/farmland_dry" - } -} +{ + "parent": "block/farmland", + "textures": { + "particle": "blocks/dirt", + "dirt": "blocks/dirt", + "top": "blocks/farmland_dry" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/farmland_moist.json b/desktopRuntime/resources/assets/minecraft/models/block/farmland_moist.json index 0c71d8f8..4f44e650 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/farmland_moist.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/farmland_moist.json @@ -1,8 +1,8 @@ -{ - "parent": "block/farmland", - "textures": { - "particle": "blocks/dirt", - "dirt": "blocks/dirt", - "top": "blocks/farmland_wet" - } -} +{ + "parent": "block/farmland", + "textures": { + "particle": "blocks/dirt", + "dirt": "blocks/dirt", + "top": "blocks/farmland_wet" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_closed.json index 9f5df16f..a45cc727 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_closed.json @@ -1,95 +1,111 @@ -{ - "textures": { - "particle" : "#texture" - }, - "elements": [ - { "__comment": "Left-hand post", - "from": [ 0, 5, 7 ], - "to": [ 2, 16, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } - } - }, - { "__comment": "Right-hand post", - "from": [ 14, 5, 7 ], - "to": [ 16, 16, 9 ], - "faces": { - "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } - } - }, - { "__comment": "Inner vertical post of left-hand gate door", - "from": [ 6, 6, 7 ], - "to": [ 8, 15, 9 ], - "faces": { - "down": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, - "up": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, - "north": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, - "south": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, - "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Inner vertical post of right-hand gate door", - "from": [ 8, 6, 7 ], - "to": [ 10, 15, 9 ], - "faces": { - "down": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, - "up": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, - "north": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, - "south": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, - "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 2, 6, 7 ], - "to": [ 6, 9, 9 ], - "faces": { - "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "north": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" }, - "south": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 2, 12, 7 ], - "to": [ 6, 15, 9 ], - "faces": { - "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "north": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" }, - "south": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of right-hand gate door", - "from": [ 10, 6, 7 ], - "to": [ 14, 9, 9 ], - "faces": { - "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "north": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" }, - "south": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of right-hand gate door", - "from": [ 10, 12, 7 ], - "to": [ 14, 15, 9 ], - "faces": { - "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "north": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" }, - "south": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Left-hand post", + "from": [0, 5, 7], + "to": [2, 16, 9], + "faces": { + "down": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "north": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "south": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "west": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "west" + }, + "east": { "uv": [7, 0, 9, 11], "texture": "#texture" } + } + }, + { + "__comment": "Right-hand post", + "from": [14, 5, 7], + "to": [16, 16, 9], + "faces": { + "down": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "south": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "west": { "uv": [7, 0, 9, 11], "texture": "#texture" }, + "east": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "east" + } + } + }, + { + "__comment": "Inner vertical post of left-hand gate door", + "from": [6, 6, 7], + "to": [8, 15, 9], + "faces": { + "down": { "uv": [6, 7, 8, 9], "texture": "#texture" }, + "up": { "uv": [6, 7, 8, 9], "texture": "#texture" }, + "north": { "uv": [6, 1, 8, 10], "texture": "#texture" }, + "south": { "uv": [6, 1, 8, 10], "texture": "#texture" }, + "west": { "uv": [7, 1, 9, 10], "texture": "#texture" }, + "east": { "uv": [7, 1, 9, 10], "texture": "#texture" } + } + }, + { + "__comment": "Inner vertical post of right-hand gate door", + "from": [8, 6, 7], + "to": [10, 15, 9], + "faces": { + "down": { "uv": [8, 7, 10, 9], "texture": "#texture" }, + "up": { "uv": [8, 7, 10, 9], "texture": "#texture" }, + "north": { "uv": [8, 1, 10, 10], "texture": "#texture" }, + "south": { "uv": [8, 1, 10, 10], "texture": "#texture" }, + "west": { "uv": [7, 1, 9, 10], "texture": "#texture" }, + "east": { "uv": [7, 1, 9, 10], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [2, 6, 7], + "to": [6, 9, 9], + "faces": { + "down": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "up": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "north": { "uv": [2, 7, 6, 10], "texture": "#texture" }, + "south": { "uv": [2, 7, 6, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [2, 12, 7], + "to": [6, 15, 9], + "faces": { + "down": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "up": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "north": { "uv": [2, 1, 6, 4], "texture": "#texture" }, + "south": { "uv": [2, 1, 6, 4], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of right-hand gate door", + "from": [10, 6, 7], + "to": [14, 9, 9], + "faces": { + "down": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "up": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "north": { "uv": [10, 7, 14, 10], "texture": "#texture" }, + "south": { "uv": [10, 7, 14, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of right-hand gate door", + "from": [10, 12, 7], + "to": [14, 15, 9], + "faces": { + "down": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "up": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "north": { "uv": [10, 1, 14, 4], "texture": "#texture" }, + "south": { "uv": [10, 1, 14, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_open.json index 16960c36..18c2e6ec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_gate_open.json @@ -1,95 +1,111 @@ -{ - "textures": { - "particle" : "#texture" - }, - "elements": [ - { "__comment": "Left-hand post", - "from": [ 0, 5, 7 ], - "to": [ 2, 16, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } - } - }, - { "__comment": "Right-hand post", - "from": [ 14, 5, 7 ], - "to": [ 16, 16, 9 ], - "faces": { - "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } - } - }, - { "__comment": "Inner vertical post of left-hand gate door", - "from": [ 0, 6, 13 ], - "to": [ 2, 15, 15 ], - "faces": { - "down": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, - "up": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, - "north": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, - "south": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Inner vertical post of right-hand gate door", - "from": [ 14, 6, 13 ], - "to": [ 16, 15, 15 ], - "faces": { - "down": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, - "up": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, - "north": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, - "south": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 0, 6, 9 ], - "to": [ 2, 9, 13 ], - "faces": { - "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 0, 12, 9 ], - "to": [ 2, 15, 13 ], - "faces": { - "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 14, 6, 9 ], - "to": [ 16, 9, 13 ], - "faces": { - "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 14, 12, 9 ], - "to": [ 16, 15, 13 ], - "faces": { - "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Left-hand post", + "from": [0, 5, 7], + "to": [2, 16, 9], + "faces": { + "down": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "north": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "south": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "west": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "west" + }, + "east": { "uv": [7, 0, 9, 11], "texture": "#texture" } + } + }, + { + "__comment": "Right-hand post", + "from": [14, 5, 7], + "to": [16, 16, 9], + "faces": { + "down": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "south": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "west": { "uv": [7, 0, 9, 11], "texture": "#texture" }, + "east": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "east" + } + } + }, + { + "__comment": "Inner vertical post of left-hand gate door", + "from": [0, 6, 13], + "to": [2, 15, 15], + "faces": { + "down": { "uv": [0, 13, 2, 15], "texture": "#texture" }, + "up": { "uv": [0, 13, 2, 15], "texture": "#texture" }, + "north": { "uv": [0, 1, 2, 10], "texture": "#texture" }, + "south": { "uv": [0, 1, 2, 10], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Inner vertical post of right-hand gate door", + "from": [14, 6, 13], + "to": [16, 15, 15], + "faces": { + "down": { "uv": [14, 13, 16, 15], "texture": "#texture" }, + "up": { "uv": [14, 13, 16, 15], "texture": "#texture" }, + "north": { "uv": [14, 1, 16, 10], "texture": "#texture" }, + "south": { "uv": [14, 1, 16, 10], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [0, 6, 9], + "to": [2, 9, 13], + "faces": { + "down": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "up": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "west": { "uv": [13, 7, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 7, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [0, 12, 9], + "to": [2, 15, 13], + "faces": { + "down": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "up": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 4], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 4], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [14, 6, 9], + "to": [16, 9, 13], + "faces": { + "down": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "up": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "west": { "uv": [13, 7, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 7, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [14, 12, 9], + "to": [16, 15, 13], + "faces": { + "down": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "up": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 4], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_inventory.json index 7f23da44..eb3d4fb8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_inventory.json @@ -1,56 +1,68 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 0 ], - "to": [ 10, 16, 4 ], - "faces": { - "down": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" }, - "east": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" } - }, - "__comment": "Left post" - }, - { "from": [ 6, 0, 12 ], - "to": [ 10, 16, 16 ], - "faces": { - "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" }, - "east": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" } - }, - "__comment": "Right post" - }, - { "from": [ 7, 13, -2 ], - "to": [ 9, 15, 18 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, - "south": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, - "west": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" } - }, - "__comment": "Top bar" - }, - { "from": [ 7, 5, -2 ], - "to": [ 9, 7, 18 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, - "west": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" }, - "east": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" } - }, - "__comment": "Lower bar" - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 0], + "to": [10, 16, 4], + "faces": { + "down": { + "uv": [6, 0, 10, 4], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 0, 10, 4], "texture": "#texture" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [0, 0, 4, 16], "texture": "#texture" }, + "east": { "uv": [0, 0, 4, 16], "texture": "#texture" } + }, + "__comment": "Left post" + }, + { + "from": [6, 0, 12], + "to": [10, 16, 16], + "faces": { + "down": { + "uv": [6, 12, 10, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 12, 10, 16], "texture": "#texture" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [12, 0, 16, 16], "texture": "#texture" }, + "east": { "uv": [12, 0, 16, 16], "texture": "#texture" } + }, + "__comment": "Right post" + }, + { + "from": [7, 13, -2], + "to": [9, 15, 18], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { "uv": [7, 1, 9, 3], "texture": "#texture" }, + "south": { "uv": [7, 1, 9, 3], "texture": "#texture" }, + "west": { "uv": [0, 1, 16, 3], "texture": "#texture" }, + "east": { "uv": [0, 1, 16, 3], "texture": "#texture" } + }, + "__comment": "Top bar" + }, + { + "from": [7, 5, -2], + "to": [9, 7, 18], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#texture" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#texture" }, + "west": { "uv": [0, 9, 16, 11], "texture": "#texture" }, + "east": { "uv": [0, 9, 16, 11], "texture": "#texture" } + }, + "__comment": "Lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_n.json index 0284fdcf..ba415f27 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_n.json @@ -1,41 +1,56 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - }, - { "from": [ 7, 12, 0 ], - "to": [ 9, 15, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" } - }, - "__comment": "North top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" } - }, - "__comment": "North lower bar" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + }, + { + "from": [7, 12, 0], + "to": [9, 15, 9], + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "north": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "north" + }, + "west": { "uv": [0, 1, 9, 4], "texture": "#texture" }, + "east": { "uv": [0, 1, 9, 4], "texture": "#texture" } + }, + "__comment": "North top bar" + }, + { + "from": [7, 6, 0], + "to": [9, 9, 9], + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "north": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "north" + }, + "west": { "uv": [0, 7, 9, 10], "texture": "#texture" }, + "east": { "uv": [0, 7, 9, 10], "texture": "#texture" } + }, + "__comment": "North lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_ne.json index b223f013..1e1a353f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_ne.json @@ -1,63 +1,88 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - }, - { "from": [ 7, 12, 0 ], - "to": [ 9, 15, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" } - }, - "__comment": "North top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" } - }, - "__comment": "North lower bar" - }, - { "from": [ 7, 12, 7 ], - "to": [ 16, 15, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 16, 4 ], "texture": "#texture" }, - "south": { "uv": [ 7, 1, 16, 4 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East top bar" - }, - { "from": [ 7, 6, 7 ], - "to": [ 16, 9, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 16, 10 ], "texture": "#texture" }, - "south": { "uv": [ 7, 7, 16, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East lower bar" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + }, + { + "from": [7, 12, 0], + "to": [9, 15, 9], + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "north": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "north" + }, + "west": { "uv": [0, 1, 9, 4], "texture": "#texture" }, + "east": { "uv": [0, 1, 9, 4], "texture": "#texture" } + }, + "__comment": "North top bar" + }, + { + "from": [7, 6, 0], + "to": [9, 9, 9], + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#texture" }, + "north": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "north" + }, + "west": { "uv": [0, 7, 9, 10], "texture": "#texture" }, + "east": { "uv": [0, 7, 9, 10], "texture": "#texture" } + }, + "__comment": "North lower bar" + }, + { + "from": [7, 12, 7], + "to": [16, 15, 9], + "faces": { + "down": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [7, 1, 16, 4], "texture": "#texture" }, + "south": { "uv": [7, 1, 16, 4], "texture": "#texture" }, + "east": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East top bar" + }, + { + "from": [7, 6, 7], + "to": [16, 9, 9], + "faces": { + "down": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [7, 7, 16, 10], "texture": "#texture" }, + "south": { "uv": [7, 7, 16, 10], "texture": "#texture" }, + "east": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_ns.json index 03a71b50..d2d33c32 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_ns.json @@ -1,43 +1,66 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - }, - { "from": [ 7, 12, 0 ], - "to": [ 9, 15, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" } - }, - "__comment": "North-south top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" } - }, - "__comment": "North-south lower bar" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + }, + { + "from": [7, 12, 0], + "to": [9, 15, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 1, 16, 4], "texture": "#texture" }, + "east": { "uv": [0, 1, 16, 4], "texture": "#texture" } + }, + "__comment": "North-south top bar" + }, + { + "from": [7, 6, 0], + "to": [9, 9, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 7, 16, 10], "texture": "#texture" }, + "east": { "uv": [0, 7, 16, 10], "texture": "#texture" } + }, + "__comment": "North-south lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_nse.json index ab7f0cc4..d5cee051 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_nse.json @@ -1,65 +1,98 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - }, - { "from": [ 7, 12, 0 ], - "to": [ 9, 15, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" } - }, - "__comment": "North-south top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" } - }, - "__comment": "North-south lower bar" - }, - { "from": [ 7, 12, 7 ], - "to": [ 16, 15, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 16, 4 ], "texture": "#texture" }, - "south": { "uv": [ 7, 1, 16, 4 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East top bar" - }, - { "from": [ 7, 6, 7 ], - "to": [ 16, 9, 9 ], - "faces": { - "down": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 16, 10 ], "texture": "#texture" }, - "south": { "uv": [ 7, 7, 16, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East lower bar" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + }, + { + "from": [7, 12, 0], + "to": [9, 15, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 1, 16, 4], "texture": "#texture" }, + "east": { "uv": [0, 1, 16, 4], "texture": "#texture" } + }, + "__comment": "North-south top bar" + }, + { + "from": [7, 6, 0], + "to": [9, 9, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 7, 16, 10], "texture": "#texture" }, + "east": { "uv": [0, 7, 16, 10], "texture": "#texture" } + }, + "__comment": "North-south lower bar" + }, + { + "from": [7, 12, 7], + "to": [16, 15, 9], + "faces": { + "down": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [7, 1, 16, 4], "texture": "#texture" }, + "south": { "uv": [7, 1, 16, 4], "texture": "#texture" }, + "east": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East top bar" + }, + { + "from": [7, 6, 7], + "to": [16, 9, 9], + "faces": { + "down": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [7, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [7, 7, 16, 10], "texture": "#texture" }, + "south": { "uv": [7, 7, 16, 10], "texture": "#texture" }, + "east": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_nsew.json index abce2487..b80fc94f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_nsew.json @@ -1,67 +1,108 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - }, - { "from": [ 7, 12, 0 ], - "to": [ 9, 15, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" } - }, - "__comment": "North-south top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 16 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" } - }, - "__comment": "North-south lower bar" - }, - { "from": [ 0, 12, 7 ], - "to": [ 16, 15, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" }, - "south": { "uv": [ 0, 1, 16, 4 ], "texture": "#texture" }, - "west": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East-west top bar" - }, - { "from": [ 0, 6, 7 ], - "to": [ 16, 9, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" }, - "south": { "uv": [ 0, 7, 16, 10 ], "texture": "#texture" }, - "west": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "east" } - }, - "__comment": "East-west lower bar" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + }, + { + "from": [7, 12, 0], + "to": [9, 15, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 1, 16, 4], "texture": "#texture" }, + "east": { "uv": [0, 1, 16, 4], "texture": "#texture" } + }, + "__comment": "North-south top bar" + }, + { + "from": [7, 6, 0], + "to": [9, 9, 16], + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#texture" }, + "north": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "south" + }, + "west": { "uv": [0, 7, 16, 10], "texture": "#texture" }, + "east": { "uv": [0, 7, 16, 10], "texture": "#texture" } + }, + "__comment": "North-south lower bar" + }, + { + "from": [0, 12, 7], + "to": [16, 15, 9], + "faces": { + "down": { "uv": [0, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [0, 1, 16, 4], "texture": "#texture" }, + "south": { "uv": [0, 1, 16, 4], "texture": "#texture" }, + "west": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [7, 1, 9, 4], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East-west top bar" + }, + { + "from": [0, 6, 7], + "to": [16, 9, 9], + "faces": { + "down": { "uv": [0, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [0, 7, 16, 10], "texture": "#texture" }, + "south": { "uv": [0, 7, 16, 10], "texture": "#texture" }, + "west": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [7, 7, 9, 10], + "texture": "#texture", + "cullface": "east" + } + }, + "__comment": "East-west lower bar" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/fence_post.json index 7e0bbf00..cdc86541 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fence_post.json @@ -1,19 +1,24 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" } - }, - "__comment": "Center post" - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 16, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#texture", "cullface": "up" }, + "north": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "south": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "west": { "uv": [6, 0, 10, 16], "texture": "#texture" }, + "east": { "uv": [6, 0, 10, 16], "texture": "#texture" } + }, + "__comment": "Center post" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fern.json b/desktopRuntime/resources/assets/minecraft/models/block/fern.json index 1ccc4631..018d2e59 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fern.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fern.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/fern" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/fern" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_floor.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_floor.json index 3639edf2..af60f9da 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_floor.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_floor.json @@ -1,49 +1,77 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 0, 8.8 ], - "to": [ 16, 22.4, 8.8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 0, 7.2 ], - "to": [ 16, 22.4, 7.2 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 8.8, 0, 0 ], - "to": [ 8.8, 22.4, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 7.2, 0, 0 ], - "to": [ 7.2, 22.4, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 0, 15.99 ], - "to": [ 16, 22.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 0, 0.01 ], - "to": [ 16, 22.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 0, 0 ], - "to": [ 0.01, 22.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 0, 0 ], - "to": [ 15.99, 22.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 0, 8.8], + "to": [16, 22.4, 8.8], + "rotation": { + "origin": [8, 8, 8], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 0, 7.2], + "to": [16, 22.4, 7.2], + "rotation": { + "origin": [8, 8, 8], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [8.8, 0, 0], + "to": [8.8, 22.4, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [7.2, 0, 0], + "to": [7.2, 22.4, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 0, 15.99], + "to": [16, 22.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 0, 0.01], + "to": [16, 22.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 0, 0], + "to": [0.01, 22.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 0, 0], + "to": [15.99, 22.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_floor_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_floor_main.json index 23f2e0ef..398adc98 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_floor_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_floor_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_floor", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_floor", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n.json index 21c5c661..e463f42d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n.json @@ -1,15 +1,17 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt.json index 7c0d761a..cb8ba2f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_n", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_n", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt_flip.json index fe240d8c..780b227f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_n_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_n_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip.json index 61a3ff2e..792381ec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip.json @@ -1,15 +1,17 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip_main.json index 604a4128..fda114a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_n_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_n_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_main.json index 8a353eba..1c466f96 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_n_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_n_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_n", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_n", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne.json index 019e2719..cd39a27f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne.json @@ -1,25 +1,29 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt.json index 2f9b4a61..435c2271 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ne", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_ne", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt_flip.json index 060d8e83..063be07a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ne_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_ne_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip.json index 8055b3ae..3b25eebd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip.json @@ -1,25 +1,29 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip_main.json index 2d3a4828..edfd4327 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ne_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_ne_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_main.json index 6fc9e623..6e01c98c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ne_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ne", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_ne", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1.json index 7e7b25ce..4069b3e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1.json @@ -1,37 +1,57 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt.json index e8d29fd9..40b2153e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu1", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_neu1", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt_flip.json index cf18fc3c..627c4cbc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu1_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_neu1_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip.json index 3d7e83b6..e4060849 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip.json @@ -1,37 +1,57 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip_main.json index b1dcc724..ab855eef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu1_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_neu1_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_main.json index 57a0669d..14d01009 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_neu1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2.json index 4124bcae..2d0f51db 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2.json @@ -1,37 +1,55 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt.json index dc715c49..caec2621 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_neu2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt_flip.json index b56d9ee9..2ad530ab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu2_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_neu2_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip.json index dee5540e..39d4f17d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip.json @@ -1,37 +1,55 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip_main.json index 6725d239..fcaf0b3c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu2_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_neu2_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_main.json index a734c8d6..2a359fcd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_neu2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_neu2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_neu2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns.json index 60d56c2f..c6f3e71e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns.json @@ -1,25 +1,29 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt.json index 07123f3e..943cbafc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ns", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_ns", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt_flip.json index 053484a3..bb644d9e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ns_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_ns_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip.json index 388d0bd4..2e6fcba0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip.json @@ -1,25 +1,29 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip_main.json index 704cca32..c60de480 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ns_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_ns_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_main.json index c199b7f3..eb43371c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_ns_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_ns", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_ns", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse.json index 2e10fe50..ef307e17 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse.json @@ -1,35 +1,41 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt.json index 702a1ca5..add1febd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nse", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nse", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt_flip.json index 9b70f8d3..b4512d7e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nse_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nse_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip.json index 9a579394..2b94ef0c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip.json @@ -1,35 +1,41 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip_main.json index 663fb0a1..a24d0870 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nse_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nse_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_main.json index 622ba1ec..987d429c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nse_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nse", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nse", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1.json index 2536ce91..c8279f92 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1.json @@ -1,47 +1,69 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt.json index 95cfe31a..0ed8e777 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu1", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nseu1", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt_flip.json index c57f9026..80431f03 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu1_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nseu1_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip.json index 24f6327a..44e3aa4c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip.json @@ -1,47 +1,69 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip_main.json index ef298a38..5777e504 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu1_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nseu1_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_main.json index 65d0591b..f96f686e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nseu1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2.json index 399fe196..7eb96bbc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2.json @@ -1,47 +1,67 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt.json index 954a7863..42b76be9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nseu2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt_flip.json index 654f1c49..b312fcf9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu2_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nseu2_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip.json index f080b592..9f8d8db1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip.json @@ -1,47 +1,67 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip_main.json index c40d3ae8..7f093373 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu2_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nseu2_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_main.json index c9099e70..308af997 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nseu2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nseu2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nseu2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew.json index 5a5ca615..dc11b55a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew.json @@ -1,45 +1,53 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt.json index 46cfac0b..f0d1a8c6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsew", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsew", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt_flip.json index feb28c34..01771064 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsew_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsew_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip.json index 44683aaf..f88ebe43 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip.json @@ -1,45 +1,53 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip_main.json index ae3a137c..a4f1f237 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsew_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsew_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_main.json index 29ab6c7a..8feccb64 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsew_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsew", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsew", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1.json index ff4ee8ca..e38ceeb8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1.json @@ -1,57 +1,81 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt.json index c505994d..a93a30a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu1", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsewu1", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt_flip.json index d73488e6..098fc46e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu1_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsewu1_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip.json index 472216d2..07563503 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip.json @@ -1,57 +1,81 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip_main.json index 76707e87..5f8debc9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu1_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsewu1_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_main.json index b0344a99..14e5aae4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsewu1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2.json index d49a5ae4..7bd19bde 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2.json @@ -1,57 +1,79 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt.json index 07059977..e862a0f0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsewu2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt_flip.json index 7a24ae41..da1fb43b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu2_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsewu2_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip.json index 5945f408..62c48d6a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip.json @@ -1,57 +1,79 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 15.99, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0.01, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 15.99, 1, 0 ], - "to": [ 0.01, 23.4, 16 ], - "shade": false, - "faces": { "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [15.99, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0.01, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "east": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [15.99, 1, 0], + "to": [0.01, 23.4, 16], + "shade": false, + "faces": { "west": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip_main.json index 1e17b7a6..0d799048 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu2_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsewu2_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_main.json index a98616e8..2d7ab40e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsewu2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsewu2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsewu2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1.json index df974560..d5e1d20e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1.json @@ -1,37 +1,57 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt.json index d494b00a..7c726a43 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu1", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsu1", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt_flip.json index e8f08bc6..337f4376 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu1_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsu1_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip.json index a4dbe7c6..a4dcf937 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip.json @@ -1,37 +1,57 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip_main.json index 769b7974..91f8de82 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu1_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsu1_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_main.json index 5f7ba045..3394fa43 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsu1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2.json index 1c29b618..4bdc77c4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2.json @@ -1,37 +1,55 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt.json index 93e4f54c..a07437f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsu2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt_flip.json index 00379ef5..48ce7da4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu2_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nsu2_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip.json index a08a26ad..2c8cd043 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip.json @@ -1,37 +1,55 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 15.99 ], - "to": [ 16, 23.4, 15.99 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 15.99], + "to": [16, 23.4, 15.99], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip_main.json index 0f57d9ab..2776099d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu2_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsu2_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_main.json index ebe42499..c04abee6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nsu2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nsu2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nsu2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1.json index 53f01986..775a8379 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1.json @@ -1,27 +1,45 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt.json index ff75b283..e54b7b22 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu1", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nu1", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt_flip.json index e5306a71..fa355293 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_u2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_u2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_flip_main.json index 7071ff99..44d020d8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_u2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_u2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_main.json index 63fc8e7b..098fbd45 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nu1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2.json index 454b9a86..08c00658 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2.json @@ -1,27 +1,43 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt.json index 858b9369..8cb0fe63 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu2", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nu2", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt_flip.json index 07a15a76..d41a1a71 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_alt_flip.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu2_flip", - "textures": { - "particle": "blocks/fire_layer_1", - "fire": "blocks/fire_layer_1" - } -} +{ + "parent": "block/fire_nu2_flip", + "textures": { + "particle": "blocks/fire_layer_1", + "fire": "blocks/fire_layer_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip.json index 68ab86dd..00d6fea9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip.json @@ -1,27 +1,43 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 1, 0.01 ], - "to": [ 16, 23.4, 0.01 ], - "shade": false, - "faces": { "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#fire" }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "south": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 1, 0.01], + "to": [16, 23.4, 0.01], + "shade": false, + "faces": { "north": { "uv": [16, 0, 0, 16], "texture": "#fire" } } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip_main.json index 5e3b9b9f..cd63d028 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_flip_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu2_flip", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nu2_flip", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_main.json index 8e31cbf3..1516080d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_nu2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_nu2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_nu2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_u1.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_u1.json index faf8a4e3..0c52ee80 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_u1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_u1.json @@ -1,17 +1,33 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 16, 16, 8 ], "axis": "z", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 270 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 0, 16, 8 ], "axis": "z", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 90 }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [16, 16, 8], + "axis": "z", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 270 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [0, 16, 8], + "axis": "z", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_u1_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_u1_main.json index 73e06721..1d9d9484 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_u1_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_u1_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_u1", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_u1", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_u2.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_u2.json index b2476917..a93dfac5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_u2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_u2.json @@ -1,17 +1,31 @@ -{ - "ambientocclusion": false, - "elements": [ - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 16 ], "axis": "x", "angle": -22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire", "rotation": 180 }} - }, - { "from": [ 0, 16, 0 ], - "to": [ 16, 16, 16 ], - "rotation": { "origin": [ 8, 16, 0 ], "axis": "x", "angle": 22.5, "rescale": true }, - "shade": false, - "faces": { "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#fire" }} - } - ] -} +{ + "ambientocclusion": false, + "elements": [ + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 16], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#fire", "rotation": 180 } + } + }, + { + "from": [0, 16, 0], + "to": [16, 16, 16], + "rotation": { + "origin": [8, 16, 0], + "axis": "x", + "angle": 22.5, + "rescale": true + }, + "shade": false, + "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#fire" } } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/fire_u2_main.json b/desktopRuntime/resources/assets/minecraft/models/block/fire_u2_main.json index 7071ff99..44d020d8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/fire_u2_main.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/fire_u2_main.json @@ -1,7 +1,7 @@ -{ - "parent": "block/fire_u2", - "textures": { - "particle": "blocks/fire_layer_0", - "fire": "blocks/fire_layer_0" - } -} +{ + "parent": "block/fire_u2", + "textures": { + "particle": "blocks/fire_layer_0", + "fire": "blocks/fire_layer_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot.json index 054d5fac..f36ae70f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot.json @@ -1,57 +1,82 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/flower_pot", - "flowerpot": "blocks/flower_pot", - "dirt": "blocks/dirt" - }, - "elements": [ - { "from": [ 5, 0, 5 ], - "to": [ 6, 6, 11 ], - "faces": { - "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 10, 0, 5 ], - "to": [ 11, 6, 11 ], - "faces": { - "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 5 ], - "to": [ 10, 6, 6 ], - "faces": { - "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 10 ], - "to": [ 10, 6, 11 ], - "faces": { - "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 6 ], - "to": [ 10, 4, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/flower_pot", + "flowerpot": "blocks/flower_pot", + "dirt": "blocks/dirt" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [6, 6, 11], + "faces": { + "down": { + "uv": [5, 5, 6, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [5, 5, 6, 11], "texture": "#flowerpot" }, + "north": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "south": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [10, 0, 5], + "to": [11, 6, 11], + "faces": { + "down": { + "uv": [10, 5, 11, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [10, 5, 11, 11], "texture": "#flowerpot" }, + "north": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "south": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 5], + "to": [10, 6, 6], + "faces": { + "down": { + "uv": [6, 10, 10, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 5, 10, 6], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 10], + "to": [10, 6, 11], + "faces": { + "down": { + "uv": [6, 5, 10, 6], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 10, 10, 11], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#dirt" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_acacia.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_acacia.json index 040894d9..1f6ed67c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_acacia.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_acacia.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_acacia" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_allium.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_allium.json index 3453e0d6..9f625e8b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_allium.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_allium.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_allium" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_allium" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_birch.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_birch.json index 8651cd3a..6375509d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_birch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_birch.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_birch" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cactus.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cactus.json index b29ff15a..066e8085 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cactus.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cactus.json @@ -1,86 +1,114 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/flower_pot", - "flowerpot": "blocks/flower_pot", - "dirt": "blocks/dirt", - "cactus": "blocks/cactus_side" - }, - "elements": [ - { "from": [ 5, 0, 5 ], - "to": [ 6, 6, 11 ], - "faces": { - "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 10, 0, 5 ], - "to": [ 11, 6, 11 ], - "faces": { - "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 5 ], - "to": [ 10, 6, 6 ], - "faces": { - "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 10 ], - "to": [ 10, 6, 11 ], - "faces": { - "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 6 ], - "to": [ 10, 4, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } - } - }, - { "from": [ 6, 4, 6 ], - "to": [ 10, 8, 10 ], - "faces": { - "north": { "uv": [ 6, 8, 10, 12 ], "texture": "#cactus" }, - "south": { "uv": [ 6, 8, 10, 12 ], "texture": "#cactus" }, - "west": { "uv": [ 6, 8, 10, 12 ], "texture": "#cactus" }, - "east": { "uv": [ 6, 8, 10, 12 ], "texture": "#cactus" } - } - }, - { "from": [ 6, 8, 6 ], - "to": [ 10, 12, 10 ], - "faces": { - "north": { "uv": [ 6, 4, 10, 8 ], "texture": "#cactus" }, - "south": { "uv": [ 6, 4, 10, 8 ], "texture": "#cactus" }, - "west": { "uv": [ 6, 4, 10, 8 ], "texture": "#cactus" }, - "east": { "uv": [ 6, 4, 10, 8 ], "texture": "#cactus" } - } - }, - { "from": [ 6, 12, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#cactus" }, - "north": { "uv": [ 6, 0, 10, 4 ], "texture": "#cactus" }, - "south": { "uv": [ 6, 0, 10, 4 ], "texture": "#cactus" }, - "west": { "uv": [ 6, 0, 10, 4 ], "texture": "#cactus" }, - "east": { "uv": [ 6, 0, 10, 4 ], "texture": "#cactus" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/flower_pot", + "flowerpot": "blocks/flower_pot", + "dirt": "blocks/dirt", + "cactus": "blocks/cactus_side" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [6, 6, 11], + "faces": { + "down": { + "uv": [5, 5, 6, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [5, 5, 6, 11], "texture": "#flowerpot" }, + "north": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "south": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [10, 0, 5], + "to": [11, 6, 11], + "faces": { + "down": { + "uv": [10, 5, 11, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [10, 5, 11, 11], "texture": "#flowerpot" }, + "north": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "south": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 5], + "to": [10, 6, 6], + "faces": { + "down": { + "uv": [6, 10, 10, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 5, 10, 6], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 10], + "to": [10, 6, 11], + "faces": { + "down": { + "uv": [6, 5, 10, 6], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 10, 10, 11], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#dirt" } + } + }, + { + "from": [6, 4, 6], + "to": [10, 8, 10], + "faces": { + "north": { "uv": [6, 8, 10, 12], "texture": "#cactus" }, + "south": { "uv": [6, 8, 10, 12], "texture": "#cactus" }, + "west": { "uv": [6, 8, 10, 12], "texture": "#cactus" }, + "east": { "uv": [6, 8, 10, 12], "texture": "#cactus" } + } + }, + { + "from": [6, 8, 6], + "to": [10, 12, 10], + "faces": { + "north": { "uv": [6, 4, 10, 8], "texture": "#cactus" }, + "south": { "uv": [6, 4, 10, 8], "texture": "#cactus" }, + "west": { "uv": [6, 4, 10, 8], "texture": "#cactus" }, + "east": { "uv": [6, 4, 10, 8], "texture": "#cactus" } + } + }, + { + "from": [6, 12, 6], + "to": [10, 16, 10], + "faces": { + "up": { "uv": [6, 6, 10, 10], "texture": "#cactus" }, + "north": { "uv": [6, 0, 10, 4], "texture": "#cactus" }, + "south": { "uv": [6, 0, 10, 4], "texture": "#cactus" }, + "west": { "uv": [6, 0, 10, 4], "texture": "#cactus" }, + "east": { "uv": [6, 0, 10, 4], "texture": "#cactus" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cross.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cross.json index 5b2f7f3b..fcd29db1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cross.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_cross.json @@ -1,73 +1,110 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/flower_pot", - "flowerpot": "blocks/flower_pot", - "dirt": "blocks/dirt" - }, - "elements": [ - { "from": [ 5, 0, 5 ], - "to": [ 6, 6, 11 ], - "faces": { - "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 10, 0, 5 ], - "to": [ 11, 6, 11 ], - "faces": { - "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 5 ], - "to": [ 10, 6, 6 ], - "faces": { - "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 10 ], - "to": [ 10, 6, 11 ], - "faces": { - "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 6 ], - "to": [ 10, 4, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } - } - }, - { "from": [ 2.6, 4, 8 ], - "to": [ 13.4, 16, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" } - } - }, - { "from": [ 8, 4, 2.6 ], - "to": [ 8, 16, 13.4 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/flower_pot", + "flowerpot": "blocks/flower_pot", + "dirt": "blocks/dirt" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [6, 6, 11], + "faces": { + "down": { + "uv": [5, 5, 6, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [5, 5, 6, 11], "texture": "#flowerpot" }, + "north": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "south": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [10, 0, 5], + "to": [11, 6, 11], + "faces": { + "down": { + "uv": [10, 5, 11, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [10, 5, 11, 11], "texture": "#flowerpot" }, + "north": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "south": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 5], + "to": [10, 6, 6], + "faces": { + "down": { + "uv": [6, 10, 10, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 5, 10, 6], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 10], + "to": [10, 6, 11], + "faces": { + "down": { + "uv": [6, 5, 10, 6], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 10, 10, 11], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#dirt" } + } + }, + { + "from": [2.6, 4, 8], + "to": [13.4, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#plant" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#plant" } + } + }, + { + "from": [8, 4, 2.6], + "to": [8, 16, 13.4], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#plant" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#plant" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_daisy.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_daisy.json index f3886bcd..fba3dc4c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_daisy.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_daisy.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_oxeye_daisy" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_oxeye_daisy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dandelion.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dandelion.json index ebc5f064..92ba1422 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dandelion.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dandelion.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_dandelion" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_dandelion" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dark_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dark_oak.json index 4953b007..24def308 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dark_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dark_oak.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_roofed_oak" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_roofed_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dead_bush.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dead_bush.json index 6c3a90d1..517efc40 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dead_bush.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_dead_bush.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/deadbush" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/deadbush" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_fern.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_fern.json index 1fb45b79..1fc92905 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_fern.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_fern.json @@ -1,74 +1,111 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/flower_pot", - "flowerpot": "blocks/flower_pot", - "dirt": "blocks/dirt", - "plant": "blocks/fern" - }, - "elements": [ - { "from": [ 5, 0, 5 ], - "to": [ 6, 6, 11 ], - "faces": { - "down": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 5, 5, 6, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 10, 0, 5 ], - "to": [ 11, 6, 11 ], - "faces": { - "down": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 10, 5, 11, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 5, 10, 6, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 10, 10, 11, 16 ], "texture": "#flowerpot" }, - "west": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" }, - "east": { "uv": [ 5, 10, 11, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 5 ], - "to": [ 10, 6, 6 ], - "faces": { - "down": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 10 ], - "to": [ 10, 6, 11 ], - "faces": { - "down": { "uv": [ 6, 5, 10, 6 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 10, 10, 11 ], "texture": "#flowerpot" }, - "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" }, - "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#flowerpot" } - } - }, - { "from": [ 6, 0, 6 ], - "to": [ 10, 4, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#flowerpot", "cullface": "down" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#dirt" } - } - }, - { "from": [ 2.6, 4, 8 ], - "to": [ 13.4, 16, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 } - } - }, - { "from": [ 8, 4, 2.6 ], - "to": [ 8, 16, 13.4 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#plant", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/flower_pot", + "flowerpot": "blocks/flower_pot", + "dirt": "blocks/dirt", + "plant": "blocks/fern" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [6, 6, 11], + "faces": { + "down": { + "uv": [5, 5, 6, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [5, 5, 6, 11], "texture": "#flowerpot" }, + "north": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "south": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [10, 0, 5], + "to": [11, 6, 11], + "faces": { + "down": { + "uv": [10, 5, 11, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [10, 5, 11, 11], "texture": "#flowerpot" }, + "north": { "uv": [5, 10, 6, 16], "texture": "#flowerpot" }, + "south": { "uv": [10, 10, 11, 16], "texture": "#flowerpot" }, + "west": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" }, + "east": { "uv": [5, 10, 11, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 5], + "to": [10, 6, 6], + "faces": { + "down": { + "uv": [6, 10, 10, 11], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 5, 10, 6], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 10], + "to": [10, 6, 11], + "faces": { + "down": { + "uv": [6, 5, 10, 6], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 10, 10, 11], "texture": "#flowerpot" }, + "north": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" }, + "south": { "uv": [6, 10, 10, 16], "texture": "#flowerpot" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { + "uv": [6, 6, 10, 10], + "texture": "#flowerpot", + "cullface": "down" + }, + "up": { "uv": [6, 6, 10, 10], "texture": "#dirt" } + } + }, + { + "from": [2.6, 4, 8], + "to": [13.4, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#plant", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#plant", "tintindex": 0 } + } + }, + { + "from": [8, 4, 2.6], + "to": [8, 16, 13.4], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#plant", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#plant", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_houstonia.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_houstonia.json index cbde2c40..0a248992 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_houstonia.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_houstonia.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_houstonia" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_houstonia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_jungle.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_jungle.json index c02568bd..c2e05aea 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_jungle.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_jungle.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_jungle" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_brown.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_brown.json index a93a0747..98777002 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_brown.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_brown.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/mushroom_brown" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/mushroom_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_red.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_red.json index 53dc64ac..a750eec5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_mushroom_red.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/mushroom_red" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/mushroom_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_oak.json index ad77243f..c31c7187 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_oak.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_oak" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_orchid.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_orchid.json index 431a39dd..598df19d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_orchid.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_orchid.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_blue_orchid" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_blue_orchid" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_rose.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_rose.json index 71a0e575..eddc4e5d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_rose.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_rose.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_rose" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_rose" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_spruce.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_spruce.json index bcecca4d..f066e32c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_spruce.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_spruce.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/sapling_spruce" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/sapling_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_orange.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_orange.json index e8f2c253..35ba8651 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_orange.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_orange.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_tulip_orange" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_tulip_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_pink.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_pink.json index 630cbe88..f6787047 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_pink.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_pink.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_tulip_pink" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_tulip_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_red.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_red.json index b69ae47e..36412b4b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_red.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_tulip_red" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_tulip_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_white.json b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_white.json index 501f7b99..8a5e4e3c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_white.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/flower_pot_tulip_white.json @@ -1,6 +1,6 @@ -{ - "parent": "block/flower_pot_cross", - "textures": { - "plant": "blocks/flower_tulip_white" - } -} +{ + "parent": "block/flower_pot_cross", + "textures": { + "plant": "blocks/flower_tulip_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/furnace.json b/desktopRuntime/resources/assets/minecraft/models/block/furnace.json index 08c13666..018f483f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/furnace.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/furnace.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/furnace_top", - "front": "blocks/furnace_front_off", - "side": "blocks/furnace_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/furnace_top", + "front": "blocks/furnace_front_off", + "side": "blocks/furnace_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass.json b/desktopRuntime/resources/assets/minecraft/models/block/glass.json index 0a64c9df..db47f542 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_black.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_black.json index 389734f3..19fe9bc2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_black.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_black.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_black" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_blue.json index 1a6592f9..e2a59678 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_blue.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_brown.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_brown.json index 2592c40b..c1212379 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_brown.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_brown.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_brown" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_cyan.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_cyan.json index 2cc9c636..578d91b8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_cyan.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_cyan.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_cyan" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_gray.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_gray.json index 4b338272..b604dcad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_gray.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_gray.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_gray" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_green.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_green.json index 5bab8507..05b7d010 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_green.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_green.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_green" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_light_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_light_blue.json index a38ed95e..68eb5559 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_light_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_light_blue.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_light_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_lime.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_lime.json index a4341b39..d718db5b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_lime.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_lime.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_lime" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_magenta.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_magenta.json index 3363cdc8..33ee5d5b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_magenta.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_magenta.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_magenta" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_orange.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_orange.json index cc8c9c3f..437a0610 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_orange.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_orange.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_orange" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_n.json index 05a989a7..6100b9ef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ne.json index c1155c7c..44d38620 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_new.json index 6f0dcbed..68ff8b7f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ns.json index 9f370a56..c61d3cb1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nse.json index 7a978fce..eed99f66 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsew.json index c964b547..88b73060 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsw.json index 59d0a909..e5048b65 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nw.json index 041ad6f8..499c7724 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_s.json index 6a9cfeaa..7bb37f53 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_se.json index b299a959..f6eebf8b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sew.json index 77f8d563..86e0f701 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sw.json index 185c465a..d833a2dc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top", - "pane": "blocks/glass" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top", + "pane": "blocks/glass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_pink.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_pink.json index e852a5d7..e4864325 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_pink.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_pink.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_pink" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_purple.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_purple.json index 876d944c..6c7a60dc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_purple.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_purple.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_purple" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_red.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_red.json index cd0fb970..026fcb2f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_red.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_red" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_silver.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_silver.json index 0b58a372..2b061f18 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_silver.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_silver.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_silver" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_white.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_white.json index f0294f83..09497334 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_white.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_white.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_white" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glass_yellow.json b/desktopRuntime/resources/assets/minecraft/models/block/glass_yellow.json index 489f6bb7..463745cc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glass_yellow.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glass_yellow.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glass_yellow" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/glowstone.json b/desktopRuntime/resources/assets/minecraft/models/block/glowstone.json index 9e2a2303..392c1aef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/glowstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/glowstone.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/glowstone" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/glowstone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gold_block.json b/desktopRuntime/resources/assets/minecraft/models/block/gold_block.json index c46d3eb2..c00da53c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gold_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gold_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/gold_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/gold_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gold_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/gold_ore.json index 640c25e8..43ea6f8f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gold_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gold_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/gold_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/gold_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_flat.json index 11d114fb..e1e8bcd2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_golden_powered" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_golden_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_ne.json index a453fa94..0c92fccb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_golden_powered" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_golden_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_sw.json index 67a916a0..75434193 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_active_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_golden_powered" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_golden_powered" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_flat.json index 534ff479..2d117218 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_golden" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_golden" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_ne.json index 6b7dbc46..3ae4113b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_golden" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_golden" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_sw.json index 3e8287f0..32132a84 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/golden_rail_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_golden" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_golden" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/granite.json b/desktopRuntime/resources/assets/minecraft/models/block/granite.json index ec301853..0ad6f5f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/granite.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/granite.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_granite" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_granite" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/granite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/block/granite_smooth.json index 2328ae03..a3fb4e9b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/granite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/granite_smooth.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone_granite_smooth" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone_granite_smooth" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/grass.json b/desktopRuntime/resources/assets/minecraft/models/block/grass.json index 53abc2c8..6fb70e0e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/grass.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/grass.json @@ -1,24 +1,67 @@ -{ - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up", "tintindex": 0 }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#overlay", "tintindex": 0, "cullface": "east" } - } - } - ] -} +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { + "uv": [0, 0, 16, 16], + "texture": "#top", + "cullface": "up", + "tintindex": 0 + }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#overlay", + "tintindex": 0, + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#overlay", + "tintindex": 0, + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#overlay", + "tintindex": 0, + "cullface": "west" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#overlay", + "tintindex": 0, + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/grass_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/grass_normal.json index 2c3eab47..6e1de742 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/grass_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/grass_normal.json @@ -1,10 +1,10 @@ -{ - "parent": "block/grass", - "textures": { - "particle": "blocks/dirt", - "bottom": "blocks/dirt", - "top": "blocks/grass_top", - "side": "blocks/grass_side", - "overlay": "blocks/grass_side_overlay" - } -} +{ + "parent": "block/grass", + "textures": { + "particle": "blocks/dirt", + "bottom": "blocks/dirt", + "top": "blocks/grass_top", + "side": "blocks/grass_side", + "overlay": "blocks/grass_side_overlay" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/grass_snowed.json b/desktopRuntime/resources/assets/minecraft/models/block/grass_snowed.json index a752937d..58acb454 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/grass_snowed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/grass_snowed.json @@ -1,9 +1,9 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "particle": "blocks/dirt", - "bottom": "blocks/dirt", - "top": "blocks/grass_top", - "side": "blocks/grass_side_snowed" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "particle": "blocks/dirt", + "bottom": "blocks/dirt", + "top": "blocks/grass_top", + "side": "blocks/grass_side_snowed" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gravel.json b/desktopRuntime/resources/assets/minecraft/models/block/gravel.json index 1cffed4d..31115647 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gravel.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gravel.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/gravel" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/gravel" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_n.json index 9062e30b..2816d6d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ne.json index 79f07514..bb8cf77f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_new.json index b9bdecc6..35bbc118 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ns.json index a5de4515..0e777465 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nse.json index 72cab5ca..068de94d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsew.json index 9c47d743..948499d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsw.json index 7aa5ba77..b8f20d26 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nw.json index 367983b6..27b4b66c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_s.json index 8290c3e5..48e5bf94 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_se.json index b347debc..0842a12a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sew.json index e0deedf1..f13c0ce3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sw.json index 9ddb86be..912828dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_gray", - "pane": "blocks/glass_gray" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_gray", + "pane": "blocks/glass_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/gray_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/gray_wool.json index 4a79474a..33ba6f31 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/gray_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/gray_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_gray" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_n.json index adc32cb5..205d3a88 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ne.json index 1419bdbb..a8005d4e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_new.json index 42ebb794..a0d3aed7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ns.json index 6f46e38d..270f44ed 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nse.json index 4e0a0e64..d6fa5a58 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsew.json index bcda92b4..686c6aea 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsw.json index abf0e230..d36343a2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nw.json index a8cd2dfb..19025e6f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_s.json index 1a49120b..5ac5fda3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_se.json index ca7fc8f1..8fb72867 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sew.json index 40f78103..bb066891 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sw.json index dc44405a..971d27d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_green", - "pane": "blocks/glass_green" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_green", + "pane": "blocks/glass_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/green_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/green_wool.json index 251457cc..093db5e4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/green_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/green_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_green" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab.json index 847a32e0..d54a8b61 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab.json @@ -1,18 +1,35 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_acacia.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_acacia.json index 497c4113..83268f6b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_acacia.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_acacia.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_acacia", - "top": "blocks/planks_acacia", - "side": "blocks/planks_acacia" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_acacia", + "top": "blocks/planks_acacia", + "side": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_birch.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_birch.json index a488ddd5..a7c5788b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_birch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_birch.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_birch", - "top": "blocks/planks_birch", - "side": "blocks/planks_birch" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_birch", + "top": "blocks/planks_birch", + "side": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_brick.json index 41278752..8ba47e95 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/brick", - "top": "blocks/brick", - "side": "blocks/brick" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/brick", + "top": "blocks/brick", + "side": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_cobblestone.json index cec374a2..f3a93109 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_cobblestone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/cobblestone", - "top": "blocks/cobblestone", - "side": "blocks/cobblestone" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/cobblestone", + "top": "blocks/cobblestone", + "side": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_dark_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_dark_oak.json index 7469c803..ea74217d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_dark_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_dark_oak.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_big_oak", - "top": "blocks/planks_big_oak", - "side": "blocks/planks_big_oak" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_big_oak", + "top": "blocks/planks_big_oak", + "side": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_jungle.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_jungle.json index 6724fc0e..dfcc4b0e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_jungle.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_jungle.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_jungle", - "top": "blocks/planks_jungle", - "side": "blocks/planks_jungle" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_jungle", + "top": "blocks/planks_jungle", + "side": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_nether_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_nether_brick.json index ece88afb..e190dd17 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_nether_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_nether_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/nether_brick", - "top": "blocks/nether_brick", - "side": "blocks/nether_brick" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/nether_brick", + "top": "blocks/nether_brick", + "side": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_oak.json index 866ea779..a7398868 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_oak.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_oak", - "top": "blocks/planks_oak", - "side": "blocks/planks_oak" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_oak", + "top": "blocks/planks_oak", + "side": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_quartz.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_quartz.json index bd71e25a..00c7e8e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_quartz.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_quartz.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_red_sandstone.json index 288836f4..aef8fb1d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_red_sandstone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_sandstone.json index f70ff6ae..055f2691 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_sandstone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_spruce.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_spruce.json index 57d2574b..a2c5364c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_spruce.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_spruce.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/planks_spruce", - "top": "blocks/planks_spruce", - "side": "blocks/planks_spruce" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/planks_spruce", + "top": "blocks/planks_spruce", + "side": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone.json index b8b26ab5..8abfc0cd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/stone_slab_top", - "top": "blocks/stone_slab_top", - "side": "blocks/stone_slab_side" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/stone_slab_top", + "top": "blocks/stone_slab_top", + "side": "blocks/stone_slab_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone_brick.json index c63dd8d9..c2cb79db 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/half_slab_stone_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "blocks/stonebrick", - "top": "blocks/stonebrick", - "side": "blocks/stonebrick" - } -} +{ + "parent": "block/half_slab", + "textures": { + "bottom": "blocks/stonebrick", + "top": "blocks/stonebrick", + "side": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay.json index 1ee32644..cf3859be 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_black.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_black.json index 266b8a13..cf638799 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_black.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_black.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_black" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_black" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_blue.json index 8eb3d4fc..f007e715 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_blue.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_brown.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_brown.json index 783a6b93..fcd31427 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_brown.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_brown.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_brown" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_brown" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_cyan.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_cyan.json index ae5de6d1..8ddc9367 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_cyan.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_cyan.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_cyan" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_cyan" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_gray.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_gray.json index b4ad465f..1677315b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_gray.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_gray.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_gray" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_gray" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_green.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_green.json index b6cb2b5f..be11d1a9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_green.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_green.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_green" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_green" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_light_blue.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_light_blue.json index 86cdd38c..b71eee53 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_light_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_light_blue.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_light_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_lime.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_lime.json index 16114ff4..8a224039 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_lime.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_lime.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_lime" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_magenta.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_magenta.json index 9888db3b..32e103e6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_magenta.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_magenta.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_magenta" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_orange.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_orange.json index 44cd889d..66271246 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_orange.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_orange.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_orange" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_pink.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_pink.json index 77d844b7..f111a952 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_pink.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_pink.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_pink" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_purple.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_purple.json index 4b33223e..2bde5d39 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_purple.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_purple.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_purple" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_red.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_red.json index 288b62b8..8d9d25ae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_red.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_red" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_silver.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_silver.json index f5ce3ec9..0769589f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_silver.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_silver.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_silver" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_white.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_white.json index 799888e4..2c1f863a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_white.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_white.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_white" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_yellow.json b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_yellow.json index d9d797e3..2d534100 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_yellow.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hardened_clay_yellow.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/hardened_clay_stained_yellow" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/hardened_clay_stained_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hay.json b/desktopRuntime/resources/assets/minecraft/models/block/hay.json index 61362c6a..b12d8ec2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hay.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hay.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/hay_block_top", - "side": "blocks/hay_block_side" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/hay_block_top", + "side": "blocks/hay_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hay_side.json b/desktopRuntime/resources/assets/minecraft/models/block/hay_side.json index 549c7949..526f1daa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hay_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hay_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/hay_block_top", - "side": "blocks/hay_block_side" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/hay_block_top", + "side": "blocks/hay_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_down.json b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_down.json index 7884f375..ad2cdbbe 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_down.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_down", - "textures": { - "texture": "blocks/iron_block" - } -} +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "blocks/iron_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_inventory.json index 8b11fbb3..e000cf43 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_inventory", - "textures": { - "texture": "blocks/iron_block" - } -} +{ + "parent": "block/pressure_plate_inventory", + "textures": { + "texture": "blocks/iron_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_up.json b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_up.json index 4bd165c9..3e63d06e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_up.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/heavy_pressure_plate_up.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_up", - "textures": { - "texture": "blocks/iron_block" - } -} +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "blocks/iron_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hopper_down.json b/desktopRuntime/resources/assets/minecraft/models/block/hopper_down.json index 3f6bdbc8..d3eb6f97 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hopper_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hopper_down.json @@ -1,88 +1,95 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/hopper_outside", - "top": "blocks/hopper_top", - "side": "blocks/hopper_outside", - "inside": "blocks/hopper_inside" - }, - "elements": [ - { "from": [ 0, 10, 0 ], - "to": [ 16, 11, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#inside" }, - "north": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "south": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "west": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "east": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" } - } - }, - { "from": [ 0, 11, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#side" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "south": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 14, 11, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#side" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "south": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 2, 11, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#side" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top" }, - "north": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" } - } - }, - { "from": [ 2, 11, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#side" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "west": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 4, 4, 4 ], - "to": [ 12, 10, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#side" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#side" }, - "north": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "south": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "west": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "east": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" } - } - }, - { "from": [ 6, 0, 6 ], - "to": [ 10, 4, 10 ], - "faces": { - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#side" }, - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#side" }, - "north": { "uv": [ 6, 12, 10, 16 ], "texture": "#side" }, - "south": { "uv": [ 6, 12, 10, 16 ], "texture": "#side" }, - "west": { "uv": [ 6, 12, 10, 16 ], "texture": "#side" }, - "east": { "uv": [ 6, 12, 10, 16 ], "texture": "#side" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/hopper_outside", + "top": "blocks/hopper_top", + "side": "blocks/hopper_outside", + "inside": "blocks/hopper_inside" + }, + "elements": [ + { + "from": [0, 10, 0], + "to": [16, 11, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#side" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#inside" }, + "north": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "south": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "west": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "east": { "uv": [0, 5, 16, 6], "texture": "#side" } + } + }, + { + "from": [0, 11, 0], + "to": [2, 16, 16], + "faces": { + "down": { "uv": [0, 0, 2, 16], "texture": "#side" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "south": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [14, 11, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [14, 0, 16, 16], "texture": "#side" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "south": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [2, 11, 0], + "to": [14, 16, 2], + "faces": { + "down": { "uv": [2, 0, 14, 2], "texture": "#side" }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top" }, + "north": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "south": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 2, 5], "texture": "#side" } + } + }, + { + "from": [2, 11, 14], + "to": [14, 16, 16], + "faces": { + "down": { "uv": [2, 14, 14, 16], "texture": "#side" }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top" }, + "north": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "south": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "west": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [14, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "down": { "uv": [4, 4, 12, 12], "texture": "#side" }, + "up": { "uv": [4, 4, 12, 12], "texture": "#side" }, + "north": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "south": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "west": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "east": { "uv": [4, 6, 12, 12], "texture": "#side" } + } + }, + { + "from": [6, 0, 6], + "to": [10, 4, 10], + "faces": { + "down": { "uv": [6, 6, 10, 10], "texture": "#side" }, + "up": { "uv": [6, 6, 10, 10], "texture": "#side" }, + "north": { "uv": [6, 12, 10, 16], "texture": "#side" }, + "south": { "uv": [6, 12, 10, 16], "texture": "#side" }, + "west": { "uv": [6, 12, 10, 16], "texture": "#side" }, + "east": { "uv": [6, 12, 10, 16], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/hopper_side.json b/desktopRuntime/resources/assets/minecraft/models/block/hopper_side.json index 617b6d84..8717258b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/hopper_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/hopper_side.json @@ -1,88 +1,95 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/hopper_outside", - "top": "blocks/hopper_top", - "side": "blocks/hopper_outside", - "inside": "blocks/hopper_inside" - }, - "elements": [ - { "from": [ 0, 10, 0 ], - "to": [ 16, 11, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#inside" }, - "north": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "south": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "west": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" }, - "east": { "uv": [ 0, 5, 16, 6 ], "texture": "#side" } - } - }, - { "from": [ 0, 11, 0 ], - "to": [ 2, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 2, 16 ], "texture": "#side" }, - "up": { "uv": [ 0, 0, 2, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "south": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 14, 11, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 14, 0, 16, 16 ], "texture": "#side" }, - "up": { "uv": [ 14, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "south": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 2, 11, 0 ], - "to": [ 14, 16, 2 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 2 ], "texture": "#side" }, - "up": { "uv": [ 2, 0, 14, 2 ], "texture": "#top" }, - "north": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "west": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 2, 5 ], "texture": "#side" } - } - }, - { "from": [ 2, 11, 14 ], - "to": [ 14, 16, 16 ], - "faces": { - "down": { "uv": [ 2, 14, 14, 16 ], "texture": "#side" }, - "up": { "uv": [ 2, 14, 14, 16 ], "texture": "#top" }, - "north": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "south": { "uv": [ 2, 0, 14, 5 ], "texture": "#side" }, - "west": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" }, - "east": { "uv": [ 14, 0, 16, 5 ], "texture": "#side" } - } - }, - { "from": [ 4, 4, 4 ], - "to": [ 12, 10, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#side" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#side" }, - "north": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "south": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "west": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" }, - "east": { "uv": [ 4, 6, 12, 12 ], "texture": "#side" } - } - }, - { "from": [ 6, 4, 0 ], - "to": [ 10, 8, 4 ], - "faces": { - "down": { "uv": [ 6, 0, 10, 4 ], "texture": "#side" }, - "up": { "uv": [ 6, 0, 10, 4 ], "texture": "#side" }, - "north": { "uv": [ 6, 8, 10, 12 ], "texture": "#side" }, - "south": { "uv": [ 6, 8, 10, 12 ], "texture": "#side" }, - "west": { "uv": [ 0, 8, 4, 12 ], "texture": "#side" }, - "east": { "uv": [ 0, 8, 4, 12 ], "texture": "#side" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/hopper_outside", + "top": "blocks/hopper_top", + "side": "blocks/hopper_outside", + "inside": "blocks/hopper_inside" + }, + "elements": [ + { + "from": [0, 10, 0], + "to": [16, 11, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#side" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#inside" }, + "north": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "south": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "west": { "uv": [0, 5, 16, 6], "texture": "#side" }, + "east": { "uv": [0, 5, 16, 6], "texture": "#side" } + } + }, + { + "from": [0, 11, 0], + "to": [2, 16, 16], + "faces": { + "down": { "uv": [0, 0, 2, 16], "texture": "#side" }, + "up": { "uv": [0, 0, 2, 16], "texture": "#top" }, + "north": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "south": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [14, 11, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [14, 0, 16, 16], "texture": "#side" }, + "up": { "uv": [14, 0, 16, 16], "texture": "#top" }, + "north": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "south": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [2, 11, 0], + "to": [14, 16, 2], + "faces": { + "down": { "uv": [2, 0, 14, 2], "texture": "#side" }, + "up": { "uv": [2, 0, 14, 2], "texture": "#top" }, + "north": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "south": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "west": { "uv": [0, 0, 2, 5], "texture": "#side" }, + "east": { "uv": [0, 0, 2, 5], "texture": "#side" } + } + }, + { + "from": [2, 11, 14], + "to": [14, 16, 16], + "faces": { + "down": { "uv": [2, 14, 14, 16], "texture": "#side" }, + "up": { "uv": [2, 14, 14, 16], "texture": "#top" }, + "north": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "south": { "uv": [2, 0, 14, 5], "texture": "#side" }, + "west": { "uv": [14, 0, 16, 5], "texture": "#side" }, + "east": { "uv": [14, 0, 16, 5], "texture": "#side" } + } + }, + { + "from": [4, 4, 4], + "to": [12, 10, 12], + "faces": { + "down": { "uv": [4, 4, 12, 12], "texture": "#side" }, + "up": { "uv": [4, 4, 12, 12], "texture": "#side" }, + "north": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "south": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "west": { "uv": [4, 6, 12, 12], "texture": "#side" }, + "east": { "uv": [4, 6, 12, 12], "texture": "#side" } + } + }, + { + "from": [6, 4, 0], + "to": [10, 8, 4], + "faces": { + "down": { "uv": [6, 0, 10, 4], "texture": "#side" }, + "up": { "uv": [6, 0, 10, 4], "texture": "#side" }, + "north": { "uv": [6, 8, 10, 12], "texture": "#side" }, + "south": { "uv": [6, 8, 10, 12], "texture": "#side" }, + "west": { "uv": [0, 8, 4, 12], "texture": "#side" }, + "east": { "uv": [0, 8, 4, 12], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/houstonia.json b/desktopRuntime/resources/assets/minecraft/models/block/houstonia.json index 7c1ffa23..25115357 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/houstonia.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/houstonia.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_houstonia" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_houstonia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/ice.json b/desktopRuntime/resources/assets/minecraft/models/block/ice.json index be722ab0..33f3ae78 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/ice.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/ice.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/ice" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/ice" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/inner_stairs.json index f3972f20..505f230d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/inner_stairs.json @@ -1,40 +1,79 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 8, 8, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 8, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 0, 8, 8 ], - "to": [ 8, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 8, 8 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 8, 8, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, - "south": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [8, 8, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [8, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [0, 0, 8, 8], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [8, 0, 16, 8], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 8], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 8, 8], + "to": [8, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 8, 8], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [8, 0, 16, 8], "texture": "#side" }, + "south": { + "uv": [0, 0, 8, 8], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_block.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_block.json index 8738ddb2..3e0f0232 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/iron_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/iron_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom.json index 04947f51..8c7be9da 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_iron_lower", - "top": "blocks/door_iron_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_iron_lower", + "top": "blocks/door_iron_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom_rh.json index 6fcb0069..ca970198 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_iron_lower", - "top": "blocks/door_iron_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_iron_lower", + "top": "blocks/door_iron_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top.json index 8adfa383..c30bc58a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_iron_lower", - "top": "blocks/door_iron_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_iron_lower", + "top": "blocks/door_iron_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top_rh.json index 2ecd8227..0fda25d2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_iron_lower", - "top": "blocks/door_iron_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_iron_lower", + "top": "blocks/door_iron_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_ore.json index 5e23203c..850112f5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/iron_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/iron_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_bottom.json index 8f05989c..fe6c5fad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_bottom", - "textures": { - "texture": "blocks/iron_trapdoor" - } -} +{ + "parent": "block/trapdoor_bottom", + "textures": { + "texture": "blocks/iron_trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_open.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_open.json index 65f4b884..1905171d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_open", - "textures": { - "texture": "blocks/iron_trapdoor" - } -} +{ + "parent": "block/trapdoor_open", + "textures": { + "texture": "blocks/iron_trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_top.json b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_top.json index dc2efee8..5ac697c8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/iron_trapdoor_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_top", - "textures": { - "texture": "blocks/iron_trapdoor" - } -} +{ + "parent": "block/trapdoor_top", + "textures": { + "texture": "blocks/iron_trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/item_frame.json b/desktopRuntime/resources/assets/minecraft/models/block/item_frame.json index ea13ed3e..e188893d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/item_frame.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/item_frame.json @@ -1,56 +1,61 @@ -{ - "textures": { - "particle": "blocks/planks_birch", - "wood": "blocks/planks_birch", - "back": "blocks/itemframe_background" - }, - "elements": [ - { "from": [ 3, 3, 15.5 ], - "to": [ 13, 13, 16 ], - "faces": { - "north": { "uv": [ 3, 3, 13, 13 ], "texture": "#back" }, - "south": { "uv": [ 3, 3, 13, 13 ], "texture": "#back" } - } - }, - { "from": [ 2, 2, 15 ], - "to": [ 14, 3, 16 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 1 ], "texture": "#wood" }, - "up": { "uv": [ 2, 15, 14, 16 ], "texture": "#wood" }, - "north": { "uv": [ 2, 13, 14, 14 ], "texture": "#wood" }, - "south": { "uv": [ 2, 13, 14, 14 ], "texture": "#wood" }, - "west": { "uv": [ 15, 13, 16, 14 ], "texture": "#wood" }, - "east": { "uv": [ 0, 13, 1, 14 ], "texture": "#wood" } - } - }, - { "from": [ 2, 13, 15 ], - "to": [ 14, 14, 16 ], - "faces": { - "down": { "uv": [ 2, 0, 14, 1 ], "texture": "#wood" }, - "up": { "uv": [ 2, 15, 14, 16 ], "texture": "#wood" }, - "north": { "uv": [ 2, 2, 14, 3 ], "texture": "#wood" }, - "south": { "uv": [ 2, 2, 14, 3 ], "texture": "#wood" }, - "west": { "uv": [ 15, 2, 16, 3 ], "texture": "#wood" }, - "east": { "uv": [ 0, 2, 1, 3 ], "texture": "#wood" } - } - }, - { "from": [ 2, 3, 15 ], - "to": [ 3, 13, 16 ], - "faces": { - "north": { "uv": [ 13, 3, 14, 13 ], "texture": "#wood" }, - "south": { "uv": [ 2, 3, 3, 13 ], "texture": "#wood" }, - "west": { "uv": [ 15, 3, 16, 13 ], "texture": "#wood" }, - "east": { "uv": [ 0, 3, 1, 13 ], "texture": "#wood" } - } - }, - { "from": [ 13, 3, 15 ], - "to": [ 14, 13, 16 ], - "faces": { - "north": { "uv": [ 2, 3, 3, 13 ], "texture": "#wood" }, - "south": { "uv": [ 13, 3, 14, 13 ], "texture": "#wood" }, - "west": { "uv": [ 15, 3, 16, 13 ], "texture": "#wood" }, - "east": { "uv": [ 0, 3, 1, 13 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_birch", + "wood": "blocks/planks_birch", + "back": "blocks/itemframe_background" + }, + "elements": [ + { + "from": [3, 3, 15.5], + "to": [13, 13, 16], + "faces": { + "north": { "uv": [3, 3, 13, 13], "texture": "#back" }, + "south": { "uv": [3, 3, 13, 13], "texture": "#back" } + } + }, + { + "from": [2, 2, 15], + "to": [14, 3, 16], + "faces": { + "down": { "uv": [2, 0, 14, 1], "texture": "#wood" }, + "up": { "uv": [2, 15, 14, 16], "texture": "#wood" }, + "north": { "uv": [2, 13, 14, 14], "texture": "#wood" }, + "south": { "uv": [2, 13, 14, 14], "texture": "#wood" }, + "west": { "uv": [15, 13, 16, 14], "texture": "#wood" }, + "east": { "uv": [0, 13, 1, 14], "texture": "#wood" } + } + }, + { + "from": [2, 13, 15], + "to": [14, 14, 16], + "faces": { + "down": { "uv": [2, 0, 14, 1], "texture": "#wood" }, + "up": { "uv": [2, 15, 14, 16], "texture": "#wood" }, + "north": { "uv": [2, 2, 14, 3], "texture": "#wood" }, + "south": { "uv": [2, 2, 14, 3], "texture": "#wood" }, + "west": { "uv": [15, 2, 16, 3], "texture": "#wood" }, + "east": { "uv": [0, 2, 1, 3], "texture": "#wood" } + } + }, + { + "from": [2, 3, 15], + "to": [3, 13, 16], + "faces": { + "north": { "uv": [13, 3, 14, 13], "texture": "#wood" }, + "south": { "uv": [2, 3, 3, 13], "texture": "#wood" }, + "west": { "uv": [15, 3, 16, 13], "texture": "#wood" }, + "east": { "uv": [0, 3, 1, 13], "texture": "#wood" } + } + }, + { + "from": [13, 3, 15], + "to": [14, 13, 16], + "faces": { + "north": { "uv": [2, 3, 3, 13], "texture": "#wood" }, + "south": { "uv": [13, 3, 14, 13], "texture": "#wood" }, + "west": { "uv": [15, 3, 16, 13], "texture": "#wood" }, + "east": { "uv": [0, 3, 1, 13], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/item_frame_map.json b/desktopRuntime/resources/assets/minecraft/models/block/item_frame_map.json index d8476a64..3692da42 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/item_frame_map.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/item_frame_map.json @@ -1,56 +1,61 @@ -{ - "textures": { - "particle": "blocks/planks_birch", - "wood": "blocks/planks_birch", - "back": "blocks/itemframe_background" - }, - "elements": [ - { "from": [ 1, 1, 15.001 ], - "to": [ 15, 15, 16 ], - "faces": { - "north": { "uv": [ 1, 1, 15, 15 ], "texture": "#back" }, - "south": { "uv": [ 1, 1, 15, 15 ], "texture": "#back" } - } - }, - { "from": [ 0, 0, 15.001 ], - "to": [ 16, 1, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, - "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, - "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, - "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, - "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" }, - "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" } - } - }, - { "from": [ 0, 15, 15.001 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, - "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" }, - "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, - "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" }, - "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#wood" }, - "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#wood" } - } - }, - { "from": [ 0, 1, 15.001 ], - "to": [ 1, 15, 16 ], - "faces": { - "north": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, - "south": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" }, - "west": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, - "east": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" } - } - }, - { "from": [ 15, 1, 15.001 ], - "to": [ 16, 15, 16 ], - "faces": { - "north": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" }, - "south": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, - "west": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" }, - "east": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_birch", + "wood": "blocks/planks_birch", + "back": "blocks/itemframe_background" + }, + "elements": [ + { + "from": [1, 1, 15.001], + "to": [15, 15, 16], + "faces": { + "north": { "uv": [1, 1, 15, 15], "texture": "#back" }, + "south": { "uv": [1, 1, 15, 15], "texture": "#back" } + } + }, + { + "from": [0, 0, 15.001], + "to": [16, 1, 16], + "faces": { + "down": { "uv": [0, 0, 16, 1], "texture": "#wood" }, + "up": { "uv": [0, 15, 16, 16], "texture": "#wood" }, + "north": { "uv": [0, 15, 16, 16], "texture": "#wood" }, + "south": { "uv": [0, 15, 16, 16], "texture": "#wood" }, + "west": { "uv": [15, 15, 16, 16], "texture": "#wood" }, + "east": { "uv": [0, 15, 1, 16], "texture": "#wood" } + } + }, + { + "from": [0, 15, 15.001], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 1], "texture": "#wood" }, + "up": { "uv": [0, 15, 16, 16], "texture": "#wood" }, + "north": { "uv": [0, 0, 16, 1], "texture": "#wood" }, + "south": { "uv": [0, 0, 16, 1], "texture": "#wood" }, + "west": { "uv": [15, 0, 16, 1], "texture": "#wood" }, + "east": { "uv": [0, 0, 1, 1], "texture": "#wood" } + } + }, + { + "from": [0, 1, 15.001], + "to": [1, 15, 16], + "faces": { + "north": { "uv": [15, 1, 16, 15], "texture": "#wood" }, + "south": { "uv": [0, 1, 1, 15], "texture": "#wood" }, + "west": { "uv": [15, 1, 16, 15], "texture": "#wood" }, + "east": { "uv": [0, 1, 1, 15], "texture": "#wood" } + } + }, + { + "from": [15, 1, 15.001], + "to": [16, 15, 16], + "faces": { + "north": { "uv": [0, 1, 1, 15], "texture": "#wood" }, + "south": { "uv": [15, 1, 16, 15], "texture": "#wood" }, + "west": { "uv": [15, 1, 16, 15], "texture": "#wood" }, + "east": { "uv": [0, 1, 1, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jukebox.json b/desktopRuntime/resources/assets/minecraft/models/block/jukebox.json index cb7d0953..0d4fb457 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jukebox.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jukebox.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_top", - "textures": { - "top": "blocks/jukebox_top", - "side": "blocks/jukebox_side" - } -} +{ + "parent": "block/cube_top", + "textures": { + "top": "blocks/jukebox_top", + "side": "blocks/jukebox_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_bark.json index 96bbe87e..789bc91e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_jungle" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom.json index 1f751654..e116ebfc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_jungle_lower", - "top": "blocks/door_jungle_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_jungle_lower", + "top": "blocks/door_jungle_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom_rh.json index a83fe18e..88abbc5e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_jungle_lower", - "top": "blocks/door_jungle_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_jungle_lower", + "top": "blocks/door_jungle_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top.json index 68669b3a..c7d367e3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_jungle_lower", - "top": "blocks/door_jungle_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_jungle_lower", + "top": "blocks/door_jungle_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top_rh.json index 4cb67749..be469514 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_jungle_lower", - "top": "blocks/door_jungle_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_jungle_lower", + "top": "blocks/door_jungle_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_closed.json index 80d9f593..e6635cb1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_open.json index 0eabbb1e..14170163 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_inventory.json index 592ab2c0..d1ce1b9a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_n.json index 2abfca9b..af75e256 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ne.json index 67f91079..19697519 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ns.json index 18e48d12..1250fff7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nse.json index 6e0f3c20..04e21296 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nsew.json index 822a5b86..542468f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_post.json index 0e0ffdda..03a17016 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_inner_stairs.json index 62d0b3ad..ef093b5d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_jungle", - "top": "blocks/planks_jungle", - "side": "blocks/planks_jungle" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_jungle", + "top": "blocks/planks_jungle", + "side": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_leaves.json index 321a65d2..84d7642b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_jungle" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_log.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_log.json index a97b737f..545100e9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_jungle_top", - "side": "blocks/log_jungle" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_jungle_top", + "side": "blocks/log_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_log_side.json index 37284fc0..ca6104dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_jungle_top", - "side": "blocks/log_jungle" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_jungle_top", + "side": "blocks/log_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_outer_stairs.json index 26ff9236..70f43177 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_jungle", - "top": "blocks/planks_jungle", - "side": "blocks/planks_jungle" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_jungle", + "top": "blocks/planks_jungle", + "side": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_planks.json index 5cd39b20..e23c0135 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_jungle" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_sapling.json index e7a60959..d08cb7bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_jungle" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_stairs.json index 16abb5f0..51da2251 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_jungle", - "top": "blocks/planks_jungle", - "side": "blocks/planks_jungle" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_jungle", + "top": "blocks/planks_jungle", + "side": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_closed.json index c84fb4d1..c0c461b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_open.json index b9aae589..242ccba4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/jungle_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_jungle" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/ladder.json b/desktopRuntime/resources/assets/minecraft/models/block/ladder.json index 1bf4a876..3865651f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/ladder.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/ladder.json @@ -1,17 +1,18 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/ladder", - "texture": "blocks/ladder" - }, - "elements": [ - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/ladder", + "texture": "blocks/ladder" + }, + "elements": [ + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lapis_block.json b/desktopRuntime/resources/assets/minecraft/models/block/lapis_block.json index fedfb0ae..d1067dcd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lapis_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lapis_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/lapis_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/lapis_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lapis_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/lapis_ore.json index 51953033..f5302ffc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lapis_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lapis_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/lapis_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/lapis_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/leaves.json index 9170ab0c..9402ef4d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/leaves.json @@ -1,18 +1,19 @@ -{ - "textures": { - "particle": "#all" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0 } - } - } - ] -} +{ + "textures": { + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 }, + "north": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 }, + "west": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#all", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lever.json b/desktopRuntime/resources/assets/minecraft/models/block/lever.json index b94fe435..aa722f19 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lever.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lever.json @@ -1,33 +1,35 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cobblestone", - "base": "blocks/cobblestone", - "lever": "blocks/lever" - }, - "elements": [ - { "from": [ 5, 0, 4 ], - "to": [ 11, 3, 12 ], - "faces": { - "down": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, - "up": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, - "north": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, - "south": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, - "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" }, - "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" } - } - }, - { "from": [ 7, 1, 7 ], - "to": [ 9, 11, 9 ], - "rotation": { "origin": [ 8, 1, 8 ], "axis": "x", "angle": -45 }, - "faces": { - "down": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, - "north": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "south": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "west": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "east": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cobblestone", + "base": "blocks/cobblestone", + "lever": "blocks/lever" + }, + "elements": [ + { + "from": [5, 0, 4], + "to": [11, 3, 12], + "faces": { + "down": { "uv": [5, 4, 11, 12], "texture": "#base" }, + "up": { "uv": [5, 4, 11, 12], "texture": "#base" }, + "north": { "uv": [5, 0, 11, 3], "texture": "#base" }, + "south": { "uv": [5, 0, 11, 3], "texture": "#base" }, + "west": { "uv": [4, 0, 12, 3], "texture": "#base" }, + "east": { "uv": [4, 0, 12, 3], "texture": "#base" } + } + }, + { + "from": [7, 1, 7], + "to": [9, 11, 9], + "rotation": { "origin": [8, 1, 8], "axis": "x", "angle": -45 }, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lever" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#lever" }, + "north": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "south": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "west": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "east": { "uv": [7, 6, 9, 16], "texture": "#lever" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lever_off.json b/desktopRuntime/resources/assets/minecraft/models/block/lever_off.json index 9a9bdf4f..789afd9e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lever_off.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lever_off.json @@ -1,33 +1,35 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/cobblestone", - "base": "blocks/cobblestone", - "lever": "blocks/lever" - }, - "elements": [ - { "from": [ 5, 0, 4 ], - "to": [ 11, 3, 12 ], - "faces": { - "down": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, - "up": { "uv": [ 5, 4, 11, 12 ], "texture": "#base" }, - "north": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, - "south": { "uv": [ 5, 0, 11, 3 ], "texture": "#base" }, - "west": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" }, - "east": { "uv": [ 4, 0, 12, 3 ], "texture": "#base" } - } - }, - { "from": [ 7, 1, 7 ], - "to": [ 9, 11, 9 ], - "rotation": { "origin": [ 8, 1, 8 ], "axis": "x", "angle": 45 }, - "faces": { - "down": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lever" }, - "north": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "south": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "west": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" }, - "east": { "uv": [ 7, 6, 9, 16 ], "texture": "#lever" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/cobblestone", + "base": "blocks/cobblestone", + "lever": "blocks/lever" + }, + "elements": [ + { + "from": [5, 0, 4], + "to": [11, 3, 12], + "faces": { + "down": { "uv": [5, 4, 11, 12], "texture": "#base" }, + "up": { "uv": [5, 4, 11, 12], "texture": "#base" }, + "north": { "uv": [5, 0, 11, 3], "texture": "#base" }, + "south": { "uv": [5, 0, 11, 3], "texture": "#base" }, + "west": { "uv": [4, 0, 12, 3], "texture": "#base" }, + "east": { "uv": [4, 0, 12, 3], "texture": "#base" } + } + }, + { + "from": [7, 1, 7], + "to": [9, 11, 9], + "rotation": { "origin": [8, 1, 8], "axis": "x", "angle": 45 }, + "faces": { + "down": { "uv": [7, 6, 9, 8], "texture": "#lever" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#lever" }, + "north": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "south": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "west": { "uv": [7, 6, 9, 16], "texture": "#lever" }, + "east": { "uv": [7, 6, 9, 16], "texture": "#lever" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_n.json index 7d33fe87..b430e5a4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ne.json index f95b5bae..c9c45a7c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_new.json index 757a204e..78a77cd5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ns.json index 5fc5f3eb..be83693f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nse.json index 5ce283c6..47bc2c68 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsew.json index 894d7490..2dde4801 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsw.json index a641b2a1..52183bbc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nw.json index 5379c02b..0bdf4643 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_s.json index ae72965f..4eefdf9e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_se.json index 79480c93..c8c60e24 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sew.json index 389420c9..23ce394b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sw.json index f2db8917..d300afda 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_light_blue", - "pane": "blocks/glass_light_blue" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_light_blue", + "pane": "blocks/glass_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_wool.json index 01e1283e..b6d1cac3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_blue_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_light_blue" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_light_blue" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_down.json b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_down.json index 514475bc..3bed0694 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_down.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_down", - "textures": { - "texture": "blocks/gold_block" - } -} +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "blocks/gold_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_inventory.json index 831a816b..3e029326 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_inventory", - "textures": { - "texture": "blocks/gold_block" - } -} +{ + "parent": "block/pressure_plate_inventory", + "textures": { + "texture": "blocks/gold_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_up.json b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_up.json index b8a29e32..dd62bd0c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_up.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/light_pressure_plate_up.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_up", - "textures": { - "texture": "blocks/gold_block" - } -} +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "blocks/gold_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_n.json index 6a0e4f4b..a14fce3d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ne.json index a2d35d99..4e4550c5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_new.json index 8b2d0bfe..2cbe706e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ns.json index d0deaa91..b8aa4bfd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nse.json index 06f7d8cc..ad8d662a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsew.json index 8a5a9684..3fcc93b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsw.json index 94a01d57..1f053691 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nw.json index b91a8fdf..4a3282aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_s.json index cf33af84..0fbe784d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_se.json index 1e237616..257c056b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sew.json index f0bc262a..d580b882 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sw.json index 63312dc0..effe3aac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_lime", - "pane": "blocks/glass_lime" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_lime", + "pane": "blocks/glass_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lime_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/lime_wool.json index 0340b26d..eb15b324 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lime_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lime_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_lime" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_lime" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_furnace.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_furnace.json index df180890..8159e216 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_furnace.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_furnace.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/furnace_top", - "front": "blocks/furnace_front_on", - "side": "blocks/furnace_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/furnace_top", + "front": "blocks/furnace_front_on", + "side": "blocks/furnace_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_pumpkin.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_pumpkin.json index 193fbd66..82b94833 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_pumpkin.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/pumpkin_top", - "front": "blocks/pumpkin_face_on", - "side": "blocks/pumpkin_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/pumpkin_top", + "front": "blocks/pumpkin_face_on", + "side": "blocks/pumpkin_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_lamp.json index cfd6fc4c..5a46c606 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_lamp.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_lamp.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/redstone_lamp_on" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/redstone_lamp_on" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_ore.json index 98798047..58bc9e5e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/redstone_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/redstone_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch.json index 4b12423d..b2847260 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch", - "textures": { - "torch": "blocks/redstone_torch_on" - } -} +{ + "parent": "block/torch", + "textures": { + "torch": "blocks/redstone_torch_on" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch_wall.json b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch_wall.json index c0f26d81..a40c6f5f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/lit_redstone_torch_wall.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch_wall", - "textures": { - "torch": "blocks/redstone_torch_on" - } -} +{ + "parent": "block/torch_wall", + "textures": { + "torch": "blocks/redstone_torch_on" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_n.json index 53c83891..83d1043f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ne.json index f9d4c41e..56a868fc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_new.json index 7ddfcf00..609890b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ns.json index 003e6352..4ad162c3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nse.json index 397bd95f..9f2de5bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsew.json index 95f6f125..efe34374 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsw.json index 4529d538..7eb3cfdd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nw.json index 7671a8da..b6fcef3d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_s.json index 1b12f249..6b6d117a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_se.json index f6e4e206..4fa5a1c3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sew.json index d2bf34fe..367bf40f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sw.json index ebf3ea66..e6a08a07 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_magenta", - "pane": "blocks/glass_magenta" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_magenta", + "pane": "blocks/glass_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/magenta_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/magenta_wool.json index 820f37a5..ea579805 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/magenta_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/magenta_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_magenta" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_magenta" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon.json b/desktopRuntime/resources/assets/minecraft/models/block/melon.json index 7c36518d..7e2a4f4b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/melon_top", - "side": "blocks/melon_side" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/melon_top", + "side": "blocks/melon_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_fruit.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_fruit.json index 27177163..b094e23f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_fruit.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_fruit.json @@ -1,7 +1,7 @@ -{ - "parent": "block/stem_fruit", - "textures": { - "stem": "blocks/melon_stem_disconnected", - "upperstem": "blocks/melon_stem_connected" - } -} +{ + "parent": "block/stem_fruit", + "textures": { + "stem": "blocks/melon_stem_disconnected", + "upperstem": "blocks/melon_stem_connected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth0.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth0.json index a738c83c..bee84394 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth0", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth0", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth1.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth1.json index fbba6ec4..a7d868d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth1", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth1", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth2.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth2.json index 9ba331f8..4fd9fd54 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth2", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth2", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth3.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth3.json index 561f079a..55b8c95e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth3.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth3", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth3", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth4.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth4.json index baacb8a6..b534069c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth4.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth4", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth4", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth5.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth5.json index 23ad517d..56def73e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth5.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth5.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth5", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth5", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth6.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth6.json index cdde150b..7f5a27aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth6.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth6", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth6", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth7.json b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth7.json index 4703b1e1..ccffbbe8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth7.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/melon_stem_growth7.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth7", - "textures": { - "stem": "blocks/melon_stem_disconnected" - } -} +{ + "parent": "block/stem_growth7", + "textures": { + "stem": "blocks/melon_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mob_spawner_cage.json b/desktopRuntime/resources/assets/minecraft/models/block/mob_spawner_cage.json index 462ee735..5b0a6579 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mob_spawner_cage.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mob_spawner_cage.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mob_spawner" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mob_spawner" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_cobblestone.json index 89c2382f..7a03b989 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_cobblestone.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_n.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_n.json index 0e9ec306..f5220b93 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_n", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ne.json index 99ffef16..c03257b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_ne", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns.json index 85f67444..819fd042 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_ns", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns_above.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns_above.json index 7dd58a62..66afc877 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns_above.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_ns_above.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_ns_above", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nse.json index 31cbbdad..0ec826de 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_nse", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nsew.json index 9c30b465..94d61f4e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_nsew", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_post.json b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_post.json index 8b45386f..daa8df30 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mossy_wall_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "blocks/cobblestone_mossy" - } -} +{ + "parent": "block/wall_post", + "textures": { + "wall": "blocks/cobblestone_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/mycelium.json b/desktopRuntime/resources/assets/minecraft/models/block/mycelium.json index 16f2d4f0..92648780 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/mycelium.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/mycelium.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/dirt", - "top": "blocks/mycelium_top", - "side": "blocks/mycelium_side" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/dirt", + "top": "blocks/mycelium_top", + "side": "blocks/mycelium_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick.json index b47abfd0..05eff830 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/nether_brick" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_inventory.json index be936bf4..86aef74b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_n.json index ebb9b20d..96c6d3cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ne.json index a36f4207..76940ba6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ns.json index c04ef2d9..b7699413 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nse.json index 62882ed8..e15e4788 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nsew.json index ef51428c..65ef2515 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_post.json index 08f48286..6074558b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/nether_brick" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_inner_stairs.json index fc50a686..f0a025a0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/nether_brick", - "top": "blocks/nether_brick", - "side": "blocks/nether_brick" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/nether_brick", + "top": "blocks/nether_brick", + "side": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_outer_stairs.json index 1c23a473..018d0fdc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/nether_brick", - "top": "blocks/nether_brick", - "side": "blocks/nether_brick" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/nether_brick", + "top": "blocks/nether_brick", + "side": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_stairs.json index 249ef926..f7e9225b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_brick_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/nether_brick", - "top": "blocks/nether_brick", - "side": "blocks/nether_brick" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/nether_brick", + "top": "blocks/nether_brick", + "side": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage0.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage0.json index e6ad95c7..ba81aa62 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/nether_wart_stage_0" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/nether_wart_stage_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage1.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage1.json index a145da53..405922c0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/nether_wart_stage_1" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/nether_wart_stage_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage2.json b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage2.json index ce8bd912..a2fbb084 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/nether_wart_stage2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/nether_wart_stage_2" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/nether_wart_stage_2" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/netherrack.json b/desktopRuntime/resources/assets/minecraft/models/block/netherrack.json index dd78e91f..c1b473a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/netherrack.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/netherrack.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/netherrack" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/netherrack" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_curved.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_curved.json index 5fde4ae2..861aab61 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_curved.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_curved.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_curved", - "textures": { - "rail": "blocks/rail_normal_turned" - } -} +{ + "parent": "block/rail_curved", + "textures": { + "rail": "blocks/rail_normal_turned" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_flat.json index 16839f9e..c3904142 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_flat.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_flat", - "textures": { - "rail": "blocks/rail_normal" - } -} +{ + "parent": "block/rail_flat", + "textures": { + "rail": "blocks/rail_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_ne.json index efb93ddd..e0a02f78 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_ne", - "textures": { - "rail": "blocks/rail_normal" - } -} +{ + "parent": "block/rail_raised_ne", + "textures": { + "rail": "blocks/rail_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_sw.json index 9bdc4e41..7c3f59b7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_rail_raised_sw.json @@ -1,6 +1,6 @@ -{ - "parent": "block/rail_raised_sw", - "textures": { - "rail": "blocks/rail_normal" - } -} +{ + "parent": "block/rail_raised_sw", + "textures": { + "rail": "blocks/rail_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_torch.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_torch.json index 19765225..eccfde3f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_torch.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch", - "textures": { - "torch": "blocks/torch_on" - } -} +{ + "parent": "block/torch", + "textures": { + "torch": "blocks/torch_on" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/normal_torch_wall.json b/desktopRuntime/resources/assets/minecraft/models/block/normal_torch_wall.json index 5e49edfa..f8c86661 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/normal_torch_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/normal_torch_wall.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch_wall", - "textures": { - "torch": "blocks/torch_on" - } -} +{ + "parent": "block/torch_wall", + "textures": { + "torch": "blocks/torch_on" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/noteblock.json b/desktopRuntime/resources/assets/minecraft/models/block/noteblock.json index cc947f68..071a94fa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/noteblock.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/noteblock.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/noteblock" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/noteblock" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_bark.json index d3319849..f247b436 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_oak" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_closed.json index 2628ca20..a3db4beb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_open.json index bc3ed085..0e107729 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_inventory.json index 28f60d3d..eac6968f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_n.json index a8b6864c..90126e3a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ne.json index bfc26215..4a9948cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ns.json index 4d75db36..ea82f587 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nse.json index fac4197c..ecc23e3d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nsew.json index 2ab942cf..5680360b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_post.json index 6991fb22..8cd9145c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_inner_stairs.json index 765c896b..8a1610a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_oak", - "top": "blocks/planks_oak", - "side": "blocks/planks_oak" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_oak", + "top": "blocks/planks_oak", + "side": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_leaves.json index ffa9f31f..fd091073 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_oak" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_log.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_log.json index ab023d9f..3946f3e1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_oak_top", - "side": "blocks/log_oak" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_oak_top", + "side": "blocks/log_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_log_side.json index e7055893..0ebae86c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_oak_top", - "side": "blocks/log_oak" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_oak_top", + "side": "blocks/log_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_outer_stairs.json index e7485136..f282afb6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_oak", - "top": "blocks/planks_oak", - "side": "blocks/planks_oak" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_oak", + "top": "blocks/planks_oak", + "side": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_planks.json index 295cb929..e07d5321 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_oak" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_sapling.json index 49fd41d3..bc2c9e21 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_oak" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_stairs.json index f3a5834e..5ddbc68c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_oak", - "top": "blocks/planks_oak", - "side": "blocks/planks_oak" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_oak", + "top": "blocks/planks_oak", + "side": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_closed.json index d6831ca0..413cc32b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_open.json index 441ca911..97865e15 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/oak_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/obsidian.json b/desktopRuntime/resources/assets/minecraft/models/block/obsidian.json index a9c56704..0fe6bcb9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/obsidian.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/obsidian.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/obsidian" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/obsidian" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_n.json index 7ef19437..cc104999 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ne.json index 5d48e685..11497c02 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_new.json index 7baad494..8875b157 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ns.json index 6a0f5517..a13d079e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nse.json index 191a2ecf..cf1f81eb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsew.json index fbcd638d..14a9637c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsw.json index 6269b19a..e54292ca 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nw.json index 570b14cc..011c975f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_s.json index a2736ddb..f1176a39 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_se.json index e93c04f5..e6011fa5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sew.json index 90f31026..dbefd46e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sw.json index 0c86043f..a4a7d941 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_orange", - "pane": "blocks/glass_orange" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_orange", + "pane": "blocks/glass_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_tulip.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_tulip.json index 5912ed58..57372862 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_tulip.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_tulip_orange" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_tulip_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orange_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/orange_wool.json index 9a55627d..b9c9d694 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orange_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orange_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_orange" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_orange" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orchid.json b/desktopRuntime/resources/assets/minecraft/models/block/orchid.json index 58f3a9d1..5dd10900 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orchid.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orchid.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_blue_orchid" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_blue_orchid" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orientable.json b/desktopRuntime/resources/assets/minecraft/models/block/orientable.json index 0b9a40ef..49fc3420 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orientable.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orientable.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#front", - "down": "#top", - "up": "#top", - "north": "#front", - "east": "#side", - "south": "#side", - "west": "#side" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#front", + "down": "#top", + "up": "#top", + "north": "#front", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/orientable_vertical.json b/desktopRuntime/resources/assets/minecraft/models/block/orientable_vertical.json index c5402872..1b75856d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/orientable_vertical.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/orientable_vertical.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "#side", - "down": "#side", - "up": "#front", - "north": "#side", - "east": "#side", - "south": "#side", - "west": "#side" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "#side", + "down": "#side", + "up": "#front", + "north": "#side", + "east": "#side", + "south": "#side", + "west": "#side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/outer_stairs.json index 3ddfc57f..ec1c4946 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/outer_stairs.json @@ -1,29 +1,55 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 8, 8, 8 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 8, 0, 16, 8 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [8, 8, 8], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [8, 0, 16, 8], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { "uv": [0, 0, 8, 8], "texture": "#side" }, + "south": { + "uv": [8, 0, 16, 8], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [8, 0, 16, 8], "texture": "#side" }, + "east": { "uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/packed_ice.json b/desktopRuntime/resources/assets/minecraft/models/block/packed_ice.json index 4a903221..58e25ebc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/packed_ice.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/packed_ice.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/ice_packed" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/ice_packed" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_n.json index 1fcc7da8..8812c3ee 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_n.json @@ -1,20 +1,25 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 16, 0, 7, 16 ], "texture": "#pane" }, - "east": { "uv": [ 7, 0, 16, 16 ], "texture": "#pane" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [16, 0, 7, 16], "texture": "#pane" }, + "east": { "uv": [7, 0, 16, 16], "texture": "#pane" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_ne.json index acdabd60..78776ad5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_ne.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 16, 0, 7, 16 ], "texture": "#pane" }, - "east": { "uv": [ 7, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 9, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 16, 0, 9, 16 ], "texture": "#pane" }, - "south": { "uv": [ 9, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#pane" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [16, 0, 7, 16], "texture": "#pane" }, + "east": { "uv": [7, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [9, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [16, 0, 9, 16], "texture": "#pane" }, + "south": { "uv": [9, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#pane" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_new.json index 4f08e2e4..c1910fc5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_new.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 7 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 7 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 16, 0, 9, 16 ], "texture": "#pane" }, - "east": { "uv": [ 9, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 7], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 7], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 7], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [16, 0, 9, 16], "texture": "#pane" }, + "east": { "uv": [9, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [16, 0, 0, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_ns.json index 42b34a15..381442d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_ns.json @@ -1,20 +1,21 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cull": false }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cull": false }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#pane", "cull": false }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane", "cull": false } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge", "cull": false }, + "up": { "uv": [7, 0, 9, 16], "texture": "#edge", "cull": false }, + "north": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [16, 0, 0, 16], "texture": "#pane", "cull": false }, + "east": { "uv": [0, 0, 16, 16], "texture": "#pane", "cull": false } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_nse.json index 3295dd61..9cdac8db 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_nse.json @@ -1,32 +1,42 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 9, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 16, 0, 9, 16 ], "texture": "#pane" }, - "south": { "uv": [ 9, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + }, + "west": { "uv": [16, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [9, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [16, 0, 9, 16], "texture": "#pane" }, + "south": { "uv": [9, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_nsew.json index 195c949f..40431824 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_nsew.json @@ -1,32 +1,42 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [0, 0, 16, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_nsw.json index 5cb94a93..b38b6e2c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_nsw.json @@ -1,32 +1,42 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 7, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 7, 0, 0, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 7, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + }, + "west": { "uv": [16, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [7, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [7, 0, 0, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 7, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_nw.json index 55367a36..317fc0b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_nw.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 16, 0, 7, 16 ], "texture": "#pane" }, - "east": { "uv": [ 7, 0, 16, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 7, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 7, 0, 0, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 7, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#pane" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 0], + "to": [9, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 9], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [16, 0, 7, 16], "texture": "#pane" }, + "east": { "uv": [7, 0, 16, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [7, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [7, 0, 0, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 7, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#pane" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_s.json index 0c59c0ed..485e4c7f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_s.json @@ -1,20 +1,25 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 9, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 9, 16 ], "texture": "#pane" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [9, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 9, 16], "texture": "#pane" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_se.json index 0e845f9b..4ac9cd84 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_se.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 9, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 9, 16 ], "texture": "#pane" } - } - }, - { "from": [ 9, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 9, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 16, 0, 9, 16 ], "texture": "#pane" }, - "south": { "uv": [ 9, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#pane" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [9, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 9, 16], "texture": "#pane" } + } + }, + { + "from": [9, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 9, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [16, 0, 9, 16], "texture": "#pane" }, + "south": { "uv": [9, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#pane" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_sew.json index b4ccb99b..968da9f0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_sew.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 9 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 9, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "south" }, - "west": { "uv": [ 7, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 7, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 16 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "east" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 9], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 9, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 9, 9, 16], "texture": "#edge" }, + "north": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "south": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "south" + }, + "west": { "uv": [7, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 7, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 16], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [16, 0, 0, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/pane_sw.json index 407bdfb9..05297553 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pane_sw.json @@ -1,32 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#pane" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "up": { "uv": [ 7, 7, 9, 16 ], "texture": "#edge" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge" }, - "west": { "uv": [ 9, 0, 0, 16 ], "texture": "#pane" }, - "east": { "uv": [ 0, 0, 9, 16 ], "texture": "#pane" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 7, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "up": { "uv": [ 7, 0, 9, 7 ], "rotation": 90, "texture": "#edge" }, - "north": { "uv": [ 7, 0, 0, 16 ], "texture": "#pane" }, - "south": { "uv": [ 0, 0, 7, 16 ], "texture": "#pane" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#edge", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#pane" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#pane" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 16, 16], + "shade": false, + "faces": { + "down": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "up": { "uv": [7, 7, 9, 16], "texture": "#edge" }, + "north": { + "uv": [7, 0, 9, 16], + "texture": "#edge", + "cullface": "north" + }, + "south": { "uv": [7, 0, 9, 16], "texture": "#edge" }, + "west": { "uv": [9, 0, 0, 16], "texture": "#pane" }, + "east": { "uv": [0, 0, 9, 16], "texture": "#pane" } + } + }, + { + "from": [0, 0, 7], + "to": [7, 16, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "up": { "uv": [7, 0, 9, 7], "rotation": 90, "texture": "#edge" }, + "north": { "uv": [7, 0, 0, 16], "texture": "#pane" }, + "south": { "uv": [0, 0, 7, 16], "texture": "#pane" }, + "west": { "uv": [7, 0, 9, 16], "texture": "#edge", "cullface": "west" }, + "east": { "uv": [7, 0, 9, 16], "texture": "#pane" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_n.json index 8dc86467..d7ea7628 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ne.json index 78a2e23c..46078728 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_new.json index 5c1eb39c..48d5ddcc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ns.json index 6eafd492..1377105d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nse.json index b071997f..c4d50470 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsew.json index aaf5eb2c..9937911a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsw.json index f5adc2ac..84eb13d5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nw.json index 69be92fb..fcb14e76 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_s.json index 01bbcf98..ca6d5500 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_se.json index 69ef96f5..8ec3d388 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sew.json index 314b79b8..92d35f6f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sw.json index 59c8cfdc..cb1d0ce4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_pink", - "pane": "blocks/glass_pink" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_pink", + "pane": "blocks/glass_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_tulip.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_tulip.json index bc3603da..dd070132 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_tulip.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_tulip_pink" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_tulip_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pink_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/pink_wool.json index d18feace..5f11a4da 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pink_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pink_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_pink" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_pink" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston.json b/desktopRuntime/resources/assets/minecraft/models/block/piston.json index 8ad72106..b679516d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston.json @@ -1,18 +1,42 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 180, "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 270, "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "rotation": 90, "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "rotation": 180, + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#side", "cullface": "up" }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#platform", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "south" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "rotation": 270, + "cullface": "west" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "rotation": 90, + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_extended.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_extended.json index 0ffb4c76..a53e031e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_extended.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_extended.json @@ -1,18 +1,38 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 4 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "down", "rotation": 180 }, - "up": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#inside" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "west", "rotation": 270 }, - "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#side", "cullface": "east", "rotation": 90 } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 4], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "down", + "rotation": 180 + }, + "up": { "uv": [0, 4, 16, 16], "texture": "#side", "cullface": "up" }, + "north": { "uv": [0, 0, 16, 16], "texture": "#inside" }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "south" + }, + "west": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "west", + "rotation": 270 + }, + "east": { + "uv": [0, 4, 16, 16], + "texture": "#side", + "cullface": "east", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_extended_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_extended_normal.json index dde0d8d7..d65e1011 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_extended_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_extended_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston_extended", - "textures": { - "bottom": "blocks/piston_bottom", - "side": "blocks/piston_side", - "inside": "blocks/piston_inner" - } -} +{ + "parent": "block/piston_extended", + "textures": { + "bottom": "blocks/piston_bottom", + "side": "blocks/piston_side", + "inside": "blocks/piston_inner" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head.json index 22ba8cf3..c7cd5a6b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head.json @@ -1,36 +1,58 @@ -{ - "textures": { - "particle": "#platform" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 4 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "down", "rotation": 180 }, - "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#unsticky" }, - "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 270, "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 90, "cullface": "east" } - } - }, - { "from": [ 6, 6, 4 ], - "to": [ 10, 10, 16 ], - "faces": { - "down": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 90 }, - "up": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 270 }, - "west": { "uv": [ 16, 4, 4, 0 ], "texture": "#side" }, - "east": { "uv": [ 4, 0, 16, 4 ], "texture": "#side" } - } - }, - { "from": [ 6, 6, 16 ], - "to": [ 10, 10, 20 ], - "faces": { - "down": { "uv": [ 0, 0, 4, 4 ], "texture": "#side", "rotation": 90 }, - "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#side", "rotation": 270 }, - "west": { "uv": [ 4, 4, 0, 0 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 4, 4 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "#platform" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 4], + "faces": { + "down": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "cullface": "down", + "rotation": 180 + }, + "up": { "uv": [0, 0, 16, 4], "texture": "#side", "cullface": "up" }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#platform", + "cullface": "north" + }, + "south": { "uv": [0, 0, 16, 16], "texture": "#unsticky" }, + "west": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "rotation": 270, + "cullface": "west" + }, + "east": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "rotation": 90, + "cullface": "east" + } + } + }, + { + "from": [6, 6, 4], + "to": [10, 10, 16], + "faces": { + "down": { "uv": [4, 0, 16, 4], "texture": "#side", "rotation": 90 }, + "up": { "uv": [4, 0, 16, 4], "texture": "#side", "rotation": 270 }, + "west": { "uv": [16, 4, 4, 0], "texture": "#side" }, + "east": { "uv": [4, 0, 16, 4], "texture": "#side" } + } + }, + { + "from": [6, 6, 16], + "to": [10, 10, 20], + "faces": { + "down": { "uv": [0, 0, 4, 4], "texture": "#side", "rotation": 90 }, + "up": { "uv": [0, 0, 4, 4], "texture": "#side", "rotation": 270 }, + "west": { "uv": [4, 4, 0, 0], "texture": "#side" }, + "east": { "uv": [0, 0, 4, 4], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_normal.json index 711080ab..41fc089f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston_head", - "textures": { - "unsticky": "blocks/piston_top_normal", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_normal" - } -} +{ + "parent": "block/piston_head", + "textures": { + "unsticky": "blocks/piston_top_normal", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short.json index d99beb70..2587f66b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short.json @@ -1,27 +1,48 @@ -{ - "textures": { - "particle": "#platform" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 4 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "down", "rotation": 180 }, - "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#platform", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#unsticky" }, - "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 270, "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 4 ], "texture": "#side", "rotation": 90, "cullface": "east" } - } - }, - { "from": [ 6, 6, 4 ], - "to": [ 10, 10, 16 ], - "faces": { - "down": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 90 }, - "up": { "uv": [ 4, 0, 16, 4 ], "texture": "#side", "rotation": 270 }, - "west": { "uv": [ 16, 4, 4, 0 ], "texture": "#side" }, - "east": { "uv": [ 4, 0, 16, 4 ], "texture": "#side" } - } - } - ] -} +{ + "textures": { + "particle": "#platform" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 4], + "faces": { + "down": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "cullface": "down", + "rotation": 180 + }, + "up": { "uv": [0, 0, 16, 4], "texture": "#side", "cullface": "up" }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#platform", + "cullface": "north" + }, + "south": { "uv": [0, 0, 16, 16], "texture": "#unsticky" }, + "west": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "rotation": 270, + "cullface": "west" + }, + "east": { + "uv": [0, 0, 16, 4], + "texture": "#side", + "rotation": 90, + "cullface": "east" + } + } + }, + { + "from": [6, 6, 4], + "to": [10, 10, 16], + "faces": { + "down": { "uv": [4, 0, 16, 4], "texture": "#side", "rotation": 90 }, + "up": { "uv": [4, 0, 16, 4], "texture": "#side", "rotation": 270 }, + "west": { "uv": [16, 4, 4, 0], "texture": "#side" }, + "east": { "uv": [4, 0, 16, 4], "texture": "#side" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_normal.json index c45f47c9..68d7d7a1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston_head_short", - "textures": { - "unsticky": "blocks/piston_top_normal", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_normal" - } -} +{ + "parent": "block/piston_head_short", + "textures": { + "unsticky": "blocks/piston_top_normal", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_sticky.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_sticky.json index ad6b475b..d696dda7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_sticky.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_short_sticky.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston_head_short", - "textures": { - "unsticky": "blocks/piston_top_normal", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_sticky" - } -} +{ + "parent": "block/piston_head_short", + "textures": { + "unsticky": "blocks/piston_top_normal", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_sticky" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_sticky.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_sticky.json index bb6cfa81..6fa8a5a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_head_sticky.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_head_sticky.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston_head", - "textures": { - "unsticky": "blocks/piston_top_normal", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_sticky" - } -} +{ + "parent": "block/piston_head", + "textures": { + "unsticky": "blocks/piston_top_normal", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_sticky" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_normal.json index b66ecccd..ffc529b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/piston_bottom", - "side": "blocks/piston_side", - "top": "blocks/piston_top_normal" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/piston_bottom", + "side": "blocks/piston_side", + "top": "blocks/piston_top_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_sticky.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_sticky.json index c50917d0..6d26f2ed 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_sticky.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_inventory_sticky.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/piston_bottom", - "side": "blocks/piston_side", - "top": "blocks/piston_top_sticky" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/piston_bottom", + "side": "blocks/piston_side", + "top": "blocks/piston_top_sticky" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/piston_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/piston_normal.json index 0d1c95f2..2e6cb705 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/piston_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/piston_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston", - "textures": { - "bottom": "blocks/piston_bottom", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_normal" - } -} +{ + "parent": "block/piston", + "textures": { + "bottom": "blocks/piston_bottom", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/podzol.json b/desktopRuntime/resources/assets/minecraft/models/block/podzol.json index e2bd7637..76a9630d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/podzol.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/podzol.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/dirt", - "top": "blocks/dirt_podzol_top", - "side": "blocks/dirt_podzol_side" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/dirt", + "top": "blocks/dirt_podzol_top", + "side": "blocks/dirt_podzol_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/poppy.json b/desktopRuntime/resources/assets/minecraft/models/block/poppy.json index c6e1f82a..954941ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/poppy.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/poppy.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_rose" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_rose" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/portal_ew.json b/desktopRuntime/resources/assets/minecraft/models/block/portal_ew.json index 3bb35c34..6aa94d04 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/portal_ew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/portal_ew.json @@ -1,15 +1,16 @@ -{ - "textures": { - "particle": "blocks/portal", - "portal": "blocks/portal" - }, - "elements": [ - { "from": [ 6, 0, 0 ], - "to": [ 10, 16, 16 ], - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/portal", + "portal": "blocks/portal" + }, + "elements": [ + { + "from": [6, 0, 0], + "to": [10, 16, 16], + "faces": { + "east": { "uv": [0, 0, 16, 16], "texture": "#portal" }, + "west": { "uv": [0, 0, 16, 16], "texture": "#portal" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/portal_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/portal_ns.json index 0ca97db0..6ad7af09 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/portal_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/portal_ns.json @@ -1,15 +1,16 @@ -{ - "textures": { - "particle": "blocks/portal", - "portal": "blocks/portal" - }, - "elements": [ - { "from": [ 0, 0, 6 ], - "to": [ 16, 16, 10 ], - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#portal" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/portal", + "portal": "blocks/portal" + }, + "elements": [ + { + "from": [0, 0, 6], + "to": [16, 16, 10], + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#portal" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#portal" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage0.json b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage0.json index a2bef92a..6f31ea9c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/potatoes_stage_0" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/potatoes_stage_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage1.json b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage1.json index a273e78b..76ebe917 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/potatoes_stage_1" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/potatoes_stage_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage2.json b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage2.json index 76e021b1..cf395fa6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/potatoes_stage_2" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/potatoes_stage_2" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage3.json b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage3.json index 99c4412d..ec718bd1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/potatoes_stage3.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/potatoes_stage_3" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/potatoes_stage_3" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_down.json b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_down.json index 5f57473f..9f6c5787 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_down.json @@ -1,18 +1,23 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 1, 0, 1 ], - "to": [ 15, 0.5, 15 ], - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, - "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }, - "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }, - "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }, - "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 0.5, 15], + "faces": { + "down": { + "uv": [1, 1, 15, 15], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [1, 1, 15, 15], "texture": "#texture" }, + "north": { "uv": [1, 15.5, 15, 16], "texture": "#texture" }, + "south": { "uv": [1, 15.5, 15, 16], "texture": "#texture" }, + "west": { "uv": [1, 15.5, 15, 16], "texture": "#texture" }, + "east": { "uv": [1, 15.5, 15, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_inventory.json index 3495234b..e0b483c4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_inventory.json @@ -1,18 +1,19 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 1, 6, 1 ], - "to": [ 15, 10, 15 ], - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, - "north": { "uv": [ 1, 6, 15, 10 ], "texture": "#texture" }, - "south": { "uv": [ 1, 6, 15, 10 ], "texture": "#texture" }, - "west": { "uv": [ 1, 6, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 1, 6, 15, 10 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [1, 6, 1], + "to": [15, 10, 15], + "faces": { + "down": { "uv": [1, 1, 15, 15], "texture": "#texture" }, + "up": { "uv": [1, 1, 15, 15], "texture": "#texture" }, + "north": { "uv": [1, 6, 15, 10], "texture": "#texture" }, + "south": { "uv": [1, 6, 15, 10], "texture": "#texture" }, + "west": { "uv": [1, 6, 15, 10], "texture": "#texture" }, + "east": { "uv": [1, 6, 15, 10], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_up.json b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_up.json index 7f98931b..77034288 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_up.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pressure_plate_up.json @@ -1,18 +1,23 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 1, 0, 1 ], - "to": [ 15, 1, 15 ], - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" }, - "north": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, - "south": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, - "west": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" }, - "east": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 1, 15], + "faces": { + "down": { + "uv": [1, 1, 15, 15], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [1, 1, 15, 15], "texture": "#texture" }, + "north": { "uv": [1, 15, 15, 16], "texture": "#texture" }, + "south": { "uv": [1, 15, 15, 16], "texture": "#texture" }, + "west": { "uv": [1, 15, 15, 16], "texture": "#texture" }, + "east": { "uv": [1, 15, 15, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_bricks.json b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_bricks.json index 15105150..dfa03eb2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_bricks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_bricks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/prismarine_bricks" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/prismarine_bricks" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_dark.json b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_dark.json index 72eee27c..1cbd903d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_dark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_dark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/prismarine_dark" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/prismarine_dark" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_rough.json b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_rough.json index 69c03acf..78798bbd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/prismarine_rough.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/prismarine_rough.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/prismarine_rough" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/prismarine_rough" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin.json index ec31b98c..646ebd24 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin.json @@ -1,8 +1,8 @@ -{ - "parent": "block/orientable", - "textures": { - "top": "blocks/pumpkin_top", - "front": "blocks/pumpkin_face_off", - "side": "blocks/pumpkin_side" - } -} +{ + "parent": "block/orientable", + "textures": { + "top": "blocks/pumpkin_top", + "front": "blocks/pumpkin_face_off", + "side": "blocks/pumpkin_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_fruit.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_fruit.json index 5921a37a..d141ec57 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_fruit.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_fruit.json @@ -1,7 +1,7 @@ -{ - "parent": "block/stem_fruit", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected", - "upperstem": "blocks/pumpkin_stem_connected" - } -} +{ + "parent": "block/stem_fruit", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected", + "upperstem": "blocks/pumpkin_stem_connected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth0.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth0.json index 04529b7a..d8299980 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth0", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth0", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth1.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth1.json index 3f32d116..63f45de1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth1", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth1", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth2.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth2.json index 607c5232..0e338b39 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth2", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth2", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth3.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth3.json index c3ea4f0b..1b2907ca 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth3.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth3", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth3", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth4.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth4.json index 53be4a65..d719e438 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth4.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth4", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth4", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth5.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth5.json index d1f0f95e..3fb75801 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth5.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth5.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth5", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth5", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth6.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth6.json index bc003cb9..d3f208c3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth6.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth6", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth6", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth7.json b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth7.json index 5dba23fd..89f6b7c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth7.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/pumpkin_stem_growth7.json @@ -1,6 +1,6 @@ -{ - "parent": "block/stem_growth7", - "textures": { - "stem": "blocks/pumpkin_stem_disconnected" - } -} +{ + "parent": "block/stem_growth7", + "textures": { + "stem": "blocks/pumpkin_stem_disconnected" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_n.json index 1e03a245..d56be526 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ne.json index f840c40d..26c7b7b2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_new.json index 74b4f878..f1b409da 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ns.json index 1afdba90..bd947824 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nse.json index 52a2db94..eb4335ad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsew.json index 78de7152..976d3130 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsw.json index 2b2f60f8..7915fdbd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nw.json index f1904409..aaf07dbe 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_s.json index f0ef538b..cfe8c4d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_se.json index 78b7302e..248a8f18 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sew.json index f412c96a..6866374a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sw.json index 39664604..8eadfcb8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_purple", - "pane": "blocks/glass_purple" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_purple", + "pane": "blocks/glass_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/purple_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/purple_wool.json index 15d13a36..6acd9394 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/purple_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/purple_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_purple" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_purple" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_chiseled.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_chiseled.json index 2c96372a..7f8cdd85 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_chiseled.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_chiseled.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "side": "blocks/quartz_block_chiseled", - "end": "blocks/quartz_block_chiseled_top" - } -} +{ + "parent": "block/cube_column", + "textures": { + "side": "blocks/quartz_block_chiseled", + "end": "blocks/quartz_block_chiseled_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_inner_stairs.json index acf2cde3..77865545 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_lines.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_lines.json index db1e2f71..edaa93e3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_lines.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_lines.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/quartz_block_lines_top", - "side": "blocks/quartz_block_lines" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/quartz_block_lines_top", + "side": "blocks/quartz_block_lines" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_normal.json index f3d0f211..17e8489b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_ore.json index 126a89f0..0b06907f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/quartz_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/quartz_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_outer_stairs.json index 53f0f42b..f14432b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_stairs.json index 8bce351d..31455332 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/quartz_top.json b/desktopRuntime/resources/assets/minecraft/models/block/quartz_top.json index b5be37ff..5c3555a1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/quartz_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/quartz_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/quartz_block_top" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/quartz_block_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/rail_curved.json b/desktopRuntime/resources/assets/minecraft/models/block/rail_curved.json index 92fc188b..bf83edac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/rail_curved.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/rail_curved.json @@ -1,15 +1,16 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#rail" - }, - "elements": [ - { "from": [ 0, 1, 0 ], - "to": [ 16, 1, 16 ], - "faces": { - "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { + "from": [0, 1, 0], + "to": [16, 1, 16], + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/rail_flat.json b/desktopRuntime/resources/assets/minecraft/models/block/rail_flat.json index 92fc188b..bf83edac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/rail_flat.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/rail_flat.json @@ -1,15 +1,16 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#rail" - }, - "elements": [ - { "from": [ 0, 1, 0 ], - "to": [ 16, 1, 16 ], - "faces": { - "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { + "from": [0, 1, 0], + "to": [16, 1, 16], + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_ne.json index ae72a9d0..d216746a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_ne.json @@ -1,21 +1,22 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#rail" - }, - "elements": [ - { "from": [ 0, 9, 0 ], - "to": [ 16, 9, 16 ], - "rotation": { - "origin": [ 8, 9, 8 ], - "axis": "x", - "angle": 45, - "rescale": true - }, - "faces": { - "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { + "from": [0, 9, 0], + "to": [16, 9, 16], + "rotation": { + "origin": [8, 9, 8], + "axis": "x", + "angle": 45, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_sw.json index 92f73b7b..238c4062 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/rail_raised_sw.json @@ -1,21 +1,22 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#rail" - }, - "elements": [ - { "from": [ 0, 9, 0 ], - "to": [ 16, 9, 16 ], - "rotation": { - "origin": [ 8, 9, 8 ], - "axis": "x", - "angle": -45, - "rescale": true - }, - "faces": { - "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#rail" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#rail" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#rail" + }, + "elements": [ + { + "from": [0, 9, 0], + "to": [16, 9, 16], + "rotation": { + "origin": [8, 9, 8], + "axis": "x", + "angle": -45, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 16, 16, 0], "texture": "#rail" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#rail" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom.json index 73cf43aa..fd49be24 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/mushroom_red" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/mushroom_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_c.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_c.json index 3c3ab20a..f20ded1b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_c.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_c.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_cap_all.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_cap_all.json index 6734c28b..5ca91c2f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_cap_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_cap_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_skin_red" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_skin_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_e.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_e.json index 16c3af0b..18440ab8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_e.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_e.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_skin_red", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_skin_red", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_inside_all.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_inside_all.json index e7e960e5..ca2d70fc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_inside_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_inside_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_n.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_n.json index 33fd3e07..e3daefc2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_n.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_skin_red", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_skin_red", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_ne.json index ac2e11c7..bbd0f490 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_ne.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_skin_red", - "east": "blocks/mushroom_block_skin_red", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_skin_red", + "east": "blocks/mushroom_block_skin_red", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_nw.json index 8030a9f4..9579de1a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_nw.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_skin_red", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_skin_red" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_skin_red", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_skin_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_s.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_s.json index c689b8af..cf062550 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_s.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_skin_red", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_skin_red", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_se.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_se.json index d03d430b..cca3bb02 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_se.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_skin_red", - "south": "blocks/mushroom_block_skin_red", - "west": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_skin_red", + "south": "blocks/mushroom_block_skin_red", + "west": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem.json index 0151cf75..0ffbe74c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "side": "blocks/mushroom_block_skin_stem", - "end": "blocks/mushroom_block_inside" - } -} +{ + "parent": "block/cube_column", + "textures": { + "side": "blocks/mushroom_block_skin_stem", + "end": "blocks/mushroom_block_inside" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem_all.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem_all.json index f312a784..1439d9d3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_stem_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/mushroom_block_skin_stem" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/mushroom_block_skin_stem" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_sw.json index 9c16bd80..89346a3c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_sw.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_skin_red", - "west": "blocks/mushroom_block_skin_red" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_skin_red", + "west": "blocks/mushroom_block_skin_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_w.json b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_w.json index 037fdf65..feb973a0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_w.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_mushroom_block_w.json @@ -1,12 +1,12 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "blocks/mushroom_block_inside", - "down": "blocks/mushroom_block_inside", - "up": "blocks/mushroom_block_skin_red", - "north": "blocks/mushroom_block_inside", - "east": "blocks/mushroom_block_inside", - "south": "blocks/mushroom_block_inside", - "west": "blocks/mushroom_block_skin_red" - } -} +{ + "parent": "block/cube", + "textures": { + "particle": "blocks/mushroom_block_inside", + "down": "blocks/mushroom_block_inside", + "up": "blocks/mushroom_block_skin_red", + "north": "blocks/mushroom_block_inside", + "east": "blocks/mushroom_block_inside", + "south": "blocks/mushroom_block_inside", + "west": "blocks/mushroom_block_skin_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_n.json index d313bd02..9e79c41d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ne.json index fafecbe6..b8e70c84 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_new.json index 1b7bec00..8b54b6fb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ns.json index dbdd4832..23145ba1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nse.json index 51d5fd23..e0635fee 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsew.json index 87348f3b..72b29a79 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsw.json index c874810b..acb3a00e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nw.json index 79e34385..1477cab2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_s.json index 0123b8a7..da0e0f3a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_se.json index 903e980f..5a9ce362 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sew.json index 3fcca9ef..a48aa34d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sw.json index a6953c2f..be8ef742 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_red", - "pane": "blocks/glass_red" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_red", + "pane": "blocks/glass_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sand.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sand.json index 562949d0..c1d2b170 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sand.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/red_sand" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/red_sand" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_all.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_all.json index fdf3c24e..9ac4d649 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/red_sandstone_top" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/red_sandstone_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_chiseled.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_chiseled.json index 415cdcfe..621298d4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_chiseled.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_chiseled.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_carved" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_carved" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_inner_stairs.json index 0570ea5c..b1a23c74 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_normal.json index 91f63bbb..b6f2c0c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_outer_stairs.json index 0682658b..24170b44 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_smooth.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_smooth.json index ae9444e6..ac8d70ff 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_smooth.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_smooth" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_smooth" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_stairs.json index 4fbf937c..9ce803c6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_sandstone_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_tulip.json b/desktopRuntime/resources/assets/minecraft/models/block/red_tulip.json index 6a01672d..abf1f92f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_tulip.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_tulip_red" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_tulip_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/red_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/red_wool.json index dc625885..a41f5be3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/red_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/red_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_red" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_red" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_block.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_block.json index 06b32bdc..778f684c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_block.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/redstone_block" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/redstone_block" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_n.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_n.json index c837cbb6..6426a828 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_n.json @@ -1,26 +1,37 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ne.json index 57316b61..a833e8ec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ne.json @@ -1,26 +1,28 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#crossoverlay" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#crossoverlay" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_none.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_none.json index b03086cb..8d7195af 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_none.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_none.json @@ -1,26 +1,28 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 5 ], - "to": [ 11, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 5 ], - "to": [ 11, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#crossoverlay" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 5], + "to": [11, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 5, 11, 11], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 5], + "to": [11, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 5, 11, 11], "texture": "#crossoverlay" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nse.json index 4d2e6fc1..af3b629c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nse.json @@ -1,26 +1,28 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsew.json index 7ddb4080..4cdbd200 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsew.json @@ -1,26 +1,28 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsue.json index 92b5c12c..d35a30b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nsue.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 270, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 270 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 270, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 270 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nue.json index 62ab5fd9..b00a89fd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nue.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 270, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 270 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#crossoverlay" } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 270, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 270 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nuse.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nuse.json index 225b51f4..ff9fef96 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nuse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nuse.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nusue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nusue.json index 76436dcc..bca248dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_nusue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_nusue.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ore.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ore.json index 98798047..58bc9e5e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ore.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/redstone_ore" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/redstone_ore" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ueuw.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ueuw.json index 44d5c3c2..809ee4d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_ueuw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_ueuw.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay" } - } - }, - { "from": [ 0.25, 0, 0 ], - "to": [ 0.25, 16, 16 ], - "shade": false, - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0.25, 0, 0 ], - "to": [ 0.25, 16, 16 ], - "shade": false, - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#line", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#lineoverlay" } + } + }, + { + "from": [0.25, 0, 0], + "to": [0.25, 16, 16], + "shade": false, + "faces": { + "east": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0.25, 0, 0], + "to": [0.25, 16, 16], + "shade": false, + "faces": { + "east": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_uew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_uew.json index 688b1718..fdd6636b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_uew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_uew.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay" } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#line", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#lineoverlay" } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_une.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_une.json index e881629b..e944b680 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_une.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_une.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_uns.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_uns.json index 02c58b91..302fdc5d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_uns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_uns.json @@ -1,40 +1,62 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unse.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unse.json index 55acf6fb..2a669eb7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unse.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsew.json index 667f6350..f29dda9b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsew.json @@ -1,40 +1,53 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsue.json index f70bae31..1acc36a7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsue.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsuew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsuew.json index 09ff1740..bbbe763b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsuew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unsuew.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unue.json index 62780222..c82fcc82 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unue.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 11 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 11 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 11], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 11], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unus.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unus.json index 9c5c1d44..97817b04 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unus.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unus.json @@ -1,54 +1,87 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unuse.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unuse.json index 6b29e462..1bc71d9e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unuse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unuse.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusew.json index 38fc52f6..b7988d8a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusew.json @@ -1,54 +1,78 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusue.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusue.json index 17787f4d..e5ba7d00 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusue.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusue.json @@ -1,68 +1,103 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 5, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 5, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [5, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [5, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusueuw.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusueuw.json index e706778d..7fd83e65 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusueuw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusueuw.json @@ -1,82 +1,128 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0.25, 0, 0 ], - "to": [ 0.25, 16, 16 ], - "shade": false, - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0.25, 0, 0 ], - "to": [ 0.25, 16, 16 ], - "shade": false, - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0.25, 0, 0], + "to": [0.25, 16, 16], + "shade": false, + "faces": { + "east": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0.25, 0, 0], + "to": [0.25, 16, 16], + "shade": false, + "faces": { + "east": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusuew.json b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusuew.json index c564e3f4..c138520f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusuew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/redstone_unusuew.json @@ -1,68 +1,103 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/redstone_dust_cross", - "cross": "blocks/redstone_dust_cross", - "crossoverlay": "blocks/redstone_dust_cross_overlay", - "line": "blocks/redstone_dust_line", - "lineoverlay": "blocks/redstone_dust_line_overlay" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#crossoverlay" } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.25 ], - "to": [ 16, 16, 0.25 ], - "shade": false, - "faces": { - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.75 ], - "to": [ 16, 16, 15.75 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#line", "rotation": 90, "tintindex": 0 } - } - }, - { "from": [ 15.75, 0, 0 ], - "to": [ 15.75, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#lineoverlay", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/redstone_dust_cross", + "cross": "blocks/redstone_dust_cross", + "crossoverlay": "blocks/redstone_dust_cross_overlay", + "line": "blocks/redstone_dust_line", + "lineoverlay": "blocks/redstone_dust_line_overlay" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { "uv": [0, 0, 16, 16], "texture": "#crossoverlay" } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 0.25], + "to": [16, 16, 0.25], + "shade": false, + "faces": { + "south": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [0, 0, 15.75], + "to": [16, 16, 15.75], + "shade": false, + "faces": { + "north": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#line", + "rotation": 90, + "tintindex": 0 + } + } + }, + { + "from": [15.75, 0, 0], + "to": [15.75, 16, 16], + "shade": false, + "faces": { + "west": { + "uv": [0, 0, 16, 16], + "texture": "#lineoverlay", + "rotation": 90 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/reeds.json b/desktopRuntime/resources/assets/minecraft/models/block/reeds.json index 58a797ba..752b3bda 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/reeds.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/reeds.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/reeds" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/reeds" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_1tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_1tick.json index 643eb8ee..234e34c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_1tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_1tick.json @@ -1,44 +1,67 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 2, 6 ], - "to": [ 9, 7, 8 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 2, 6], + "to": [9, 7, 8], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_2tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_2tick.json index f0c5d1ee..9cc2db04 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_2tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_2tick.json @@ -1,44 +1,67 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 2, 8 ], - "to": [ 9, 7, 10 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 2, 8], + "to": [9, 7, 10], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_3tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_3tick.json index 7a05b207..23cddfcc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_3tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_3tick.json @@ -1,44 +1,67 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 2, 10 ], - "to": [ 9, 7, 12 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 2, 10], + "to": [9, 7, 12], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_4tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_4tick.json index 76cd2dc7..e0df4467 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_4tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_4tick.json @@ -1,44 +1,67 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 2, 12 ], - "to": [ 9, 7, 14 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 2, 12], + "to": [9, 7, 14], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_1tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_1tick.json index 0a7fe020..c1654d01 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_1tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_1tick.json @@ -1,45 +1,68 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "lock": "blocks/bedrock", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 6 ], - "to": [ 14, 4, 8 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "lock": "blocks/bedrock", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 6], + "to": [14, 4, 8], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_2tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_2tick.json index 339b269b..eba64d4c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_2tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_2tick.json @@ -1,45 +1,68 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "lock": "blocks/bedrock", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 8 ], - "to": [ 14, 4, 10 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "lock": "blocks/bedrock", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 8], + "to": [14, 4, 10], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_3tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_3tick.json index b199a7ef..d9c43cde 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_3tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_3tick.json @@ -1,45 +1,68 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "lock": "blocks/bedrock", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 10 ], - "to": [ 14, 4, 12 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "lock": "blocks/bedrock", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 10], + "to": [14, 4, 12], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_4tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_4tick.json index 8b3b9d15..71082432 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_4tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_locked_4tick.json @@ -1,45 +1,68 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_off", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_off", - "lock": "blocks/bedrock", - "unlit": "blocks/redstone_torch_off" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 12 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 2, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#unlit" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#unlit" }, - "north": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "south": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "west": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" }, - "east": { "uv": [ 7, 6, 9, 11 ], "texture": "#unlit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_off", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_off", + "lock": "blocks/bedrock", + "unlit": "blocks/redstone_torch_off" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 12], + "to": [14, 4, 14], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 2, 2], + "to": [9, 7, 4], + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#unlit" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#unlit" }, + "north": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "south": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "west": { "uv": [7, 6, 9, 11], "texture": "#unlit" }, + "east": { "uv": [7, 6, 9, 11], "texture": "#unlit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_1tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_1tick.json index ff19a91d..0fef74f5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_1tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_1tick.json @@ -1,62 +1,89 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 7, 6 ], - "to": [ 9, 7, 8 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 5 ], - "to": [ 9, 8, 9 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 6 ], - "to": [ 10, 8, 8 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 7, 6], + "to": [9, 7, 8], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 5], + "to": [9, 8, 9], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 6], + "to": [10, 8, 8], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_2tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_2tick.json index b686e744..3d2907f2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_2tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_2tick.json @@ -1,62 +1,89 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 7, 8 ], - "to": [ 9, 7, 10 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 7 ], - "to": [ 9, 8, 11 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 8 ], - "to": [ 10, 8, 10 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 7, 8], + "to": [9, 7, 10], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 7], + "to": [9, 8, 11], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 8], + "to": [10, 8, 10], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_3tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_3tick.json index 6ca2e6db..1b09c830 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_3tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_3tick.json @@ -1,62 +1,89 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 7, 10 ], - "to": [ 9, 7, 12 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 9 ], - "to": [ 9, 8, 13 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 10 ], - "to": [ 10, 8, 12 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 7, 10], + "to": [9, 7, 12], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 9], + "to": [9, 8, 13], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 10], + "to": [10, 8, 12], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_4tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_4tick.json index 3db4e612..a251611a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_4tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_4tick.json @@ -1,62 +1,89 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 7, 7, 12 ], - "to": [ 9, 7, 14 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 11 ], - "to": [ 9, 8, 15 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 12 ], - "to": [ 10, 8, 14 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [7, 7, 12], + "to": [9, 7, 14], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 11], + "to": [9, 8, 15], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 12], + "to": [10, 8, 14], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_1tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_1tick.json index 9c4139d0..b1319858 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_1tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_1tick.json @@ -1,54 +1,79 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on", - "lock": "blocks/bedrock" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 6 ], - "to": [ 14, 4, 8 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on", + "lock": "blocks/bedrock" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 6], + "to": [14, 4, 8], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_2tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_2tick.json index 37733f9a..b9948f27 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_2tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_2tick.json @@ -1,54 +1,79 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on", - "lock": "blocks/bedrock" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 8 ], - "to": [ 14, 4, 10 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on", + "lock": "blocks/bedrock" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 8], + "to": [14, 4, 10], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_3tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_3tick.json index 2e0a04bb..4b145545 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_3tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_3tick.json @@ -1,54 +1,79 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on", - "lock": "blocks/bedrock" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 10 ], - "to": [ 14, 4, 12 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on", + "lock": "blocks/bedrock" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 10], + "to": [14, 4, 12], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_4tick.json b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_4tick.json index 367f324b..9748267a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_4tick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/repeater_on_locked_4tick.json @@ -1,54 +1,79 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/repeater_on", - "slab": "blocks/stone_slab_top", - "top": "blocks/repeater_on", - "lit": "blocks/redstone_torch_on", - "lock": "blocks/bedrock" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } - } - }, - { "from": [ 2, 2, 12 ], - "to": [ 14, 4, 14 ], - "faces": { - "down": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "up": { "uv": [ 7, 2, 9, 14 ], "texture": "#lock", "rotation": 90 }, - "north": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "south": { "uv": [ 2, 7, 14, 9 ], "texture": "#lock" }, - "west": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" }, - "east": { "uv": [ 6, 7, 8, 9 ], "texture": "#lock" } - } - }, - { "from": [ 7, 7, 2 ], - "to": [ 9, 7, 4 ], - "faces": { - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#lit" } - } - }, - { "from": [ 7, 2, 1 ], - "to": [ 9, 8, 5 ], - "faces": { - "west": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "east": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - }, - { "from": [ 6, 2, 2 ], - "to": [ 10, 8, 4 ], - "faces": { - "north": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" }, - "south": { "uv": [ 6, 5, 10, 11 ], "texture": "#lit" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/repeater_on", + "slab": "blocks/stone_slab_top", + "top": "blocks/repeater_on", + "lit": "blocks/redstone_torch_on", + "lock": "blocks/bedrock" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#slab", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#slab", + "cullface": "east" + } + } + }, + { + "from": [2, 2, 12], + "to": [14, 4, 14], + "faces": { + "down": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "up": { "uv": [7, 2, 9, 14], "texture": "#lock", "rotation": 90 }, + "north": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "south": { "uv": [2, 7, 14, 9], "texture": "#lock" }, + "west": { "uv": [6, 7, 8, 9], "texture": "#lock" }, + "east": { "uv": [6, 7, 8, 9], "texture": "#lock" } + } + }, + { + "from": [7, 7, 2], + "to": [9, 7, 4], + "faces": { + "up": { "uv": [7, 6, 9, 8], "texture": "#lit" } + } + }, + { + "from": [7, 2, 1], + "to": [9, 8, 5], + "faces": { + "west": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "east": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + }, + { + "from": [6, 2, 2], + "to": [10, 8, 4], + "faces": { + "north": { "uv": [6, 5, 10, 11], "texture": "#lit" }, + "south": { "uv": [6, 5, 10, 11], "texture": "#lit" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sand.json b/desktopRuntime/resources/assets/minecraft/models/block/sand.json index 09e016c2..019b923e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sand.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/sand" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/sand" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_all.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_all.json index 71580cc2..49bc9fc4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_all.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_all.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/sandstone_top" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/sandstone_top" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_chiseled.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_chiseled.json index 859749ab..c0ac273f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_chiseled.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_chiseled.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/sandstone_top", - "side": "blocks/sandstone_carved" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/sandstone_top", + "side": "blocks/sandstone_carved" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_inner_stairs.json index 012dc4a2..fccb427f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_normal.json index f03dc38d..072cc0f1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_normal.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_outer_stairs.json index 33260efb..4b9e90db 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_smooth.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_smooth.json index cfed673f..96ae5556 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_smooth.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/sandstone_top", - "side": "blocks/sandstone_smooth" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/sandstone_top", + "side": "blocks/sandstone_smooth" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_stairs.json index cb5ed329..9d0699ce 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sandstone_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sea_lantern.json b/desktopRuntime/resources/assets/minecraft/models/block/sea_lantern.json index 2c57ec98..2d78486f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sea_lantern.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sea_lantern.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/sea_lantern" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/sea_lantern" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_n.json index 30b7521d..9d418aad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ne.json index 1eb26c9b..eb5805a9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_new.json index 0771dd31..540f6b6d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ns.json index 60af85a2..b1eab89e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nse.json index b8afdf09..10b38dbd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsew.json index fdba9cb2..7f7fb9f8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsw.json index 1c3202f7..e00e3460 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nw.json index 2a3fddfb..f6441d5c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_s.json index e20f3ddc..8a980938 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_se.json index 5979d3ca..837e4348 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sew.json index db3d963f..37597dc0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sw.json index 6e30e9e6..1befcd5e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_silver", - "pane": "blocks/glass_silver" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_silver", + "pane": "blocks/glass_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/silver_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/silver_wool.json index ac513a06..5638c47d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/silver_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/silver_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_silver" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_silver" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/slime.json b/desktopRuntime/resources/assets/minecraft/models/block/slime.json index 8234263b..d26d1a75 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/slime.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/slime.json @@ -1,30 +1,32 @@ -{ - "textures": { - "particle": "blocks/slime", - "texture": "blocks/slime" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } - } - }, - { "from": [ 3, 3, 3 ], - "to": [ 13, 13, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/slime", + "texture": "blocks/slime" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "west": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#texture" } + } + }, + { + "from": [3, 3, 3], + "to": [13, 13, 13], + "faces": { + "down": { "uv": [3, 3, 13, 13], "texture": "#texture" }, + "up": { "uv": [3, 3, 13, 13], "texture": "#texture" }, + "north": { "uv": [3, 3, 13, 13], "texture": "#texture" }, + "south": { "uv": [3, 3, 13, 13], "texture": "#texture" }, + "west": { "uv": [3, 3, 13, 13], "texture": "#texture" }, + "east": { "uv": [3, 3, 13, 13], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow.json b/desktopRuntime/resources/assets/minecraft/models/block/snow.json index 55832f2f..a169005c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/snow" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/snow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height10.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height10.json index 6ba74ddf..f37c54bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height10.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height10.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 10, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 10, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 6, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 6, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 6, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 6, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height12.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height12.json index b552068e..7dd8576f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height12.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height12.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 12, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 4, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 4, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 4, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 4, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height14.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height14.json index dae9ed6e..a82ae558 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height14.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height14.json @@ -1,19 +1,24 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 14, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "south": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "west": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "east": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 14, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { "uv": [0, 2, 16, 16], "texture": "#texture" }, + "south": { "uv": [0, 2, 16, 16], "texture": "#texture" }, + "west": { "uv": [0, 2, 16, 16], "texture": "#texture" }, + "east": { "uv": [0, 2, 16, 16], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height2.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height2.json index 4985ad37..dc0924ce 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height2.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 14, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 14, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 14, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 14, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height4.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height4.json index 30228db1..a5a602cd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height4.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 4, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 4, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 12, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 12, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 12, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 12, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height6.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height6.json index 79e99dc0..f32af948 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height6.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 6, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 10, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 10, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 10, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 10, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/snow_height8.json b/desktopRuntime/resources/assets/minecraft/models/block/snow_height8.json index 835ba8b2..ed26b6aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/snow_height8.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/snow_height8.json @@ -1,19 +1,40 @@ -{ - "textures": { - "particle": "blocks/snow", - "texture": "blocks/snow" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/snow", + "texture": "blocks/snow" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 8, 16, 16], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 8, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 8, 16, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 8, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/soul_sand.json b/desktopRuntime/resources/assets/minecraft/models/block/soul_sand.json index 74de76a2..b2ccad3d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/soul_sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/soul_sand.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/soul_sand" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/soul_sand" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sponge.json b/desktopRuntime/resources/assets/minecraft/models/block/sponge.json index 3ab72b25..1a6e36c3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sponge.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sponge.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/sponge" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/sponge" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sponge_wet.json b/desktopRuntime/resources/assets/minecraft/models/block/sponge_wet.json index 0169d46b..0bdb3aec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sponge_wet.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sponge_wet.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/sponge_wet" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/sponge_wet" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_bark.json index efc8b821..0225334a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_bark.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_bark.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/log_spruce" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/log_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom.json index 064692af..21d98834 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_spruce_lower", - "top": "blocks/door_spruce_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_spruce_lower", + "top": "blocks/door_spruce_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom_rh.json index 3321f03d..9a84cf18 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_spruce_lower", - "top": "blocks/door_spruce_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_spruce_lower", + "top": "blocks/door_spruce_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top.json index 6082c756..d531b5d9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_spruce_lower", - "top": "blocks/door_spruce_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_spruce_lower", + "top": "blocks/door_spruce_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top_rh.json index 6a880c0f..ddfecb73 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_spruce_lower", - "top": "blocks/door_spruce_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_spruce_lower", + "top": "blocks/door_spruce_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_closed.json index a5f66df2..e964613a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_closed", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_gate_closed", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_open.json index 96eb260f..f4041c57 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_gate_open", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_gate_open", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_inventory.json index e9cd49f3..4fab2768 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_inventory", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_n.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_n.json index fb9d47e4..c351d809 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_n.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_n", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_n", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ne.json index 210e9823..ef5cf74c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ne.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ne", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_ne", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ns.json index edcb6bfe..bf69de30 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_ns.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_ns", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_ns", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nse.json index 3eb31192..0d8f210f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nse.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nse", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_nse", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nsew.json index 0a7d1ae6..25d5fc04 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_nsew.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_nsew", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_nsew", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_post.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_post.json index 1237eac3..5cf02d52 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_fence_post.json @@ -1,6 +1,6 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/fence_post", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_inner_stairs.json index 93a5dfeb..382a3848 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/planks_spruce", - "top": "blocks/planks_spruce", - "side": "blocks/planks_spruce" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/planks_spruce", + "top": "blocks/planks_spruce", + "side": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_leaves.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_leaves.json index 87ab3519..9eebf6bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_leaves.json @@ -1,6 +1,6 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "blocks/leaves_spruce" - } -} +{ + "parent": "block/leaves", + "textures": { + "all": "blocks/leaves_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_log.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_log.json index 175ae829..dd8031f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_log.json @@ -1,7 +1,7 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "blocks/log_spruce_top", - "side": "blocks/log_spruce" - } -} +{ + "parent": "block/cube_column", + "textures": { + "end": "blocks/log_spruce_top", + "side": "blocks/log_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_log_side.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_log_side.json index 7e19b0bd..28fd4c88 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_log_side.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_log_side.json @@ -1,7 +1,7 @@ -{ - "parent": "block/column_side", - "textures": { - "end": "blocks/log_spruce_top", - "side": "blocks/log_spruce" - } -} +{ + "parent": "block/column_side", + "textures": { + "end": "blocks/log_spruce_top", + "side": "blocks/log_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_outer_stairs.json index fd261ccb..5861fc5b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/planks_spruce", - "top": "blocks/planks_spruce", - "side": "blocks/planks_spruce" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/planks_spruce", + "top": "blocks/planks_spruce", + "side": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_planks.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_planks.json index 540fd2ad..ecc11ccd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_planks.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/planks_spruce" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_sapling.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_sapling.json index cabbd78d..8d310cc6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_sapling.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/sapling_spruce" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/sapling_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_stairs.json index 0a732e85..54bbd8e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/planks_spruce", - "top": "blocks/planks_spruce", - "side": "blocks/planks_spruce" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/planks_spruce", + "top": "blocks/planks_spruce", + "side": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_closed.json index a452d52c..84ef502c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_closed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_closed", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/wall_gate_closed", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_open.json index 5874ebdd..d6756743 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/spruce_wall_gate_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/wall_gate_open", - "textures": { - "texture": "blocks/planks_spruce" - } -} +{ + "parent": "block/wall_gate_open", + "textures": { + "texture": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stairs.json index 114fd07b..bd66c0ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stairs.json @@ -1,29 +1,59 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { "from": [ 8, 8, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 8, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top" }, + "north": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "south" + }, + "west": { + "uv": [0, 8, 16, 16], + "texture": "#side", + "cullface": "west" + }, + "east": { "uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east" } + } + }, + { + "from": [8, 8, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [8, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { "uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [0, 0, 8, 8], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [8, 0, 16, 8], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 8], "texture": "#side" }, + "east": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_fruit.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_fruit.json index fd527558..8f36cdf7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_fruit.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_fruit.json @@ -1,31 +1,52 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 7, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 7, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 8 ], - "to": [ 9, 16, 8 ], - "faces": { - "north": { "uv": [ 9, 0, 0, 16 ], "texture": "#upperstem", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 9, 16 ], "texture": "#upperstem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 7, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 8], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 8], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 7, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 8], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 8], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [0, 0, 8], + "to": [9, 16, 8], + "faces": { + "north": { + "uv": [9, 0, 0, 16], + "texture": "#upperstem", + "tintindex": 0 + }, + "south": { + "uv": [0, 0, 9, 16], + "texture": "#upperstem", + "tintindex": 0 + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth0.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth0.json index 8d30d222..ec3666c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth0.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 1, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 2 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 2 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 1, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 2 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 2 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 1, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 2], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 2], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 1, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 2], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 2], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth1.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth1.json index 90a751ff..c95e3c34 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth1.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 3, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 4 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 3, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 4 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 4 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 3, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 4], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 4], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 3, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 4], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 4], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth2.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth2.json index 19f0939b..892711b7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth2.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 5, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 6 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 6 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 5, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 6 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 6 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 5, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 6], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 6], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 5, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 6], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 6], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth3.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth3.json index bbede3ed..d45e0814 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth3.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 7, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 7, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 8 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 7, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 8], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 8], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 7, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 8], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 8], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth4.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth4.json index 5342728f..64957476 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth4.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 9, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 10 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 10 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 9, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 10 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 10 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 9, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 10], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 10], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 9, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 10], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 10], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth5.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth5.json index 305e6d82..6f609f27 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth5.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth5.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 11, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 12 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 12 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 11, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 12 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 12 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 11, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 12], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 12], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 11, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 12], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 12], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth6.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth6.json index 6b7768e8..76c0732e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth6.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 13, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 14 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 14 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 13, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 14 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 14 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 13, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 14], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 14], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 13, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 14], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 14], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth7.json b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth7.json index 571d0c3e..5c987c0e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stem_growth7.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stem_growth7.json @@ -1,24 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#stem" - }, - "elements": [ - { "from": [ 0, -1, 8 ], - "to": [ 16, 15, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem", "tintindex": 0 }, - "south": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem", "tintindex": 0 } - } - }, - { "from": [ 8, -1, 0 ], - "to": [ 8, 15, 16 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#stem", "tintindex": 0 }, - "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#stem", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#stem" + }, + "elements": [ + { + "from": [0, -1, 8], + "to": [16, 15, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "south": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 } + } + }, + { + "from": [8, -1, 0], + "to": [8, 15, 16], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 }, + "east": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/sticky_piston.json b/desktopRuntime/resources/assets/minecraft/models/block/sticky_piston.json index 7f07a05d..43b91ab6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/sticky_piston.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/sticky_piston.json @@ -1,8 +1,8 @@ -{ - "parent": "block/piston", - "textures": { - "bottom": "blocks/piston_bottom", - "side": "blocks/piston_side", - "platform": "blocks/piston_top_sticky" - } -} +{ + "parent": "block/piston", + "textures": { + "bottom": "blocks/piston_bottom", + "side": "blocks/piston_side", + "platform": "blocks/piston_top_sticky" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone.json b/desktopRuntime/resources/assets/minecraft/models/block/stone.json index 485f7242..dd36f0d0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stone" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_inner_stairs.json index 1dcb0b88..c41cf0d8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/stonebrick", - "top": "blocks/stonebrick", - "side": "blocks/stonebrick" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/stonebrick", + "top": "blocks/stonebrick", + "side": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_outer_stairs.json index 73562071..1d5dc309 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/stonebrick", - "top": "blocks/stonebrick", - "side": "blocks/stonebrick" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/stonebrick", + "top": "blocks/stonebrick", + "side": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_stairs.json index a35bcf81..2e6920d0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_brick_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/stonebrick", - "top": "blocks/stonebrick", - "side": "blocks/stonebrick" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/stonebrick", + "top": "blocks/stonebrick", + "side": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_button.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_button.json index 21620194..d98233a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_button.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_button.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/button", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_button_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_button_inventory.json index 6636d786..bb2faf1a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_button_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_button_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button_inventory", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/button_inventory", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_button_pressed.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_button_pressed.json index c3e49588..f5523304 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_button_pressed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_button_pressed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button_pressed", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/button_pressed", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_inner_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_inner_stairs.json index e21e6e63..613364e1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_inner_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_inner_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "blocks/cobblestone", - "top": "blocks/cobblestone", - "side": "blocks/cobblestone" - } -} +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "blocks/cobblestone", + "top": "blocks/cobblestone", + "side": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_mirrored.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_mirrored.json index 38b3d5fd..5993fa64 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_mirrored.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_mirrored.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_mirrored_all", - "textures": { - "all": "blocks/stone" - } -} +{ + "parent": "block/cube_mirrored_all", + "textures": { + "all": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_outer_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_outer_stairs.json index 90828eb1..3a49a6ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_outer_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_outer_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "blocks/cobblestone", - "top": "blocks/cobblestone", - "side": "blocks/cobblestone" - } -} +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "blocks/cobblestone", + "top": "blocks/cobblestone", + "side": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_down.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_down.json index 957e2c1a..a12753ad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_down.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_down", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_inventory.json index b9f8af99..7e428714 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_inventory", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/pressure_plate_inventory", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_up.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_up.json index 5e1a22e0..8798b951 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_up.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_pressure_plate_up.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_up", - "textures": { - "texture": "blocks/stone" - } -} +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "blocks/stone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/block/stone_stairs.json index 7368e5d6..3228d41a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stone_stairs.json @@ -1,8 +1,8 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "blocks/cobblestone", - "top": "blocks/cobblestone", - "side": "blocks/cobblestone" - } -} +{ + "parent": "block/stairs", + "textures": { + "bottom": "blocks/cobblestone", + "top": "blocks/cobblestone", + "side": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_chiseled.json b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_chiseled.json index cda10e12..126ed9d0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_chiseled.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_chiseled.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stonebrick_carved" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stonebrick_carved" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_cracked.json b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_cracked.json index d68c7c93..00bfa3f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_cracked.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_cracked.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stonebrick_cracked" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stonebrick_cracked" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_mossy.json b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_mossy.json index 731347ad..556ce0eb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_mossy.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_mossy.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stonebrick_mossy" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stonebrick_mossy" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_normal.json b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_normal.json index fb932aec..376c7af5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_normal.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/stonebrick_normal.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/stonebrick" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tall_grass.json b/desktopRuntime/resources/assets/minecraft/models/block/tall_grass.json index bfba04db..32e9afaa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tall_grass.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tall_grass.json @@ -1,6 +1,6 @@ -{ - "parent": "block/tallgrass", - "textures": { - "cross": "blocks/tallgrass" - } -} +{ + "parent": "block/tallgrass", + "textures": { + "cross": "blocks/tallgrass" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tallgrass.json b/desktopRuntime/resources/assets/minecraft/models/block/tallgrass.json index 562d873b..eb5de5aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tallgrass.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tallgrass.json @@ -1,26 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#cross" - }, - "elements": [ - { "from": [ 0.8, 0, 8 ], - "to": [ 15.2, 16, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - }, - { "from": [ 8, 0, 0.8 ], - "to": [ 8, 16, 15.2 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { + "from": [0.8, 0, 8], + "to": [15.2, 16, 8], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + }, + { + "from": [8, 0, 0.8], + "to": [8, 16, 15.2], + "rotation": { + "origin": [8, 8, 8], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tnt.json b/desktopRuntime/resources/assets/minecraft/models/block/tnt.json index d193eefc..a77d4833 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tnt.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tnt.json @@ -1,8 +1,8 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "blocks/tnt_bottom", - "top": "blocks/tnt_top", - "side": "blocks/tnt_side" - } -} +{ + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "blocks/tnt_bottom", + "top": "blocks/tnt_top", + "side": "blocks/tnt_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/torch.json b/desktopRuntime/resources/assets/minecraft/models/block/torch.json index a52704c7..849d68d8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/torch.json @@ -1,32 +1,35 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#torch" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 10, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" } - } - }, - { "from": [ 7, 0, 0 ], - "to": [ 9, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - }, - { "from": [ 0, 0, 7 ], - "to": [ 16, 16, 9 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 10, 9], + "shade": false, + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#torch" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#torch" } + } + }, + { + "from": [7, 0, 0], + "to": [9, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#torch" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#torch" } + } + }, + { + "from": [0, 0, 7], + "to": [16, 16, 9], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#torch" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#torch" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/torch_wall.json b/desktopRuntime/resources/assets/minecraft/models/block/torch_wall.json index a673c057..48edee45 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/torch_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/torch_wall.json @@ -1,35 +1,38 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#torch" - }, - "elements": [ - { "from": [ -1, 3.5, 7 ], - "to": [ 1, 13.5, 9 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, - "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" } - } - }, - { "from": [ -1, 3.5, 0 ], - "to": [ 1, 19.5, 16 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - }, - { "from": [ -8, 3.5, 7 ], - "to": [ 8, 19.5, 9 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch" + }, + "elements": [ + { + "from": [-1, 3.5, 7], + "to": [1, 13.5, 9], + "rotation": { "origin": [0, 3.5, 8], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [7, 13, 9, 15], "texture": "#torch" }, + "up": { "uv": [7, 6, 9, 8], "texture": "#torch" } + } + }, + { + "from": [-1, 3.5, 0], + "to": [1, 19.5, 16], + "rotation": { "origin": [0, 3.5, 8], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#torch" }, + "east": { "uv": [0, 0, 16, 16], "texture": "#torch" } + } + }, + { + "from": [-8, 3.5, 7], + "to": [8, 19.5, 9], + "rotation": { "origin": [0, 3.5, 8], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#torch" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#torch" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_bottom.json index 0d88b29c..deafe9a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_bottom.json @@ -1,18 +1,39 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 3, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 3, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "north": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_open.json b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_open.json index 87025f4f..4bf6b2f5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_open.json @@ -1,18 +1,39 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 0, 0, 13 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 13, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 16, 0, 13, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 13, 0, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [0, 0, 13], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 13, 16, 16], + "texture": "#texture", + "cullface": "down" + }, + "up": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "up" + }, + "north": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [16, 0, 13, 16], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [13, 0, 16, 16], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_top.json b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_top.json index 0e2e7f45..fb1e2ae1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/trapdoor_top.json @@ -1,18 +1,35 @@ -{ - "textures": { - "particle": "#texture" - }, - "elements": [ - { "from": [ 0, 13, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "up" }, - "north": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 16, 16, 13 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "from": [0, 13, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "up" }, + "north": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "north" + }, + "south": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "south" + }, + "west": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "west" + }, + "east": { + "uv": [0, 16, 16, 13], + "texture": "#texture", + "cullface": "east" + } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_n.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_n.json index 995fe66a..e9c9d554 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_n.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ne.json index f6623221..e7467682 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ne.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ns.json index 6a2066c5..6acc5af1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_ns.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nse.json index 91189632..e8e4e4de 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nse.json @@ -1,57 +1,63 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nsew.json index 9b19902b..9f7641d7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_nsew.json @@ -1,73 +1,81 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 0, 1.5, 7.75 ], - "to": [ 4, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 4, 1.5, 7.75 ], - "to": [ 8, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [0, 1.5, 7.75], + "to": [4, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [4, 1.5, 7.75], + "to": [8, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_n.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_n.json index 0ce5a695..5b347028 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_n.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ne.json index 5cb4628f..9fe003fe 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ne.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ns.json index 0bfa7c67..e1128d44 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_ns.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nse.json index e8d23caf..f8b60d8e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nse.json @@ -1,57 +1,63 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nsew.json index c6134c56..5d10c1a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_attached_suspended_nsew.json @@ -1,73 +1,81 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 0, 3.5, 7.75 ], - "to": [ 4, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 4, 3.5, 7.75 ], - "to": [ 8, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 4, 16, 2 ], "texture": "#texture" }, - "up": { "uv": [ 0, 2, 16, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [0, 3.5, 7.75], + "to": [4, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [4, 3.5, 7.75], + "to": [8, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 4, 16, 2], "texture": "#texture" }, + "up": { "uv": [0, 2, 16, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook.json index a3e5959f..c62ae1c2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook.json @@ -1,72 +1,83 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak" - }, - "elements": [ - { "from": [ 6.2, 3.8, 7.9 ], - "to": [ 9.8, 4.6, 11.5 ], - "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 3.8, 10.3 ], - "to": [ 8.6, 4.6, 10.3 ], - "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 3.8, 9.1 ], - "to": [ 8.6, 4.6, 9.1 ], - "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 3.8, 9.1 ], - "to": [ 7.4, 4.6, 10.3 ], - "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 3.8, 9.1 ], - "to": [ 8.6, 4.6, 10.3 ], - "rotation": { "origin": [ 8, 6, 5.2 ], "axis": "x", "angle": -45 }, - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": 45 }, - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak" + }, + "elements": [ + { + "from": [6.2, 3.8, 7.9], + "to": [9.8, 4.6, 11.5], + "rotation": { "origin": [8, 6, 5.2], "axis": "x", "angle": -45 }, + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 3.8, 10.3], + "to": [8.6, 4.6, 10.3], + "rotation": { "origin": [8, 6, 5.2], "axis": "x", "angle": -45 }, + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 3.8, 9.1], + "to": [8.6, 4.6, 9.1], + "rotation": { "origin": [8, 6, 5.2], "axis": "x", "angle": -45 }, + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 3.8, 9.1], + "to": [7.4, 4.6, 10.3], + "rotation": { "origin": [8, 6, 5.2], "axis": "x", "angle": -45 }, + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 3.8, 9.1], + "to": [8.6, 4.6, 10.3], + "rotation": { "origin": [8, 6, 5.2], "axis": "x", "angle": -45 }, + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "rotation": { "origin": [8, 6, 14], "axis": "x", "angle": 45 }, + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached.json index b5c40b52..5d5448cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached.json @@ -1,75 +1,92 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak", - "tripwire": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 6.7 ], - "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, - "faces": { - "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, - "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } - } - }, - { "from": [ 6.2, 4.2, 6.7 ], - "to": [ 9.8, 5, 10.3 ], - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 9.1 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 8.6, 5, 7.9 ], - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 7.4, 5, 9.1 ], - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 4.2, 7.9 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak", + "tripwire": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 6.7], + "rotation": { + "origin": [8, 0, 0], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 8, 16, 6], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [0, 6, 16, 8], "texture": "#tripwire", "rotation": 90 } + } + }, + { + "from": [6.2, 4.2, 6.7], + "to": [9.8, 5, 10.3], + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 9.1], + "to": [8.6, 5, 9.1], + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [8.6, 5, 7.9], + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [7.4, 5, 9.1], + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 4.2, 7.9], + "to": [8.6, 5, 9.1], + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_powered.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_powered.json index f89c2b27..00aca374 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_powered.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_powered.json @@ -1,76 +1,93 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak", - "tripwire": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 0.5, 0 ], - "to": [ 8.25, 0.5, 6.7 ], - "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, - "faces": { - "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, - "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } - } - }, - { "from": [ 6.2, 4.2, 6.7 ], - "to": [ 9.8, 5, 10.3 ], - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 9.1 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 8.6, 5, 7.9 ], - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 7.4, 5, 9.1 ], - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 4.2, 7.9 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak", + "tripwire": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 0.5, 0], + "to": [8.25, 0.5, 6.7], + "rotation": { + "origin": [8, 0, 0], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 8, 16, 6], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [0, 6, 16, 8], "texture": "#tripwire", "rotation": 90 } + } + }, + { + "from": [6.2, 4.2, 6.7], + "to": [9.8, 5, 10.3], + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 9.1], + "to": [8.6, 5, 9.1], + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [8.6, 5, 7.9], + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [7.4, 5, 9.1], + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 4.2, 7.9], + "to": [8.6, 5, 9.1], + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "rotation": { "origin": [8, 6, 14], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended.json index 9e76add4..c79a0236 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended.json @@ -1,76 +1,93 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak", - "tripwire": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 6.7 ], - "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, - "faces": { - "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, - "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } - } - }, - { "from": [ 6.2, 4.2, 6.7 ], - "to": [ 9.8, 5, 10.3 ], - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 9.1 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 8.6, 5, 7.9 ], - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 7.4, 5, 9.1 ], - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 4.2, 7.9 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak", + "tripwire": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 6.7], + "rotation": { + "origin": [8, 0, 0], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 8, 16, 6], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [0, 6, 16, 8], "texture": "#tripwire", "rotation": 90 } + } + }, + { + "from": [6.2, 4.2, 6.7], + "to": [9.8, 5, 10.3], + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 9.1], + "to": [8.6, 5, 9.1], + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [8.6, 5, 7.9], + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [7.4, 5, 9.1], + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 4.2, 7.9], + "to": [8.6, 5, 9.1], + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "rotation": { "origin": [8, 6, 14], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended_powered.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended_powered.json index 8874528c..f7a45e7c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended_powered.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_attached_suspended_powered.json @@ -1,76 +1,93 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak", - "tripwire": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 2.5, 0 ], - "to": [ 8.25, 2.5, 6.7 ], - "rotation": { "origin": [ 8, 0, 0 ], "axis": "x", "angle": -22.5, "rescale": true }, - "faces": { - "down": { "uv": [ 0, 8, 16, 6 ], "texture": "#tripwire", "rotation": 90 }, - "up": { "uv": [ 0, 6, 16, 8 ], "texture": "#tripwire", "rotation": 90 } - } - }, - { "from": [ 6.2, 4.2, 6.7 ], - "to": [ 9.8, 5, 10.3 ], - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 9.1 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 8.6, 5, 7.9 ], - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 7.4, 5, 9.1 ], - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 4.2, 7.9 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak", + "tripwire": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 2.5, 0], + "to": [8.25, 2.5, 6.7], + "rotation": { + "origin": [8, 0, 0], + "axis": "x", + "angle": -22.5, + "rescale": true + }, + "faces": { + "down": { "uv": [0, 8, 16, 6], "texture": "#tripwire", "rotation": 90 }, + "up": { "uv": [0, 6, 16, 8], "texture": "#tripwire", "rotation": 90 } + } + }, + { + "from": [6.2, 4.2, 6.7], + "to": [9.8, 5, 10.3], + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 9.1], + "to": [8.6, 5, 9.1], + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [8.6, 5, 7.9], + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [7.4, 5, 9.1], + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 4.2, 7.9], + "to": [8.6, 5, 9.1], + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "rotation": { "origin": [8, 6, 14], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_powered.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_powered.json index eeaf5bc1..d679db7e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_powered.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_hook_powered.json @@ -1,67 +1,78 @@ -{ - "textures": { - "particle": "blocks/planks_oak", - "hook": "blocks/trip_wire_source", - "wood": "blocks/planks_oak" - }, - "elements": [ - { "from": [ 6.2, 4.2, 6.7 ], - "to": [ 9.8, 5, 10.3 ], - "faces": { - "down": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "up": { "uv": [ 5, 3, 11, 9 ], "texture": "#hook" }, - "north": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" }, - "south": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "west": { "uv": [ 5, 8, 11, 9 ], "texture": "#hook" }, - "east": { "uv": [ 5, 3, 11, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 9.1 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "north": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 8.6, 5, 7.9 ], - "faces": { - "south": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 4.2, 7.9 ], - "to": [ 7.4, 5, 9.1 ], - "faces": { - "east": { "uv": [ 7, 8, 9, 9 ], "texture": "#hook" } - } - }, - { "from": [ 8.6, 4.2, 7.9 ], - "to": [ 8.6, 5, 9.1 ], - "faces": { - "west": { "uv": [ 7, 3, 9, 4 ], "texture": "#hook" } - } - }, - { "from": [ 7.4, 5.2, 10 ], - "to": [ 8.8, 6.8, 14 ], - "rotation": { "origin": [ 8, 6, 14 ], "axis": "x", "angle": -22.5 }, - "faces": { - "down": { "uv": [ 7, 9, 9, 14 ], "texture": "#wood" }, - "up": { "uv": [ 7, 2, 9, 7 ], "texture": "#wood" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#wood" }, - "west": { "uv": [ 2, 9, 7, 11 ], "texture": "#wood" }, - "east": { "uv": [ 9, 9, 14, 11 ], "texture": "#wood" } - } - }, - { "from": [ 6, 1, 14 ], - "to": [ 10, 9, 16 ], - "faces": { - "down": { "uv": [ 6, 14, 10, 16 ], "texture": "#wood" }, - "up": { "uv": [ 6, 0, 10, 2 ], "texture": "#wood" }, - "north": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood", "cullface": "north" }, - "south": { "uv": [ 6, 7, 10, 15 ], "texture": "#wood" }, - "west": { "uv": [ 0, 7, 2, 15 ], "texture": "#wood" }, - "east": { "uv": [ 14, 7, 16, 15 ], "texture": "#wood" } - } - } - ] -} +{ + "textures": { + "particle": "blocks/planks_oak", + "hook": "blocks/trip_wire_source", + "wood": "blocks/planks_oak" + }, + "elements": [ + { + "from": [6.2, 4.2, 6.7], + "to": [9.8, 5, 10.3], + "faces": { + "down": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "up": { "uv": [5, 3, 11, 9], "texture": "#hook" }, + "north": { "uv": [5, 3, 11, 4], "texture": "#hook" }, + "south": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "west": { "uv": [5, 8, 11, 9], "texture": "#hook" }, + "east": { "uv": [5, 3, 11, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 9.1], + "to": [8.6, 5, 9.1], + "faces": { + "north": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [8.6, 5, 7.9], + "faces": { + "south": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 4.2, 7.9], + "to": [7.4, 5, 9.1], + "faces": { + "east": { "uv": [7, 8, 9, 9], "texture": "#hook" } + } + }, + { + "from": [8.6, 4.2, 7.9], + "to": [8.6, 5, 9.1], + "faces": { + "west": { "uv": [7, 3, 9, 4], "texture": "#hook" } + } + }, + { + "from": [7.4, 5.2, 10], + "to": [8.8, 6.8, 14], + "rotation": { "origin": [8, 6, 14], "axis": "x", "angle": -22.5 }, + "faces": { + "down": { "uv": [7, 9, 9, 14], "texture": "#wood" }, + "up": { "uv": [7, 2, 9, 7], "texture": "#wood" }, + "north": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "south": { "uv": [7, 9, 9, 11], "texture": "#wood" }, + "west": { "uv": [2, 9, 7, 11], "texture": "#wood" }, + "east": { "uv": [9, 9, 14, 11], "texture": "#wood" } + } + }, + { + "from": [6, 1, 14], + "to": [10, 9, 16], + "faces": { + "down": { "uv": [6, 14, 10, 16], "texture": "#wood" }, + "up": { "uv": [6, 0, 10, 2], "texture": "#wood" }, + "north": { + "uv": [6, 7, 10, 15], + "texture": "#wood", + "cullface": "north" + }, + "south": { "uv": [6, 7, 10, 15], "texture": "#wood" }, + "west": { "uv": [0, 7, 2, 15], "texture": "#wood" }, + "east": { "uv": [14, 7, 16, 15], "texture": "#wood" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_n.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_n.json index 4ef4a748..eaab52a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_n.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ne.json index 73f08bcd..4b856f03 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ne.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ns.json index 11603a93..9b0ce4fa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_ns.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nse.json index a484845b..62a4e90d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nse.json @@ -1,57 +1,63 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nsew.json index 24986c4e..59ac2844 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_nsew.json @@ -1,73 +1,81 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 1.5, 0 ], - "to": [ 8.25, 1.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 4 ], - "to": [ 8.25, 1.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 8 ], - "to": [ 8.25, 1.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 1.5, 12 ], - "to": [ 8.25, 1.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 0, 1.5, 7.75 ], - "to": [ 4, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 4, 1.5, 7.75 ], - "to": [ 8, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 8, 1.5, 7.75 ], - "to": [ 12, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 1.5, 7.75 ], - "to": [ 16, 1.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 1.5, 0], + "to": [8.25, 1.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 4], + "to": [8.25, 1.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 8], + "to": [8.25, 1.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 1.5, 12], + "to": [8.25, 1.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [0, 1.5, 7.75], + "to": [4, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [4, 1.5, 7.75], + "to": [8, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [8, 1.5, 7.75], + "to": [12, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 1.5, 7.75], + "to": [16, 1.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_n.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_n.json index f34e5993..d539123c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_n.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ne.json index 65b8ffec..c9eff11c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ne.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ns.json index 9d52664d..ae9b85c2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_ns.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nse.json index ff5cf3a3..c4a39b20 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nse.json @@ -1,57 +1,63 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nsew.json index 33eaae7e..901cac50 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/tripwire_suspended_nsew.json @@ -1,73 +1,81 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/trip_wire", - "texture": "blocks/trip_wire" - }, - "elements": [ - { "from": [ 7.75, 3.5, 0 ], - "to": [ 8.25, 3.5, 4 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 4 ], - "to": [ 8.25, 3.5, 8 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 8 ], - "to": [ 8.25, 3.5, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 7.75, 3.5, 12 ], - "to": [ 8.25, 3.5, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture", "rotation": 90 }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture", "rotation": 90 } - } - }, - { "from": [ 0, 3.5, 7.75 ], - "to": [ 4, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 4, 3.5, 7.75 ], - "to": [ 8, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 8, 3.5, 7.75 ], - "to": [ 12, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - }, - { "from": [ 12, 3.5, 7.75 ], - "to": [ 16, 3.5, 8.25 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 2, 16, 0 ], "texture": "#texture" }, - "up": { "uv": [ 0, 0, 16, 2 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/trip_wire", + "texture": "blocks/trip_wire" + }, + "elements": [ + { + "from": [7.75, 3.5, 0], + "to": [8.25, 3.5, 4], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 4], + "to": [8.25, 3.5, 8], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 8], + "to": [8.25, 3.5, 12], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [7.75, 3.5, 12], + "to": [8.25, 3.5, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture", "rotation": 90 }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture", "rotation": 90 } + } + }, + { + "from": [0, 3.5, 7.75], + "to": [4, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [4, 3.5, 7.75], + "to": [8, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [8, 3.5, 7.75], + "to": [12, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + }, + { + "from": [12, 3.5, 7.75], + "to": [16, 3.5, 8.25], + "shade": false, + "faces": { + "down": { "uv": [0, 2, 16, 0], "texture": "#texture" }, + "up": { "uv": [0, 0, 16, 2], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_lamp.json index 3ac1e842..393b6044 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_lamp.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_lamp.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/redstone_lamp_off" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/redstone_lamp_off" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch.json b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch.json index 675782da..df64619c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch", - "textures": { - "torch": "blocks/redstone_torch_off" - } -} +{ + "parent": "block/torch", + "textures": { + "torch": "blocks/redstone_torch_off" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch_wall.json b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch_wall.json index 16b3e258..dc0da3ad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/unlit_redstone_torch_wall.json @@ -1,6 +1,6 @@ -{ - "parent": "block/torch_wall", - "textures": { - "torch": "blocks/redstone_torch_off" - } -} +{ + "parent": "block/torch_wall", + "textures": { + "torch": "blocks/redstone_torch_off" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab.json index a827d0a0..07b2d106 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab.json @@ -1,18 +1,27 @@ -{ - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 8, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} +{ + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [0, 8, 0], + "to": [16, 16, 16], + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#bottom" }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up" }, + "north": { + "uv": [0, 0, 16, 8], + "texture": "#side", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 8], + "texture": "#side", + "cullface": "south" + }, + "west": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west" }, + "east": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_acacia.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_acacia.json index 151efc3d..c4de5977 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_acacia.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_acacia.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_acacia", - "top": "blocks/planks_acacia", - "side": "blocks/planks_acacia" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_acacia", + "top": "blocks/planks_acacia", + "side": "blocks/planks_acacia" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_birch.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_birch.json index 7bdd5672..731d90ff 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_birch.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_birch.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_birch", - "top": "blocks/planks_birch", - "side": "blocks/planks_birch" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_birch", + "top": "blocks/planks_birch", + "side": "blocks/planks_birch" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_brick.json index fcc2c6a7..1345f5aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/brick", - "top": "blocks/brick", - "side": "blocks/brick" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/brick", + "top": "blocks/brick", + "side": "blocks/brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_cobblestone.json index 2f115f0e..cae00231 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_cobblestone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/cobblestone", - "top": "blocks/cobblestone", - "side": "blocks/cobblestone" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/cobblestone", + "top": "blocks/cobblestone", + "side": "blocks/cobblestone" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_dark_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_dark_oak.json index 0429341f..02c849b3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_dark_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_dark_oak.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_big_oak", - "top": "blocks/planks_big_oak", - "side": "blocks/planks_big_oak" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_big_oak", + "top": "blocks/planks_big_oak", + "side": "blocks/planks_big_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_jungle.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_jungle.json index 7fcd5567..50a38a4e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_jungle.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_jungle.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_jungle", - "top": "blocks/planks_jungle", - "side": "blocks/planks_jungle" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_jungle", + "top": "blocks/planks_jungle", + "side": "blocks/planks_jungle" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_nether_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_nether_brick.json index eb2a3120..b6fa81fa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_nether_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_nether_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/nether_brick", - "top": "blocks/nether_brick", - "side": "blocks/nether_brick" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/nether_brick", + "top": "blocks/nether_brick", + "side": "blocks/nether_brick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_oak.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_oak.json index a1a2b953..df4baa8b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_oak.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_oak.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_oak", - "top": "blocks/planks_oak", - "side": "blocks/planks_oak" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_oak", + "top": "blocks/planks_oak", + "side": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_quartz.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_quartz.json index 083d83dd..4c2673c6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_quartz.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_quartz.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/quartz_block_bottom", - "top": "blocks/quartz_block_top", - "side": "blocks/quartz_block_side" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/quartz_block_bottom", + "top": "blocks/quartz_block_top", + "side": "blocks/quartz_block_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_red_sandstone.json index b25016d4..246469d2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_red_sandstone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/red_sandstone_bottom", - "top": "blocks/red_sandstone_top", - "side": "blocks/red_sandstone_normal" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/red_sandstone_bottom", + "top": "blocks/red_sandstone_top", + "side": "blocks/red_sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_sandstone.json index 6b8885b3..cc4dd1b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_sandstone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/sandstone_bottom", - "top": "blocks/sandstone_top", - "side": "blocks/sandstone_normal" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/sandstone_bottom", + "top": "blocks/sandstone_top", + "side": "blocks/sandstone_normal" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_spruce.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_spruce.json index 3b381407..f545d6b7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_spruce.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_spruce.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/planks_spruce", - "top": "blocks/planks_spruce", - "side": "blocks/planks_spruce" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/planks_spruce", + "top": "blocks/planks_spruce", + "side": "blocks/planks_spruce" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone.json index 905705e2..37beae08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/stone_slab_top", - "top": "blocks/stone_slab_top", - "side": "blocks/stone_slab_side" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/stone_slab_top", + "top": "blocks/stone_slab_top", + "side": "blocks/stone_slab_side" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone_brick.json b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone_brick.json index 016e4791..1df075ee 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/upper_slab_stone_brick.json @@ -1,8 +1,8 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "blocks/stonebrick", - "top": "blocks/stonebrick", - "side": "blocks/stonebrick" - } -} +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "blocks/stonebrick", + "top": "blocks/stonebrick", + "side": "blocks/stonebrick" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_1.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_1.json index d12a0cea..d28eef32 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_1.json @@ -1,17 +1,18 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_1u.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_1u.json index 924a2e3c..e65ffe64 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_1u.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_1u.json @@ -1,25 +1,27 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_2.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_2.json index 5bd1bbe6..9aa34d5c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_2.json @@ -1,25 +1,27 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_2_opposite.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_2_opposite.json index 40f0994f..39f5ad9a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_2_opposite.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_2_opposite.json @@ -1,25 +1,27 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0.8, 0, 0 ], - "to": [ 0.8, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0.8, 0, 0], + "to": [0.8, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_2u.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_2u.json index e9737eb7..00bfd90a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_2u.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_2u.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_2u_opposite.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_2u_opposite.json index 026d7cab..84eef7e5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_2u_opposite.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_2u_opposite.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0.8, 0, 0 ], - "to": [ 0.8, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0.8, 0, 0], + "to": [0.8, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_3.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_3.json index d68bc318..791f39e9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_3.json @@ -1,33 +1,36 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_3u.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_3u.json index fbe9597d..57b546ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_3u.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_3u.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_4.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_4.json index 71675ebc..b5ad6e4d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_4.json @@ -1,41 +1,45 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0.8, 0, 0 ], - "to": [ 0.8, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0.8, 0, 0], + "to": [0.8, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_4u.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_4u.json index cc9211c6..b88e57b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_4u.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_4u.json @@ -1,49 +1,54 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0.8, 0, 0 ], - "to": [ 0.8, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 15.2, 0, 0 ], - "to": [ 15.2, 16, 16 ], - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 15.2 ], - "to": [ 16, 16, 15.2 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - }, - { "from": [ 0, 0, 0.8 ], - "to": [ 16, 16, 0.8 ], - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0.8, 0, 0], + "to": [0.8, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [15.2, 0, 0], + "to": [15.2, 16, 16], + "shade": false, + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 15.2], + "to": [16, 16, 15.2], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + }, + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/vine_u.json b/desktopRuntime/resources/assets/minecraft/models/block/vine_u.json index d71086cd..24086619 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/vine_u.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/vine_u.json @@ -1,17 +1,18 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/vine", - "vine": "blocks/vine" - }, - "elements": [ - { "from": [ 0, 15.2, 0 ], - "to": [ 16, 15.2, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#vine", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/vine", + "vine": "blocks/vine" + }, + "elements": [ + { + "from": [0, 15.2, 0], + "to": [16, 15.2, 16], + "shade": false, + "faces": { + "down": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_closed.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_closed.json index ce904e4d..e1a2a827 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_closed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_closed.json @@ -1,96 +1,112 @@ -{ - "ambientocclusion": false, - "textures": { - "particle" : "#texture" - }, - "elements": [ - { "__comment": "Left-hand post", - "from": [ 0, 2, 7 ], - "to": [ 2, 13, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } - } - }, - { "__comment": "Right-hand post", - "from": [ 14, 2, 7 ], - "to": [ 16, 13, 9 ], - "faces": { - "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } - } - }, - { "__comment": "Inner vertical post of left-hand gate door", - "from": [ 6, 3, 7 ], - "to": [ 8, 12, 9 ], - "faces": { - "down": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, - "up": { "uv": [ 6, 7, 8, 9 ], "texture": "#texture" }, - "north": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, - "south": { "uv": [ 6, 1, 8, 10 ], "texture": "#texture" }, - "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Inner vertical post of right-hand gate door", - "from": [ 8, 3, 7 ], - "to": [ 10, 12, 9 ], - "faces": { - "down": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, - "up": { "uv": [ 8, 7, 10, 9 ], "texture": "#texture" }, - "north": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, - "south": { "uv": [ 8, 1, 10, 10 ], "texture": "#texture" }, - "west": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 7, 1, 9, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 2, 3, 7 ], - "to": [ 6, 6, 9 ], - "faces": { - "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "north": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" }, - "south": { "uv": [ 2, 7, 6, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 2, 9, 7 ], - "to": [ 6, 12, 9 ], - "faces": { - "down": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "up": { "uv": [ 2, 7, 6, 9 ], "texture": "#texture" }, - "north": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" }, - "south": { "uv": [ 2, 1, 6, 4 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of right-hand gate door", - "from": [ 10, 3, 7 ], - "to": [ 14, 6, 9 ], - "faces": { - "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "north": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" }, - "south": { "uv": [ 10, 7, 14, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of right-hand gate door", - "from": [ 10, 9, 7 ], - "to": [ 14, 12, 9 ], - "faces": { - "down": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "up": { "uv": [ 10, 7, 14, 9 ], "texture": "#texture" }, - "north": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" }, - "south": { "uv": [ 10, 1, 14, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Left-hand post", + "from": [0, 2, 7], + "to": [2, 13, 9], + "faces": { + "down": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "north": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "south": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "west": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "west" + }, + "east": { "uv": [7, 0, 9, 11], "texture": "#texture" } + } + }, + { + "__comment": "Right-hand post", + "from": [14, 2, 7], + "to": [16, 13, 9], + "faces": { + "down": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "south": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "west": { "uv": [7, 0, 9, 11], "texture": "#texture" }, + "east": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "east" + } + } + }, + { + "__comment": "Inner vertical post of left-hand gate door", + "from": [6, 3, 7], + "to": [8, 12, 9], + "faces": { + "down": { "uv": [6, 7, 8, 9], "texture": "#texture" }, + "up": { "uv": [6, 7, 8, 9], "texture": "#texture" }, + "north": { "uv": [6, 1, 8, 10], "texture": "#texture" }, + "south": { "uv": [6, 1, 8, 10], "texture": "#texture" }, + "west": { "uv": [7, 1, 9, 10], "texture": "#texture" }, + "east": { "uv": [7, 1, 9, 10], "texture": "#texture" } + } + }, + { + "__comment": "Inner vertical post of right-hand gate door", + "from": [8, 3, 7], + "to": [10, 12, 9], + "faces": { + "down": { "uv": [8, 7, 10, 9], "texture": "#texture" }, + "up": { "uv": [8, 7, 10, 9], "texture": "#texture" }, + "north": { "uv": [8, 1, 10, 10], "texture": "#texture" }, + "south": { "uv": [8, 1, 10, 10], "texture": "#texture" }, + "west": { "uv": [7, 1, 9, 10], "texture": "#texture" }, + "east": { "uv": [7, 1, 9, 10], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [2, 3, 7], + "to": [6, 6, 9], + "faces": { + "down": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "up": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "north": { "uv": [2, 7, 6, 10], "texture": "#texture" }, + "south": { "uv": [2, 7, 6, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [2, 9, 7], + "to": [6, 12, 9], + "faces": { + "down": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "up": { "uv": [2, 7, 6, 9], "texture": "#texture" }, + "north": { "uv": [2, 1, 6, 4], "texture": "#texture" }, + "south": { "uv": [2, 1, 6, 4], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of right-hand gate door", + "from": [10, 3, 7], + "to": [14, 6, 9], + "faces": { + "down": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "up": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "north": { "uv": [10, 7, 14, 10], "texture": "#texture" }, + "south": { "uv": [10, 7, 14, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of right-hand gate door", + "from": [10, 9, 7], + "to": [14, 12, 9], + "faces": { + "down": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "up": { "uv": [10, 7, 14, 9], "texture": "#texture" }, + "north": { "uv": [10, 1, 14, 4], "texture": "#texture" }, + "south": { "uv": [10, 1, 14, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_open.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_open.json index e2cc6cf4..875efa67 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_gate_open.json @@ -1,96 +1,112 @@ -{ - "ambientocclusion": false, - "textures": { - "particle" : "#texture" - }, - "elements": [ - { "__comment": "Left-hand post", - "from": [ 0, 2, 7 ], - "to": [ 2, 13, 9 ], - "faces": { - "down": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "up": { "uv": [ 0, 7, 2, 9 ], "texture": "#texture" }, - "north": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 2, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" } - } - }, - { "__comment": "Right-hand post", - "from": [ 14, 2, 7 ], - "to": [ 16, 13, 9 ], - "faces": { - "down": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "up": { "uv": [ 14, 7, 16, 9 ], "texture": "#texture" }, - "north": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "south": { "uv": [ 14, 0, 16, 11 ], "texture": "#texture" }, - "west": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture" }, - "east": { "uv": [ 7, 0, 9, 11 ], "texture": "#texture", "cullface": "east" } - } - }, - { "__comment": "Inner vertical post of left-hand gate door", - "from": [ 0, 3, 13 ], - "to": [ 2, 12, 15 ], - "faces": { - "down": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, - "up": { "uv": [ 0, 13, 2, 15 ], "texture": "#texture" }, - "north": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, - "south": { "uv": [ 0, 1, 2, 10 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Inner vertical post of right-hand gate door", - "from": [ 14, 3, 13 ], - "to": [ 16, 12, 15 ], - "faces": { - "down": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, - "up": { "uv": [ 14, 13, 16, 15 ], "texture": "#texture" }, - "north": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, - "south": { "uv": [ 14, 1, 16, 10 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 0, 3, 9 ], - "to": [ 2, 6, 13 ], - "faces": { - "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 0, 9, 9 ], - "to": [ 2, 12, 13 ], - "faces": { - "down": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "up": { "uv": [ 0, 9, 2, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } - } - }, - { "__comment": "Lower horizontal bar of left-hand gate door", - "from": [ 14, 3, 9 ], - "to": [ 16, 6, 13 ], - "faces": { - "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" }, - "east": { "uv": [ 13, 7, 15, 10 ], "texture": "#texture" } - } - }, - { "__comment": "Upper horizontal bar of left-hand gate door", - "from": [ 14, 9, 9 ], - "to": [ 16, 12, 13 ], - "faces": { - "down": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "up": { "uv": [ 14, 9, 16, 13 ], "texture": "#texture" }, - "west": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" }, - "east": { "uv": [ 13, 1, 15, 4 ], "texture": "#texture" } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Left-hand post", + "from": [0, 2, 7], + "to": [2, 13, 9], + "faces": { + "down": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "up": { "uv": [0, 7, 2, 9], "texture": "#texture" }, + "north": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "south": { "uv": [0, 0, 2, 11], "texture": "#texture" }, + "west": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "west" + }, + "east": { "uv": [7, 0, 9, 11], "texture": "#texture" } + } + }, + { + "__comment": "Right-hand post", + "from": [14, 2, 7], + "to": [16, 13, 9], + "faces": { + "down": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "up": { "uv": [14, 7, 16, 9], "texture": "#texture" }, + "north": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "south": { "uv": [14, 0, 16, 11], "texture": "#texture" }, + "west": { "uv": [7, 0, 9, 11], "texture": "#texture" }, + "east": { + "uv": [7, 0, 9, 11], + "texture": "#texture", + "cullface": "east" + } + } + }, + { + "__comment": "Inner vertical post of left-hand gate door", + "from": [0, 3, 13], + "to": [2, 12, 15], + "faces": { + "down": { "uv": [0, 13, 2, 15], "texture": "#texture" }, + "up": { "uv": [0, 13, 2, 15], "texture": "#texture" }, + "north": { "uv": [0, 1, 2, 10], "texture": "#texture" }, + "south": { "uv": [0, 1, 2, 10], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Inner vertical post of right-hand gate door", + "from": [14, 3, 13], + "to": [16, 12, 15], + "faces": { + "down": { "uv": [14, 13, 16, 15], "texture": "#texture" }, + "up": { "uv": [14, 13, 16, 15], "texture": "#texture" }, + "north": { "uv": [14, 1, 16, 10], "texture": "#texture" }, + "south": { "uv": [14, 1, 16, 10], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [0, 3, 9], + "to": [2, 6, 13], + "faces": { + "down": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "up": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "west": { "uv": [13, 7, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 7, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [0, 9, 9], + "to": [2, 12, 13], + "faces": { + "down": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "up": { "uv": [0, 9, 2, 13], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 4], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 4], "texture": "#texture" } + } + }, + { + "__comment": "Lower horizontal bar of left-hand gate door", + "from": [14, 3, 9], + "to": [16, 6, 13], + "faces": { + "down": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "up": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "west": { "uv": [13, 7, 15, 10], "texture": "#texture" }, + "east": { "uv": [13, 7, 15, 10], "texture": "#texture" } + } + }, + { + "__comment": "Upper horizontal bar of left-hand gate door", + "from": [14, 9, 9], + "to": [16, 12, 13], + "faces": { + "down": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "up": { "uv": [14, 9, 16, 13], "texture": "#texture" }, + "west": { "uv": [13, 1, 15, 4], "texture": "#texture" }, + "east": { "uv": [13, 1, 15, 4], "texture": "#texture" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_inventory.json index 478a0d7e..b80ac731 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_inventory.json @@ -1,32 +1,50 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 16 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, - "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } - }, - "__comment": "Full wall" - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 16], + "faces": { + "down": { + "uv": [5, 0, 11, 16], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [5, 0, 11, 16], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "south": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "south" + }, + "west": { "uv": [0, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 16, 16], "texture": "#wall" } + }, + "__comment": "Full wall" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_n.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_n.json index bc857c24..eb394865 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_n.json @@ -1,30 +1,40 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 4 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "west": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" } - }, - "__comment": "North wall" - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 4], + "faces": { + "down": { "uv": [5, 0, 11, 4], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [5, 0, 11, 4], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "west": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 4, 16], "texture": "#wall" } + }, + "__comment": "North wall" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_ne.json index e7295467..25b5ea65 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_ne.json @@ -1,41 +1,57 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 4 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "west": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" } - }, - "__comment": "North wall" - }, - { "from": [ 12, 0, 5 ], - "to": [ 16, 13, 11 ], - "faces": { - "down": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90, "cullface": "down" }, - "up": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90 }, - "north": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "south": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "east" } - }, - "__comment": "East wall" - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 4], + "faces": { + "down": { "uv": [5, 0, 11, 4], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [5, 0, 11, 4], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "west": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 4, 16], "texture": "#wall" } + }, + "__comment": "North wall" + }, + { + "from": [12, 0, 5], + "to": [16, 13, 11], + "faces": { + "down": { + "uv": [5, 12, 11, 16], + "texture": "#wall", + "rotation": 90, + "cullface": "down" + }, + "up": { "uv": [5, 12, 11, 16], "texture": "#wall", "rotation": 90 }, + "north": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "south": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [5, 3, 11, 16], "texture": "#wall", "cullface": "east" } + }, + "__comment": "East wall" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_ns.json index 5e2702f7..e2a16643 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_ns.json @@ -1,18 +1,31 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 16 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, - "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } - } - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [5, 0, 0], + "to": [11, 13, 16], + "faces": { + "down": { + "uv": [5, 0, 11, 16], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [5, 0, 11, 16], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "south": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "south" + }, + "west": { "uv": [0, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 16, 16], "texture": "#wall" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_ns_above.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_ns_above.json index 8636f947..a1022f69 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_ns_above.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_ns_above.json @@ -1,30 +1,48 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 16 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, - "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } - } - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 16], + "faces": { + "down": { + "uv": [5, 0, 11, 16], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [5, 0, 11, 16], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "south": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "south" + }, + "west": { "uv": [0, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 16, 16], "texture": "#wall" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_nse.json index 64c61aef..8e4934cf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_nse.json @@ -1,52 +1,77 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 4 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "west": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" } - }, - "__comment": "North wall" - }, - { "from": [ 5, 0, 12 ], - "to": [ 11, 13, 16 ], - "faces": { - "down": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall" }, - "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, - "west": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" } - }, - "__comment": "South wall" - }, - { "from": [ 12, 0, 5 ], - "to": [ 16, 13, 11 ], - "faces": { - "down": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90, "cullface": "down" }, - "up": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90 }, - "north": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "south": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "east" } - }, - "__comment": "East wall" - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 4], + "faces": { + "down": { "uv": [5, 0, 11, 4], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [5, 0, 11, 4], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "west": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 4, 16], "texture": "#wall" } + }, + "__comment": "North wall" + }, + { + "from": [5, 0, 12], + "to": [11, 13, 16], + "faces": { + "down": { + "uv": [5, 12, 11, 16], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [5, 12, 11, 16], "texture": "#wall" }, + "south": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "south" + }, + "west": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [12, 3, 16, 16], "texture": "#wall" } + }, + "__comment": "South wall" + }, + { + "from": [12, 0, 5], + "to": [16, 13, 11], + "faces": { + "down": { + "uv": [5, 12, 11, 16], + "texture": "#wall", + "rotation": 90, + "cullface": "down" + }, + "up": { "uv": [5, 12, 11, 16], "texture": "#wall", "rotation": 90 }, + "north": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "south": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [5, 3, 11, 16], "texture": "#wall", "cullface": "east" } + }, + "__comment": "East wall" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_nsew.json index c81d0f71..7abece9b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_nsew.json @@ -1,63 +1,94 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - }, - { "from": [ 5, 0, 0 ], - "to": [ 11, 13, 4 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall" }, - "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, - "west": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "east": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" } - }, - "__comment": "North wall" - }, - { "from": [ 5, 0, 12 ], - "to": [ 11, 13, 16 ], - "faces": { - "down": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall" }, - "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, - "west": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" } - }, - "__comment": "South wall" - }, - { "from": [ 12, 0, 5 ], - "to": [ 16, 13, 11 ], - "faces": { - "down": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90, "cullface": "down" }, - "up": { "uv": [ 5, 12, 11, 16 ], "texture": "#wall", "rotation": 90 }, - "north": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "south": { "uv": [ 12, 3, 16, 16 ], "texture": "#wall" }, - "east": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "east" } - }, - "__comment": "East wall" - }, - { "from": [ 0, 0, 5 ], - "to": [ 4, 13, 11 ], - "faces": { - "down": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "rotation": 90, "cullface": "down" }, - "up": { "uv": [ 5, 0, 11, 4 ], "texture": "#wall", "rotation": 90 }, - "north": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "south": { "uv": [ 0, 3, 4, 16 ], "texture": "#wall" }, - "west": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "west" } - }, - "__comment": "West wall" - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { + "from": [5, 0, 0], + "to": [11, 13, 4], + "faces": { + "down": { "uv": [5, 0, 11, 4], "texture": "#wall", "cullface": "down" }, + "up": { "uv": [5, 0, 11, 4], "texture": "#wall" }, + "north": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "north" + }, + "west": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "east": { "uv": [0, 3, 4, 16], "texture": "#wall" } + }, + "__comment": "North wall" + }, + { + "from": [5, 0, 12], + "to": [11, 13, 16], + "faces": { + "down": { + "uv": [5, 12, 11, 16], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [5, 12, 11, 16], "texture": "#wall" }, + "south": { + "uv": [5, 3, 11, 16], + "texture": "#wall", + "cullface": "south" + }, + "west": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [12, 3, 16, 16], "texture": "#wall" } + }, + "__comment": "South wall" + }, + { + "from": [12, 0, 5], + "to": [16, 13, 11], + "faces": { + "down": { + "uv": [5, 12, 11, 16], + "texture": "#wall", + "rotation": 90, + "cullface": "down" + }, + "up": { "uv": [5, 12, 11, 16], "texture": "#wall", "rotation": 90 }, + "north": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "south": { "uv": [12, 3, 16, 16], "texture": "#wall" }, + "east": { "uv": [5, 3, 11, 16], "texture": "#wall", "cullface": "east" } + }, + "__comment": "East wall" + }, + { + "from": [0, 0, 5], + "to": [4, 13, 11], + "faces": { + "down": { + "uv": [5, 0, 11, 4], + "texture": "#wall", + "rotation": 90, + "cullface": "down" + }, + "up": { "uv": [5, 0, 11, 4], "texture": "#wall", "rotation": 90 }, + "north": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "south": { "uv": [0, 3, 4, 16], "texture": "#wall" }, + "west": { "uv": [5, 3, 11, 16], "texture": "#wall", "cullface": "west" } + }, + "__comment": "West wall" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wall_post.json b/desktopRuntime/resources/assets/minecraft/models/block/wall_post.json index 178d46f5..b533e121 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wall_post.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wall_post.json @@ -1,19 +1,24 @@ -{ - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } - }, - "__comment": "Center post" - } - ] -} +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "down": { + "uv": [4, 4, 12, 12], + "texture": "#wall", + "cullface": "down" + }, + "up": { "uv": [4, 4, 12, 12], "texture": "#wall", "cullface": "up" }, + "north": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "south": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "west": { "uv": [4, 0, 12, 16], "texture": "#wall" }, + "east": { "uv": [4, 0, 12, 16], "texture": "#wall" } + }, + "__comment": "Center post" + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/waterlily.json b/desktopRuntime/resources/assets/minecraft/models/block/waterlily.json index 87ca478a..2cc80565 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/waterlily.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/waterlily.json @@ -1,16 +1,17 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "blocks/waterlily", - "texture": "blocks/waterlily" - }, - "elements": [ - { "from": [ 0, 0.25, 0 ], - "to": [ 16, 0.25, 16 ], - "faces": { - "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#texture", "tintindex": 0 }, - "up": { "uv": [ 16, 0, 0, 16 ], "texture": "#texture", "tintindex": 0 } - } - } - ] -} +{ + "ambientocclusion": false, + "textures": { + "particle": "blocks/waterlily", + "texture": "blocks/waterlily" + }, + "elements": [ + { + "from": [0, 0.25, 0], + "to": [16, 0.25, 16], + "faces": { + "down": { "uv": [16, 16, 0, 0], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [16, 0, 0, 16], "texture": "#texture", "tintindex": 0 } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/web.json b/desktopRuntime/resources/assets/minecraft/models/block/web.json index 868cc84c..cc1fe47c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/web.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/web.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/web" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/web" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage0.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage0.json index 61e130a9..479d188f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage0.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage0.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_0" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_0" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage1.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage1.json index 029c6f2c..9bdfd214 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage1.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage1.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_1" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_1" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage2.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage2.json index ed7854b8..3eac99ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage2.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage2.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_2" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_2" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage3.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage3.json index 27d154c8..c85dd776 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage3.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage3.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_3" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_3" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage4.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage4.json index 370ce03c..008838f0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage4.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage4.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_4" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_4" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage5.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage5.json index ce3f61a4..e34869ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage5.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage5.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_5" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_5" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage6.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage6.json index 1cd3ab05..c14fbd00 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage6.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage6.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_6" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_6" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage7.json b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage7.json index 1aa73afc..1f057f55 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage7.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wheat_stage7.json @@ -1,6 +1,6 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "blocks/wheat_stage_7" - } -} +{ + "parent": "block/crop", + "textures": { + "crop": "blocks/wheat_stage_7" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_n.json index eed5b0db..89bd0038 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ne.json index e30cf819..45fc3706 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_new.json index 0e7eb0ae..21ef3b63 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ns.json index b55bd828..00245c4b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nse.json index 41fb8cde..03929bca 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsew.json index df7711a7..14394420 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsw.json index 2900f5a0..3bc9117d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nw.json index cf1d2668..50b3e163 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_s.json index e4a6672d..68b07bfa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_se.json index a1210efc..889ec5de 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sew.json index f4173f1e..19156dc1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sw.json index 70619dca..33911ad6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_white", - "pane": "blocks/glass_white" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_white", + "pane": "blocks/glass_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_tulip.json b/desktopRuntime/resources/assets/minecraft/models/block/white_tulip.json index bf4ea523..37e57c2b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_tulip.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "blocks/flower_tulip_white" - } -} +{ + "parent": "block/cross", + "textures": { + "cross": "blocks/flower_tulip_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/white_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/white_wool.json index 801c0f67..247c9262 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/white_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/white_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_white" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_white" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button.json index 0abb6fdc..a5f4280e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/button", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_inventory.json index 66b4a420..5ef4bdab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button_inventory", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/button_inventory", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_pressed.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_pressed.json index 7e39e73c..a8d2c792 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_pressed.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_button_pressed.json @@ -1,6 +1,6 @@ -{ - "parent": "block/button_pressed", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/button_pressed", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom.json index 0676b551..ef24682c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "blocks/door_wood_lower", - "top": "blocks/door_wood_upper" - } -} +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "blocks/door_wood_lower", + "top": "blocks/door_wood_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom_rh.json index 5a365434..a70b3fb1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_bottom_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "blocks/door_wood_lower", - "top": "blocks/door_wood_upper" - } -} +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "blocks/door_wood_lower", + "top": "blocks/door_wood_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top.json index f7bf4552..4ec16129 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "blocks/door_wood_lower", - "top": "blocks/door_wood_upper" - } -} +{ + "parent": "block/door_top", + "textures": { + "bottom": "blocks/door_wood_lower", + "top": "blocks/door_wood_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top_rh.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top_rh.json index ba3c592e..6c2896a9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top_rh.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_door_top_rh.json @@ -1,7 +1,7 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "blocks/door_wood_lower", - "top": "blocks/door_wood_upper" - } -} +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "blocks/door_wood_lower", + "top": "blocks/door_wood_upper" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_down.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_down.json index f601076b..07752817 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_down.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_down.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_down", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_inventory.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_inventory.json index 42cedf53..9c681255 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_inventory.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_inventory.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_inventory", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/pressure_plate_inventory", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_up.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_up.json index 4e1a7424..9877a2ce 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_up.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_pressure_plate_up.json @@ -1,6 +1,6 @@ -{ - "parent": "block/pressure_plate_up", - "textures": { - "texture": "blocks/planks_oak" - } -} +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "blocks/planks_oak" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_bottom.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_bottom.json index 0f4afcb5..0731a68b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_bottom.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_bottom.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_bottom", - "textures": { - "texture": "blocks/trapdoor" - } -} +{ + "parent": "block/trapdoor_bottom", + "textures": { + "texture": "blocks/trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_open.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_open.json index 38c0e755..431136b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_open.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_open.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_open", - "textures": { - "texture": "blocks/trapdoor" - } -} +{ + "parent": "block/trapdoor_open", + "textures": { + "texture": "blocks/trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_top.json b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_top.json index c01015c2..5471900a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_top.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/wooden_trapdoor_top.json @@ -1,6 +1,6 @@ -{ - "parent": "block/trapdoor_top", - "textures": { - "texture": "blocks/trapdoor" - } -} +{ + "parent": "block/trapdoor_top", + "textures": { + "texture": "blocks/trapdoor" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_n.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_n.json index 4eed2f82..10af30a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_n.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_n.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_n", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_n", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ne.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ne.json index 714a591c..7de6a9dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ne.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ne.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ne", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_ne", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_new.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_new.json index fe839d7d..d3166367 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_new.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_new.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_new", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_new", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ns.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ns.json index c0f6a844..57dba020 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ns.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_ns.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_ns", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_ns", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nse.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nse.json index 148f5095..6df9ec8d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nse.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nse.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nse", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_nse", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsew.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsew.json index ca95512c..eebef9a5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsew", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_nsew", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsw.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsw.json index 6178e805..1c8a4e4b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nsw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nsw", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_nsw", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nw.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nw.json index 78301cde..cc581ac6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_nw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_nw", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_nw", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_s.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_s.json index f258ba74..2c0c2ef4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_s.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_s.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_s", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_s", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_se.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_se.json index 9b38977f..5d7b6857 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_se.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_se.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_se", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_se", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sew.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sew.json index a554c009..8a986dee 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sew.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sew.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sew", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_sew", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sw.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sw.json index b4bb82e6..35ad7019 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sw.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_pane_sw.json @@ -1,7 +1,7 @@ -{ - "parent": "block/pane_sw", - "textures": { - "edge": "blocks/glass_pane_top_yellow", - "pane": "blocks/glass_yellow" - } -} +{ + "parent": "block/pane_sw", + "textures": { + "edge": "blocks/glass_pane_top_yellow", + "pane": "blocks/glass_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/yellow_wool.json b/desktopRuntime/resources/assets/minecraft/models/block/yellow_wool.json index c001dad6..076a3097 100644 --- a/desktopRuntime/resources/assets/minecraft/models/block/yellow_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/block/yellow_wool.json @@ -1,6 +1,6 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/wool_colored_yellow" - } -} +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/wool_colored_yellow" + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_door.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_door.json index ebd1d8c3..55d08c6e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_acacia" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_acacia" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence.json index 3d666523..35f2891b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/acacia_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/acacia_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence_gate.json index 16635858..013c8b23 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/acacia_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/acacia_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_leaves.json index 099e86b4..d072f97a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/acacia_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/acacia_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_log.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_log.json index 814ec859..1639aab8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/acacia_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/acacia_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_planks.json index 9ff6558a..8e87a7bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/acacia_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/acacia_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_sapling.json index 3655ccb7..1a064af3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_acacia" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_acacia" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_slab.json index 427f771d..4fa67131 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_acacia", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_acacia", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/acacia_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/acacia_stairs.json index d4bde751..f321d6a4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/acacia_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/acacia_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/acacia_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/acacia_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/activator_rail.json b/desktopRuntime/resources/assets/minecraft/models/item/activator_rail.json index 27984fde..7b96c67d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/activator_rail.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/activator_rail.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/rail_activator" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/rail_activator" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/allium.json b/desktopRuntime/resources/assets/minecraft/models/item/allium.json index 0ccf95f0..4d37534c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/allium.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/allium.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_allium" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_allium" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/andesite.json b/desktopRuntime/resources/assets/minecraft/models/item/andesite.json index 561522fd..dcee8d73 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/andesite.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/andesite.json @@ -1,10 +1,10 @@ -{ - "parent": "block/andesite", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/andesite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/andesite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/item/andesite_smooth.json index 71b06616..2570f24c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/andesite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/andesite_smooth.json @@ -1,10 +1,10 @@ -{ - "parent": "block/andesite_smooth", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/andesite_smooth", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/anvil_intact.json b/desktopRuntime/resources/assets/minecraft/models/item/anvil_intact.json index 1aa0bf73..71dca118 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/anvil_intact.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/anvil_intact.json @@ -1,10 +1,10 @@ -{ - "parent": "block/anvil_undamaged", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0.25, 1.5, -2.5 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/anvil_undamaged", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0.25, 1.5, -2.5], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/anvil_slightly_damaged.json b/desktopRuntime/resources/assets/minecraft/models/item/anvil_slightly_damaged.json index 04d60c8f..0fcac790 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/anvil_slightly_damaged.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/anvil_slightly_damaged.json @@ -1,10 +1,10 @@ -{ - "parent": "block/anvil_slightly_damaged", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0.25, 1.5, -2.5 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/anvil_slightly_damaged", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0.25, 1.5, -2.5], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/anvil_very_damaged.json b/desktopRuntime/resources/assets/minecraft/models/item/anvil_very_damaged.json index 20c656ba..03d9eef9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/anvil_very_damaged.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/anvil_very_damaged.json @@ -1,10 +1,10 @@ -{ - "parent": "block/anvil_very_damaged", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0.25, 1.5, -2.5 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/anvil_very_damaged", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0.25, 1.5, -2.5], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/apple.json b/desktopRuntime/resources/assets/minecraft/models/item/apple.json index 9869bd37..4572f1f4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/apple.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/apple.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/apple" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/apple" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/armor_stand.json b/desktopRuntime/resources/assets/minecraft/models/item/armor_stand.json index 4f0ad8c9..63eec744 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/armor_stand.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/armor_stand.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wooden_armorstand" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wooden_armorstand" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/arrow.json b/desktopRuntime/resources/assets/minecraft/models/item/arrow.json index 1d18fe51..fa9a86b7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/arrow.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/arrow.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/arrow" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/arrow" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/baked_potato.json b/desktopRuntime/resources/assets/minecraft/models/item/baked_potato.json index 46a0130a..b876c788 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/baked_potato.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/baked_potato.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potato_baked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potato_baked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/banner.json b/desktopRuntime/resources/assets/minecraft/models/item/banner.json index d25df9f2..045c259b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/banner.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/banner.json @@ -1,22 +1,22 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 0, 90, -90 ], - "translation": [ 0, 0, -4 ], - "scale": [ 0.5, 0.5, 0.5 ] - }, - "firstperson": { - "rotation": [ 0, 225, 0 ] - }, - "gui": { - "rotation": [ 0, -65, 0 ], - "translation": [ 0, -3, 0 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "head": { - "translation": [ 0, 8, 3.5 ], - "scale": [ 1.5, 1.5, 1.5 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [0, 90, -90], + "translation": [0, 0, -4], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson": { + "rotation": [0, 225, 0] + }, + "gui": { + "rotation": [0, -65, 0], + "translation": [0, -3, 0], + "scale": [0.85, 0.85, 0.85] + }, + "head": { + "translation": [0, 8, 3.5], + "scale": [1.5, 1.5, 1.5] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/barrier.json b/desktopRuntime/resources/assets/minecraft/models/item/barrier.json index 49cc22e1..f4721ad9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/barrier.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/barrier.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/barrier" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/barrier" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/beacon.json b/desktopRuntime/resources/assets/minecraft/models/item/beacon.json index f357d8c4..86433c89 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/beacon.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/beacon.json @@ -1,10 +1,10 @@ -{ - "parent": "block/beacon", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/beacon", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bed.json b/desktopRuntime/resources/assets/minecraft/models/item/bed.json index c82a5a38..615557d5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bed.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bed.json @@ -1,30 +1,30 @@ -{ - "parent": "block/bed_inventory", - "display": { - "ground": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 2, 2, 2 ] - }, - "thirdperson": { - "rotation": [ -115, 35, -30 ], - "translation": [ 0.5, 1.5, -4 ], - "scale": [ 0.5, 0.5, 0.5 ] - }, - "firstperson": { - "rotation": [ -25, -247.5, 10 ], - "translation": [ 6, 1.8, 3 ], - "scale": [ 3.4, 3.4, 3.4 ] - }, - "gui": { - "rotation": [ 0, -65, 0 ], - "translation": [ -0.5, 4, 0 ], - "scale": [ 1.7, 1.7, 1.7 ] - }, - "fixed": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 0, -6 ], - "scale": [ 2, 2, 2 ] - } - } -} +{ + "parent": "block/bed_inventory", + "display": { + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [2, 2, 2] + }, + "thirdperson": { + "rotation": [-115, 35, -30], + "translation": [0.5, 1.5, -4], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson": { + "rotation": [-25, -247.5, 10], + "translation": [6, 1.8, 3], + "scale": [3.4, 3.4, 3.4] + }, + "gui": { + "rotation": [0, -65, 0], + "translation": [-0.5, 4, 0], + "scale": [1.7, 1.7, 1.7] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -6], + "scale": [2, 2, 2] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bedrock.json b/desktopRuntime/resources/assets/minecraft/models/item/bedrock.json index 78a66f5f..031dc72f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bedrock.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bedrock.json @@ -1,10 +1,10 @@ -{ - "parent": "block/bedrock", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/bedrock", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/beef.json b/desktopRuntime/resources/assets/minecraft/models/item/beef.json index fd681aee..e0f23358 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/beef.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/beef.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/beef_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/beef_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_door.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_door.json index 289463c2..8ef6c261 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_birch" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_birch" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_fence.json index 4d19d61b..2fe1f560 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/birch_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/birch_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_fence_gate.json index 39aee649..a4600c4a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/birch_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/birch_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_leaves.json index 9dbf4f01..264fcc58 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/birch_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/birch_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_log.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_log.json index f25bc179..8c8f6e5c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/birch_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/birch_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_planks.json index 584a5ba9..cfd60ba6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/birch_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/birch_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_sapling.json index 19f862e8..3bc30930 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_birch" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_birch" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_slab.json index 878ddec0..af6774f4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_birch", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_birch", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/birch_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/birch_stairs.json index 981d4b60..2c4983d1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/birch_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/birch_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/birch_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/birch_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/black_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/black_carpet.json index 86b363ad..4fba8ec3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/black_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/black_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_black", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_black", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass.json index b28c9d1c..1bb96f1f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_black", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_black", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass_pane.json index a0418ec9..0c3bccfd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_black" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_black" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_hardened_clay.json index fe0a6616..15ef4325 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/black_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/black_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_black", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_black", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/black_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/black_wool.json index aec8478e..8656c568 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/black_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/black_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/black_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/black_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blaze_powder.json b/desktopRuntime/resources/assets/minecraft/models/item/blaze_powder.json index 7f1931c9..56dee9b4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blaze_powder.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blaze_powder.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/blaze_powder" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/blaze_powder" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blaze_rod.json b/desktopRuntime/resources/assets/minecraft/models/item/blaze_rod.json index 432dcea4..49716f28 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blaze_rod.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blaze_rod.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/blaze_rod" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 0.75, -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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/blaze_rod" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 0.75, -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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_carpet.json index 37cb5238..a6205d25 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_orchid.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_orchid.json index 9ba8a286..f62701ed 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_orchid.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_orchid.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_blue_orchid" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_blue_orchid" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass.json index eec782bd..2b322638 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass_pane.json index d2aa5025..b7440686 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_blue" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_blue" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_hardened_clay.json index 098393fb..bc555e8e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/blue_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/blue_wool.json index c1fd9445..3b7d3763 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/blue_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/blue_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/blue_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/boat.json b/desktopRuntime/resources/assets/minecraft/models/item/boat.json index a043725c..8c022b0c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/boat.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/boat.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/boat" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/boat" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bone.json b/desktopRuntime/resources/assets/minecraft/models/item/bone.json index e1faa623..7533f9b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bone.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bone" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bone" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/book.json b/desktopRuntime/resources/assets/minecraft/models/item/book.json index 60ed2320..525f6dbf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/book.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/book.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/book_normal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/book_normal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bookshelf.json b/desktopRuntime/resources/assets/minecraft/models/item/bookshelf.json index aeae5b3b..33259585 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bookshelf.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bookshelf.json @@ -1,10 +1,10 @@ -{ - "parent": "block/bookshelf", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/bookshelf", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bottle_drinkable.json b/desktopRuntime/resources/assets/minecraft/models/item/bottle_drinkable.json index f2b1096d..ecd6f136 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bottle_drinkable.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bottle_drinkable.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potion_overlay", - "layer1": "items/potion_bottle_drinkable" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potion_overlay", + "layer1": "items/potion_bottle_drinkable" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bottle_splash.json b/desktopRuntime/resources/assets/minecraft/models/item/bottle_splash.json index 147ddbae..8fb544e2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bottle_splash.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bottle_splash.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potion_overlay", - "layer1": "items/potion_bottle_splash" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potion_overlay", + "layer1": "items/potion_bottle_splash" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bow.json b/desktopRuntime/resources/assets/minecraft/models/item/bow.json index 91879926..eabd0264 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bow.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bow.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bow_standby" - }, - "display": { - "thirdperson": { - "rotation": [ 5, 80, -45 ], - "translation": [ 0.75, 0, 0.25 ], - "scale": [ 1, 1, 1 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bow_standby" + }, + "display": { + "thirdperson": { + "rotation": [5, 80, -45], + "translation": [0.75, 0, 0.25], + "scale": [1, 1, 1] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_0.json b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_0.json index 2fa9d15f..de21a916 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_0.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_0.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bow_pulling_0" - }, - "display": { - "thirdperson": { - "rotation": [ 5, 80, -45 ], - "translation": [ 0.75, 0, 0.25 ], - "scale": [ 1, 1, 1 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bow_pulling_0" + }, + "display": { + "thirdperson": { + "rotation": [5, 80, -45], + "translation": [0.75, 0, 0.25], + "scale": [1, 1, 1] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_1.json b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_1.json index 31eb6240..01543194 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_1.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_1.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bow_pulling_1" - }, - "display": { - "thirdperson": { - "rotation": [ 5, 80, -45 ], - "translation": [ 0.75, 0, 0.25 ], - "scale": [ 1, 1, 1 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bow_pulling_1" + }, + "display": { + "thirdperson": { + "rotation": [5, 80, -45], + "translation": [0.75, 0, 0.25], + "scale": [1, 1, 1] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_2.json b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_2.json index 1f8780ce..788a6f7a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_2.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bow_pulling_2.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bow_pulling_2" - }, - "display": { - "thirdperson": { - "rotation": [ 5, 80, -45 ], - "translation": [ 0.75, 0, 0.25 ], - "scale": [ 1, 1, 1 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bow_pulling_2" + }, + "display": { + "thirdperson": { + "rotation": [5, 80, -45], + "translation": [0.75, 0, 0.25], + "scale": [1, 1, 1] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bowl.json b/desktopRuntime/resources/assets/minecraft/models/item/bowl.json index f5ebab34..f4cb8eac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bowl.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bowl.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bowl" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bowl" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bread.json b/desktopRuntime/resources/assets/minecraft/models/item/bread.json index 0452b0ce..f91288da 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bread.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bread.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bread" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bread" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brewing_stand.json b/desktopRuntime/resources/assets/minecraft/models/item/brewing_stand.json index 0e56d421..a9747a16 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brewing_stand.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brewing_stand.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/brewing_stand" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/brewing_stand" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brick.json b/desktopRuntime/resources/assets/minecraft/models/item/brick.json index 75dc6608..19cc729a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brick.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/brick" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/brick" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brick_block.json b/desktopRuntime/resources/assets/minecraft/models/item/brick_block.json index a0be363d..a0185753 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brick_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brick_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/brick", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brick_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/brick_slab.json index 7074de2c..1102fa9b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brick_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_brick", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/brick_stairs.json index 3bf1ab1f..377049a4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brick_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/brick_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/brick_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_carpet.json index 851ce1b6..1a5eb4fd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_brown", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_brown", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom.json index cc8d7b99..5566a8ab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/mushroom_brown" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/mushroom_brown" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom_block.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom_block.json index 4029d58d..e0a96ad7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_mushroom_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/brown_mushroom_block_cap_all", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/brown_mushroom_block_cap_all", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass.json index 51186da8..0e48753f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_brown", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_brown", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass_pane.json index d596a75e..252a775d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_brown" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_brown" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_hardened_clay.json index a57e43b3..6a0a074f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_brown", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_brown", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/brown_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/brown_wool.json index 1d9e4280..0cd2b363 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/brown_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/brown_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/brown_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/brown_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/bucket.json b/desktopRuntime/resources/assets/minecraft/models/item/bucket.json index 6ce1cb88..9d563a4c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/bucket.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/bucket.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bucket_empty" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bucket_empty" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cactus.json b/desktopRuntime/resources/assets/minecraft/models/item/cactus.json index 35a7656b..2c889ccb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cactus.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cactus.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cactus", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cactus", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cake.json b/desktopRuntime/resources/assets/minecraft/models/item/cake.json index eb69ee95..2ade93c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cake.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cake.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/cake" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/cake" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/carrot.json b/desktopRuntime/resources/assets/minecraft/models/item/carrot.json index 390f642e..89d6e388 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/carrot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/carrot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/carrot" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/carrot" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/carrot_on_a_stick.json b/desktopRuntime/resources/assets/minecraft/models/item/carrot_on_a_stick.json index c5a633ec..9dc05913 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/carrot_on_a_stick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/carrot_on_a_stick.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/carrot_on_a_stick" - }, - "display": { - "thirdperson": { - "rotation": [ 180, 90, -35 ], - "translation": [ 0, 0, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, 45, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/carrot_on_a_stick" + }, + "display": { + "thirdperson": { + "rotation": [180, 90, -35], + "translation": [0, 0, -3.5], + "scale": [0.85, 0.85, 0.85] + }, + "firstperson": { + "rotation": [0, 45, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cauldron.json b/desktopRuntime/resources/assets/minecraft/models/item/cauldron.json index 4dda5ede..d22201de 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cauldron.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cauldron.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/cauldron" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/cauldron" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_boots.json b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_boots.json index 19cab8d2..be9bd5c9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_boots.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_boots.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chainmail_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chainmail_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_chestplate.json b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_chestplate.json index 47bf571c..d7e24a7c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_chestplate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_chestplate.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chainmail_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chainmail_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_helmet.json b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_helmet.json index 31d6007b..e6317b3d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_helmet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_helmet.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chainmail_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chainmail_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_leggings.json b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_leggings.json index 60111b37..75a94cd2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chainmail_leggings.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chainmail_leggings.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chainmail_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chainmail_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/charcoal.json b/desktopRuntime/resources/assets/minecraft/models/item/charcoal.json index a20e6fa3..d57695e7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/charcoal.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/charcoal.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/charcoal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/charcoal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chest.json b/desktopRuntime/resources/assets/minecraft/models/item/chest.json index 9935accd..ab467129 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chest.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chest.json @@ -1,3 +1,3 @@ -{ - "parent": "builtin/entity" -} +{ + "parent": "builtin/entity" +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chest_minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/chest_minecart.json index 09459c57..09d7dfe7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chest_minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chest_minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_chest" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_chest" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chicken.json b/desktopRuntime/resources/assets/minecraft/models/item/chicken.json index 04a8af47..3844cf44 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chicken.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chicken.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chicken_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chicken_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_brick_monster_egg.json index 12d3f353..30f3243b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_brick_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_chiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_chiseled", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_quartz_block.json b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_quartz_block.json index 832b0a60..e1af6c1c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_quartz_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_quartz_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/quartz_chiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/quartz_chiseled", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_red_sandstone.json index 0621b78a..9f2c54ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_red_sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_sandstone_chiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_sandstone_chiseled", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_sandstone.json index 41457c50..98d5f4ed 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sandstone_chiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sandstone_chiseled", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_stonebrick.json b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_stonebrick.json index 12d3f353..30f3243b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/chiseled_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/chiseled_stonebrick.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_chiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_chiseled", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/clay.json b/desktopRuntime/resources/assets/minecraft/models/item/clay.json index c98bf111..566fdbd9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/clay", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/clay", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/clay_ball.json b/desktopRuntime/resources/assets/minecraft/models/item/clay_ball.json index dcccf2ff..65ed314a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/clay_ball.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/clay_ball.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/clay_ball" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/clay_ball" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/clock.json b/desktopRuntime/resources/assets/minecraft/models/item/clock.json index 74d7025a..980e01c9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/clock.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/clock.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/clock", - "textures": { - "layer0": "items/clock" - }, - "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 ] - } - } -} +{ + "parent": "builtin/clock", + "textures": { + "layer0": "items/clock" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/clownfish.json b/desktopRuntime/resources/assets/minecraft/models/item/clownfish.json index 8be7ba54..2eb01b23 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/clownfish.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/clownfish.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_clownfish_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_clownfish_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/coal.json b/desktopRuntime/resources/assets/minecraft/models/item/coal.json index 0cecc894..2a5da6a7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/coal.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/coal.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/coal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/coal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/coal_block.json b/desktopRuntime/resources/assets/minecraft/models/item/coal_block.json index bd970bc9..38f0e3f4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/coal_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/coal_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/coal_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/coal_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/coal_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/coal_ore.json index 63b61390..f36609c9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/coal_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/coal_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/coal_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/coal_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/coarse_dirt.json b/desktopRuntime/resources/assets/minecraft/models/item/coarse_dirt.json index 8f78736e..823bf851 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/coarse_dirt.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/coarse_dirt.json @@ -1,10 +1,10 @@ -{ - "parent": "block/coarse_dirt", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/coarse_dirt", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone.json index ff550e27..7458b7c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cobblestone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cobblestone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_monster_egg.json index ff550e27..7458b7c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cobblestone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cobblestone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_slab.json index dec97b5c..de36c137 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_cobblestone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_cobblestone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_wall.json b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_wall.json index e9d24868..994e10c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cobblestone_wall.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cobblestone_wall_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cobblestone_wall_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cod.json b/desktopRuntime/resources/assets/minecraft/models/item/cod.json index b9f5f582..85516724 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cod.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cod.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_cod_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_cod_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/command_block.json b/desktopRuntime/resources/assets/minecraft/models/item/command_block.json index 8884bf5d..f8dbc06d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/command_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/command_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/command_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/command_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/command_block_minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/command_block_minecart.json index 7f22858a..899b55d8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/command_block_minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/command_block_minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_command_block" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_command_block" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/comparator.json b/desktopRuntime/resources/assets/minecraft/models/item/comparator.json index e0e9eee7..2763bf25 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/comparator.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/comparator.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/comparator" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/comparator" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/compass.json b/desktopRuntime/resources/assets/minecraft/models/item/compass.json index 4d264aeb..b88b96b3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/compass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/compass.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/compass", - "textures": { - "layer0": "items/compass" - }, - "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 ] - } - } -} +{ + "parent": "builtin/compass", + "textures": { + "layer0": "items/compass" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_beef.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_beef.json index 33b773a6..7f838a73 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_beef.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_beef.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/beef_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/beef_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_chicken.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_chicken.json index 151a0159..82d939d9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_chicken.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_chicken.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/chicken_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/chicken_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_cod.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_cod.json index b1ca2497..0d01d227 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_cod.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_cod.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_cod_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_cod_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_mutton.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_mutton.json index 5f958f21..68f7f9c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_mutton.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_mutton.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/mutton_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/mutton_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_porkchop.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_porkchop.json index 186cd279..aac5bb63 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_porkchop.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_porkchop.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/porkchop_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/porkchop_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_rabbit.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_rabbit.json index ddf00424..07a54751 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_rabbit.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_rabbit.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rabbit_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rabbit_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cooked_salmon.json b/desktopRuntime/resources/assets/minecraft/models/item/cooked_salmon.json index ee302b19..b3104382 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cooked_salmon.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cooked_salmon.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_salmon_cooked" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_salmon_cooked" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cookie.json b/desktopRuntime/resources/assets/minecraft/models/item/cookie.json index c8161796..0296eae5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cookie.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cookie.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/cookie" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/cookie" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cracked_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/cracked_brick_monster_egg.json index 5285ba9e..c0611f6b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cracked_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cracked_brick_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_cracked", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_cracked", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cracked_stonebrick.json b/desktopRuntime/resources/assets/minecraft/models/item/cracked_stonebrick.json index 5285ba9e..c0611f6b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cracked_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cracked_stonebrick.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_cracked", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_cracked", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/crafting_table.json b/desktopRuntime/resources/assets/minecraft/models/item/crafting_table.json index 80b7c9e9..562d280b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/crafting_table.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/crafting_table.json @@ -1,10 +1,10 @@ -{ - "parent": "block/crafting_table", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/crafting_table", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cyan_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/cyan_carpet.json index c101c8b8..6eae6547 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cyan_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cyan_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_cyan", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_cyan", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass.json index 1892fd14..1acb0b47 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_cyan", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_cyan", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass_pane.json index 7416a5ba..f1fe56ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_cyan" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_cyan" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_hardened_clay.json index 964726a1..e5cff108 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cyan_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_cyan", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_cyan", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/cyan_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/cyan_wool.json index 56868368..dd2e0b1c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/cyan_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/cyan_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cyan_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cyan_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dandelion.json b/desktopRuntime/resources/assets/minecraft/models/item/dandelion.json index 8874c3cc..3dd720a0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dandelion.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dandelion.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_dandelion" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_dandelion" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_door.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_door.json index a8e3c871..0780e211 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_dark_oak" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_dark_oak" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence.json index 09925382..1a8680e9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/dark_oak_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/dark_oak_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence_gate.json index 94b03c3a..315afd15 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/dark_oak_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/dark_oak_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_leaves.json index 17cc70c9..c7c0b55b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dark_oak_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dark_oak_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_log.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_log.json index 798f34da..95e325a3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dark_oak_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dark_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_planks.json index d02e5f3d..8e04ecb4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dark_oak_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dark_oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_sapling.json index 6b124b19..51f93373 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_roofed_oak" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_roofed_oak" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_slab.json index b0489fb4..522fa11a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_dark_oak", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_dark_oak", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_stairs.json index fe1ca965..6c0e95d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_oak_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/dark_oak_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/dark_oak_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dark_prismarine.json b/desktopRuntime/resources/assets/minecraft/models/item/dark_prismarine.json index d5061aa1..0dda71b2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dark_prismarine.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dark_prismarine.json @@ -1,10 +1,10 @@ -{ - "parent": "block/prismarine_dark", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/prismarine_dark", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/daylight_detector.json b/desktopRuntime/resources/assets/minecraft/models/item/daylight_detector.json index 30159ea5..7d9e92ea 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/daylight_detector.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/daylight_detector.json @@ -1,15 +1,15 @@ -{ - "parent": "block/daylight_detector", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/daylight_detector", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dead_bush.json b/desktopRuntime/resources/assets/minecraft/models/item/dead_bush.json index 1b8cd4fa..83b5e39e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dead_bush.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dead_bush.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/deadbush" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/deadbush" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/detector_rail.json b/desktopRuntime/resources/assets/minecraft/models/item/detector_rail.json index 76baec82..e4a8a2c2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/detector_rail.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/detector_rail.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/rail_detector" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/rail_detector" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond.json index 5126ea0f..2a2b0fe7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_axe.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_axe.json index 8b946350..9c42647e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_axe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_axe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_axe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_axe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_block.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_block.json index 894cf38b..47652fae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/diamond_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/diamond_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_boots.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_boots.json index 2b78293c..687d79e6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_boots.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_boots.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_chestplate.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_chestplate.json index cbbb59c3..a106f471 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_chestplate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_chestplate.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_helmet.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_helmet.json index d1877fae..9465bc6e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_helmet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_helmet.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_hoe.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_hoe.json index 8ffedda3..cbce602d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_hoe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_hoe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_horse_armor.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_horse_armor.json index 85377d33..de7485ec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_horse_armor.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_horse_armor.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_horse_armor" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_horse_armor" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_leggings.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_leggings.json index 932bbc47..154a02e1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_leggings.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_leggings.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_ore.json index c1d725cd..df72bf34 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/diamond_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/diamond_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_pickaxe.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_pickaxe.json index b52b9627..f80f478e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_pickaxe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_pickaxe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_pickaxe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_pickaxe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_shovel.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_shovel.json index c0ea4277..f16a38e6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_shovel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_shovel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diamond_sword.json b/desktopRuntime/resources/assets/minecraft/models/item/diamond_sword.json index 82bc8f05..ae25d1ab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diamond_sword.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diamond_sword.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/diamond_sword" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/diamond_sword" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diorite.json b/desktopRuntime/resources/assets/minecraft/models/item/diorite.json index cdf48dbe..1a643917 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diorite.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diorite.json @@ -1,10 +1,10 @@ -{ - "parent": "block/diorite", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/diorite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/diorite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/item/diorite_smooth.json index f13946ba..354366f8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/diorite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/diorite_smooth.json @@ -1,10 +1,10 @@ -{ - "parent": "block/diorite_smooth", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/diorite_smooth", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dirt.json b/desktopRuntime/resources/assets/minecraft/models/item/dirt.json index 48596377..9fd48206 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dirt.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dirt.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dirt", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dirt", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dispenser.json b/desktopRuntime/resources/assets/minecraft/models/item/dispenser.json index 730db3a7..48aedd5a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dispenser.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dispenser.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dispenser", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dispenser", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/double_fern.json b/desktopRuntime/resources/assets/minecraft/models/item/double_fern.json index c368af4c..04166cb2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/double_fern.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/double_fern.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_fern_top" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_fern_top" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/double_grass.json b/desktopRuntime/resources/assets/minecraft/models/item/double_grass.json index 017640ff..9a9a49c9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/double_grass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/double_grass.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_grass_top" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_grass_top" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/double_rose.json b/desktopRuntime/resources/assets/minecraft/models/item/double_rose.json index e5ac878d..5cb60af4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/double_rose.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/double_rose.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_rose_top" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_rose_top" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dragon_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/dragon_egg.json index b4f66eaf..f05e36b9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dragon_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dragon_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dragon_egg", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dragon_egg", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dropper.json b/desktopRuntime/resources/assets/minecraft/models/item/dropper.json index 05ebfd50..f2e22a38 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dropper.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dropper.json @@ -1,10 +1,10 @@ -{ - "parent": "block/dropper", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/dropper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_black.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_black.json index 8adc07b8..4a3ba010 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_black.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_black.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_black" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_black" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_blue.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_blue.json index 911eeb50..10778441 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_blue.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_blue" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_blue" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_brown.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_brown.json index 9ab774f1..4ecadd5c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_brown.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_brown.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_brown" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_brown" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_cyan.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_cyan.json index ae8189fe..55318ce4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_cyan.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_cyan.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_cyan" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_cyan" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_gray.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_gray.json index a40c1dd9..39bc91ef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_gray.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_gray.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_gray" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_gray" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_green.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_green.json index 2f54ab0b..ae249a76 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_green.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_green.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_green" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_green" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_light_blue.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_light_blue.json index b07ca6ad..40cb5d9a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_light_blue.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_light_blue.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_light_blue" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_light_blue" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_lime.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_lime.json index 4e3d5b55..4ded0527 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_lime.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_lime.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_lime" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_lime" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_magenta.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_magenta.json index 0cb97658..79f09f11 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_magenta.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_magenta.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_magenta" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_magenta" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_orange.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_orange.json index ca0eca8a..f90fcefc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_orange.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_orange.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_orange" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_orange" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_pink.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_pink.json index fef69bcd..18a8f980 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_pink.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_pink.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_pink" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_pink" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_purple.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_purple.json index d812a70b..9ee77198 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_purple.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_purple.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_purple" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_purple" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_red.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_red.json index 3fabf3db..d53eecad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_red.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_red.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_red" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_red" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_silver.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_silver.json index 769905a6..26c52084 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_silver.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_silver.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_silver" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_silver" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_white.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_white.json index d8a97b95..ff1ea9ca 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_white.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_white.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_white" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_white" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/dye_yellow.json b/desktopRuntime/resources/assets/minecraft/models/item/dye_yellow.json index 9a2ed1f8..322945be 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/dye_yellow.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/dye_yellow.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/dye_powder_yellow" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/dye_powder_yellow" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/egg.json b/desktopRuntime/resources/assets/minecraft/models/item/egg.json index 406e4b05..5c3b7d2b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/egg.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/egg" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/egg" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/emerald.json b/desktopRuntime/resources/assets/minecraft/models/item/emerald.json index 9f8ec33f..39409c96 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/emerald.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/emerald.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/emerald" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/emerald" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/emerald_block.json b/desktopRuntime/resources/assets/minecraft/models/item/emerald_block.json index 2581ed95..d13fdc89 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/emerald_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/emerald_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/emerald_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/emerald_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/emerald_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/emerald_ore.json index 651f28ea..6b1f89a1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/emerald_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/emerald_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/emerald_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/emerald_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/enchanted_book.json b/desktopRuntime/resources/assets/minecraft/models/item/enchanted_book.json index 40c31494..7a7d5af4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/enchanted_book.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/enchanted_book.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/book_enchanted" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/book_enchanted" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/enchanting_table.json b/desktopRuntime/resources/assets/minecraft/models/item/enchanting_table.json index e487653b..2bed6b99 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/enchanting_table.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/enchanting_table.json @@ -1,10 +1,10 @@ -{ - "parent": "block/enchanting_table_base", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/enchanting_table_base", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/end_portal_frame.json b/desktopRuntime/resources/assets/minecraft/models/item/end_portal_frame.json index 7ab19cff..90967936 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/end_portal_frame.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/end_portal_frame.json @@ -1,10 +1,10 @@ -{ - "parent": "block/end_portal_frame_empty", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/end_portal_frame_empty", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/end_stone.json b/desktopRuntime/resources/assets/minecraft/models/item/end_stone.json index 5642477f..2ec1bea7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/end_stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/end_stone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/end_stone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/end_stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ender_chest.json b/desktopRuntime/resources/assets/minecraft/models/item/ender_chest.json index 9935accd..ab467129 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ender_chest.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ender_chest.json @@ -1,3 +1,3 @@ -{ - "parent": "builtin/entity" -} +{ + "parent": "builtin/entity" +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ender_eye.json b/desktopRuntime/resources/assets/minecraft/models/item/ender_eye.json index 69e7ef05..f07db82f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ender_eye.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ender_eye.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/ender_eye" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/ender_eye" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ender_pearl.json b/desktopRuntime/resources/assets/minecraft/models/item/ender_pearl.json index 8919b00c..194d649f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ender_pearl.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ender_pearl.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/ender_pearl" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/ender_pearl" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/experience_bottle.json b/desktopRuntime/resources/assets/minecraft/models/item/experience_bottle.json index db135e3b..4755c784 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/experience_bottle.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/experience_bottle.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/experience_bottle" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/experience_bottle" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/farmland.json b/desktopRuntime/resources/assets/minecraft/models/item/farmland.json index 5679e6c2..5c582945 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/farmland.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/farmland.json @@ -1,10 +1,10 @@ -{ - "parent": "block/farmland_dry", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/farmland_dry", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/feather.json b/desktopRuntime/resources/assets/minecraft/models/item/feather.json index 06cc784b..77b11630 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/feather.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/feather.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/feather" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/feather" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fermented_spider_eye.json b/desktopRuntime/resources/assets/minecraft/models/item/fermented_spider_eye.json index b3438dbe..027c644b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fermented_spider_eye.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fermented_spider_eye.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/spider_eye_fermented" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/spider_eye_fermented" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fern.json b/desktopRuntime/resources/assets/minecraft/models/item/fern.json index a1d47ee4..6a48e741 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fern.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fern.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/fern" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/fern" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/filled_map.json b/desktopRuntime/resources/assets/minecraft/models/item/filled_map.json index 273fd139..e088770f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/filled_map.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/filled_map.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/map_filled" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/map_filled" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fire_charge.json b/desktopRuntime/resources/assets/minecraft/models/item/fire_charge.json index 38dc07ad..1548f8ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fire_charge.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fire_charge.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fireball" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fireball" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/firework_charge.json b/desktopRuntime/resources/assets/minecraft/models/item/firework_charge.json index 209854ed..011bbcd3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/firework_charge.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/firework_charge.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fireworks_charge", - "layer1": "items/fireworks_charge_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fireworks_charge", + "layer1": "items/fireworks_charge_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fireworks.json b/desktopRuntime/resources/assets/minecraft/models/item/fireworks.json index 1c371f6e..63261101 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fireworks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fireworks.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fireworks" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fireworks" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod.json b/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod.json index 62e50e72..e8342bb7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fishing_rod_uncast" - }, - "display": { - "thirdperson": { - "rotation": [ 180, 90, -35 ], - "translation": [ 0, 0, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, 45, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fishing_rod_uncast" + }, + "display": { + "thirdperson": { + "rotation": [180, 90, -35], + "translation": [0, 0, -3.5], + "scale": [0.85, 0.85, 0.85] + }, + "firstperson": { + "rotation": [0, 45, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod_cast.json b/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod_cast.json index add13efc..80cca549 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod_cast.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/fishing_rod_cast.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fishing_rod_cast" - }, - "display": { - "thirdperson": { - "rotation": [ 180, 90, -35 ], - "translation": [ 0, 0, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, 45, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fishing_rod_cast" + }, + "display": { + "thirdperson": { + "rotation": [180, 90, -35], + "translation": [0, 0, -3.5], + "scale": [0.85, 0.85, 0.85] + }, + "firstperson": { + "rotation": [0, 45, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/flint.json b/desktopRuntime/resources/assets/minecraft/models/item/flint.json index 623f128c..d48b1d27 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/flint.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/flint.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/flint" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/flint" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/flint_and_steel.json b/desktopRuntime/resources/assets/minecraft/models/item/flint_and_steel.json index 6f9ea647..46fc1cd4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/flint_and_steel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/flint_and_steel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/flint_and_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/flint_and_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/flower_pot.json b/desktopRuntime/resources/assets/minecraft/models/item/flower_pot.json index a3894940..619494d1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/flower_pot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/flower_pot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/flower_pot" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/flower_pot" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/furnace.json b/desktopRuntime/resources/assets/minecraft/models/item/furnace.json index baf27f67..579b0197 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/furnace.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/furnace.json @@ -1,10 +1,10 @@ -{ - "parent": "block/furnace", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/furnace", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/furnace_minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/furnace_minecart.json index 0dcb478f..1818a10a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/furnace_minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/furnace_minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_furnace" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_furnace" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ghast_tear.json b/desktopRuntime/resources/assets/minecraft/models/item/ghast_tear.json index 825b37b4..b6bd3a89 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ghast_tear.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ghast_tear.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/ghast_tear" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/ghast_tear" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/glass.json b/desktopRuntime/resources/assets/minecraft/models/item/glass.json index 79e7c93b..55a4e5e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/glass_bottle.json b/desktopRuntime/resources/assets/minecraft/models/item/glass_bottle.json index 7e97435b..f9684975 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/glass_bottle.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/glass_bottle.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potion_bottle_empty" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potion_bottle_empty" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/glass_pane.json index 9ddfafb1..9c0e2c03 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/glowstone.json b/desktopRuntime/resources/assets/minecraft/models/item/glowstone.json index dbc452ff..ee7adb4d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/glowstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/glowstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glowstone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glowstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/glowstone_dust.json b/desktopRuntime/resources/assets/minecraft/models/item/glowstone_dust.json index c96a238a..67fed932 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/glowstone_dust.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/glowstone_dust.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/glowstone_dust" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/glowstone_dust" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gold_block.json b/desktopRuntime/resources/assets/minecraft/models/item/gold_block.json index 74f09650..08eb91d9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gold_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gold_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/gold_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/gold_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gold_ingot.json b/desktopRuntime/resources/assets/minecraft/models/item/gold_ingot.json index 27a2c84a..42e5e0c7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gold_ingot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gold_ingot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gold_nugget.json b/desktopRuntime/resources/assets/minecraft/models/item/gold_nugget.json index c0ca53ac..9f4a02fe 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gold_nugget.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gold_nugget.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_nugget" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -2 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_nugget" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -2], + "scale": [0.55, 0.55, 0.55] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gold_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/gold_ore.json index e7c672db..af8d4919 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gold_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gold_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/gold_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/gold_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_apple.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_apple.json index d8943c5e..cabc2da3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_apple.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_apple.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/apple_golden" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/apple_golden" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_axe.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_axe.json index 760cf932..70aa9d4c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_axe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_axe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_axe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_axe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_boots.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_boots.json index 512dd249..d0c90aa8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_boots.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_boots.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_carrot.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_carrot.json index bdcf7f7f..c8ff07b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_carrot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_carrot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/carrot_golden" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/carrot_golden" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_chestplate.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_chestplate.json index 92f8b7ad..4d7699ab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_chestplate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_chestplate.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_helmet.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_helmet.json index 9c772f54..c305c86a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_helmet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_helmet.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_hoe.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_hoe.json index b7b9b98c..6bb4e0e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_hoe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_hoe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_horse_armor.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_horse_armor.json index cb47e962..a219cb22 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_horse_armor.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_horse_armor.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_horse_armor" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_horse_armor" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_leggings.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_leggings.json index 29767534..c1009db9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_leggings.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_leggings.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_pickaxe.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_pickaxe.json index 679f5d38..a41284ef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_pickaxe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_pickaxe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_pickaxe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_pickaxe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_rail.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_rail.json index 33a0a81b..624784f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_rail.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_rail.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/rail_golden" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/rail_golden" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_shovel.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_shovel.json index 22db290a..ebe41aab 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_shovel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_shovel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/golden_sword.json b/desktopRuntime/resources/assets/minecraft/models/item/golden_sword.json index da3c917e..928b9ed0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/golden_sword.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/golden_sword.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gold_sword" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gold_sword" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/granite.json b/desktopRuntime/resources/assets/minecraft/models/item/granite.json index 73909470..35b6e51a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/granite.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/granite.json @@ -1,10 +1,10 @@ -{ - "parent": "block/granite", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/granite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/granite_smooth.json b/desktopRuntime/resources/assets/minecraft/models/item/granite_smooth.json index 771e5c56..3a01549c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/granite_smooth.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/granite_smooth.json @@ -1,10 +1,10 @@ -{ - "parent": "block/granite_smooth", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/granite_smooth", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/grass.json b/desktopRuntime/resources/assets/minecraft/models/item/grass.json index c88a84d3..4ad0acfd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/grass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/grass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/grass_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/grass_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gravel.json b/desktopRuntime/resources/assets/minecraft/models/item/gravel.json index 733203d3..db6fb73e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gravel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gravel.json @@ -1,10 +1,10 @@ -{ - "parent": "block/gravel", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/gravel", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gray_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/gray_carpet.json index 019760cf..8039907e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gray_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gray_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_gray", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_gray", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass.json index 1ad4c2ca..394e7387 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_gray", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_gray", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass_pane.json index a8d8bf48..9142e461 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_gray" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_gray" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_hardened_clay.json index 9a799e17..d8938170 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gray_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_gray", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_gray", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gray_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/gray_wool.json index bc0e994a..8becf7a7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gray_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gray_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/gray_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/gray_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/green_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/green_carpet.json index 97d83f86..d1be69e2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/green_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/green_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_green", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_green", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass.json index be48aaf6..1a7ae90a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_green", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_green", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass_pane.json index 881e07b3..23b448f6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_green" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_green" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_hardened_clay.json index 30bb92c7..8be2ad0d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/green_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/green_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_green", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_green", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/green_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/green_wool.json index 839ebdb7..4a817b40 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/green_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/green_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/green_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/green_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/gunpowder.json b/desktopRuntime/resources/assets/minecraft/models/item/gunpowder.json index 091461be..d5ebe7cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/gunpowder.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/gunpowder.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/gunpowder" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/gunpowder" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/hardened_clay.json index ccddf762..c9d1408f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/hay_block.json b/desktopRuntime/resources/assets/minecraft/models/item/hay_block.json index 92698d46..dd0d574c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/hay_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/hay_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hay", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hay", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/heavy_weighted_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/models/item/heavy_weighted_pressure_plate.json index aff85391..6caaf3b2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/heavy_weighted_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/heavy_weighted_pressure_plate.json @@ -1,10 +1,10 @@ -{ - "parent": "block/heavy_pressure_plate_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/heavy_pressure_plate_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/hopper.json b/desktopRuntime/resources/assets/minecraft/models/item/hopper.json index 4d63ec07..2e5fd6b8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/hopper.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/hopper.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/hopper" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/hopper" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/hopper_minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/hopper_minecart.json index a106fc11..a56b38e1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/hopper_minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/hopper_minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_hopper" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_hopper" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/houstonia.json b/desktopRuntime/resources/assets/minecraft/models/item/houstonia.json index 40f063ee..b8aa8bec 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/houstonia.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/houstonia.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_houstonia" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_houstonia" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ice.json b/desktopRuntime/resources/assets/minecraft/models/item/ice.json index 1ae5426c..55e585f0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ice.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ice.json @@ -1,10 +1,10 @@ -{ - "parent": "block/ice", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/ice", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_axe.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_axe.json index 02f80fe4..ac66de3b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_axe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_axe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_axe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_axe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_bars.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_bars.json index 516afe15..4706ba39 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_bars.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_bars.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/iron_bars" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/iron_bars" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_block.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_block.json index 53a57185..ee3e6f81 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/iron_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/iron_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_boots.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_boots.json index 22391d86..b28a5e31 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_boots.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_boots.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_chestplate.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_chestplate.json index 5f389afa..79fe3e88 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_chestplate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_chestplate.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_door.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_door.json index 233d11ee..74488692 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_iron" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_iron" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_helmet.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_helmet.json index 1e5bf7b1..f9a50c42 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_helmet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_helmet.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_hoe.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_hoe.json index abee9750..b66d3be9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_hoe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_hoe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_horse_armor.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_horse_armor.json index e56d07c1..726e1592 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_horse_armor.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_horse_armor.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_horse_armor" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_horse_armor" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_ingot.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_ingot.json index 71b764ed..3c964b5c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_ingot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_ingot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_leggings.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_leggings.json index 1cfffde1..41af03ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_leggings.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_leggings.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_ore.json index cb370618..bb1af6e1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/iron_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/iron_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_pickaxe.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_pickaxe.json index 7bdb3f69..92d73c3a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_pickaxe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_pickaxe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_pickaxe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_pickaxe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_shovel.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_shovel.json index 421e910b..d77b9be1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_shovel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_shovel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_sword.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_sword.json index 000cb980..be9b2e46 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_sword.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_sword.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/iron_sword" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/iron_sword" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/iron_trapdoor.json b/desktopRuntime/resources/assets/minecraft/models/item/iron_trapdoor.json index c641b40f..849cc367 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/iron_trapdoor.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/iron_trapdoor.json @@ -1,15 +1,15 @@ -{ - "parent": "block/iron_trapdoor_bottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/iron_trapdoor_bottom", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/item_frame.json b/desktopRuntime/resources/assets/minecraft/models/item/item_frame.json index ad1dece6..1c1fc492 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/item_frame.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/item_frame.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/item_frame" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/item_frame" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jukebox.json b/desktopRuntime/resources/assets/minecraft/models/item/jukebox.json index 54ac1e1d..04e2c04c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jukebox.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jukebox.json @@ -1,10 +1,10 @@ -{ - "parent": "block/jukebox", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/jukebox", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_door.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_door.json index e6bf05df..6a1b4d63 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_jungle" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_jungle" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence.json index abf7dea0..bb32d760 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/jungle_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/jungle_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence_gate.json index 01a61739..917e36dc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/jungle_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/jungle_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_leaves.json index a53e1bcd..078b9420 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/jungle_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/jungle_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_log.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_log.json index 92564dad..463e0f34 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/jungle_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/jungle_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_planks.json index 59287fed..a22f1e75 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/jungle_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/jungle_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_sapling.json index ad27e4d4..4243c718 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_jungle" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_jungle" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_slab.json index fa8302fd..967f51f3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_jungle", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_jungle", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/jungle_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/jungle_stairs.json index f5df13e4..9f8348ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/jungle_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/jungle_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/jungle_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/jungle_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/ladder.json b/desktopRuntime/resources/assets/minecraft/models/item/ladder.json index c3e7f783..c2051951 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/ladder.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/ladder.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/ladder" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/ladder" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lapis_block.json b/desktopRuntime/resources/assets/minecraft/models/item/lapis_block.json index 135157bd..fdad393a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lapis_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lapis_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/lapis_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/lapis_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lapis_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/lapis_ore.json index 7dee5716..f26e940e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lapis_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lapis_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/lapis_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/lapis_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lava_bucket.json b/desktopRuntime/resources/assets/minecraft/models/item/lava_bucket.json index 2b8bdf1f..a813f6bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lava_bucket.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lava_bucket.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bucket_lava" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bucket_lava" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lead.json b/desktopRuntime/resources/assets/minecraft/models/item/lead.json index 6a87d387..c42791a9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lead.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lead.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/lead" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/lead" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/leather.json b/desktopRuntime/resources/assets/minecraft/models/item/leather.json index 0149d3d1..38e0d634 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/leather.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/leather.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/leather" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/leather" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/leather_boots.json b/desktopRuntime/resources/assets/minecraft/models/item/leather_boots.json index 18cbd38e..7e84e1e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/leather_boots.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/leather_boots.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/leather_boots", - "layer1": "items/leather_boots_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/leather_boots", + "layer1": "items/leather_boots_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/leather_chestplate.json b/desktopRuntime/resources/assets/minecraft/models/item/leather_chestplate.json index 4ad27450..efb564e3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/leather_chestplate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/leather_chestplate.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/leather_chestplate", - "layer1": "items/leather_chestplate_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/leather_chestplate", + "layer1": "items/leather_chestplate_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/leather_helmet.json b/desktopRuntime/resources/assets/minecraft/models/item/leather_helmet.json index d0ef964a..ed7e4559 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/leather_helmet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/leather_helmet.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/leather_helmet", - "layer1": "items/leather_helmet_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/leather_helmet", + "layer1": "items/leather_helmet_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/leather_leggings.json b/desktopRuntime/resources/assets/minecraft/models/item/leather_leggings.json index e15f9dfc..524aaf93 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/leather_leggings.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/leather_leggings.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/leather_leggings", - "layer1": "items/leather_leggings_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/leather_leggings", + "layer1": "items/leather_leggings_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lever.json b/desktopRuntime/resources/assets/minecraft/models/item/lever.json index 83d838d4..3fefb21f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lever.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lever.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/lever" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/lever" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_carpet.json index fed7b6f0..18e09875 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_light_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_light_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass.json index a6da40d2..32f30cc1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_light_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_light_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass_pane.json index 5ae618bd..8e60f91d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_light_blue" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_light_blue" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_hardened_clay.json index 9d5c6096..1b3a9d7c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_light_blue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_light_blue", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_wool.json index 3d1e5b6e..47ab0aa8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_blue_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_blue_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/light_blue_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/light_blue_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/light_weighted_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/models/item/light_weighted_pressure_plate.json index af749037..192e312d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/light_weighted_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/light_weighted_pressure_plate.json @@ -1,10 +1,10 @@ -{ - "parent": "block/light_pressure_plate_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/light_pressure_plate_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lime_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/lime_carpet.json index f6226562..7b233bdb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lime_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lime_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_lime", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_lime", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass.json index 2c2d85a1..335e9034 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_lime", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_lime", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass_pane.json index 005ba061..c1dfdb46 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_lime" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_lime" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_hardened_clay.json index 5f175f3a..730fbae6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lime_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_lime", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_lime", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lime_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/lime_wool.json index dab03a38..8633616a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lime_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lime_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/lime_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/lime_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lit_furnace.json b/desktopRuntime/resources/assets/minecraft/models/item/lit_furnace.json index ffc4109c..9ca008b3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lit_furnace.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lit_furnace.json @@ -1,10 +1,10 @@ -{ - "parent": "block/lit_furnace", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/lit_furnace", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/lit_pumpkin.json b/desktopRuntime/resources/assets/minecraft/models/item/lit_pumpkin.json index a2ecdb40..da8a80df 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/lit_pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/lit_pumpkin.json @@ -1,10 +1,10 @@ -{ - "parent": "block/lit_pumpkin", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/lit_pumpkin", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magenta_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/magenta_carpet.json index 053415f3..d9d50d60 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magenta_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magenta_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_magenta", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_magenta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass.json index 5629ad34..87dba710 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_magenta", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_magenta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass_pane.json index 83442a63..9e81e3ce 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_magenta" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_magenta" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_hardened_clay.json index e2b696ab..8559b4a1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magenta_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_magenta", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_magenta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magenta_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/magenta_wool.json index 90b64d85..61ef7305 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magenta_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magenta_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/magenta_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/magenta_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/magma_cream.json b/desktopRuntime/resources/assets/minecraft/models/item/magma_cream.json index 445ff1fe..6a3533b5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/magma_cream.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/magma_cream.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/magma_cream" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/magma_cream" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/map.json b/desktopRuntime/resources/assets/minecraft/models/item/map.json index 5aa02a33..efa3df0d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/map.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/map.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/map_empty" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/map_empty" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/melon.json b/desktopRuntime/resources/assets/minecraft/models/item/melon.json index cd147bac..a58da8ae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/melon.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/melon.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/melon" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/melon" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/melon_block.json b/desktopRuntime/resources/assets/minecraft/models/item/melon_block.json index 1dea2636..4684dad1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/melon_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/melon_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/melon", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/melon", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/melon_seeds.json b/desktopRuntime/resources/assets/minecraft/models/item/melon_seeds.json index 15beacd5..a2c0970e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/melon_seeds.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/melon_seeds.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/seeds_melon" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/seeds_melon" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/milk_bucket.json b/desktopRuntime/resources/assets/minecraft/models/item/milk_bucket.json index 74407ab7..bec96a19 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/milk_bucket.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/milk_bucket.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bucket_milk" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bucket_milk" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/minecart.json index 249e3243..544be39d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_normal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_normal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mob_spawner.json b/desktopRuntime/resources/assets/minecraft/models/item/mob_spawner.json index 6b82b05c..22f3bde7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mob_spawner.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mob_spawner.json @@ -1,10 +1,10 @@ -{ - "parent": "block/mob_spawner_cage", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/mob_spawner_cage", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mossy_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/mossy_brick_monster_egg.json index 992942ff..aa89d96b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mossy_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mossy_brick_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_mossy", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_mossy", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone.json b/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone.json index 5c243aa5..e67ebff2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/mossy_cobblestone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/mossy_cobblestone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone_wall.json b/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone_wall.json index dc9d2359..074ff1c4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone_wall.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mossy_cobblestone_wall.json @@ -1,10 +1,10 @@ -{ - "parent": "block/cobblestone_wall_mossy_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/cobblestone_wall_mossy_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mossy_stonebrick.json b/desktopRuntime/resources/assets/minecraft/models/item/mossy_stonebrick.json index 992942ff..aa89d96b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mossy_stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mossy_stonebrick.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_mossy", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_mossy", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mushroom_stew.json b/desktopRuntime/resources/assets/minecraft/models/item/mushroom_stew.json index b625e49d..959872a3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mushroom_stew.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mushroom_stew.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/mushroom_stew" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/mushroom_stew" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mutton.json b/desktopRuntime/resources/assets/minecraft/models/item/mutton.json index fa54983e..3dec8cfb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mutton.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mutton.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/mutton_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/mutton_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/mycelium.json b/desktopRuntime/resources/assets/minecraft/models/item/mycelium.json index f2657de4..5cc48715 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/mycelium.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/mycelium.json @@ -1,10 +1,10 @@ -{ - "parent": "block/mycelium", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/mycelium", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/name_tag.json b/desktopRuntime/resources/assets/minecraft/models/item/name_tag.json index 24007585..36138706 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/name_tag.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/name_tag.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/name_tag" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/name_tag" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick.json index 18c4edac..3d9ed0f7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick.json @@ -1,10 +1,10 @@ -{ - "parent": "block/nether_brick", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/nether_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_fence.json index 58f20d51..c7d57763 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/nether_brick_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/nether_brick_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_slab.json index 28ddafad..d435b348 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_nether_brick", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_nether_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_stairs.json index 0e1323b7..795d4a4a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_brick_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/nether_brick_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/nether_brick_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_star.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_star.json index 4cf2a9b5..ddeea7c1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_star.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_star.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/nether_star" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/nether_star" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/nether_wart.json b/desktopRuntime/resources/assets/minecraft/models/item/nether_wart.json index de3f9647..ac108b00 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/nether_wart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/nether_wart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/nether_wart" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/nether_wart" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/netherbrick.json b/desktopRuntime/resources/assets/minecraft/models/item/netherbrick.json index 6e8e518c..76c61939 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/netherbrick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/netherbrick.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/netherbrick" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/netherbrick" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/netherrack.json b/desktopRuntime/resources/assets/minecraft/models/item/netherrack.json index 78b40d54..05b594b4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/netherrack.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/netherrack.json @@ -1,10 +1,10 @@ -{ - "parent": "block/netherrack", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/netherrack", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/noteblock.json b/desktopRuntime/resources/assets/minecraft/models/item/noteblock.json index d3afbef1..db2b4973 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/noteblock.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/noteblock.json @@ -1,10 +1,10 @@ -{ - "parent": "block/noteblock", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/noteblock", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_door.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_door.json index f44fa158..32b53161 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_wood" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_wood" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_fence.json index d19cc6c1..ae6e40cb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/oak_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/oak_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_fence_gate.json index 0f25f5ed..10c52e23 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/oak_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/oak_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_leaves.json index aee6f812..4d4b730c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/oak_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/oak_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_log.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_log.json index 8d59f69b..a986ea96 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/oak_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_planks.json index 17b47d23..6ead3e27 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/oak_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_sapling.json index 3a83aa89..969c6afb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_oak" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_oak" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_slab.json index d4f7eec3..3e68c4b4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_oak", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_oak", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oak_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/oak_stairs.json index 86a853fc..429a0d1b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oak_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oak_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/oak_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/oak_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/obsidian.json b/desktopRuntime/resources/assets/minecraft/models/item/obsidian.json index 9d098031..d278b36f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/obsidian.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/obsidian.json @@ -1,10 +1,10 @@ -{ - "parent": "block/obsidian", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/obsidian", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/old_wood_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/old_wood_slab.json index d4f7eec3..3e68c4b4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/old_wood_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/old_wood_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_oak", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_oak", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_carpet.json index 639f7245..9cddb23b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_orange", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_orange", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass.json index 5a8b0439..a27b8d1b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_orange", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_orange", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass_pane.json index 203351ef..d171a925 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_orange" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_orange" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_hardened_clay.json index 9338ce28..427aeda1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_orange", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_orange", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_tulip.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_tulip.json index 8c526242..5eae44bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_tulip.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_tulip_orange" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_tulip_orange" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/orange_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/orange_wool.json index 2b9e3af3..761328dd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/orange_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/orange_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/orange_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/orange_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/oxeye_daisy.json b/desktopRuntime/resources/assets/minecraft/models/item/oxeye_daisy.json index 2ee4c956..83fbb221 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/oxeye_daisy.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/oxeye_daisy.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_oxeye_daisy" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_oxeye_daisy" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/packed_ice.json b/desktopRuntime/resources/assets/minecraft/models/item/packed_ice.json index d33fa3cf..1723496d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/packed_ice.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/packed_ice.json @@ -1,10 +1,10 @@ -{ - "parent": "block/packed_ice", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/packed_ice", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/paeonia.json b/desktopRuntime/resources/assets/minecraft/models/item/paeonia.json index f34dc4ce..844cf267 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/paeonia.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/paeonia.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_paeonia_top" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_paeonia_top" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/painting.json b/desktopRuntime/resources/assets/minecraft/models/item/painting.json index 6eb33e31..49de8566 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/painting.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/painting.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/painting" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/painting" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/paper.json b/desktopRuntime/resources/assets/minecraft/models/item/paper.json index 036650c0..06a2513a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/paper.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/paper.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/paper" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/paper" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_carpet.json index 28c8f896..3548c555 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_pink", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_pink", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass.json index 3ce78f46..15ca3c28 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_pink", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_pink", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass_pane.json index b191ef60..b637c138 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_pink" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_pink" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_hardened_clay.json index 3b499e6d..79c638eb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_pink", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_pink", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_tulip.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_tulip.json index 63e3775a..b9f1ebf4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_tulip.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_tulip_pink" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_tulip_pink" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pink_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/pink_wool.json index 601e859e..793b9379 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pink_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pink_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/pink_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/pink_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/piston.json b/desktopRuntime/resources/assets/minecraft/models/item/piston.json index 56c3bfcb..1bef2088 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/piston.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/piston.json @@ -1,10 +1,10 @@ -{ - "parent": "block/piston_inventory_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/piston_inventory_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/podzol.json b/desktopRuntime/resources/assets/minecraft/models/item/podzol.json index 3cc26528..7deb1760 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/podzol.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/podzol.json @@ -1,10 +1,10 @@ -{ - "parent": "block/podzol", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/podzol", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/poisonous_potato.json b/desktopRuntime/resources/assets/minecraft/models/item/poisonous_potato.json index d79bf352..b96e0131 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/poisonous_potato.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/poisonous_potato.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potato_poisonous" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potato_poisonous" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/poppy.json b/desktopRuntime/resources/assets/minecraft/models/item/poppy.json index f38366b4..3ca440a3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/poppy.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/poppy.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_rose" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_rose" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/porkchop.json b/desktopRuntime/resources/assets/minecraft/models/item/porkchop.json index 7d4b6465..0f369797 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/porkchop.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/porkchop.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/porkchop_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/porkchop_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/potato.json b/desktopRuntime/resources/assets/minecraft/models/item/potato.json index 1110de81..274d6379 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/potato.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/potato.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/potato" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/potato" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/prismarine.json b/desktopRuntime/resources/assets/minecraft/models/item/prismarine.json index 70ef52c5..a773a1ad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/prismarine.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/prismarine.json @@ -1,10 +1,10 @@ -{ - "parent": "block/prismarine_rough", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/prismarine_rough", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_bricks.json b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_bricks.json index 6c9bd848..df25337b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_bricks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_bricks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/prismarine_bricks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/prismarine_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_crystals.json b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_crystals.json index d5992a8e..141e25c4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_crystals.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_crystals.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/prismarine_crystals" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/prismarine_crystals" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_shard.json b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_shard.json index 51da30ac..a612f224 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/prismarine_shard.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/prismarine_shard.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/prismarine_shard" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/prismarine_shard" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pufferfish.json b/desktopRuntime/resources/assets/minecraft/models/item/pufferfish.json index 7202cb55..500e6f50 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pufferfish.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pufferfish.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_pufferfish_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_pufferfish_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin.json b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin.json index de4d6df1..bb399852 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin.json @@ -1,10 +1,10 @@ -{ - "parent": "block/pumpkin", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/pumpkin", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_pie.json b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_pie.json index 940f479e..f59e96ad 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_pie.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_pie.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/pumpkin_pie" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/pumpkin_pie" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_seeds.json b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_seeds.json index 16b80b5a..924bcfa1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_seeds.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/pumpkin_seeds.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/seeds_pumpkin" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/seeds_pumpkin" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/purple_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/purple_carpet.json index e485a136..9a49ba16 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/purple_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/purple_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_purple", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_purple", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass.json index fe31d841..2cba3c7f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_purple", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_purple", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass_pane.json index 040aca03..f74b95bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_purple" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_purple" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_hardened_clay.json index 937944f9..54c1e7eb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/purple_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_purple", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_purple", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/purple_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/purple_wool.json index b025a703..acb7863a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/purple_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/purple_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/purple_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/purple_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz.json index 3203dae6..875754e2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/quartz" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/quartz" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz_block.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz_block.json index 35f44d71..2e2007a8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/quartz_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/quartz_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz_column.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz_column.json index 28919412..e2bb3412 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz_column.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz_column.json @@ -1,10 +1,10 @@ -{ - "parent": "block/quartz_lines", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/quartz_lines", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz_ore.json index 58000b05..cd048714 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/quartz_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/quartz_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz_slab.json index ef4d7840..5dc644ba 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_quartz", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_quartz", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/quartz_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/quartz_stairs.json index e6d061a3..3d6e673d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/quartz_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/quartz_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/quartz_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/quartz_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rabbit.json b/desktopRuntime/resources/assets/minecraft/models/item/rabbit.json index 7383e1e1..830f4842 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rabbit.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rabbit.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rabbit_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rabbit_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_foot.json b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_foot.json index f331dd67..b4cae11e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_foot.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_foot.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rabbit_foot" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rabbit_foot" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_hide.json b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_hide.json index fa2b8532..37d54c86 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_hide.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_hide.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rabbit_hide" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rabbit_hide" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_stew.json b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_stew.json index 48afdc80..8a5f10bf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rabbit_stew.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rabbit_stew.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rabbit_stew" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rabbit_stew" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rail.json b/desktopRuntime/resources/assets/minecraft/models/item/rail.json index 933d922c..369b6588 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rail.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rail.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/rail_normal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/rail_normal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_11.json b/desktopRuntime/resources/assets/minecraft/models/item/record_11.json index 786285a9..93435682 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_11.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_11.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_11" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_11" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_13.json b/desktopRuntime/resources/assets/minecraft/models/item/record_13.json index 2b923d0e..24bcabcb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_13.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_13.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_13" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_13" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_blocks.json b/desktopRuntime/resources/assets/minecraft/models/item/record_blocks.json index 0ba63a3f..28fabaa6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_blocks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_blocks.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_blocks" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_blocks" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_cat.json b/desktopRuntime/resources/assets/minecraft/models/item/record_cat.json index 8c0091f2..2cb0f3e7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_cat.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_cat.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_cat" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_cat" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_chirp.json b/desktopRuntime/resources/assets/minecraft/models/item/record_chirp.json index 1b57bb6c..727838bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_chirp.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_chirp.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_chirp" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_chirp" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_far.json b/desktopRuntime/resources/assets/minecraft/models/item/record_far.json index b44c7993..162393b3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_far.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_far.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_far" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_far" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_mall.json b/desktopRuntime/resources/assets/minecraft/models/item/record_mall.json index b6c70e97..3734ea76 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_mall.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_mall.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_mall" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_mall" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_mellohi.json b/desktopRuntime/resources/assets/minecraft/models/item/record_mellohi.json index 8c141139..5c8a5ce8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_mellohi.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_mellohi.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_mellohi" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_mellohi" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_stal.json b/desktopRuntime/resources/assets/minecraft/models/item/record_stal.json index c95c2c9a..7eebda66 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_stal.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_stal.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_stal" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_stal" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_strad.json b/desktopRuntime/resources/assets/minecraft/models/item/record_strad.json index f202e250..91fc3b20 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_strad.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_strad.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_strad" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_strad" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_wait.json b/desktopRuntime/resources/assets/minecraft/models/item/record_wait.json index fdf8bbb3..4f2ebc78 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_wait.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_wait.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_wait" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_wait" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/record_ward.json b/desktopRuntime/resources/assets/minecraft/models/item/record_ward.json index 4e25a55f..986c72d9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/record_ward.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/record_ward.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/record_ward" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/record_ward" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/red_carpet.json index f36dcab2..303c16bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_red", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_red", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom.json b/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom.json index c7c052da..3889cbdc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/mushroom_red" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/mushroom_red" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom_block.json b/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom_block.json index 34774f91..999ad033 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_mushroom_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_mushroom_block_cap_all", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_mushroom_block_cap_all", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_sand.json b/desktopRuntime/resources/assets/minecraft/models/item/red_sand.json index 0e9b4778..b9e7b5ee 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_sand.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_sand", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_sand", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone.json index 39777cb8..6b0f172e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_sandstone_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_sandstone_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_slab.json index 48588f34..7dbbc2ae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_red_sandstone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_red_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_stairs.json index 341c0a2d..c30cc430 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_sandstone_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/red_sandstone_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/red_sandstone_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass.json index b720c0c1..8dcd6e23 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_red", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_red", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass_pane.json index 0a47bef3..6eb07459 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_red" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_red" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_hardened_clay.json index 2dbf3e2a..87141ab3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_red", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_red", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_tulip.json b/desktopRuntime/resources/assets/minecraft/models/item/red_tulip.json index 65cbdc21..29566492 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_tulip.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_tulip_red" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_tulip_red" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/red_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/red_wool.json index 8b61fce4..49d7f85e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/red_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/red_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/redstone.json b/desktopRuntime/resources/assets/minecraft/models/item/redstone.json index 1adc8397..b7cef11b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/redstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/redstone.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/redstone_dust" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/redstone_dust" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/redstone_block.json b/desktopRuntime/resources/assets/minecraft/models/item/redstone_block.json index e5c4e906..9c8bcf2f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/redstone_block.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/redstone_block.json @@ -1,10 +1,10 @@ -{ - "parent": "block/redstone_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/redstone_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/models/item/redstone_lamp.json index e2b207e0..d94e8054 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/redstone_lamp.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/redstone_lamp.json @@ -1,10 +1,10 @@ -{ - "parent": "block/unlit_redstone_lamp", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/unlit_redstone_lamp", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/redstone_ore.json b/desktopRuntime/resources/assets/minecraft/models/item/redstone_ore.json index 466b440a..07ec0e84 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/redstone_ore.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/redstone_ore.json @@ -1,10 +1,10 @@ -{ - "parent": "block/redstone_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/redstone_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/redstone_torch.json b/desktopRuntime/resources/assets/minecraft/models/item/redstone_torch.json index d0946dd5..28173658 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/redstone_torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/redstone_torch.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/redstone_torch_on" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/redstone_torch_on" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/reeds.json b/desktopRuntime/resources/assets/minecraft/models/item/reeds.json index f97afd3e..e0c9f5cc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/reeds.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/reeds.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/reeds" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/reeds" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/repeater.json b/desktopRuntime/resources/assets/minecraft/models/item/repeater.json index 23173521..be0256bd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/repeater.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/repeater.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/repeater" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/repeater" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/rotten_flesh.json b/desktopRuntime/resources/assets/minecraft/models/item/rotten_flesh.json index 050ce292..1c52567a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/rotten_flesh.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/rotten_flesh.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/rotten_flesh" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/rotten_flesh" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/saddle.json b/desktopRuntime/resources/assets/minecraft/models/item/saddle.json index 6f9ea982..b01bab0e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/saddle.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/saddle.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/saddle" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/saddle" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/salmon.json b/desktopRuntime/resources/assets/minecraft/models/item/salmon.json index 316e2b42..496ef6a7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/salmon.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/salmon.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/fish_salmon_raw" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/fish_salmon_raw" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sand.json b/desktopRuntime/resources/assets/minecraft/models/item/sand.json index 156b5d11..05f441a0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sand.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sand", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sand", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/sandstone.json index bf2cccfa..6f3d7e22 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sandstone_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sandstone_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sandstone_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/sandstone_slab.json index 8f47a659..5ae67e8f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sandstone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sandstone_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_sandstone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sandstone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/sandstone_stairs.json index e5c63358..f9fe91b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sandstone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sandstone_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/sandstone_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/sandstone_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sea_lantern.json b/desktopRuntime/resources/assets/minecraft/models/item/sea_lantern.json index 5e69c9e7..1a24caa4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sea_lantern.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sea_lantern.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sea_lantern", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sea_lantern", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/shears.json b/desktopRuntime/resources/assets/minecraft/models/item/shears.json index dc2649ec..6ae0037f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/shears.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/shears.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/shears" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/shears" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sign.json b/desktopRuntime/resources/assets/minecraft/models/item/sign.json index ef6faeee..c36246cc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sign.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sign.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/sign" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/sign" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/silver_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/silver_carpet.json index 46a73f56..f5aa22cf 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/silver_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/silver_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_silver", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_silver", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass.json index 3f3893a9..b196e88d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_silver", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_silver", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass_pane.json index ff4ec0b9..157246e0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_silver" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_silver" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_hardened_clay.json index 0239c998..6bd8fe4a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/silver_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_silver", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_silver", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/silver_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/silver_wool.json index 5ffc54f2..90a48c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/silver_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/silver_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/silver_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/silver_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/skull_char.json b/desktopRuntime/resources/assets/minecraft/models/item/skull_char.json index d6e31622..0ecf5c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/skull_char.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/skull_char.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 180, -45, 0 ], - "translation": [ 0, 1, -2.5 ], - "scale": [ 0.25, 0.25, 0.25 ] - }, - "firstperson": { - "rotation": [ 0, -180, 0 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ], - "scale": [ 0.7, 0.7, 0.7 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [180, -45, 0], + "translation": [0, 1, -2.5], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson": { + "rotation": [0, -180, 0], + "scale": [0.55, 0.55, 0.55] + }, + "gui": { + "rotation": [0, 180, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/skull_creeper.json b/desktopRuntime/resources/assets/minecraft/models/item/skull_creeper.json index d6e31622..0ecf5c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/skull_creeper.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/skull_creeper.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 180, -45, 0 ], - "translation": [ 0, 1, -2.5 ], - "scale": [ 0.25, 0.25, 0.25 ] - }, - "firstperson": { - "rotation": [ 0, -180, 0 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ], - "scale": [ 0.7, 0.7, 0.7 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [180, -45, 0], + "translation": [0, 1, -2.5], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson": { + "rotation": [0, -180, 0], + "scale": [0.55, 0.55, 0.55] + }, + "gui": { + "rotation": [0, 180, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/skull_skeleton.json b/desktopRuntime/resources/assets/minecraft/models/item/skull_skeleton.json index d6e31622..0ecf5c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/skull_skeleton.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/skull_skeleton.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 180, -45, 0 ], - "translation": [ 0, 1, -2.5 ], - "scale": [ 0.25, 0.25, 0.25 ] - }, - "firstperson": { - "rotation": [ 0, -180, 0 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ], - "scale": [ 0.7, 0.7, 0.7 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [180, -45, 0], + "translation": [0, 1, -2.5], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson": { + "rotation": [0, -180, 0], + "scale": [0.55, 0.55, 0.55] + }, + "gui": { + "rotation": [0, 180, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/skull_wither.json b/desktopRuntime/resources/assets/minecraft/models/item/skull_wither.json index d6e31622..0ecf5c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/skull_wither.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/skull_wither.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 180, -45, 0 ], - "translation": [ 0, 1, -2.5 ], - "scale": [ 0.25, 0.25, 0.25 ] - }, - "firstperson": { - "rotation": [ 0, -180, 0 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ], - "scale": [ 0.7, 0.7, 0.7 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [180, -45, 0], + "translation": [0, 1, -2.5], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson": { + "rotation": [0, -180, 0], + "scale": [0.55, 0.55, 0.55] + }, + "gui": { + "rotation": [0, 180, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/skull_zombie.json b/desktopRuntime/resources/assets/minecraft/models/item/skull_zombie.json index d6e31622..0ecf5c08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/skull_zombie.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/skull_zombie.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/entity", - "display": { - "thirdperson": { - "rotation": [ 180, -45, 0 ], - "translation": [ 0, 1, -2.5 ], - "scale": [ 0.25, 0.25, 0.25 ] - }, - "firstperson": { - "rotation": [ 0, -180, 0 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ], - "scale": [ 0.7, 0.7, 0.7 ] - } - } -} +{ + "parent": "builtin/entity", + "display": { + "thirdperson": { + "rotation": [180, -45, 0], + "translation": [0, 1, -2.5], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson": { + "rotation": [0, -180, 0], + "scale": [0.55, 0.55, 0.55] + }, + "gui": { + "rotation": [0, 180, 0], + "scale": [0.7, 0.7, 0.7] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/slime.json b/desktopRuntime/resources/assets/minecraft/models/item/slime.json index 5279bd15..677f1026 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/slime.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/slime.json @@ -1,10 +1,10 @@ -{ - "parent": "block/slime", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/slime", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/slime_ball.json b/desktopRuntime/resources/assets/minecraft/models/item/slime_ball.json index 65903c06..2efffbef 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/slime_ball.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/slime_ball.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/slimeball" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/slimeball" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/smooth_red_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/smooth_red_sandstone.json index 56e787f8..c94b5126 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/smooth_red_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/smooth_red_sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/red_sandstone_smooth", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/red_sandstone_smooth", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/smooth_sandstone.json b/desktopRuntime/resources/assets/minecraft/models/item/smooth_sandstone.json index cc69a14f..2ae524aa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/smooth_sandstone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/smooth_sandstone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sandstone_smooth", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sandstone_smooth", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/snow.json b/desktopRuntime/resources/assets/minecraft/models/item/snow.json index 9109f26a..d19504df 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/snow.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/snow.json @@ -1,10 +1,10 @@ -{ - "parent": "block/snow", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/snow", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/snow_layer.json b/desktopRuntime/resources/assets/minecraft/models/item/snow_layer.json index 0be3ecbe..6260151b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/snow_layer.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/snow_layer.json @@ -1,15 +1,15 @@ -{ - "parent": "block/snow_height2", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/snow_height2", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/snowball.json b/desktopRuntime/resources/assets/minecraft/models/item/snowball.json index a98efaa6..4a06bbf0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/snowball.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/snowball.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/snowball" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/snowball" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/soul_sand.json b/desktopRuntime/resources/assets/minecraft/models/item/soul_sand.json index 20908fa6..291e1f55 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/soul_sand.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/soul_sand.json @@ -1,10 +1,10 @@ -{ - "parent": "block/soul_sand", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/soul_sand", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spawn_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/spawn_egg.json index e79e11ca..4b080575 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spawn_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spawn_egg.json @@ -1,19 +1,19 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/spawn_egg", - "layer1": "items/spawn_egg_overlay" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/spawn_egg", + "layer1": "items/spawn_egg_overlay" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/speckled_melon.json b/desktopRuntime/resources/assets/minecraft/models/item/speckled_melon.json index 2a37e3e5..ef11abe7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/speckled_melon.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/speckled_melon.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/melon_speckled" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/melon_speckled" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spider_eye.json b/desktopRuntime/resources/assets/minecraft/models/item/spider_eye.json index a2a72660..92a757cd 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spider_eye.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spider_eye.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/spider_eye" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/spider_eye" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sponge.json b/desktopRuntime/resources/assets/minecraft/models/item/sponge.json index 0aec21a5..f80aa201 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sponge.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sponge.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sponge", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sponge", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sponge_wet.json b/desktopRuntime/resources/assets/minecraft/models/item/sponge_wet.json index b72850d8..0a760f02 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sponge_wet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sponge_wet.json @@ -1,10 +1,10 @@ -{ - "parent": "block/sponge_wet", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/sponge_wet", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_door.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_door.json index 85bf95b6..9002aa70 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_door.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_door.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/door_spruce" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/door_spruce" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence.json index 8ef6800d..22344a6f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence.json @@ -1,13 +1,13 @@ -{ - "parent": "block/spruce_fence_inventory", - "display": { - "thirdperson": { - "rotation": [ 0, 0, 180 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 90, 0 ] - } - } -} +{ + "parent": "block/spruce_fence_inventory", + "display": { + "thirdperson": { + "rotation": [0, 0, 180], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 90, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence_gate.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence_gate.json index e8e8da10..9f231bb2 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence_gate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_fence_gate.json @@ -1,15 +1,15 @@ -{ - "parent": "block/spruce_fence_gate_closed", - "display": { - "thirdperson": { - "rotation": [ 0, -90, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/spruce_fence_gate_closed", + "display": { + "thirdperson": { + "rotation": [0, -90, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 90, 0], + "translation": [0, 0, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_leaves.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_leaves.json index eaa31bd3..4652dcd6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_leaves.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_leaves.json @@ -1,10 +1,10 @@ -{ - "parent": "block/spruce_leaves", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/spruce_leaves", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_log.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_log.json index 32c6859f..a28ac6c8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_log.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_log.json @@ -1,10 +1,10 @@ -{ - "parent": "block/spruce_log", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/spruce_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_planks.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_planks.json index bf94215c..56a5968b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_planks.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_planks.json @@ -1,10 +1,10 @@ -{ - "parent": "block/spruce_planks", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/spruce_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_sapling.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_sapling.json index 4e02fc91..a2518571 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_sapling.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_sapling.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/sapling_spruce" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/sapling_spruce" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_slab.json index 8c58ae12..a81a7865 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_spruce", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_spruce", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/spruce_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/spruce_stairs.json index 1e23a402..b7a6e64b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/spruce_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/spruce_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/spruce_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/spruce_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stick.json b/desktopRuntime/resources/assets/minecraft/models/item/stick.json index 5b436686..d44cd5d6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stick.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stick" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stick" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sticky_piston.json b/desktopRuntime/resources/assets/minecraft/models/item/sticky_piston.json index d8028b2e..1df441a6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sticky_piston.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sticky_piston.json @@ -1,10 +1,10 @@ -{ - "parent": "block/piston_inventory_sticky", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/piston_inventory_sticky", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone.json b/desktopRuntime/resources/assets/minecraft/models/item/stone.json index 58a602e4..b87b7175 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_axe.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_axe.json index 573791af..949e7411 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_axe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_axe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stone_axe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stone_axe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_monster_egg.json index 546e349a..9385bdbc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_slab.json index 1ff4f568..a36550c5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_stone_brick", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_stone_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_stairs.json index 65b54167..6ff1a0d7 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_brick_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/stone_brick_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/stone_brick_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_button.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_button.json index 25afaf42..08a16d5f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_button.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_button.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stone_button_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1, -1.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stone_button_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1, -1.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_hoe.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_hoe.json index 0a0e4f10..48168caa 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_hoe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_hoe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stone_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stone_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_monster_egg.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_monster_egg.json index 58a602e4..b87b7175 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_monster_egg.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_monster_egg.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_pickaxe.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_pickaxe.json index a23726d7..a34d3b6c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_pickaxe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_pickaxe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stone_pickaxe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stone_pickaxe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_pressure_plate.json index 4cedb73c..c053d56c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_pressure_plate.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stone_pressure_plate_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stone_pressure_plate_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_shovel.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_shovel.json index 38fda3e7..af396ae0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_shovel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_shovel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stone_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stone_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_slab.json index 61576f38..e5488bb8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_stone", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_stairs.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_stairs.json index 6b932825..55e4ff2c 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_stairs.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_stairs.json @@ -1,13 +1,13 @@ -{ - "parent": "block/stone_stairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} +{ + "parent": "block/stone_stairs", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "gui": { + "rotation": [0, 180, 0] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stone_sword.json b/desktopRuntime/resources/assets/minecraft/models/item/stone_sword.json index 05fee538..38ff96c0 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stone_sword.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stone_sword.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/stone_sword" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/stone_sword" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/stonebrick.json b/desktopRuntime/resources/assets/minecraft/models/item/stonebrick.json index 546e349a..9385bdbc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/stonebrick.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/stonebrick.json @@ -1,10 +1,10 @@ -{ - "parent": "block/stonebrick_normal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/stonebrick_normal", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/string.json b/desktopRuntime/resources/assets/minecraft/models/item/string.json index 738ad5fa..6a098a13 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/string.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/string.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/string" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/string" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sugar.json b/desktopRuntime/resources/assets/minecraft/models/item/sugar.json index 6819df00..e04219ae 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sugar.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sugar.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/sugar" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/sugar" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/sunflower.json b/desktopRuntime/resources/assets/minecraft/models/item/sunflower.json index 8c677422..4d335aa1 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/sunflower.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/sunflower.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_sunflower_front" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_sunflower_front" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/syringa.json b/desktopRuntime/resources/assets/minecraft/models/item/syringa.json index 38e8852d..2618fbb9 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/syringa.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/syringa.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/double_plant_syringa_top" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/double_plant_syringa_top" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/tall_grass.json b/desktopRuntime/resources/assets/minecraft/models/item/tall_grass.json index edf6f7e6..df5d7696 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/tall_grass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/tall_grass.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/tallgrass" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/tallgrass" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/tnt.json b/desktopRuntime/resources/assets/minecraft/models/item/tnt.json index 7e53a843..906a0013 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/tnt.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/tnt.json @@ -1,10 +1,10 @@ -{ - "parent": "block/tnt", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/tnt", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/tnt_minecart.json b/desktopRuntime/resources/assets/minecraft/models/item/tnt_minecart.json index 78f01f51..1f2f1c9f 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/tnt_minecart.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/tnt_minecart.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/minecart_tnt" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/minecart_tnt" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/torch.json b/desktopRuntime/resources/assets/minecraft/models/item/torch.json index 2219ac10..d29bb827 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/torch.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/torch.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/torch_on" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/torch_on" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/trapdoor.json b/desktopRuntime/resources/assets/minecraft/models/item/trapdoor.json index af8b6423..f37c2cc3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/trapdoor.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/trapdoor.json @@ -1,15 +1,15 @@ -{ - "parent": "block/wooden_trapdoor_bottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/wooden_trapdoor_bottom", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/trapped_chest.json b/desktopRuntime/resources/assets/minecraft/models/item/trapped_chest.json index 9935accd..ab467129 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/trapped_chest.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/trapped_chest.json @@ -1,3 +1,3 @@ -{ - "parent": "builtin/entity" -} +{ + "parent": "builtin/entity" +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/tripwire_hook.json b/desktopRuntime/resources/assets/minecraft/models/item/tripwire_hook.json index b61f8bc4..b836cb0a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/tripwire_hook.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/tripwire_hook.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/trip_wire_source" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/trip_wire_source" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/vine.json b/desktopRuntime/resources/assets/minecraft/models/item/vine.json index 6373ceb6..38daf44d 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/vine.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/vine.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/vine" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/vine" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/water_bucket.json b/desktopRuntime/resources/assets/minecraft/models/item/water_bucket.json index 836aeb83..b26d949a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/water_bucket.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/water_bucket.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/bucket_water" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/bucket_water" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/waterlily.json b/desktopRuntime/resources/assets/minecraft/models/item/waterlily.json index 01dfc8f0..ad53b278 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/waterlily.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/waterlily.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/waterlily" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/waterlily" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/web.json b/desktopRuntime/resources/assets/minecraft/models/item/web.json index 64448c03..29968d08 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/web.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/web.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/web" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/web" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wheat.json b/desktopRuntime/resources/assets/minecraft/models/item/wheat.json index 5ee40946..eee554b3 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wheat.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wheat.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wheat" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wheat" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wheat_seeds.json b/desktopRuntime/resources/assets/minecraft/models/item/wheat_seeds.json index 6f1bf91b..1a1c1293 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wheat_seeds.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wheat_seeds.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/seeds_wheat" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/seeds_wheat" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/white_carpet.json index 8f40956f..85b0e289 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_white", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_white", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass.json index b105fcad..3938027e 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_white", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_white", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass_pane.json index f5fb63db..0d89d601 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_white" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_white" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_hardened_clay.json index 5c222319..8e20a735 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_white", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_white", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_tulip.json b/desktopRuntime/resources/assets/minecraft/models/item/white_tulip.json index d398d767..012738ac 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_tulip.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_tulip.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/flower_tulip_white" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/flower_tulip_white" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/white_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/white_wool.json index 78ea3e76..5528629a 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/white_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/white_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/white_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/white_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wood_old_slab.json b/desktopRuntime/resources/assets/minecraft/models/item/wood_old_slab.json index d4f7eec3..3e68c4b4 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wood_old_slab.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wood_old_slab.json @@ -1,10 +1,10 @@ -{ - "parent": "block/half_slab_oak", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/half_slab_oak", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_axe.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_axe.json index e440a7de..a10641bc 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_axe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_axe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wood_axe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wood_axe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_button.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_button.json index 458c7e8e..49e4ba55 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_button.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_button.json @@ -1,10 +1,10 @@ -{ - "parent": "block/wooden_button_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1, -1.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/wooden_button_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1, -1.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_hoe.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_hoe.json index fd5aba57..8a6c1118 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_hoe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_hoe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wood_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wood_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_pickaxe.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_pickaxe.json index 2bf12403..70ec42b6 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_pickaxe.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_pickaxe.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wood_pickaxe" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wood_pickaxe" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_pressure_plate.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_pressure_plate.json index 9c7ca618..7b0e2fda 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_pressure_plate.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_pressure_plate.json @@ -1,10 +1,10 @@ -{ - "parent": "block/wooden_pressure_plate_inventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/wooden_pressure_plate_inventory", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_shovel.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_shovel.json index 918a081e..05a3e0d5 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_shovel.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_shovel.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wood_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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wood_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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/wooden_sword.json b/desktopRuntime/resources/assets/minecraft/models/item/wooden_sword.json index bd29d461..1ee17892 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/wooden_sword.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/wooden_sword.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/wood_sword" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/wood_sword" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/writable_book.json b/desktopRuntime/resources/assets/minecraft/models/item/writable_book.json index 48f42cca..7dc0b085 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/writable_book.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/writable_book.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/book_writable" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/book_writable" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/written_book.json b/desktopRuntime/resources/assets/minecraft/models/item/written_book.json index 0719ec62..f54b89b8 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/written_book.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/written_book.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "items/book_written" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/book_written" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/yellow_carpet.json b/desktopRuntime/resources/assets/minecraft/models/item/yellow_carpet.json index cfe0d02d..41ae1587 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/yellow_carpet.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/yellow_carpet.json @@ -1,15 +1,15 @@ -{ - "parent": "block/carpet_yellow", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 0.25, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 5.25, 0 ], - "scale": [ 1, 1, 1 ] - } - } -} +{ + "parent": "block/carpet_yellow", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 0.25, -2.75], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson": { + "rotation": [0, 0, 0], + "translation": [0, 5.25, 0], + "scale": [1, 1, 1] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass.json b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass.json index 350b2e0d..e6808306 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass.json @@ -1,10 +1,10 @@ -{ - "parent": "block/glass_yellow", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/glass_yellow", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass_pane.json b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass_pane.json index 5d1a5fed..932983fb 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass_pane.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_glass_pane.json @@ -1,18 +1,18 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "blocks/glass_yellow" - }, - "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 ] - } - } -} +{ + "parent": "builtin/generated", + "textures": { + "layer0": "blocks/glass_yellow" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_hardened_clay.json b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_hardened_clay.json index bdac8b3b..29252326 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_hardened_clay.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/yellow_stained_hardened_clay.json @@ -1,10 +1,10 @@ -{ - "parent": "block/hardened_clay_yellow", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/hardened_clay_yellow", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/models/item/yellow_wool.json b/desktopRuntime/resources/assets/minecraft/models/item/yellow_wool.json index c386a262..5534932b 100644 --- a/desktopRuntime/resources/assets/minecraft/models/item/yellow_wool.json +++ b/desktopRuntime/resources/assets/minecraft/models/item/yellow_wool.json @@ -1,10 +1,10 @@ -{ - "parent": "block/yellow_wool", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} +{ + "parent": "block/yellow_wool", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/sounds.json b/desktopRuntime/resources/assets/minecraft/sounds.json index 724b4fe5..2ce3a7a5 100644 --- a/desktopRuntime/resources/assets/minecraft/sounds.json +++ b/desktopRuntime/resources/assets/minecraft/sounds.json @@ -36,294 +36,167 @@ }, "game.player.hurt.fall.big": { "category": "player", - "sounds": [ - "damage/fallbig" - ] + "sounds": ["damage/fallbig"] }, "game.player.hurt.fall.small": { "category": "player", - "sounds": [ - "damage/fallsmall" - ] + "sounds": ["damage/fallsmall"] }, "game.neutral.hurt.fall.big": { "category": "neutral", - "sounds": [ - "damage/fallbig" - ] + "sounds": ["damage/fallbig"] }, "game.neutral.hurt.fall.small": { "category": "neutral", - "sounds": [ - "damage/fallsmall" - ] + "sounds": ["damage/fallsmall"] }, "game.hostile.hurt.fall.big": { "category": "hostile", - "sounds": [ - "damage/fallbig" - ] + "sounds": ["damage/fallbig"] }, "game.hostile.hurt.fall.small": { "category": "hostile", - "sounds": [ - "damage/fallsmall" - ] + "sounds": ["damage/fallsmall"] }, "game.player.hurt": { "category": "player", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "game.neutral.hurt": { "category": "neutral", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "game.hostile.hurt": { "category": "hostile", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "game.player.die": { "category": "player", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "game.neutral.die": { "category": "neutral", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "game.hostile.die": { "category": "hostile", - "sounds": [ - "damage/hit1", - "damage/hit2", - "damage/hit3" - ] + "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"] }, "dig.cloth": { "category": "block", - "sounds": [ - "dig/cloth1", - "dig/cloth2", - "dig/cloth3", - "dig/cloth4" - ] + "sounds": ["dig/cloth1", "dig/cloth2", "dig/cloth3", "dig/cloth4"] }, "dig.grass": { "category": "block", - "sounds": [ - "dig/grass1", - "dig/grass2", - "dig/grass3", - "dig/grass4" - ] + "sounds": ["dig/grass1", "dig/grass2", "dig/grass3", "dig/grass4"] }, "dig.gravel": { "category": "block", - "sounds": [ - "dig/gravel1", - "dig/gravel2", - "dig/gravel3", - "dig/gravel4" - ] + "sounds": ["dig/gravel1", "dig/gravel2", "dig/gravel3", "dig/gravel4"] }, "dig.sand": { "category": "block", - "sounds": [ - "dig/sand1", - "dig/sand2", - "dig/sand3", - "dig/sand4" - ] + "sounds": ["dig/sand1", "dig/sand2", "dig/sand3", "dig/sand4"] }, "dig.snow": { "category": "block", - "sounds": [ - "dig/snow1", - "dig/snow2", - "dig/snow3", - "dig/snow4" - ] + "sounds": ["dig/snow1", "dig/snow2", "dig/snow3", "dig/snow4"] }, "dig.stone": { "category": "block", - "sounds": [ - "dig/stone1", - "dig/stone2", - "dig/stone3", - "dig/stone4" - ] + "sounds": ["dig/stone1", "dig/stone2", "dig/stone3", "dig/stone4"] }, "dig.wood": { "category": "block", - "sounds": [ - "dig/wood1", - "dig/wood2", - "dig/wood3", - "dig/wood4" - ] + "sounds": ["dig/wood1", "dig/wood2", "dig/wood3", "dig/wood4"] }, "fire.fire": { "category": "block", - "sounds": [ - "fire/fire" - ] + "sounds": ["fire/fire"] }, "fire.ignite": { "category": "block", - "sounds": [ - "fire/ignite" - ] + "sounds": ["fire/ignite"] }, "item.fireCharge.use": { "category": "block", - "sounds": [ - "mob/ghast/fireball4" - ] + "sounds": ["mob/ghast/fireball4"] }, "fireworks.blast": { "category": "ambient", - "sounds": [ - "fireworks/blast1" - ] + "sounds": ["fireworks/blast1"] }, "fireworks.blast_far": { "category": "ambient", - "sounds": [ - "fireworks/blast_far1" - ] + "sounds": ["fireworks/blast_far1"] }, "fireworks.largeBlast": { "category": "ambient", - "sounds": [ - "fireworks/largeBlast1" - ] + "sounds": ["fireworks/largeBlast1"] }, "fireworks.largeBlast_far": { "category": "ambient", - "sounds": [ - "fireworks/largeBlast_far1" - ] + "sounds": ["fireworks/largeBlast_far1"] }, "fireworks.launch": { "category": "ambient", - "sounds": [ - "fireworks/launch1" - ] + "sounds": ["fireworks/launch1"] }, "fireworks.twinkle": { "category": "ambient", - "sounds": [ - "fireworks/twinkle1" - ] + "sounds": ["fireworks/twinkle1"] }, "fireworks.twinkle_far": { "category": "ambient", - "sounds": [ - "fireworks/twinkle_far1" - ] + "sounds": ["fireworks/twinkle_far1"] }, "liquid.lava": { "category": "block", - "sounds": [ - "liquid/lava" - ] + "sounds": ["liquid/lava"] }, "liquid.lavapop": { "category": "block", - "sounds": [ - "liquid/lavapop" - ] + "sounds": ["liquid/lavapop"] }, "game.neutral.swim.splash": { "category": "neutral", - "sounds": [ - "liquid/splash", - "liquid/splash2" - ] + "sounds": ["liquid/splash", "liquid/splash2"] }, "game.player.swim.splash": { "category": "block", - "sounds": [ - "liquid/splash", - "liquid/splash2" - ] + "sounds": ["liquid/splash", "liquid/splash2"] }, "game.hostile.swim.splash": { "category": "hostile", - "sounds": [ - "liquid/splash", - "liquid/splash2" - ] + "sounds": ["liquid/splash", "liquid/splash2"] }, "game.player.swim": { "category": "player", - "sounds": [ - "liquid/swim1", - "liquid/swim2", - "liquid/swim3", - "liquid/swim4" - ] + "sounds": ["liquid/swim1", "liquid/swim2", "liquid/swim3", "liquid/swim4"] }, "game.neutral.swim": { "category": "neutral", - "sounds": [ - "liquid/swim1", - "liquid/swim2", - "liquid/swim3", - "liquid/swim4" - ] + "sounds": ["liquid/swim1", "liquid/swim2", "liquid/swim3", "liquid/swim4"] }, "game.hostile.swim": { "category": "hostile", - "sounds": [ - "liquid/swim1", - "liquid/swim2", - "liquid/swim3", - "liquid/swim4" - ] + "sounds": ["liquid/swim1", "liquid/swim2", "liquid/swim3", "liquid/swim4"] }, "liquid.water": { "category": "block", - "sounds": [ - "liquid/water" - ] + "sounds": ["liquid/water"] }, "minecart.base": { "category": "neutral", - "sounds": [ - "minecart/base" - ] + "sounds": ["minecart/base"] }, "minecart.inside": { "category": "player", - "sounds": [ - "minecart/inside" - ] + "sounds": ["minecart/inside"] }, "mob.bat.death": { "category": "neutral", - "sounds": [ - "mob/bat/death" - ] + "sounds": ["mob/bat/death"] }, "mob.bat.hurt": { "category": "neutral", @@ -345,15 +218,11 @@ }, "mob.bat.loop": { "category": "neutral", - "sounds": [ - "mob/bat/loop" - ] + "sounds": ["mob/bat/loop"] }, "mob.bat.takeoff": { "category": "neutral", - "sounds": [ - "mob/bat/takeoff" - ] + "sounds": ["mob/bat/takeoff"] }, "mob.blaze.breathe": { "category": "hostile", @@ -366,9 +235,7 @@ }, "mob.blaze.death": { "category": "hostile", - "sounds": [ - "mob/blaze/death" - ] + "sounds": ["mob/blaze/death"] }, "mob.blaze.hit": { "category": "hostile", @@ -411,9 +278,7 @@ }, "mob.guardian.death": { "category": "hostile", - "sounds": [ - "mob/guardian/guardian_death" - ] + "sounds": ["mob/guardian/guardian_death"] }, "mob.guardian.elder.hit": { "category": "hostile", @@ -435,9 +300,7 @@ }, "mob.guardian.elder.death": { "category": "hostile", - "sounds": [ - "mob/guardian/elder_death" - ] + "sounds": ["mob/guardian/elder_death"] }, "mob.guardian.land.hit": { "category": "hostile", @@ -459,21 +322,15 @@ }, "mob.guardian.land.death": { "category": "hostile", - "sounds": [ - "mob/guardian/land_death" - ] + "sounds": ["mob/guardian/land_death"] }, "mob.guardian.curse": { "category": "hostile", - "sounds": [ - "mob/guardian/curse" - ] + "sounds": ["mob/guardian/curse"] }, "mob.guardian.attack": { "category": "hostile", - "sounds": [ - "mob/guardian/attack_loop" - ] + "sounds": ["mob/guardian/attack_loop"] }, "mob.guardian.flop": { "category": "hostile", @@ -486,19 +343,11 @@ }, "mob.cat.hiss": { "category": "neutral", - "sounds": [ - "mob/cat/hiss1", - "mob/cat/hiss2", - "mob/cat/hiss3" - ] + "sounds": ["mob/cat/hiss1", "mob/cat/hiss2", "mob/cat/hiss3"] }, "mob.cat.hitt": { "category": "neutral", - "sounds": [ - "mob/cat/hitt1", - "mob/cat/hitt2", - "mob/cat/hitt3" - ] + "sounds": ["mob/cat/hitt1", "mob/cat/hitt2", "mob/cat/hitt3"] }, "mob.cat.meow": { "category": "neutral", @@ -511,63 +360,35 @@ }, "mob.cat.purr": { "category": "neutral", - "sounds": [ - "mob/cat/purr1", - "mob/cat/purr2", - "mob/cat/purr3" - ] + "sounds": ["mob/cat/purr1", "mob/cat/purr2", "mob/cat/purr3"] }, "mob.cat.purreow": { "category": "neutral", - "sounds": [ - "mob/cat/purreow1", - "mob/cat/purreow2" - ] + "sounds": ["mob/cat/purreow1", "mob/cat/purreow2"] }, "mob.chicken.hurt": { "category": "neutral", - "sounds": [ - "mob/chicken/hurt1", - "mob/chicken/hurt2" - ] + "sounds": ["mob/chicken/hurt1", "mob/chicken/hurt2"] }, "mob.chicken.plop": { "category": "neutral", - "sounds": [ - "mob/chicken/plop" - ] + "sounds": ["mob/chicken/plop"] }, "mob.chicken.say": { "category": "neutral", - "sounds": [ - "mob/chicken/say1", - "mob/chicken/say2", - "mob/chicken/say3" - ] + "sounds": ["mob/chicken/say1", "mob/chicken/say2", "mob/chicken/say3"] }, "mob.chicken.step": { "category": "neutral", - "sounds": [ - "mob/chicken/step1", - "mob/chicken/step2" - ] + "sounds": ["mob/chicken/step1", "mob/chicken/step2"] }, "mob.cow.hurt": { "category": "neutral", - "sounds": [ - "mob/cow/hurt1", - "mob/cow/hurt2", - "mob/cow/hurt3" - ] + "sounds": ["mob/cow/hurt1", "mob/cow/hurt2", "mob/cow/hurt3"] }, "mob.cow.say": { "category": "neutral", - "sounds": [ - "mob/cow/say1", - "mob/cow/say2", - "mob/cow/say3", - "mob/cow/say4" - ] + "sounds": ["mob/cow/say1", "mob/cow/say2", "mob/cow/say3", "mob/cow/say4"] }, "mob.cow.step": { "category": "neutral", @@ -580,9 +401,7 @@ }, "mob.creeper.death": { "category": "hostile", - "sounds": [ - "mob/creeper/death" - ] + "sounds": ["mob/creeper/death"] }, "mob.creeper.say": { "category": "hostile", @@ -595,9 +414,7 @@ }, "mob.enderdragon.end": { "category": "hostile", - "sounds": [ - "mob/enderdragon/end" - ] + "sounds": ["mob/enderdragon/end"] }, "mob.enderdragon.growl": { "category": "hostile", @@ -630,9 +447,7 @@ }, "mob.endermen.death": { "category": "hostile", - "sounds": [ - "mob/endermen/death" - ] + "sounds": ["mob/endermen/death"] }, "mob.endermen.hit": { "category": "hostile", @@ -655,10 +470,7 @@ }, "mob.endermen.portal": { "category": "hostile", - "sounds": [ - "mob/endermen/portal", - "mob/endermen/portal2" - ] + "sounds": ["mob/endermen/portal", "mob/endermen/portal2"] }, "mob.endermen.scream": { "category": "hostile", @@ -671,33 +483,23 @@ }, "mob.endermen.stare": { "category": "hostile", - "sounds": [ - "mob/endermen/stare" - ] + "sounds": ["mob/endermen/stare"] }, "mob.ghast.affectionate_scream": { "category": "hostile", - "sounds": [ - "mob/ghast/affectionate_scream" - ] + "sounds": ["mob/ghast/affectionate_scream"] }, "mob.ghast.charge": { "category": "hostile", - "sounds": [ - "mob/ghast/charge" - ] + "sounds": ["mob/ghast/charge"] }, "mob.ghast.death": { "category": "hostile", - "sounds": [ - "mob/ghast/death" - ] + "sounds": ["mob/ghast/death"] }, "mob.ghast.fireball": { "category": "hostile", - "sounds": [ - "mob/ghast/fireball4" - ] + "sounds": ["mob/ghast/fireball4"] }, "mob.ghast.moan": { "category": "hostile", @@ -723,42 +525,27 @@ }, "mob.horse.angry": { "category": "neutral", - "sounds": [ - "mob/horse/angry1" - ] + "sounds": ["mob/horse/angry1"] }, "mob.horse.armor": { "category": "neutral", - "sounds": [ - "mob/horse/armor" - ] + "sounds": ["mob/horse/armor"] }, "mob.horse.breathe": { "category": "neutral", - "sounds": [ - "mob/horse/breathe1", - "mob/horse/breathe2", - "mob/horse/breathe3" - ] + "sounds": ["mob/horse/breathe1", "mob/horse/breathe2", "mob/horse/breathe3"] }, "mob.horse.death": { "category": "neutral", - "sounds": [ - "mob/horse/death" - ] + "sounds": ["mob/horse/death"] }, "mob.horse.donkey.angry": { "category": "neutral", - "sounds": [ - "mob/horse/donkey/angry1", - "mob/horse/donkey/angry2" - ] + "sounds": ["mob/horse/donkey/angry1", "mob/horse/donkey/angry2"] }, "mob.horse.donkey.death": { "category": "neutral", - "sounds": [ - "mob/horse/donkey/death" - ] + "sounds": ["mob/horse/donkey/death"] }, "mob.horse.donkey.hit": { "category": "neutral", @@ -796,35 +583,23 @@ }, "mob.horse.idle": { "category": "neutral", - "sounds": [ - "mob/horse/idle1", - "mob/horse/idle2", - "mob/horse/idle3" - ] + "sounds": ["mob/horse/idle1", "mob/horse/idle2", "mob/horse/idle3"] }, "mob.horse.jump": { "category": "neutral", - "sounds": [ - "mob/horse/jump" - ] + "sounds": ["mob/horse/jump"] }, "mob.horse.land": { "category": "neutral", - "sounds": [ - "mob/horse/land" - ] + "sounds": ["mob/horse/land"] }, "mob.horse.leather": { "category": "neutral", - "sounds": [ - "mob/horse/leather" - ] + "sounds": ["mob/horse/leather"] }, "mob.horse.skeleton.death": { "category": "neutral", - "sounds": [ - "mob/horse/skeleton/death" - ] + "sounds": ["mob/horse/skeleton/death"] }, "mob.horse.skeleton.hit": { "category": "neutral", @@ -867,9 +642,7 @@ }, "mob.horse.zombie.death": { "category": "neutral", - "sounds": [ - "mob/horse/zombie/death" - ] + "sounds": ["mob/horse/zombie/death"] }, "mob.horse.zombie.hit": { "category": "neutral", @@ -890,9 +663,7 @@ }, "mob.irongolem.death": { "category": "neutral", - "sounds": [ - "mob/irongolem/death" - ] + "sounds": ["mob/irongolem/death"] }, "mob.irongolem.hit": { "category": "neutral", @@ -905,9 +676,7 @@ }, "mob.irongolem.throw": { "category": "neutral", - "sounds": [ - "mob/irongolem/throw" - ] + "sounds": ["mob/irongolem/throw"] }, "mob.irongolem.walk": { "category": "neutral", @@ -948,17 +717,11 @@ }, "mob.pig.death": { "category": "neutral", - "sounds": [ - "mob/pig/death" - ] + "sounds": ["mob/pig/death"] }, "mob.pig.say": { "category": "neutral", - "sounds": [ - "mob/pig/say1", - "mob/pig/say2", - "mob/pig/say3" - ] + "sounds": ["mob/pig/say1", "mob/pig/say2", "mob/pig/say3"] }, "mob.pig.step": { "category": "neutral", @@ -1044,17 +807,11 @@ }, "mob.sheep.say": { "category": "neutral", - "sounds": [ - "mob/sheep/say1", - "mob/sheep/say2", - "mob/sheep/say3" - ] + "sounds": ["mob/sheep/say1", "mob/sheep/say2", "mob/sheep/say3"] }, "mob.sheep.shear": { "category": "neutral", - "sounds": [ - "mob/sheep/shear" - ] + "sounds": ["mob/sheep/shear"] }, "mob.sheep.step": { "category": "neutral", @@ -1076,9 +833,7 @@ }, "mob.silverfish.kill": { "category": "hostile", - "sounds": [ - "mob/silverfish/kill" - ] + "sounds": ["mob/silverfish/kill"] }, "mob.silverfish.say": { "category": "hostile", @@ -1100,9 +855,7 @@ }, "mob.skeleton.death": { "category": "hostile", - "sounds": [ - "mob/skeleton/death" - ] + "sounds": ["mob/skeleton/death"] }, "mob.skeleton.hurt": { "category": "hostile", @@ -1115,11 +868,7 @@ }, "mob.skeleton.say": { "category": "hostile", - "sounds": [ - "mob/skeleton/say1", - "mob/skeleton/say2", - "mob/skeleton/say3" - ] + "sounds": ["mob/skeleton/say1", "mob/skeleton/say2", "mob/skeleton/say3"] }, "mob.skeleton.step": { "category": "hostile", @@ -1132,10 +881,7 @@ }, "mob.slime.attack": { "category": "hostile", - "sounds": [ - "mob/slime/attack1", - "mob/slime/attack2" - ] + "sounds": ["mob/slime/attack1", "mob/slime/attack2"] }, "mob.slime.big": { "category": "hostile", @@ -1158,9 +904,7 @@ }, "mob.spider.death": { "category": "hostile", - "sounds": [ - "mob/spider/death" - ] + "sounds": ["mob/spider/death"] }, "mob.spider.say": { "category": "hostile", @@ -1182,9 +926,7 @@ }, "mob.villager.death": { "category": "neutral", - "sounds": [ - "mob/villager/death" - ] + "sounds": ["mob/villager/death"] }, "mob.villager.haggle": { "category": "neutral", @@ -1205,33 +947,19 @@ }, "mob.villager.idle": { "category": "neutral", - "sounds": [ - "mob/villager/idle1", - "mob/villager/idle2", - "mob/villager/idle3" - ] + "sounds": ["mob/villager/idle1", "mob/villager/idle2", "mob/villager/idle3"] }, "mob.villager.no": { "category": "neutral", - "sounds": [ - "mob/villager/no1", - "mob/villager/no2", - "mob/villager/no3" - ] + "sounds": ["mob/villager/no1", "mob/villager/no2", "mob/villager/no3"] }, "mob.villager.yes": { "category": "neutral", - "sounds": [ - "mob/villager/yes1", - "mob/villager/yes2", - "mob/villager/yes3" - ] + "sounds": ["mob/villager/yes1", "mob/villager/yes2", "mob/villager/yes3"] }, "mob.wither.death": { "category": "hostile", - "sounds": [ - "mob/wither/death" - ] + "sounds": ["mob/wither/death"] }, "mob.wither.hurt": { "category": "hostile", @@ -1253,64 +981,39 @@ }, "mob.wither.shoot": { "category": "hostile", - "sounds": [ - "mob/wither/shoot" - ] + "sounds": ["mob/wither/shoot"] }, "mob.wither.spawn": { "category": "hostile", - "sounds": [ - "mob/wither/spawn" - ] + "sounds": ["mob/wither/spawn"] }, "mob.wolf.bark": { "category": "neutral", - "sounds": [ - "mob/wolf/bark1", - "mob/wolf/bark2", - "mob/wolf/bark3" - ] + "sounds": ["mob/wolf/bark1", "mob/wolf/bark2", "mob/wolf/bark3"] }, "mob.wolf.death": { "category": "neutral", - "sounds": [ - "mob/wolf/death" - ] + "sounds": ["mob/wolf/death"] }, "mob.wolf.growl": { "category": "neutral", - "sounds": [ - "mob/wolf/growl1", - "mob/wolf/growl2", - "mob/wolf/growl3" - ] + "sounds": ["mob/wolf/growl1", "mob/wolf/growl2", "mob/wolf/growl3"] }, "mob.wolf.howl": { "category": "neutral", - "sounds": [ - "mob/wolf/howl1", - "mob/wolf/howl2" - ] + "sounds": ["mob/wolf/howl1", "mob/wolf/howl2"] }, "mob.wolf.hurt": { "category": "neutral", - "sounds": [ - "mob/wolf/hurt1", - "mob/wolf/hurt2", - "mob/wolf/hurt3" - ] + "sounds": ["mob/wolf/hurt1", "mob/wolf/hurt2", "mob/wolf/hurt3"] }, "mob.wolf.panting": { "category": "neutral", - "sounds": [ - "mob/wolf/panting" - ] + "sounds": ["mob/wolf/panting"] }, "mob.wolf.shake": { "category": "neutral", - "sounds": [ - "mob/wolf/shake" - ] + "sounds": ["mob/wolf/shake"] }, "mob.wolf.step": { "category": "neutral", @@ -1324,50 +1027,31 @@ }, "mob.wolf.whine": { "category": "neutral", - "sounds": [ - "mob/wolf/whine" - ] + "sounds": ["mob/wolf/whine"] }, "mob.zombie.death": { "category": "hostile", - "sounds": [ - "mob/zombie/death" - ] + "sounds": ["mob/zombie/death"] }, "mob.zombie.hurt": { "category": "hostile", - "sounds": [ - "mob/zombie/hurt1", - "mob/zombie/hurt2" - ] + "sounds": ["mob/zombie/hurt1", "mob/zombie/hurt2"] }, "mob.zombie.infect": { "category": "hostile", - "sounds": [ - "mob/zombie/infect" - ] + "sounds": ["mob/zombie/infect"] }, "mob.zombie.metal": { "category": "hostile", - "sounds": [ - "mob/zombie/metal1", - "mob/zombie/metal2", - "mob/zombie/metal3" - ] + "sounds": ["mob/zombie/metal1", "mob/zombie/metal2", "mob/zombie/metal3"] }, "mob.zombie.remedy": { "category": "hostile", - "sounds": [ - "mob/zombie/remedy" - ] + "sounds": ["mob/zombie/remedy"] }, "mob.zombie.say": { "category": "hostile", - "sounds": [ - "mob/zombie/say1", - "mob/zombie/say2", - "mob/zombie/say3" - ] + "sounds": ["mob/zombie/say1", "mob/zombie/say2", "mob/zombie/say3"] }, "mob.zombie.step": { "category": "hostile", @@ -1381,9 +1065,7 @@ }, "mob.zombie.unfect": { "category": "hostile", - "sounds": [ - "mob/zombie/unfect" - ] + "sounds": ["mob/zombie/unfect"] }, "mob.zombie.wood": { "category": "hostile", @@ -1396,9 +1078,7 @@ }, "mob.zombie.woodbreak": { "category": "hostile", - "sounds": [ - "mob/zombie/woodbreak" - ] + "sounds": ["mob/zombie/woodbreak"] }, "mob.zombiepig.zpig": { "category": "hostile", @@ -1420,100 +1100,67 @@ }, "mob.zombiepig.zpigdeath": { "category": "hostile", - "sounds": [ - "mob/zombiepig/zpigdeath" - ] + "sounds": ["mob/zombiepig/zpigdeath"] }, "mob.zombiepig.zpighurt": { "category": "hostile", - "sounds": [ - "mob/zombiepig/zpighurt1", - "mob/zombiepig/zpighurt2" - ] + "sounds": ["mob/zombiepig/zpighurt1", "mob/zombiepig/zpighurt2"] }, "note.bass": { "category": "record", - "sounds": [ - "note/bass" - ] + "sounds": ["note/bass"] }, "note.bassattack": { "category": "record", - "sounds": [ - "note/bassattack" - ] + "sounds": ["note/bassattack"] }, "note.bd": { "category": "record", - "sounds": [ - "note/bd" - ] + "sounds": ["note/bd"] }, "note.harp": { "category": "record", - "sounds": [ - "note/harp" - ] + "sounds": ["note/harp"] }, "note.hat": { "category": "record", - "sounds": [ - "note/hat" - ] + "sounds": ["note/hat"] }, "note.pling": { "category": "record", - "sounds": [ - "note/pling" - ] + "sounds": ["note/pling"] }, "note.snare": { "category": "record", - "sounds": [ - "note/snare" - ] + "sounds": ["note/snare"] }, "portal.portal": { "category": "block", - "sounds": [ - "portal/portal" - ] + "sounds": ["portal/portal"] }, "portal.travel": { "category": "player", - "sounds": [ - "portal/travel" - ] + "sounds": ["portal/travel"] }, "portal.trigger": { "category": "block", - "sounds": [ - "portal/trigger" - ] + "sounds": ["portal/trigger"] }, "random.anvil_break": { "category": "block", - "sounds": [ - "random/anvil_break" - ] + "sounds": ["random/anvil_break"] }, "random.anvil_land": { "category": "block", - "sounds": [ - "random/anvil_land" - ] + "sounds": ["random/anvil_land"] }, "random.anvil_use": { "category": "block", - "sounds": [ - "random/anvil_use" - ] + "sounds": ["random/anvil_use"] }, "random.bow": { "category": "neutral", - "sounds": [ - "random/bow" - ] + "sounds": ["random/bow"] }, "random.bowhit": { "category": "neutral", @@ -1526,67 +1173,43 @@ }, "random.break": { "category": "player", - "sounds": [ - "random/break" - ] + "sounds": ["random/break"] }, "random.burp": { "category": "player", - "sounds": [ - "random/burp" - ] + "sounds": ["random/burp"] }, "random.chestclosed": { "category": "block", - "sounds": [ - "random/chestclosed" - ] + "sounds": ["random/chestclosed"] }, "random.chestopen": { "category": "block", - "sounds": [ - "random/chestopen" - ] + "sounds": ["random/chestopen"] }, "gui.button.press": { "category": "master", - "sounds": [ - "random/click" - ] + "sounds": ["random/click"] }, "random.click": { "category": "block", - "sounds": [ - "random/click" - ] + "sounds": ["random/click"] }, "random.door_close": { "category": "block", - "sounds": [ - "random/door_close", - "random/door_open" - ] + "sounds": ["random/door_close", "random/door_open"] }, "random.door_open": { "category": "block", - "sounds": [ - "random/door_close", - "random/door_open" - ] + "sounds": ["random/door_close", "random/door_open"] }, "random.drink": { "category": "player", - "sounds": [ - "random/drink" - ] + "sounds": ["random/drink"] }, "random.eat": { "category": "player", - "sounds": [ - "random/eat1", - "random/eat2", - "random/eat3" - ] + "sounds": ["random/eat1", "random/eat2", "random/eat3"] }, "random.explode": { "category": "block", @@ -1599,73 +1222,47 @@ }, "random.fizz": { "category": "block", - "sounds": [ - "random/fizz" - ] + "sounds": ["random/fizz"] }, "game.tnt.primed": { "category": "block", - "sounds": [ - "random/fuse" - ] + "sounds": ["random/fuse"] }, "creeper.primed": { "category": "hostile", - "sounds": [ - "random/fuse" - ] + "sounds": ["random/fuse"] }, "dig.glass": { "category": "block", - "sounds": [ - "random/glass1", - "random/glass2", - "random/glass3" - ] + "sounds": ["random/glass1", "random/glass2", "random/glass3"] }, "game.potion.smash": { "category": "neutral", - "sounds": [ - "random/glass1", - "random/glass2", - "random/glass3" - ] + "sounds": ["random/glass1", "random/glass2", "random/glass3"] }, "random.levelup": { "category": "player", - "sounds": [ - "random/levelup" - ] + "sounds": ["random/levelup"] }, "random.orb": { "category": "player", - "sounds": [ - "random/orb" - ] + "sounds": ["random/orb"] }, "random.pop": { "category": "player", - "sounds": [ - "random/pop" - ] + "sounds": ["random/pop"] }, "random.splash": { "category": "player", - "sounds": [ - "random/splash" - ] + "sounds": ["random/splash"] }, "random.successful_hit": { "category": "player", - "sounds": [ - "random/successful_hit" - ] + "sounds": ["random/successful_hit"] }, "random.wood_click": { "category": "block", - "sounds": [ - "random/wood_click" - ] + "sounds": ["random/wood_click"] }, "records.11": { "category": "record", @@ -1777,12 +1374,7 @@ }, "step.cloth": { "category": "neutral", - "sounds": [ - "step/cloth1", - "step/cloth2", - "step/cloth3", - "step/cloth4" - ] + "sounds": ["step/cloth1", "step/cloth2", "step/cloth3", "step/cloth4"] }, "step.grass": { "category": "neutral", @@ -1797,12 +1389,7 @@ }, "step.gravel": { "category": "neutral", - "sounds": [ - "step/gravel1", - "step/gravel2", - "step/gravel3", - "step/gravel4" - ] + "sounds": ["step/gravel1", "step/gravel2", "step/gravel3", "step/gravel4"] }, "step.ladder": { "category": "neutral", @@ -1826,12 +1413,7 @@ }, "step.snow": { "category": "neutral", - "sounds": [ - "step/snow1", - "step/snow2", - "step/snow3", - "step/snow4" - ] + "sounds": ["step/snow1", "step/snow2", "step/snow3", "step/snow4"] }, "step.stone": { "category": "neutral", @@ -1857,15 +1439,11 @@ }, "tile.piston.in": { "category": "block", - "sounds": [ - "tile/piston/in" - ] + "sounds": ["tile/piston/in"] }, "tile.piston.out": { "category": "block", - "sounds": [ - "tile/piston/out" - ] + "sounds": ["tile/piston/out"] }, "music.menu": { "category": "music", @@ -2022,4 +1600,4 @@ } ] } -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/minecraft/texts/credits.txt b/desktopRuntime/resources/assets/minecraft/texts/credits.txt index 528bdb67..98460e80 100644 --- a/desktopRuntime/resources/assets/minecraft/texts/credits.txt +++ b/desktopRuntime/resources/assets/minecraft/texts/credits.txt @@ -425,4 +425,4 @@ -§f"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover." §7- Unknown \ No newline at end of file +§f"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover." §7- Unknown diff --git a/desktopRuntime/resources/assets/minecraft/texts/splashes.txt b/desktopRuntime/resources/assets/minecraft/texts/splashes.txt index 531bc2e0..76c13535 100644 --- a/desktopRuntime/resources/assets/minecraft/texts/splashes.txt +++ b/desktopRuntime/resources/assets/minecraft/texts/splashes.txt @@ -105,6 +105,7 @@ Jfkxicjglckfhtldj better than 1.8 Justin Client Simga! +HOOSIER TRANSFER IS THE BEST george is skid IM IN YOUR WALLS Joy and Anxiety in a rap battle!! @@ -161,5 +162,6 @@ in the last 8 give me sigma role!!!! 😭 give me sigma role!!! +I have your children hostage cool bruh diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_0.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_0.png.mcmeta index 76446714..b86af30e 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_0.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_0.png.mcmeta @@ -1,38 +1,8 @@ { "animation": { "frames": [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ] } } diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_1.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_1.png.mcmeta index 4f0718ac..dd1bedb1 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_1.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/fire_layer_1.png.mcmeta @@ -1,3 +1,3 @@ { "animation": {} -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/grass_top.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/grass_top.png index eaa7e458..7ec174aa 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/grass_top.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/grass_top.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_flow.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_flow.png index ccb5d6b1..8d2cf3cb 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_flow.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_flow.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png index e62298ce..1d3cd86d 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png.mcmeta index 7ceb3639..01b1b68c 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/lava_still.png.mcmeta @@ -2,44 +2,8 @@ "animation": { "frametime": 2, "frames": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, + 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ] } -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png index 42d4a756..ad221fc2 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png.mcmeta index 4f0718ac..dd1bedb1 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/portal.png.mcmeta @@ -1,3 +1,3 @@ { "animation": {} -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/prismarine_rough.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/prismarine_rough.png.mcmeta index 410b327f..6eb9b116 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/prismarine_rough.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/prismarine_rough.png.mcmeta @@ -2,29 +2,6 @@ "animation": { "frametime": 300, "interpolate": true, - "frames": [ - 0, - 1, - 0, - 2, - 0, - 3, - 0, - 1, - 2, - 1, - 3, - 1, - 0, - 2, - 1, - 2, - 3, - 2, - 0, - 3, - 1, - 3 - ] + "frames": [0, 1, 0, 2, 0, 3, 0, 1, 2, 1, 3, 1, 0, 2, 1, 2, 3, 2, 0, 3, 1, 3] } } diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png index 8909ce8e..d860d405 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png.mcmeta index e8ac9bc3..4a650b18 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/sea_lantern.png.mcmeta @@ -1,5 +1,5 @@ { - "animation": { - "frametime": 5 - } + "animation": { + "frametime": 5 + } } diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png index acf806a2..305611c9 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png.mcmeta index 4f0718ac..dd1bedb1 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_flow.png.mcmeta @@ -1,3 +1,3 @@ { "animation": {} -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_still.png b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_still.png index de4a36b4..8e038fa2 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/blocks/water_still.png and b/desktopRuntime/resources/assets/minecraft/textures/blocks/water_still.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/colormap/foliage.png b/desktopRuntime/resources/assets/minecraft/textures/colormap/foliage.png index dcc119ee..73dafc57 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/colormap/foliage.png and b/desktopRuntime/resources/assets/minecraft/textures/colormap/foliage.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/colormap/grass.png b/desktopRuntime/resources/assets/minecraft/textures/colormap/grass.png index 484a9a6a..4c98d7b4 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/colormap/grass.png and b/desktopRuntime/resources/assets/minecraft/textures/colormap/grass.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/alex.png b/desktopRuntime/resources/assets/minecraft/textures/entity/alex.png index ffd8e071..fafd121c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/alex.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/alex.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/armorstand/wood.png b/desktopRuntime/resources/assets/minecraft/textures/entity/armorstand/wood.png index 1f9f0138..5d0d84ed 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/armorstand/wood.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/armorstand/wood.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/banner/globe.png b/desktopRuntime/resources/assets/minecraft/textures/entity/banner/globe.png index a7243f7e..775085e6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/banner/globe.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/banner/globe.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/banner/triangle_bottom.png b/desktopRuntime/resources/assets/minecraft/textures/entity/banner/triangle_bottom.png index 03cd2544..80242647 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/banner/triangle_bottom.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/banner/triangle_bottom.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/banner_base.png b/desktopRuntime/resources/assets/minecraft/textures/entity/banner_base.png index d8fa0f59..52405d44 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/banner_base.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/banner_base.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/boat.png b/desktopRuntime/resources/assets/minecraft/textures/entity/boat.png index 5d84a681..25ab684e 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/boat.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/boat.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/cat/ocelot.png b/desktopRuntime/resources/assets/minecraft/textures/entity/cat/ocelot.png index 5f24e606..d72a3993 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/cat/ocelot.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/cat/ocelot.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/cat/red.png b/desktopRuntime/resources/assets/minecraft/textures/entity/cat/red.png index 68edb25e..46112b22 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/cat/red.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/cat/red.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/christmas_double.png b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/christmas_double.png index fe14d144..19d6a0d9 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/christmas_double.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/christmas_double.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/ender.png b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/ender.png index 642fe4cb..bddce12b 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/ender.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/ender.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/normal_double.png b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/normal_double.png index 3f1710da..027662e6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/normal_double.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/normal_double.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/trapped_double.png b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/trapped_double.png index 1b27ffa8..5886fb06 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/chest/trapped_double.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/chest/trapped_double.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/cow/cow.png b/desktopRuntime/resources/assets/minecraft/textures/entity/cow/cow.png index c110519d..bf47d80c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/cow/cow.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/cow/cow.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/cow/mooshroom.png b/desktopRuntime/resources/assets/minecraft/textures/entity/cow/mooshroom.png index 180f514d..74a3566a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/cow/mooshroom.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/cow/mooshroom.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/creeper/creeper_armor.png b/desktopRuntime/resources/assets/minecraft/textures/entity/creeper/creeper_armor.png index cc905d4d..fdff0be7 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/creeper/creeper_armor.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/creeper/creeper_armor.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/end_portal.png b/desktopRuntime/resources/assets/minecraft/textures/entity/end_portal.png index 173731a1..a6a5fddd 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/end_portal.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/end_portal.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal.png b/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal.png index 348afa2a..1d36331b 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal_beam.png b/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal_beam.png index 1c2e187c..8a3737d0 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal_beam.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/endercrystal/endercrystal_beam.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon.png b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon.png index eea5365a..075c1bd2 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png index a47a3732..350cff0a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_exploding.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png index 146d604e..2ebe8c98 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/enderdragon/dragon_eyes.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/enderman/enderman_eyes.png b/desktopRuntime/resources/assets/minecraft/textures/entity/enderman/enderman_eyes.png index ade580ef..d6853607 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/enderman/enderman_eyes.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/enderman/enderman_eyes.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/explosion.png b/desktopRuntime/resources/assets/minecraft/textures/entity/explosion.png index c309409c..0615e53e 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/explosion.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/explosion.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/guardian.png b/desktopRuntime/resources/assets/minecraft/textures/entity/guardian.png index 9945242b..f9e01036 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/guardian.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/guardian.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/guardian_elder.png b/desktopRuntime/resources/assets/minecraft/textures/entity/guardian_elder.png index 79e0f2c1..6438274b 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/guardian_elder.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/guardian_elder.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png index 79a01c29..1908444a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png index 49a48825..220f55dc 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png index 7490c002..31bf4d61 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/donkey.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/donkey.png index 365a7bc5..07d235ad 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/donkey.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/donkey.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_black.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_black.png index 7c1af65b..7d82b630 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_black.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_black.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_brown.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_brown.png index 26825f5e..2d7f417a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_brown.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_brown.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_chestnut.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_chestnut.png index 3f9bd295..f7ec3261 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_chestnut.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_chestnut.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_creamy.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_creamy.png index c5e31faf..6b668246 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_creamy.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_creamy.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_darkbrown.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_darkbrown.png index 4bd15723..ff2a2e9d 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_darkbrown.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_darkbrown.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_gray.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_gray.png index 32cee4d2..a99bb58c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_gray.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_gray.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png index a238107a..58a0d649 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitedots.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png index bbef96c3..8b3f9fff 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_markings_whitefield.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_skeleton.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_skeleton.png index 9a8bf9c7..b5c696b0 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_skeleton.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_skeleton.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_white.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_white.png index 3e13625b..8d02ef9d 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_white.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_white.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_zombie.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_zombie.png index e335c4ae..c0f0d875 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_zombie.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/horse_zombie.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/mule.png b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/mule.png index ce40916a..82797409 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/horse/mule.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/horse/mule.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/iron_golem.png b/desktopRuntime/resources/assets/minecraft/textures/entity/iron_golem.png index 931e2f9f..5c521df8 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/iron_golem.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/iron_golem.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/pig/pig.png b/desktopRuntime/resources/assets/minecraft/textures/entity/pig/pig.png index 76432691..dbd56cac 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/pig/pig.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/pig/pig.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/sheep/sheep.png b/desktopRuntime/resources/assets/minecraft/textures/entity/sheep/sheep.png index a71426f2..c05d3b53 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/sheep/sheep.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/sheep/sheep.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/snowman.png b/desktopRuntime/resources/assets/minecraft/textures/entity/snowman.png index 53c52978..4a7054a1 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/snowman.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/snowman.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/spider/cave_spider.png b/desktopRuntime/resources/assets/minecraft/textures/entity/spider/cave_spider.png index fe6bb429..01453d41 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/spider/cave_spider.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/spider/cave_spider.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/spider/spider.png b/desktopRuntime/resources/assets/minecraft/textures/entity/spider/spider.png index 8af2ea7d..977b2461 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/spider/spider.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/spider/spider.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/steve.png b/desktopRuntime/resources/assets/minecraft/textures/entity/steve.png index 90d4fa23..90a01410 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/steve.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/steve.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/butcher.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/butcher.png index 0ace3823..2ae81d9e 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/butcher.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/butcher.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/farmer.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/farmer.png index 90dadb4e..ab09c1f3 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/farmer.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/farmer.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/librarian.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/librarian.png index 68c3af7e..6e61d5ca 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/librarian.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/librarian.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/priest.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/priest.png index 20e06104..cf01cba1 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/priest.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/priest.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/smith.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/smith.png index f750169c..ab7c9fe4 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/smith.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/smith.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/villager.png b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/villager.png index 92aecabf..e74aa337 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/villager/villager.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/villager/villager.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/witch.png b/desktopRuntime/resources/assets/minecraft/textures/entity/witch.png index d253cf0a..2442fd45 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/witch.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/witch.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither.png b/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither.png index 289b719c..aaf62bf6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither_invulnerable.png b/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither_invulnerable.png index f69e543f..d3e234ce 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither_invulnerable.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/wither/wither_invulnerable.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf.png b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf.png index 85c73d31..a4787bb4 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_angry.png b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_angry.png index 72581a04..7b6e63a5 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_angry.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_angry.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_tame.png b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_tame.png index 6c71b067..401579ae 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_tame.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/wolf/wolf_tame.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie.png b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie.png index 86379b0c..e1246e41 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie_villager.png b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie_villager.png index 1bb4ec39..181839d2 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie_villager.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie/zombie_villager.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie_pigman.png b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie_pigman.png index 2d2615a6..837ecaad 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/entity/zombie_pigman.png and b/desktopRuntime/resources/assets/minecraft/textures/entity/zombie_pigman.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/environment/clouds.png b/desktopRuntime/resources/assets/minecraft/textures/environment/clouds.png index a67c44d2..263501f3 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/environment/clouds.png and b/desktopRuntime/resources/assets/minecraft/textures/environment/clouds.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/environment/end_sky.png b/desktopRuntime/resources/assets/minecraft/textures/environment/end_sky.png index 094b3093..a962d991 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/environment/end_sky.png and b/desktopRuntime/resources/assets/minecraft/textures/environment/end_sky.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/environment/moon_phases.png b/desktopRuntime/resources/assets/minecraft/textures/environment/moon_phases.png index cdba8d15..0c22c4f1 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/environment/moon_phases.png and b/desktopRuntime/resources/assets/minecraft/textures/environment/moon_phases.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/environment/rain.png b/desktopRuntime/resources/assets/minecraft/textures/environment/rain.png index 2dc4b1cd..1a8ea076 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/environment/rain.png and b/desktopRuntime/resources/assets/minecraft/textures/environment/rain.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/environment/snow.png b/desktopRuntime/resources/assets/minecraft/textures/environment/snow.png index 18989030..93477e9d 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/environment/snow.png and b/desktopRuntime/resources/assets/minecraft/textures/environment/snow.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/font/accented.png b/desktopRuntime/resources/assets/minecraft/textures/font/accented.png index 70c6cc31..4d9e1cc6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/font/accented.png and b/desktopRuntime/resources/assets/minecraft/textures/font/accented.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/font/ascii.png b/desktopRuntime/resources/assets/minecraft/textures/font/ascii.png index 5b57f73f..35106898 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/font/ascii.png and b/desktopRuntime/resources/assets/minecraft/textures/font/ascii.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/font/ascii_sga.png b/desktopRuntime/resources/assets/minecraft/textures/font/ascii_sga.png index ba326b44..c365be96 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/font/ascii_sga.png and b/desktopRuntime/resources/assets/minecraft/textures/font/ascii_sga.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/font/nonlatin_european.png b/desktopRuntime/resources/assets/minecraft/textures/font/nonlatin_european.png index 5ad00068..9d79beaf 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/font/nonlatin_european.png and b/desktopRuntime/resources/assets/minecraft/textures/font/nonlatin_european.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/achievement/achievement_icons.png b/desktopRuntime/resources/assets/minecraft/textures/gui/achievement/achievement_icons.png index 8c4ae796..5c73c5a5 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/achievement/achievement_icons.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/achievement/achievement_icons.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/anvil.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/anvil.png index 56b52e81..72d730f6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/anvil.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/anvil.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/beacon.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/beacon.png index 22bc4220..70506f06 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/beacon.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/beacon.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/brewing_stand.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/brewing_stand.png index 2111086e..26d93b5b 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/brewing_stand.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/brewing_stand.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/enchanting_table.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/enchanting_table.png index 68ad1cfe..8f5baaad 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/enchanting_table.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/enchanting_table.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/furnace.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/furnace.png index c69f0e40..a9319bb6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/furnace.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/furnace.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/container/hopper.png b/desktopRuntime/resources/assets/minecraft/textures/gui/container/hopper.png index d8b94f14..3c0aa2c1 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/container/hopper.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/container/hopper.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/icons.png b/desktopRuntime/resources/assets/minecraft/textures/gui/icons.png index 89d780f0..9b388bd6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/icons.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/icons.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/options_background.png b/desktopRuntime/resources/assets/minecraft/textures/gui/options_background.png index cae55280..13332eb8 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/options_background.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/options_background.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/chaos.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/chaos.png index 438d078c..ca04189a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/chaos.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/chaos.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/delight.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/delight.png index 296cb889..79951c51 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/delight.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/delight.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/drought.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/drought.png index b0d4f657..4ca0ecb7 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/drought.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/drought.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/isles.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/isles.png index 7503f6aa..d8cc9ba4 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/isles.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/isles.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/luck.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/luck.png index 26fac45b..a2de867f 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/luck.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/luck.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/madness.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/madness.png index b0851a9b..566499b2 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/madness.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/madness.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/water.png b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/water.png index 275b4cdc..adc7ad95 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/presets/water.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/presets/water.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/stream_indicator.png b/desktopRuntime/resources/assets/minecraft/textures/gui/stream_indicator.png index b426b7ef..c4425156 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/stream_indicator.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/stream_indicator.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt index 3c229751..0b077f69 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt +++ b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/enable_blur.txt @@ -1,2 +1,2 @@ -# Change to 0 to disable blur -enable_blur=0 \ No newline at end of file +# Change to 0 to disable blur +enable_blur=0 diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_0.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_0.png index 49420874..2040fff3 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_0.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_0.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_1.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_1.png index e753018a..bb1bd77c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_1.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_1.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_2.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_2.png index 1c7a7aca..dd98f8ac 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_2.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_2.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_3.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_3.png index 358d13d0..912dce4a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_3.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_3.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_4.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_4.png index f3840e08..eb5f162c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_4.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_4.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_5.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_5.png index 611957e0..2f56f77b 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_5.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/background/panorama_5.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/minecraft.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/minecraft.png index 65e4ae90..1a68d519 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/minecraft.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/minecraft.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/gui/title/mojang.png b/desktopRuntime/resources/assets/minecraft/textures/gui/title/mojang.png index f346b502..844d5880 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/gui/title/mojang.png and b/desktopRuntime/resources/assets/minecraft/textures/gui/title/mojang.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/items/clock.png b/desktopRuntime/resources/assets/minecraft/textures/items/clock.png index 3f8f3b73..3485f1bd 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/items/clock.png and b/desktopRuntime/resources/assets/minecraft/textures/items/clock.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/items/clock.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/items/clock.png.mcmeta index de3267f0..dd1bedb1 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/items/clock.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/items/clock.png.mcmeta @@ -1,3 +1,3 @@ -{ - "animation": {} -} \ No newline at end of file +{ + "animation": {} +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/items/compass.png b/desktopRuntime/resources/assets/minecraft/textures/items/compass.png index 953f3701..7b1995f0 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/items/compass.png and b/desktopRuntime/resources/assets/minecraft/textures/items/compass.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/items/compass.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/items/compass.png.mcmeta index de3267f0..dd1bedb1 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/items/compass.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/items/compass.png.mcmeta @@ -1,3 +1,3 @@ -{ - "animation": {} -} \ No newline at end of file +{ + "animation": {} +} diff --git a/desktopRuntime/resources/assets/minecraft/textures/items/reeds.png b/desktopRuntime/resources/assets/minecraft/textures/items/reeds.png index 58d70084..453e2a5c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/items/reeds.png and b/desktopRuntime/resources/assets/minecraft/textures/items/reeds.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/map/map_background.png b/desktopRuntime/resources/assets/minecraft/textures/map/map_background.png index 2783b501..af0fa696 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/map/map_background.png and b/desktopRuntime/resources/assets/minecraft/textures/map/map_background.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/map/map_icons.png b/desktopRuntime/resources/assets/minecraft/textures/map/map_icons.png index c2f35b85..9c734acb 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/map/map_icons.png and b/desktopRuntime/resources/assets/minecraft/textures/map/map_icons.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/enchanted_item_glint.png b/desktopRuntime/resources/assets/minecraft/textures/misc/enchanted_item_glint.png index ea78b86c..9c7f0637 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/misc/enchanted_item_glint.png and b/desktopRuntime/resources/assets/minecraft/textures/misc/enchanted_item_glint.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta index 2077f3ce..e38a5ad3 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta @@ -3,4 +3,3 @@ "blur": true } } - diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/shadow.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/misc/shadow.png.mcmeta index 8c6c7d1d..74c2c509 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/misc/shadow.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/misc/shadow.png.mcmeta @@ -3,4 +3,3 @@ "clamp": true } } - diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/unknown_server.png b/desktopRuntime/resources/assets/minecraft/textures/misc/unknown_server.png index ec98382d..819bc583 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/misc/unknown_server.png and b/desktopRuntime/resources/assets/minecraft/textures/misc/unknown_server.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png b/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png index 5c8e97f7..abb2018a 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png and b/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png.mcmeta b/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png.mcmeta index 2077f3ce..e38a5ad3 100644 --- a/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png.mcmeta +++ b/desktopRuntime/resources/assets/minecraft/textures/misc/vignette.png.mcmeta @@ -3,4 +3,3 @@ "blur": true } } - diff --git a/desktopRuntime/resources/assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png b/desktopRuntime/resources/assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png index 23415648..4fab9692 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png and b/desktopRuntime/resources/assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/particle/footprint.png b/desktopRuntime/resources/assets/minecraft/textures/particle/footprint.png index 8d23f64b..7e1f55a6 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/particle/footprint.png and b/desktopRuntime/resources/assets/minecraft/textures/particle/footprint.png differ diff --git a/desktopRuntime/resources/assets/minecraft/textures/particle/particles.png b/desktopRuntime/resources/assets/minecraft/textures/particle/particles.png index eec1f89e..1d9ea84c 100644 Binary files a/desktopRuntime/resources/assets/minecraft/textures/particle/particles.png and b/desktopRuntime/resources/assets/minecraft/textures/particle/particles.png differ diff --git a/desktopRuntime/resources/assets/starlike/blockstates/ancient_debris.json b/desktopRuntime/resources/assets/starlike/blockstates/ancient_debris.json index 522c0a92..2ab012b1 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/ancient_debris.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/ancient_debris.json @@ -1,7 +1,7 @@ { "variants": { - "normal": { - "model": "starlike:ancient_debris" - } + "normal": { + "model": "starlike:ancient_debris" + } } -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/andesite_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/andesite_bricks.json index 00922460..8f8a31ea 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/andesite_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/andesite_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:andesite_bricks" - } + "variants": { + "normal": { + "model": "starlike:andesite_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/andesite_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/andesite_tiles.json index 1c783e41..1c1225b7 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/andesite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/andesite_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:andesite_tiles" - } + "variants": { + "normal": { + "model": "starlike:andesite_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/black_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/black_glazed_terracotta.json index 81de01fa..a60b8061 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/black_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/black_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:black_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:black_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/black_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/black_packed_terracotta.json index 40c2c3ba..3d882a25 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/black_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/black_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:black_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:black_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/black_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/black_planks.json index 7b93dbdb..8f6bb7b1 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/black_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/black_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:black_planks" - } + "variants": { + "normal": { + "model": "starlike:black_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/black_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/black_terracotta_bricks.json index 4bdd2a15..f299fff9 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/black_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/black_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:black_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:black_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/blackstone.json b/desktopRuntime/resources/assets/starlike/blockstates/blackstone.json index df54310e..b2c11ad5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/blackstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/blackstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:blackstone" - } + "variants": { + "normal": { + "model": "starlike:blackstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/blue_glazed_terracotta.json index 9298e1c1..5bc197b7 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/blue_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:blue_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:blue_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/blue_packed_terracotta.json index 1a01ca8a..c409a17e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/blue_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:blue_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:blue_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/blue_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/blue_planks.json index d1a76ebd..5a791ecf 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/blue_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:blue_planks" - } + "variants": { + "normal": { + "model": "starlike:blue_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/blue_terracotta_bricks.json index 79d7b3fe..cd6f7e13 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/blue_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:blue_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:blue_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/brown_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/brown_glazed_terracotta.json index 8c208865..bc074f58 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/brown_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/brown_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:brown_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:brown_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/brown_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/brown_packed_terracotta.json index 3517ff81..c49d439a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/brown_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/brown_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:brown_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:brown_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/brown_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/brown_planks.json index 4b7d99de..af5cdc15 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/brown_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/brown_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:brown_planks" - } + "variants": { + "normal": { + "model": "starlike:brown_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/brown_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/brown_terracotta_bricks.json index 2a249f8c..6a473205 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/brown_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/brown_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:brown_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:brown_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/calcite.json b/desktopRuntime/resources/assets/starlike/blockstates/calcite.json index efb946f1..0d34d520 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/calcite.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/calcite.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:calcite" - } + "variants": { + "normal": { + "model": "starlike:calcite" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/calcite_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/calcite_tiles.json index b3f96e22..0ac4ce9f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/calcite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/calcite_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:calcite_tiles" - } + "variants": { + "normal": { + "model": "starlike:calcite_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_acacia_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_acacia_planks.json index fb767002..ce898d2c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_acacia_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_acacia_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_acacia_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_bamboo_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_bamboo_planks.json index 59c7dd96..961c55dc 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_bamboo_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_bamboo_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_bamboo_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_bamboo_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_birch_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_birch_planks.json index c9b900a7..76a629d8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_birch_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_birch_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_birch_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_cherry_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_cherry_planks.json index 7e740061..74bf8934 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_cherry_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_cherry_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_cherry_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_cherry_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_copper.json index 8f6c678b..11e3e97e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_copper" - } + "variants": { + "normal": { + "model": "starlike:chiseled_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_crimson_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_crimson_planks.json index 010ea82f..43d47789 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_crimson_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_crimson_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_crimson_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_crimson_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_dark_oak_planks.json index f45310b6..7b1e9184 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_dark_oak_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_dark_oak_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_dark_oak_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_deep_ocean_bricks.json index f1b20090..2b00cea4 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_deep_ocean_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_deep_ocean_bricks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_deep_ocean_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_jungle_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_jungle_planks.json index 704af82c..1132bcdc 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_jungle_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_jungle_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_jungle_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_mangrove_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_mangrove_planks.json index 7445bf50..adfa0853 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_mangrove_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_mangrove_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_mangrove_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_mangrove_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_oak_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_oak_planks.json index c39af794..46a7da95 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_oak_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_oak_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_oak_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_polished_blackstone.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_polished_blackstone.json index f1fa5f49..a188f3b9 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_polished_blackstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_polished_blackstone" - } + "variants": { + "normal": { + "model": "starlike:chiseled_polished_blackstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_spruce_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_spruce_planks.json index bc0c1d8a..a9432b7b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_spruce_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_spruce_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_spruce_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff.json index 519ea4f7..b8d26e53 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_tuff" - } + "variants": { + "normal": { + "model": "starlike:chiseled_tuff" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_bricks.json index 940dbaf3..16ca8e3a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_tuff_bricks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_tuff_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_top.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_top.json index 9e26f740..1ee5f7a2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_top.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_tuff_top.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_tuff_top" - } + "variants": { + "normal": { + "model": "starlike:chiseled_tuff_top" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_warped_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_warped_planks.json index 08da0565..4759eba6 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/chiseled_warped_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/chiseled_warped_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:chiseled_warped_planks" - } + "variants": { + "normal": { + "model": "starlike:chiseled_warped_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_andesite.json b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_andesite.json index 3cf63494..5ecfc3d3 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_andesite.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_andesite.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cobbled_andesite" - } + "variants": { + "normal": { + "model": "starlike:cobbled_andesite" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_deepslate.json b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_deepslate.json index f45b83c2..cb0a3cac 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_deepslate.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:cobbled_deepslate" } - } + "variants": { + "normal": { "model": "starlike:cobbled_deepslate" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_diorite.json b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_diorite.json index 7da9a9fb..97c25e9f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_diorite.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_diorite.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cobbled_diorite" - } + "variants": { + "normal": { + "model": "starlike:cobbled_diorite" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_granite.json b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_granite.json index 3c8961c8..f33bc36b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_granite.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_granite.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cobbled_granite" - } + "variants": { + "normal": { + "model": "starlike:cobbled_granite" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_soul_stone.json b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_soul_stone.json index 4bca40b9..eef30e49 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cobbled_soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cobbled_soul_stone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cobbled_soul_stone" - } + "variants": { + "normal": { + "model": "starlike:cobbled_soul_stone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/copper.json b/desktopRuntime/resources/assets/starlike/blockstates/copper.json index 2598c86d..6b89f202 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:copper" - } + "variants": { + "normal": { + "model": "starlike:copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/copper_block.json b/desktopRuntime/resources/assets/starlike/blockstates/copper_block.json index e9a22369..18740fd4 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/copper_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/copper_block.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:copper_block" - } + "variants": { + "normal": { + "model": "starlike:copper_block" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/copper_grate.json b/desktopRuntime/resources/assets/starlike/blockstates/copper_grate.json index 2cce5139..bccf0558 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/copper_grate.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:copper_grate" - } + "variants": { + "normal": { + "model": "starlike:copper_grate" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/copper_ore.json b/desktopRuntime/resources/assets/starlike/blockstates/copper_ore.json index 4c74a9fd..47107508 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/copper_ore.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:copper_ore" - } + "variants": { + "normal": { + "model": "starlike:copper_ore" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cracked_blackstone.json b/desktopRuntime/resources/assets/starlike/blockstates/cracked_blackstone.json index 82c06664..08a68956 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cracked_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cracked_blackstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cracked_blackstone" - } + "variants": { + "normal": { + "model": "starlike:cracked_blackstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cracked_polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/cracked_polished_blackstone_bricks.json index ff30c3af..8306abbf 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cracked_polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cracked_polished_blackstone_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cracked_polished_blackstone_bricks" - } + "variants": { + "normal": { + "model": "starlike:cracked_polished_blackstone_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/creeper_chiseled_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/creeper_chiseled_sandstone.json index 962ecc7b..bbdb6b60 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/creeper_chiseled_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/creeper_chiseled_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:creeper_chiseled_sandstone" - } + "variants": { + "normal": { + "model": "starlike:creeper_chiseled_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cut_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/cut_copper.json index d9d2d6d2..8c10db63 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cut_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cut_copper" - } + "variants": { + "normal": { + "model": "starlike:cut_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cyan_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/cyan_glazed_terracotta.json index a8bd55f5..d3b0c8ff 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cyan_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cyan_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cyan_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:cyan_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cyan_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/cyan_packed_terracotta.json index 7305d62f..1599ca03 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cyan_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cyan_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cyan_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:cyan_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cyan_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/cyan_planks.json index 9ef46ebe..abe8d14d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cyan_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cyan_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cyan_planks" - } + "variants": { + "normal": { + "model": "starlike:cyan_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/cyan_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/cyan_terracotta_bricks.json index 5273fdb7..36047626 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/cyan_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/cyan_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:cyan_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:cyan_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_log.json index 522f2f1c..2db3c5ac 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_acacia_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_acacia_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_planks.json index acbbcd7f..90a5b81c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_acacia_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_acacia_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_acacia_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_log.json index 6757803f..8aaf682d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_birch_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_birch_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_planks.json index b48a54c4..754bb7d5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_birch_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_birch_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_birch_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_log.json index e44f5691..6f2c8628 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_dark_oak_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_dark_oak_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_planks.json index 08132c2e..c689f94c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_dark_oak_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_dark_oak_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_dark_oak_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_log.json index 50893201..9e7a9ffa 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_jungle_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_jungle_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_planks.json index 5809cefc..a76340c9 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_jungle_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_jungle_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_jungle_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_log.json index d6e95a58..2fdcf2ac 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_oak_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_oak_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_planks.json index 7543bb3d..5c4535e5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_oak_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_oak_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_oak_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_red_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_red_sandstone.json index d5dfa8a6..307b324c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_red_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_red_sandstone" - } + "variants": { + "normal": { + "model": "starlike:decorated_red_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_sandstone.json index 07434a47..aace16c6 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_sandstone" - } + "variants": { + "normal": { + "model": "starlike:decorated_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_log.json index ae5eb50d..69e4c946 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_spruce_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_spruce_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_planks.json index 30bf43e6..ebccef68 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_spruce_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_spruce_planks" - } + "variants": { + "normal": { + "model": "starlike:decorated_spruce_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_acacia_log.json index 757d3673..c83d14f9 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_acacia_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_acacia_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_acacia_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_birch_log.json index eaf60500..d4db4615 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_birch_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_birch_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_birch_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_dark_oak_log.json index f90f7c0c..1601cba8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_dark_oak_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_dark_oak_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_dark_oak_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_jungle_log.json index 5bfb2178..3cf312d5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_jungle_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_jungle_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_jungle_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_oak_log.json index 78e44df7..e24b634e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_oak_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_oak_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_oak_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_spruce_log.json index 75f3671d..ed9493d0 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/decorated_stripped_spruce_log.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:decorated_stripped_spruce_log" - } + "variants": { + "normal": { + "model": "starlike:decorated_stripped_spruce_log" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/deep_ocean_bricks.json index 43b1aa20..3cef9998 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/deep_ocean_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:deep_ocean_bricks" - } + "variants": { + "normal": { + "model": "starlike:deep_ocean_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/deepslate.json b/desktopRuntime/resources/assets/starlike/blockstates/deepslate.json index d40b3b82..527c8857 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/deepslate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/deepslate.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:deepslate" } - } + "variants": { + "normal": { "model": "starlike:deepslate" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/deepslate_copper_ore.json b/desktopRuntime/resources/assets/starlike/blockstates/deepslate_copper_ore.json index fca2361d..21ea209f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/deepslate_copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/deepslate_copper_ore.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:deepslate_copper_ore" - } + "variants": { + "normal": { + "model": "starlike:deepslate_copper_ore" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/diorite_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/diorite_tiles.json index 3d370216..ccc33799 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/diorite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/diorite_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:diorite_tiles" - } + "variants": { + "normal": { + "model": "starlike:diorite_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/dirt_path.json b/desktopRuntime/resources/assets/starlike/blockstates/dirt_path.json new file mode 100644 index 00000000..7b9fcc79 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/dirt_path.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:dirt_path" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/dragonite_block.json b/desktopRuntime/resources/assets/starlike/blockstates/dragonite_block.json index 7dc03986..195c0e80 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/dragonite_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/dragonite_block.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:dragonite_block" } - } + "variants": { + "normal": { "model": "starlike:dragonite_block" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/exposed_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/exposed_chiseled_copper.json index 11e69d9e..7bed6383 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/exposed_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/exposed_chiseled_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:exposed_chiseled_copper" - } + "variants": { + "normal": { + "model": "starlike:exposed_chiseled_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper.json index b9cfe289..e288ac91 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:exposed_copper" - } + "variants": { + "normal": { + "model": "starlike:exposed_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper_grate.json b/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper_grate.json index d88c64fd..8cfe59d1 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/exposed_copper_grate.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:exposed_copper_grate" - } + "variants": { + "normal": { + "model": "starlike:exposed_copper_grate" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/exposed_cut_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/exposed_cut_copper.json index c6472882..a9849bc8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/exposed_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/exposed_cut_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:exposed_cut_copper" - } + "variants": { + "normal": { + "model": "starlike:exposed_cut_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/fabricator.json b/desktopRuntime/resources/assets/starlike/blockstates/fabricator.json index 0c51044b..fd05f1ab 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/fabricator.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/fabricator.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:fabricator" } - } + "variants": { + "normal": { "model": "starlike:fabricator" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/ghast_chiseled_quartz_block.json b/desktopRuntime/resources/assets/starlike/blockstates/ghast_chiseled_quartz_block.json index 7939918d..972e2da6 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/ghast_chiseled_quartz_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/ghast_chiseled_quartz_block.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:ghast_chiseled_quartz_block" - } + "variants": { + "normal": { + "model": "starlike:ghast_chiseled_quartz_block" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gilded_blackstone.json b/desktopRuntime/resources/assets/starlike/blockstates/gilded_blackstone.json index 1a536c02..4bf12251 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gilded_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gilded_blackstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gilded_blackstone" - } + "variants": { + "normal": { + "model": "starlike:gilded_blackstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gold_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/gold_tiles.json index 25b1951a..2dbf6b57 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gold_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gold_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gold_tiles" - } + "variants": { + "normal": { + "model": "starlike:gold_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/gray_glazed_terracotta.json index 26399411..91a8d3d2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gray_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gray_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:gray_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/gray_packed_terracotta.json index ad52bccf..b74055f2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gray_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gray_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:gray_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gray_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/gray_planks.json index 012e0d02..cd041a8f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gray_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gray_planks" - } + "variants": { + "normal": { + "model": "starlike:gray_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/gray_terracotta_bricks.json index ecfd2a85..14121e2b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/gray_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:gray_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:gray_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/green_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/green_glazed_terracotta.json index ce25d352..55d5c33a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/green_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/green_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:green_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:green_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/green_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/green_packed_terracotta.json index 68794f77..4227aa49 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/green_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/green_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:green_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:green_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/green_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/green_planks.json index 3169f742..8da5884b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/green_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/green_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:green_planks" - } + "variants": { + "normal": { + "model": "starlike:green_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/green_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/green_terracotta_bricks.json index 298a6ac2..45a60d59 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/green_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/green_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:green_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:green_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/head_chiseled_deepslate.json b/desktopRuntime/resources/assets/starlike/blockstates/head_chiseled_deepslate.json index 336def92..4a4f5c2c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/head_chiseled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/head_chiseled_deepslate.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:head_chiseled_deepslate" - } + "variants": { + "normal": { + "model": "starlike:head_chiseled_deepslate" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_glazed_terracotta.json index 70d7ba50..326d2564 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_blue_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:light_blue_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_packed_terracotta.json index d158d263..c10f7a49 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_blue_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:light_blue_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_planks.json index d60eab64..b2ae6782 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_blue_planks" - } + "variants": { + "normal": { + "model": "starlike:light_blue_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_terracotta_bricks.json index b70bc18f..324a3009 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_blue_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_blue_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:light_blue_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_glazed_terracotta.json index 567ee9d9..da97fd92 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_gray_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:light_gray_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_packed_terracotta.json index 029089d1..becd0cc5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_gray_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:light_gray_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_planks.json index 59c80207..b2c7ba7e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_gray_planks" - } + "variants": { + "normal": { + "model": "starlike:light_gray_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_terracotta_bricks.json index 13cd8433..3b941d6a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/light_gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/light_gray_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:light_gray_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:light_gray_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/lime_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/lime_glazed_terracotta.json index aa1984b3..5f60ef7a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/lime_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/lime_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:lime_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:lime_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/lime_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/lime_packed_terracotta.json index 543ec12d..40c9e274 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/lime_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/lime_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:lime_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:lime_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/lime_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/lime_planks.json index df33d427..4beda3ec 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/lime_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/lime_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:lime_planks" - } + "variants": { + "normal": { + "model": "starlike:lime_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/lime_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/lime_terracotta_bricks.json index c5e91e1d..4a60b9a8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/lime_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/lime_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:lime_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:lime_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/limestone.json b/desktopRuntime/resources/assets/starlike/blockstates/limestone.json index 11f0ee80..7cbcfae2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/limestone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/limestone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:limestone" - } + "variants": { + "normal": { + "model": "starlike:limestone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/limestone_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/limestone_tiles.json index 1d902dae..cf5437c3 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/limestone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/limestone_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:limestone_tiles" - } + "variants": { + "normal": { + "model": "starlike:limestone_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/magenta_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/magenta_glazed_terracotta.json index 3a50fb42..34f98550 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/magenta_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/magenta_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:magenta_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:magenta_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/magenta_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/magenta_packed_terracotta.json index d40b88d3..5b5d547e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/magenta_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/magenta_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:magenta_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:magenta_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/magenta_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/magenta_planks.json index 535cdf29..a306d85d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/magenta_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/magenta_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:magenta_planks" - } + "variants": { + "normal": { + "model": "starlike:magenta_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/magenta_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/magenta_terracotta_bricks.json index 55e42ead..25a6ce1b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/magenta_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/magenta_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:magenta_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:magenta_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/mosaic.json b/desktopRuntime/resources/assets/starlike/blockstates/mosaic.json index a6fbaf2b..cb8d3758 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/mosaic.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/mosaic.json @@ -1,10 +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" } - } -} \ No newline at end of file + "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" } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/netherite_block.json b/desktopRuntime/resources/assets/starlike/blockstates/netherite_block.json index bf147db3..e0aae1a6 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/netherite_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/netherite_block.json @@ -1,7 +1,7 @@ { "variants": { - "normal": { - "model": "starlike:netherite_block" - } + "normal": { + "model": "starlike:netherite_block" + } } -} \ No newline at end of file +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/orange_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/orange_glazed_terracotta.json index cde16830..356daf61 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/orange_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/orange_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:orange_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:orange_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/orange_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/orange_packed_terracotta.json index 43d7e034..201c9370 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/orange_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/orange_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:orange_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:orange_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/orange_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/orange_planks.json index 106beedc..b74f39ca 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/orange_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/orange_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:orange_planks" - } + "variants": { + "normal": { + "model": "starlike:orange_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/orange_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/orange_terracotta_bricks.json index 91ebf762..e294a2c4 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/orange_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/orange_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:orange_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:orange_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/ornate_red_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/ornate_red_sandstone.json index f39402aa..3aeec999 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/ornate_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/ornate_red_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:ornate_red_sandstone" - } + "variants": { + "normal": { + "model": "starlike:ornate_red_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/ornate_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/ornate_sandstone.json index 4a7716e2..f20d5996 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/ornate_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/ornate_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:ornate_sandstone" - } + "variants": { + "normal": { + "model": "starlike:ornate_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_chiseled_copper.json index 063cc9da..f462a721 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_chiseled_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:oxidized_chiseled_copper" - } + "variants": { + "normal": { + "model": "starlike:oxidized_chiseled_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper.json index 67ef0905..b36dbf66 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:oxidized_copper" - } + "variants": { + "normal": { + "model": "starlike:oxidized_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper_grate.json b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper_grate.json index 4bd00395..a755565b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_copper_grate.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:oxidized_copper_grate" - } + "variants": { + "normal": { + "model": "starlike:oxidized_copper_grate" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_cut_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_cut_copper.json index 127d69e2..5c8da51d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/oxidized_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/oxidized_cut_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:oxidized_cut_copper" - } + "variants": { + "normal": { + "model": "starlike:oxidized_cut_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/packed_terracotta.json index 0853d8eb..16b1e4e9 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/pink_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/pink_glazed_terracotta.json index 237cbff1..ce73e974 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/pink_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/pink_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:pink_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:pink_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/pink_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/pink_packed_terracotta.json index 2a95ba19..543b7278 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/pink_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/pink_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:pink_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:pink_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/pink_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/pink_planks.json index bea706e2..a26c773f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/pink_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/pink_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:pink_planks" - } + "variants": { + "normal": { + "model": "starlike:pink_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/pink_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/pink_terracotta_bricks.json index 07db8b6e..461e7e76 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/pink_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/pink_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:pink_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:pink_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/platinum_block.json b/desktopRuntime/resources/assets/starlike/blockstates/platinum_block.json index 258c5ec2..208a4ad0 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/platinum_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/platinum_block.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:platinum_block" } - } + "variants": { + "normal": { "model": "starlike:platinum_block" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/platinum_ore.json b/desktopRuntime/resources/assets/starlike/blockstates/platinum_ore.json index ee83487a..435b1e25 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/platinum_ore.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/platinum_ore.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:platinum_ore" } - } + "variants": { + "normal": { "model": "starlike:platinum_ore" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_andesite_brick.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_andesite_brick.json index 3b7189a2..ea7f5fac 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_andesite_brick.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_andesite_brick.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_andesite_brick" - } + "variants": { + "normal": { + "model": "starlike:polished_andesite_brick" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone.json index 84e9aa72..ba49799d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_blackstone" - } + "variants": { + "normal": { + "model": "starlike:polished_blackstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone_bricks.json index e6955a44..fbceb41e 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_blackstone_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_blackstone_bricks" - } + "variants": { + "normal": { + "model": "starlike:polished_blackstone_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_diorite_brick.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_diorite_brick.json index 59125721..7d5253eb 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_diorite_brick.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_diorite_brick.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_diorite_brick" - } + "variants": { + "normal": { + "model": "starlike:polished_diorite_brick" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_granite_brick.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_granite_brick.json index e314ee7e..27284f36 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_granite_brick.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_granite_brick.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_granite_brick" - } + "variants": { + "normal": { + "model": "starlike:polished_granite_brick" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/polished_tuff.json b/desktopRuntime/resources/assets/starlike/blockstates/polished_tuff.json index 25ead49f..53ce5073 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/polished_tuff.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/polished_tuff.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:polished_tuff" - } + "variants": { + "normal": { + "model": "starlike:polished_tuff" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/purple_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/purple_glazed_terracotta.json index 6c37fe20..8acd28fa 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/purple_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/purple_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:purple_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:purple_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/purple_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/purple_packed_terracotta.json index 1074b2d7..e1249faf 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/purple_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/purple_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:purple_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:purple_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/purple_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/purple_planks.json index 4d8570aa..f18c7357 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/purple_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/purple_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:purple_planks" - } + "variants": { + "normal": { + "model": "starlike:purple_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/purple_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/purple_terracotta_bricks.json index 7c1f9ee2..983e7d13 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/purple_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/purple_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:purple_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:purple_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/raw_copper_block.json b/desktopRuntime/resources/assets/starlike/blockstates/raw_copper_block.json index cf20eb81..1374b4f5 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/raw_copper_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/raw_copper_block.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:raw_copper_block" - } + "variants": { + "normal": { + "model": "starlike:raw_copper_block" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/red_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/red_glazed_terracotta.json index 2cc2bb2e..c5e55609 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/red_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/red_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:red_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:red_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/red_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/red_packed_terracotta.json index 1357e7ba..8e40a807 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/red_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/red_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:red_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:red_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/red_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/red_planks.json index 1a34e448..0446098a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/red_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/red_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:red_planks" - } + "variants": { + "normal": { + "model": "starlike:red_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/red_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/red_terracotta_bricks.json index 138f56c8..f175e744 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/red_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/red_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:red_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:red_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/skeleton_chiseled_red_sandstone.json b/desktopRuntime/resources/assets/starlike/blockstates/skeleton_chiseled_red_sandstone.json index 97190ed6..dea5f710 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/skeleton_chiseled_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/skeleton_chiseled_red_sandstone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:skeleton_chiseled_red_sandstone" - } + "variants": { + "normal": { + "model": "starlike:skeleton_chiseled_red_sandstone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/smithing_table.json b/desktopRuntime/resources/assets/starlike/blockstates/smithing_table.json index 9efa7e94..d5da7e2d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/smithing_table.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/smithing_table.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:smithing_table" } - } + "variants": { + "normal": { "model": "starlike:smithing_table" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/smooth_basalt.json b/desktopRuntime/resources/assets/starlike/blockstates/smooth_basalt.json index 9c152f0f..b74e3558 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/smooth_basalt.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/smooth_basalt.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:smooth_basalt" - } + "variants": { + "normal": { + "model": "starlike:smooth_basalt" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/soul_stone.json b/desktopRuntime/resources/assets/starlike/blockstates/soul_stone.json index c96c1e7a..0d727677 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/soul_stone.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:soul_stone" - } + "variants": { + "normal": { + "model": "starlike:soul_stone" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/soul_stone_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/soul_stone_tiles.json index b0068663..d8066d49 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/soul_stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/soul_stone_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:soul_stone_tiles" - } + "variants": { + "normal": { + "model": "starlike:soul_stone_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/steel_block.json b/desktopRuntime/resources/assets/starlike/blockstates/steel_block.json index 273a255c..17663efc 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/steel_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/steel_block.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:steel_block" } - } + "variants": { + "normal": { "model": "starlike:steel_block" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/steel_grate.json b/desktopRuntime/resources/assets/starlike/blockstates/steel_grate.json index 1d37872a..f888e29a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/steel_grate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/steel_grate.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:steel_grate" } - } + "variants": { + "normal": { "model": "starlike:steel_grate" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stone_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/stone_tiles.json index 4e3aaa47..17a7d6b8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/stone_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:stone_tiles" - } + "variants": { + "normal": { + "model": "starlike:stone_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_acacia_log.json new file mode 100644 index 00000000..bb788021 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_acacia_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_acacia_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_birch_log.json new file mode 100644 index 00000000..57080660 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_birch_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_birch_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_dark_oak_log.json new file mode 100644 index 00000000..ba5a531c --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_dark_oak_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_dark_oak_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_jungle_log.json new file mode 100644 index 00000000..2eca17bd --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_jungle_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_jungle_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_oak_log.json new file mode 100644 index 00000000..9f68f6b2 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_oak_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_oak_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/blockstates/stripped_spruce_log.json new file mode 100644 index 00000000..dbc01d64 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/blockstates/stripped_spruce_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { + "model": "starlike:stripped_spruce_log" + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/terracotta_bricks.json index 26cff960..936c404d 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/titanium_block.json b/desktopRuntime/resources/assets/starlike/blockstates/titanium_block.json index bfcfe0fd..c1ffa4fb 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/titanium_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/titanium_block.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:titanium_block" } - } + "variants": { + "normal": { "model": "starlike:titanium_block" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/titanium_ore.json b/desktopRuntime/resources/assets/starlike/blockstates/titanium_ore.json index 4e6f40b1..887fe415 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/titanium_ore.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/titanium_ore.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:titanium_ore" } - } + "variants": { + "normal": { "model": "starlike:titanium_ore" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/tuff.json b/desktopRuntime/resources/assets/starlike/blockstates/tuff.json index f3824059..65dc6c04 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/tuff.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/tuff.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:tuff" - } + "variants": { + "normal": { + "model": "starlike:tuff" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/tuff_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/tuff_bricks.json index 7c90c2cb..369df730 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/tuff_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:tuff_bricks" - } + "variants": { + "normal": { + "model": "starlike:tuff_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/tuff_tiles.json b/desktopRuntime/resources/assets/starlike/blockstates/tuff_tiles.json index 7cbd1f9b..fb4bb06a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/tuff_tiles.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/tuff_tiles.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:tuff_tiles" - } + "variants": { + "normal": { + "model": "starlike:tuff_tiles" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/uranium_block.json b/desktopRuntime/resources/assets/starlike/blockstates/uranium_block.json index 12a7a026..35dc8e76 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/uranium_block.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/uranium_block.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:uranium_block" } - } + "variants": { + "normal": { "model": "starlike:uranium_block" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/uranium_ore.json b/desktopRuntime/resources/assets/starlike/blockstates/uranium_ore.json index cbadb9d8..d0096e5a 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/uranium_ore.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/uranium_ore.json @@ -1,5 +1,5 @@ { - "variants": { - "normal": { "model": "starlike:uranium_ore" } - } + "variants": { + "normal": { "model": "starlike:uranium_ore" } + } } diff --git a/desktopRuntime/resources/assets/starlike/blockstates/weathered_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/weathered_chiseled_copper.json index ac6ba489..eec65ee0 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/weathered_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/weathered_chiseled_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:weathered_chiseled_copper" - } + "variants": { + "normal": { + "model": "starlike:weathered_chiseled_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper.json index 100e0f65..8d1e49d8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:weathered_copper" - } + "variants": { + "normal": { + "model": "starlike:weathered_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper_grate.json b/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper_grate.json index 14ff41bd..cae92df8 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/weathered_copper_grate.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:weathered_copper_grate" - } + "variants": { + "normal": { + "model": "starlike:weathered_copper_grate" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/weathered_cut_copper.json b/desktopRuntime/resources/assets/starlike/blockstates/weathered_cut_copper.json index 0598a137..05af1b87 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/weathered_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/weathered_cut_copper.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:weathered_cut_copper" - } + "variants": { + "normal": { + "model": "starlike:weathered_cut_copper" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/white_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/white_glazed_terracotta.json index 3e4e920c..c1d9be9b 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/white_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/white_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:white_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:white_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/white_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/white_packed_terracotta.json index 15b4ac91..cb751f8f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/white_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/white_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:white_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:white_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/white_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/white_planks.json index e9b6ae58..ee262701 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/white_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/white_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:white_planks" - } + "variants": { + "normal": { + "model": "starlike:white_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/white_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/white_terracotta_bricks.json index 77391aff..978d4ee2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/white_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/white_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:white_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:white_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/yellow_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/yellow_glazed_terracotta.json index 5418eeff..92d97d1c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/yellow_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/yellow_glazed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:yellow_glazed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:yellow_glazed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/yellow_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/blockstates/yellow_packed_terracotta.json index 538e96b2..fca1268c 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/yellow_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/yellow_packed_terracotta.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:yellow_packed_terracotta" - } + "variants": { + "normal": { + "model": "starlike:yellow_packed_terracotta" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/yellow_planks.json b/desktopRuntime/resources/assets/starlike/blockstates/yellow_planks.json index 3908f3b2..f2bbe92f 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/yellow_planks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/yellow_planks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:yellow_planks" - } + "variants": { + "normal": { + "model": "starlike:yellow_planks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/yellow_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/yellow_terracotta_bricks.json index 1c83f462..028d62c2 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/yellow_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/yellow_terracotta_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:yellow_terracotta_bricks" - } + "variants": { + "normal": { + "model": "starlike:yellow_terracotta_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/blockstates/zombie_chiseled_stone_bricks.json b/desktopRuntime/resources/assets/starlike/blockstates/zombie_chiseled_stone_bricks.json index 4744ad62..347891ac 100644 --- a/desktopRuntime/resources/assets/starlike/blockstates/zombie_chiseled_stone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/blockstates/zombie_chiseled_stone_bricks.json @@ -1,7 +1,7 @@ { - "variants": { - "normal": { - "model": "starlike:zombie_chiseled_stone_bricks" - } + "variants": { + "normal": { + "model": "starlike:zombie_chiseled_stone_bricks" } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/lang/en_US.lang b/desktopRuntime/resources/assets/starlike/lang/en_US.lang index 75d7e287..fd547f64 100644 --- a/desktopRuntime/resources/assets/starlike/lang/en_US.lang +++ b/desktopRuntime/resources/assets/starlike/lang/en_US.lang @@ -1,3 +1,6 @@ +starlike.welcomeMsg=Welcome to Starlike Client! Click here to view the wiki for guides, recipes, and more! +starlike.welcomeMsgHover=Click to open the wiki + itemGroup.starlike=Starlike enchantment.level.11=XI @@ -27,6 +30,7 @@ commands.gm.usage=/gm%s [player] entity.NetherCreeper.name=Nether Creeper entity.EndCreeper.name=End Creeper +entity.Watcher.name=Watcher tile.deepslate.name=Deepslate tile.cobbled_deepslate.name=Cobbled Deepslate @@ -45,6 +49,10 @@ item.netherite_chestplate.name=Netherite Chestplate item.netherite_leggings.name=Netherite Leggings item.netherite_boots.name=Netherite Boots +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 @@ -68,14 +76,12 @@ item.uranium_crystal.name=Uranium Crystal item.uranium_rod.name=Uranium Rod item.dragonite.name=Dragonite +item.dragonite_shard.name=Dragonite Shard tile.dragonite_block.name=Dragonite Block item.platinum_drill.name=Platinum Drill item.titanium_drill.name=Titanium Drill -item.steel.name=Steel -tile.steel_block.name=Steel Block -tile.steel_grate.name=Steel Grate item.chisel.name=Chisel tile.mosaic.name=Mosaic @@ -86,9 +92,20 @@ tile.mosaic.jungle.name=Jungle Mosaic tile.mosaic.acacia.name=Acacia Mosaic tile.mosaic.dark_oak.name=Dark Oak Mosaic +container.smithing=Smithing tile.smithing_table.name=Smithing Table + +item.leather_backpack.name=Leather Backpack +item.iron_backpack.name=Steel Backpack +item.diamond_backpack.name=Diamond Backpack +item.ender_backpack.name=Ender Backpack + +container.fabricator=Fabricator tile.fabricator.name=Fabricator +item.amber.name=Amber +item.ambered_bow.name=Ambered Bow + tile.andesite_tiles.name=Andesite Tiles tile.chiseled_deep_ocean_bricks.name=Chiseled Deep Ocean Bricks tile.decorated_acacia_log.name=Decorated Acacia Log @@ -250,3 +267,16 @@ tile.smooth_basalt.name=Smooth Basalt tile.soul_stone.name=Soul Stone tile.soul_stone_tiles.name=Soul Stone Tiles tile.tuff_tiles.name=Tuff Tiles +tile.dirt_path.name=Dirt path +tile.stripped_acacia_log.name=Stripped acacia log +tile.stripped_birch_log.name=Stripped birch log +tile.stripped_dark_oak_log.name=Stripped dark oak log +tile.stripped_jungle_log.name=Stripped jungle log +tile.stripped_oak_log.name=Stripped oak log +tile.stripped_spruce_log.name=Stripped spruce log +tile.stripped_acacia_log.name=Stripped acacia log +tile.stripped_birch_log.name=Stripped birch log +tile.stripped_dark_oak_log.name=Stripped dark oak log +tile.stripped_jungle_log.name=Stripped jungle log +tile.stripped_oak_log.name=Stripped oak log +tile.stripped_spruce_log.name=Stripped spruce log diff --git a/desktopRuntime/resources/assets/starlike/models/block/acacia_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/acacia_mosaic.json index 536e3243..00ddc764 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/acacia_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/acacia_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/acacia_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/acacia_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/ancient_debris.json b/desktopRuntime/resources/assets/starlike/models/block/ancient_debris.json index ff8e7705..f8d9cacc 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/ancient_debris.json +++ b/desktopRuntime/resources/assets/starlike/models/block/ancient_debris.json @@ -1,7 +1,7 @@ { - "parent": "block/cube_column", - "textures": { - "end": "starlike:blocks/ancient_debris_top", - "side": "starlike:blocks/ancient_debris_side" - } + "parent": "block/cube_column", + "textures": { + "end": "starlike:blocks/ancient_debris_top", + "side": "starlike:blocks/ancient_debris_side" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/andesite_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/andesite_bricks.json index b75b87fa..c0540e81 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/andesite_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/andesite_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/andesite_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/andesite_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/andesite_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/andesite_tiles.json index 4b2a0d69..bae95011 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/andesite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/andesite_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/andesite_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/andesite_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/birch_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/birch_mosaic.json index 704be25b..9d5c1fac 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/birch_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/birch_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/birch_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/birch_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/black_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/black_glazed_terracotta.json index f05339b2..09c7a791 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/black_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/black_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/black_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/black_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/black_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/black_packed_terracotta.json index db89fa17..28544d13 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/black_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/black_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/black_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/black_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/black_planks.json b/desktopRuntime/resources/assets/starlike/models/block/black_planks.json index 10ad746b..9ced67c9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/black_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/black_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/black_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/black_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/black_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/black_terracotta_bricks.json index 78993114..98ecd792 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/black_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/black_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/black_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/black_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/blue_glazed_terracotta.json index e275e5b6..1fc464c3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/blue_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/blue_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/blue_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/blue_packed_terracotta.json index 613e57de..b713c7c9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/blue_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/blue_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/blue_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/blue_planks.json b/desktopRuntime/resources/assets/starlike/models/block/blue_planks.json index f208c0e2..6f1e7997 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/blue_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/blue_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/blue_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/blue_terracotta_bricks.json index fa01e9a5..4a65cd24 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/blue_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/blue_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/blue_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/brown_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/brown_glazed_terracotta.json index 27bce386..d5ac6813 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/brown_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/brown_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/brown_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/brown_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/brown_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/brown_packed_terracotta.json index 3ef86563..94a243a9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/brown_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/brown_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/brown_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/brown_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/brown_planks.json b/desktopRuntime/resources/assets/starlike/models/block/brown_planks.json index fc4b99fe..ced77b71 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/brown_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/brown_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/brown_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/brown_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/brown_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/brown_terracotta_bricks.json index aaa62392..427d5522 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/brown_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/brown_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/brown_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/brown_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/calcite.json b/desktopRuntime/resources/assets/starlike/models/block/calcite.json index bcc84bd5..7ca3f913 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/calcite.json +++ b/desktopRuntime/resources/assets/starlike/models/block/calcite.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/calcite" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/calcite" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/calcite_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/calcite_tiles.json index 429ddcb8..3cb4bea7 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/calcite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/calcite_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/calcite_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/calcite_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_acacia_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_acacia_planks.json index afdca160..79af4934 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_acacia_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_acacia_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_acacia_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_bamboo_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_bamboo_planks.json index d97eb50f..2ccbd353 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_bamboo_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_bamboo_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_bamboo_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_bamboo_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_birch_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_birch_planks.json index f8de7e2b..61266991 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_birch_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_birch_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_birch_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_cherry_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_cherry_planks.json index c3fba062..4720d2a9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_cherry_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_cherry_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_cherry_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_cherry_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_copper.json index 2aa1e7de..2228b8fa 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_crimson_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_crimson_planks.json index 2da0a3a3..b54c0bdd 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_crimson_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_crimson_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_crimson_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_crimson_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_dark_oak_planks.json index f8994099..c59eaaca 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_dark_oak_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_dark_oak_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_dark_oak_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_deep_ocean_bricks.json index 5a8c30f1..8464ed79 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_deep_ocean_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_deep_ocean_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_deep_ocean_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_jungle_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_jungle_planks.json index 9c872531..52e2eba7 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_jungle_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_jungle_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_jungle_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_mangrove_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_mangrove_planks.json index 3fedab2a..e3caf75b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_mangrove_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_mangrove_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_mangrove_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_mangrove_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_oak_planks.json index 855711c0..c2b8aac4 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_oak_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_oak_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_oak_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_polished_blackstone.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_polished_blackstone.json index 58b87ec4..6e2cbb8f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_polished_blackstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_polished_blackstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_polished_blackstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_spruce_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_spruce_planks.json index 4063f77f..1ee7f474 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_spruce_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_spruce_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_spruce_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff.json index a2dd7f8b..a5b0d7c3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_tuff" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_tuff" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_bricks.json index 59556653..10f24498 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_tuff_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_tuff_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_top.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_top.json index dd47491a..a1a0f7d4 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_top.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_tuff_top.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_tuff_top" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_tuff_top" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/chiseled_warped_planks.json b/desktopRuntime/resources/assets/starlike/models/block/chiseled_warped_planks.json index 87688a41..8bd57539 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/chiseled_warped_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/chiseled_warped_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/chiseled_warped_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/chiseled_warped_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cobbled_andesite.json b/desktopRuntime/resources/assets/starlike/models/block/cobbled_andesite.json index 00169d1e..f2d7835c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cobbled_andesite.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cobbled_andesite.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cobbled_andesite" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cobbled_andesite" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cobbled_deepslate.json b/desktopRuntime/resources/assets/starlike/models/block/cobbled_deepslate.json index f545a18e..6da842e9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cobbled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cobbled_deepslate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cobbled_deepslate" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cobbled_deepslate" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/cobbled_diorite.json b/desktopRuntime/resources/assets/starlike/models/block/cobbled_diorite.json index 0ff20945..b80f90b1 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cobbled_diorite.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cobbled_diorite.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cobbled_diorite" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cobbled_diorite" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cobbled_granite.json b/desktopRuntime/resources/assets/starlike/models/block/cobbled_granite.json index 9edd5955..0138c802 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cobbled_granite.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cobbled_granite.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cobbled_granite" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cobbled_granite" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cobbled_soul_stone.json b/desktopRuntime/resources/assets/starlike/models/block/cobbled_soul_stone.json index 5bab2f75..ee9b373f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cobbled_soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cobbled_soul_stone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cobbled_soul_stone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cobbled_soul_stone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/copper.json b/desktopRuntime/resources/assets/starlike/models/block/copper.json index 0f70fe91..e4bf8b6b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/copper_block.json b/desktopRuntime/resources/assets/starlike/models/block/copper_block.json index adde1388..aa19d1fd 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/copper_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/copper_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/copper_block" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/copper_block" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/copper_grate.json b/desktopRuntime/resources/assets/starlike/models/block/copper_grate.json index 03715fa6..6fdaef63 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/copper_grate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/copper_grate" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/copper_grate" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/copper_ore.json b/desktopRuntime/resources/assets/starlike/models/block/copper_ore.json index 6fd035b3..68d46277 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/block/copper_ore.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/copper_ore" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/copper_ore" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cracked_blackstone.json b/desktopRuntime/resources/assets/starlike/models/block/cracked_blackstone.json index def7c002..125cd1fb 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cracked_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cracked_blackstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cracked_blackstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cracked_blackstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cracked_polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/cracked_polished_blackstone_bricks.json index 20ebf9a3..4f652c23 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cracked_polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cracked_polished_blackstone_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cracked_polished_blackstone_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cracked_polished_blackstone_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/creeper_chiseled_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/creeper_chiseled_sandstone.json index bf582fcf..2c532ab3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/creeper_chiseled_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/creeper_chiseled_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/creeper_chiseled_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/creeper_chiseled_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cut_copper.json b/desktopRuntime/resources/assets/starlike/models/block/cut_copper.json index c19a0521..a30f1021 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cut_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cut_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cut_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cyan_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/cyan_glazed_terracotta.json index b0b5236c..53b476ba 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cyan_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cyan_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cyan_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cyan_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cyan_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/cyan_packed_terracotta.json index 168fa46f..5da16ec8 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cyan_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cyan_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cyan_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cyan_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cyan_planks.json b/desktopRuntime/resources/assets/starlike/models/block/cyan_planks.json index 6642f44c..86af7b68 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cyan_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cyan_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cyan_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cyan_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/cyan_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/cyan_terracotta_bricks.json index 9d5e6ba0..841046fb 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/cyan_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/cyan_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/cyan_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/cyan_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/dark_oak_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/dark_oak_mosaic.json index a3b6cc9f..021b6783 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/dark_oak_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/dark_oak_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/dark_oak_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/dark_oak_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_log.json index 2b58c34c..457f805f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_acacia_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_acacia_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_planks.json index 1f6f6fb3..58fd9baf 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_acacia_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_acacia_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_acacia_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_log.json index f82a8660..732bb336 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_birch_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_birch_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_planks.json index f974f173..5cb81bb5 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_birch_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_birch_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_birch_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_log.json index b108a8b7..2eb79b5c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_dark_oak_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_dark_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_planks.json index b5cba128..95bbe83c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_dark_oak_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_dark_oak_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_dark_oak_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_log.json index f627189a..0c40e9b3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_jungle_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_jungle_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_planks.json index 470f332a..4f682583 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_jungle_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_jungle_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_jungle_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_log.json index a7abe909..702c80f3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_oak_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_planks.json index 227ea414..c4d8d30b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_oak_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_oak_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_oak_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_red_sandstone.json index 641d1902..528b589a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_red_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_red_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_red_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_sandstone.json index 8b8ca8fc..6bdbdff0 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_log.json index 87fb6e5f..aa4aa6fd 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_spruce_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_spruce_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_planks.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_planks.json index 4ed9d281..e18a50f4 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_spruce_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_spruce_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_spruce_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_acacia_log.json index ea56b0c1..20fc8b47 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_acacia_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_acacia_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_acacia_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_birch_log.json index e9d77890..a2a1b284 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_birch_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_birch_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_birch_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_dark_oak_log.json index b046ab89..c1f3bc16 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_dark_oak_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_dark_oak_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_dark_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_jungle_log.json index 57ed8dc0..2b5e875e 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_jungle_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_jungle_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_jungle_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_oak_log.json index 20a7f242..ce40b66a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_oak_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_oak_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_spruce_log.json index 7298fcbb..03cd8701 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/models/block/decorated_stripped_spruce_log.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/decorated_stripped_spruce_log" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/decorated_stripped_spruce_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/deep_ocean_bricks.json index 903298af..8052a44f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/deep_ocean_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/deep_ocean_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/deep_ocean_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/deepslate.json b/desktopRuntime/resources/assets/starlike/models/block/deepslate.json index bea86199..32bdbbc6 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/deepslate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/deepslate" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/deepslate" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/deepslate_copper_ore.json b/desktopRuntime/resources/assets/starlike/models/block/deepslate_copper_ore.json index 64a9c82f..a6903871 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/deepslate_copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/block/deepslate_copper_ore.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/deepslate_copper_ore" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/deepslate_copper_ore" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/diorite_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/diorite_tiles.json index 83cf223c..64d890b5 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/diorite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/diorite_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/diorite_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/diorite_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/dirt_path.json b/desktopRuntime/resources/assets/starlike/models/block/dirt_path.json new file mode 100644 index 00000000..c4350691 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/dirt_path.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/dirt_path" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/dragonite_block.json b/desktopRuntime/resources/assets/starlike/models/block/dragonite_block.json index de93f790..8944664c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/dragonite_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/dragonite_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/dragonite_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/dragonite_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/exposed_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/block/exposed_chiseled_copper.json index f401844e..3653068c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/exposed_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/exposed_chiseled_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/exposed_chiseled_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/exposed_chiseled_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/exposed_copper.json b/desktopRuntime/resources/assets/starlike/models/block/exposed_copper.json index a510e98b..e9ca4009 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/exposed_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/exposed_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/exposed_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/exposed_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/exposed_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/block/exposed_copper_grate.json index d2bf5ad1..95080e84 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/exposed_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/exposed_copper_grate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/exposed_copper_grate" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/exposed_copper_grate" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/exposed_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/block/exposed_cut_copper.json index 93e24b0c..64f92899 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/exposed_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/exposed_cut_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/exposed_cut_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/exposed_cut_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/fabricator.json b/desktopRuntime/resources/assets/starlike/models/block/fabricator.json index ca4780ad..0905edcc 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/fabricator.json +++ b/desktopRuntime/resources/assets/starlike/models/block/fabricator.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/fabricator" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/fabricator" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/ghast_chiseled_quartz_block.json b/desktopRuntime/resources/assets/starlike/models/block/ghast_chiseled_quartz_block.json index 2ba26534..8782a862 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/ghast_chiseled_quartz_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/ghast_chiseled_quartz_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/ghast_chiseled_quartz_block" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/ghast_chiseled_quartz_block" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gilded_blackstone.json b/desktopRuntime/resources/assets/starlike/models/block/gilded_blackstone.json index 7064b709..2c46e892 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gilded_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gilded_blackstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gilded_blackstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gilded_blackstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gold_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/gold_tiles.json index eb0177fd..7134af91 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gold_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gold_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gold_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gold_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/gray_glazed_terracotta.json index dfc2c19e..6bff5ee8 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gray_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gray_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gray_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/gray_packed_terracotta.json index 13745ac9..a2d1d691 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gray_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gray_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gray_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gray_planks.json b/desktopRuntime/resources/assets/starlike/models/block/gray_planks.json index 069da10c..63f303a9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gray_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gray_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gray_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/gray_terracotta_bricks.json index 8284185c..6f12b6b3 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/gray_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/gray_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/gray_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/green_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/green_glazed_terracotta.json index 96792df5..2c2fe45f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/green_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/green_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/green_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/green_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/green_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/green_packed_terracotta.json index e1e2bf55..4bee42e6 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/green_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/green_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/green_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/green_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/green_planks.json b/desktopRuntime/resources/assets/starlike/models/block/green_planks.json index 15ec0370..3f1927c7 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/green_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/green_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/green_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/green_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/green_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/green_terracotta_bricks.json index 2730cd82..00e7a54d 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/green_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/green_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/green_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/green_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/head_chiseled_deepslate.json b/desktopRuntime/resources/assets/starlike/models/block/head_chiseled_deepslate.json index 864c7eda..1083f3ce 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/head_chiseled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/head_chiseled_deepslate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/head_chiseled_deepslate" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/head_chiseled_deepslate" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/jungle_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/jungle_mosaic.json index 8200e7a6..dae2bd5f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/jungle_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/jungle_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/jungle_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/jungle_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/light_blue_glazed_terracotta.json index 19334d33..6c5226e1 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_blue_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_blue_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_blue_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/light_blue_packed_terracotta.json index 6abdf47f..57277297 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_blue_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_blue_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_blue_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_blue_planks.json b/desktopRuntime/resources/assets/starlike/models/block/light_blue_planks.json index fa016ae0..5fe70a6c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_blue_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_blue_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_blue_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/light_blue_terracotta_bricks.json index 54beb64c..67c0ba71 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_blue_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_blue_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_blue_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/light_gray_glazed_terracotta.json index 33fc2c58..c896261a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_gray_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_gray_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_gray_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/light_gray_packed_terracotta.json index 8c738120..3499fb01 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_gray_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_gray_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_gray_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_gray_planks.json b/desktopRuntime/resources/assets/starlike/models/block/light_gray_planks.json index 51ac43a2..0682039e 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_gray_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_gray_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_gray_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/light_gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/light_gray_terracotta_bricks.json index 9d4a2eb3..322c1eff 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/light_gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/light_gray_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/light_gray_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/light_gray_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/lime_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/lime_glazed_terracotta.json index c696db95..f28f69d7 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/lime_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/lime_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/lime_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/lime_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/lime_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/lime_packed_terracotta.json index 9e19316e..03940a4d 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/lime_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/lime_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/lime_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/lime_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/lime_planks.json b/desktopRuntime/resources/assets/starlike/models/block/lime_planks.json index e6e48ba3..abee8416 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/lime_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/lime_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/lime_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/lime_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/lime_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/lime_terracotta_bricks.json index c0455baa..a7ffdf32 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/lime_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/lime_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/lime_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/lime_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/limestone.json b/desktopRuntime/resources/assets/starlike/models/block/limestone.json index bcddf856..b9d31796 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/limestone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/limestone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/limestone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/limestone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/limestone_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/limestone_tiles.json index 95ea7e72..94324b63 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/limestone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/limestone_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/limestone_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/limestone_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/magenta_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/magenta_glazed_terracotta.json index 8f7e7d06..4e722a95 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/magenta_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/magenta_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/magenta_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/magenta_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/magenta_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/magenta_packed_terracotta.json index 0e5b2331..3b95967a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/magenta_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/magenta_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/magenta_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/magenta_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/magenta_planks.json b/desktopRuntime/resources/assets/starlike/models/block/magenta_planks.json index d1dac898..f7fb0e12 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/magenta_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/magenta_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/magenta_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/magenta_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/magenta_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/magenta_terracotta_bricks.json index 384fcf4b..d14c08bc 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/magenta_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/magenta_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/magenta_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/magenta_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/netherite_block.json b/desktopRuntime/resources/assets/starlike/models/block/netherite_block.json index cf9d951f..2f7f4118 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/netherite_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/netherite_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/netherite_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/netherite_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/oak_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/oak_mosaic.json index dcdcbc22..173b03c6 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/oak_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/oak_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/oak_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/oak_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/orange_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/orange_glazed_terracotta.json index 359b7e6f..17f50cb6 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/orange_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/orange_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/orange_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/orange_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/orange_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/orange_packed_terracotta.json index b08ab833..8984c77a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/orange_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/orange_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/orange_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/orange_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/orange_planks.json b/desktopRuntime/resources/assets/starlike/models/block/orange_planks.json index 4e44ebeb..4acf29e2 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/orange_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/orange_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/orange_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/orange_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/orange_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/orange_terracotta_bricks.json index 81c7098e..7ddebf4a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/orange_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/orange_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/orange_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/orange_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/ornate_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/ornate_red_sandstone.json index 969f5229..898e31b6 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/ornate_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/ornate_red_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/ornate_red_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/ornate_red_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/ornate_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/ornate_sandstone.json index 8ae7e933..caf160fc 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/ornate_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/ornate_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/ornate_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/ornate_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/oxidized_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/block/oxidized_chiseled_copper.json index fbec3b1f..f87cc280 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/oxidized_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/oxidized_chiseled_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/oxidized_chiseled_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/oxidized_chiseled_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper.json b/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper.json index cd2bf76a..0f06986c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/oxidized_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/oxidized_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper_grate.json index 66dce70d..f31e4836 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/oxidized_copper_grate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/oxidized_copper_grate" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/oxidized_copper_grate" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/oxidized_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/block/oxidized_cut_copper.json index 77f38b29..9dabff91 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/oxidized_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/oxidized_cut_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/oxidized_cut_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/oxidized_cut_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/packed_terracotta.json index 98f14e63..69ac55cb 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/pink_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/pink_glazed_terracotta.json index 4d8ec4a0..9ff24f6b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/pink_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/pink_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/pink_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/pink_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/pink_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/pink_packed_terracotta.json index 31842a59..29dc9069 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/pink_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/pink_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/pink_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/pink_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/pink_planks.json b/desktopRuntime/resources/assets/starlike/models/block/pink_planks.json index 631593f0..618c14ce 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/pink_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/pink_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/pink_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/pink_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/pink_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/pink_terracotta_bricks.json index 71e4ee43..2a83711a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/pink_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/pink_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/pink_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/pink_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/platinum_block.json b/desktopRuntime/resources/assets/starlike/models/block/platinum_block.json index 42d4c045..04fb452b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/platinum_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/platinum_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/platinum_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/platinum_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/platinum_ore.json b/desktopRuntime/resources/assets/starlike/models/block/platinum_ore.json index c141ef04..a5abd2ed 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/platinum_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/block/platinum_ore.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/platinum_ore" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/platinum_ore" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_andesite_brick.json b/desktopRuntime/resources/assets/starlike/models/block/polished_andesite_brick.json index 309c922d..8308a192 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_andesite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_andesite_brick.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_andesite_brick" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_andesite_brick" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone.json b/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone.json index e9042bb7..d7aefe15 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_blackstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_blackstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone_bricks.json index d6cc45fc..bb81a3bc 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_blackstone_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_blackstone_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_blackstone_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_diorite_brick.json b/desktopRuntime/resources/assets/starlike/models/block/polished_diorite_brick.json index d27e0d59..3bfaac12 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_diorite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_diorite_brick.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_diorite_brick" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_diorite_brick" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_granite_brick.json b/desktopRuntime/resources/assets/starlike/models/block/polished_granite_brick.json index db4e5aef..f1e5a8b9 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_granite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_granite_brick.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_granite_brick" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_granite_brick" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/polished_tuff.json b/desktopRuntime/resources/assets/starlike/models/block/polished_tuff.json index 377dabd0..bd40a33e 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/polished_tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/block/polished_tuff.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/polished_tuff" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/polished_tuff" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/purple_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/purple_glazed_terracotta.json index 30630509..5c53c9f1 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/purple_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/purple_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/purple_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/purple_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/purple_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/purple_packed_terracotta.json index 799eaddd..a6a9c1c8 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/purple_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/purple_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/purple_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/purple_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/purple_planks.json b/desktopRuntime/resources/assets/starlike/models/block/purple_planks.json index 29f5edb4..6f39140b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/purple_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/purple_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/purple_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/purple_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/purple_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/purple_terracotta_bricks.json index f80ded23..e335eb5a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/purple_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/purple_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/purple_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/purple_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/raw_copper_block.json b/desktopRuntime/resources/assets/starlike/models/block/raw_copper_block.json index b2c05b90..005479b8 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/raw_copper_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/raw_copper_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/raw_copper_block" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/raw_copper_block" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/red_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/red_glazed_terracotta.json index 6a507212..cc2d688f 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/red_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/red_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/red_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/red_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/red_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/red_packed_terracotta.json index 54c0c7cb..32106897 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/red_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/red_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/red_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/red_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/red_planks.json b/desktopRuntime/resources/assets/starlike/models/block/red_planks.json index 17b697c6..fe3abe32 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/red_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/red_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/red_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/red_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/red_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/red_terracotta_bricks.json index 9145f107..b5d1c39b 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/red_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/red_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/red_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/red_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/skeleton_chiseled_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/block/skeleton_chiseled_red_sandstone.json index 56f1af23..058f3ff0 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/skeleton_chiseled_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/skeleton_chiseled_red_sandstone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/skeleton_chiseled_red_sandstone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/skeleton_chiseled_red_sandstone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/smithing_table.json b/desktopRuntime/resources/assets/starlike/models/block/smithing_table.json index ca0de111..b25239b2 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/smithing_table.json +++ b/desktopRuntime/resources/assets/starlike/models/block/smithing_table.json @@ -1,12 +1,12 @@ { - "parent": "block/cube_all", - "textures": { - "down": "starlike:blocks/smithing_table_bottom", - "east": "starlike:blocks/smithing_table_side", - "north": "starlike:blocks/smithing_table_front", - "particle": "starlike:blocks/smithing_table_front", - "south": "starlike:blocks/smithing_table_front", - "up": "starlike:blocks/smithing_table_top", - "west": "starlike:blocks/smithing_table_side" - } + "parent": "block/cube_all", + "textures": { + "down": "starlike:blocks/smithing_table_bottom", + "east": "starlike:blocks/smithing_table_side", + "north": "starlike:blocks/smithing_table_front", + "particle": "starlike:blocks/smithing_table_front", + "south": "starlike:blocks/smithing_table_front", + "up": "starlike:blocks/smithing_table_top", + "west": "starlike:blocks/smithing_table_side" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/smooth_basalt.json b/desktopRuntime/resources/assets/starlike/models/block/smooth_basalt.json index 84742859..653b9a62 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/smooth_basalt.json +++ b/desktopRuntime/resources/assets/starlike/models/block/smooth_basalt.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/smooth_basalt" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/smooth_basalt" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/soul_stone.json b/desktopRuntime/resources/assets/starlike/models/block/soul_stone.json index 83e72793..08561235 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/models/block/soul_stone.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/soul_stone" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/soul_stone" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/soul_stone_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/soul_stone_tiles.json index f3b86666..8b6f8be8 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/soul_stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/soul_stone_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/soul_stone_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/soul_stone_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/spruce_mosaic.json b/desktopRuntime/resources/assets/starlike/models/block/spruce_mosaic.json index 62438e77..79ebe3ec 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/spruce_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/block/spruce_mosaic.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/spruce_mosaic" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/spruce_mosaic" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/steel_block.json b/desktopRuntime/resources/assets/starlike/models/block/steel_block.json index b853c67a..41202d5c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/steel_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/steel_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/steel_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/steel_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/steel_grate.json b/desktopRuntime/resources/assets/starlike/models/block/steel_grate.json index 2aae5cd9..3f5e0c03 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/steel_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/steel_grate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/steel_grate" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/steel_grate" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/stone_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/stone_tiles.json index 61e7341b..37488f3c 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/stone_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/stone_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stone_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_acacia_log.json new file mode 100644 index 00000000..dd4befa1 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_acacia_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_acacia_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_birch_log.json new file mode 100644 index 00000000..5d203947 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_birch_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_birch_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_dark_oak_log.json new file mode 100644 index 00000000..9f18f565 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_dark_oak_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_dark_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_jungle_log.json new file mode 100644 index 00000000..5f7d6869 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_jungle_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_jungle_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_oak_log.json new file mode 100644 index 00000000..9c8a1173 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_oak_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_oak_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/block/stripped_spruce_log.json new file mode 100644 index 00000000..eafdac98 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/block/stripped_spruce_log.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/stripped_spruce_log" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/terracotta_bricks.json index 5b5c6865..1a37b2f4 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/titanium_block.json b/desktopRuntime/resources/assets/starlike/models/block/titanium_block.json index 571b5b56..5355cd06 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/titanium_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/titanium_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/titanium_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/titanium_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/titanium_ore.json b/desktopRuntime/resources/assets/starlike/models/block/titanium_ore.json index 552d0085..971f76d5 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/titanium_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/block/titanium_ore.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/titanium_ore" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/titanium_ore" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/tuff.json b/desktopRuntime/resources/assets/starlike/models/block/tuff.json index 1e100119..2b6f19ba 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/block/tuff.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/tuff" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/tuff" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/tuff_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/tuff_bricks.json index f51e0ffe..f1ca8068 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/tuff_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/tuff_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/tuff_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/tuff_tiles.json b/desktopRuntime/resources/assets/starlike/models/block/tuff_tiles.json index 04a74c0e..b3266c9e 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/tuff_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/block/tuff_tiles.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/tuff_tiles" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/tuff_tiles" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/uranium_block.json b/desktopRuntime/resources/assets/starlike/models/block/uranium_block.json index d7fd35b0..88d0bb41 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/uranium_block.json +++ b/desktopRuntime/resources/assets/starlike/models/block/uranium_block.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/uranium_block" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/uranium_block" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/uranium_ore.json b/desktopRuntime/resources/assets/starlike/models/block/uranium_ore.json index 37507007..79f0997a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/uranium_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/block/uranium_ore.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/uranium_ore" - } + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/uranium_ore" + } } diff --git a/desktopRuntime/resources/assets/starlike/models/block/weathered_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/block/weathered_chiseled_copper.json index 4d46d6a8..e7f0c602 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/weathered_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/weathered_chiseled_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/weathered_chiseled_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/weathered_chiseled_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/weathered_copper.json b/desktopRuntime/resources/assets/starlike/models/block/weathered_copper.json index 00008502..9fd2fd1a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/weathered_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/weathered_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/weathered_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/weathered_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/weathered_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/block/weathered_copper_grate.json index 4361645b..5a757d4a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/weathered_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/block/weathered_copper_grate.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/weathered_copper_grate" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/weathered_copper_grate" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/weathered_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/block/weathered_cut_copper.json index a28cc89f..f5ca1fe4 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/weathered_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/block/weathered_cut_copper.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/weathered_cut_copper" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/weathered_cut_copper" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/white_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/white_glazed_terracotta.json index 3af7f7ef..140debb5 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/white_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/white_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/white_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/white_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/white_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/white_packed_terracotta.json index 65d72ca6..ad4dca6a 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/white_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/white_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/white_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/white_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/white_planks.json b/desktopRuntime/resources/assets/starlike/models/block/white_planks.json index 4109fe12..d61e963d 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/white_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/white_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/white_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/white_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/white_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/white_terracotta_bricks.json index 23932f1d..2a9c8a15 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/white_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/white_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/white_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/white_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/yellow_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/yellow_glazed_terracotta.json index 149118c3..d9628e43 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/yellow_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/yellow_glazed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/yellow_glazed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/yellow_glazed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/yellow_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/block/yellow_packed_terracotta.json index 139f6e61..0f0c0104 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/yellow_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/block/yellow_packed_terracotta.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/yellow_packed_terracotta" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/yellow_packed_terracotta" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/yellow_planks.json b/desktopRuntime/resources/assets/starlike/models/block/yellow_planks.json index cae00b4b..babaa7bf 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/yellow_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/yellow_planks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/yellow_planks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/yellow_planks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/yellow_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/yellow_terracotta_bricks.json index fc4fdf3f..5d0bf704 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/yellow_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/yellow_terracotta_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/yellow_terracotta_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/yellow_terracotta_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/block/zombie_chiseled_stone_bricks.json b/desktopRuntime/resources/assets/starlike/models/block/zombie_chiseled_stone_bricks.json index 9a439bba..ed5914cf 100644 --- a/desktopRuntime/resources/assets/starlike/models/block/zombie_chiseled_stone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/block/zombie_chiseled_stone_bricks.json @@ -1,6 +1,6 @@ { - "parent": "block/cube_all", - "textures": { - "all": "starlike:blocks/zombie_chiseled_stone_bricks" - } -} \ No newline at end of file + "parent": "block/cube_all", + "textures": { + "all": "starlike:blocks/zombie_chiseled_stone_bricks" + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/acacia_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/acacia_mosaic.json index 3c4ba9a1..105edbe5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/acacia_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/acacia_mosaic.json @@ -1,10 +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 ] - } + "parent": "starlike:block/acacia_mosaic", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/amber.json b/desktopRuntime/resources/assets/starlike/models/item/amber.json new file mode 100644 index 00000000..39857f9a --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/amber.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/amber" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/ambered_bow.json b/desktopRuntime/resources/assets/starlike/models/item/ambered_bow.json new file mode 100644 index 00000000..4a80302d --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/ambered_bow.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/ambered_bow_standby" + }, + "display": { + "thirdperson": { + "rotation": [5, 80, -45], + "translation": [0.75, 0, 0.25], + "scale": [1, 1, 1] + }, + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/ancient_debris.json b/desktopRuntime/resources/assets/starlike/models/item/ancient_debris.json index c0faf5c8..e067e05a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/ancient_debris.json +++ b/desktopRuntime/resources/assets/starlike/models/item/ancient_debris.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/ancient_debris", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/ancient_debris", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/andesite_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/andesite_bricks.json index 52cd597a..e298fbe2 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/andesite_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/andesite_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/andesite_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/andesite_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/andesite_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/andesite_tiles.json index 8d2e7bf2..e05c8303 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/andesite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/andesite_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/andesite_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/andesite_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/birch_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/birch_mosaic.json index cdfd931f..cc42d996 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/birch_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/birch_mosaic.json @@ -1,10 +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 ] - } + "parent": "starlike:block/birch_mosaic", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/black_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/black_glazed_terracotta.json index 9a69da63..2238af9b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/black_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/black_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/black_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/black_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/black_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/black_packed_terracotta.json index 0f9b9524..390126e8 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/black_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/black_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/black_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/black_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/black_planks.json b/desktopRuntime/resources/assets/starlike/models/item/black_planks.json index 5f72b7da..e8ecfbee 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/black_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/black_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/black_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/black_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/black_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/black_terracotta_bricks.json index 227632f9..a01fc90f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/black_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/black_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/black_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/black_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/blackstone.json b/desktopRuntime/resources/assets/starlike/models/item/blackstone.json index 48334467..af78f770 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/blackstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/blackstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/blackstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/blue_glazed_terracotta.json index b3268145..5d0b33b4 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/blue_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/blue_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/blue_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/blue_packed_terracotta.json index 49e7f061..c53c3cda 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/blue_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/blue_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/blue_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/blue_planks.json b/desktopRuntime/resources/assets/starlike/models/item/blue_planks.json index 4c0e258a..1e251f68 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/blue_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/blue_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/blue_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/blue_terracotta_bricks.json index 6d598cdf..3615ca33 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/blue_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/blue_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/blue_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/brown_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/brown_glazed_terracotta.json index 8e877512..2e60dc15 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/brown_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/brown_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/brown_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/brown_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/brown_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/brown_packed_terracotta.json index b104562b..eb84f789 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/brown_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/brown_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/brown_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/brown_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/brown_planks.json b/desktopRuntime/resources/assets/starlike/models/item/brown_planks.json index caff7e30..f51e50a6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/brown_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/brown_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/brown_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/brown_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/brown_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/brown_terracotta_bricks.json index bdc7f6fa..4ed9ae4a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/brown_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/brown_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/brown_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/brown_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/calcite.json b/desktopRuntime/resources/assets/starlike/models/item/calcite.json index 4fbeb34f..7397689c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/calcite.json +++ b/desktopRuntime/resources/assets/starlike/models/item/calcite.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/calcite", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/calcite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/calcite_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/calcite_tiles.json index 0b19af6d..f9296c2c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/calcite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/calcite_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/calcite_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/calcite_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chisel.json b/desktopRuntime/resources/assets/starlike/models/item/chisel.json index db75275d..da00f9e6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chisel.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chisel.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/chisel" + "layer0": "starlike:items/chisel" }, "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_acacia_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_acacia_planks.json index 86298f3f..7b6becf8 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_acacia_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_acacia_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_acacia_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_bamboo_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_bamboo_planks.json index 2075f68b..18137c17 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_bamboo_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_bamboo_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_bamboo_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_bamboo_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_birch_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_birch_planks.json index a38b02cb..f4fb4663 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_birch_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_birch_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_birch_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_cherry_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_cherry_planks.json index 7d7d6ed0..5d4f663f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_cherry_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_cherry_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_cherry_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_cherry_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_copper.json index 96aa2c55..b2e04d88 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_crimson_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_crimson_planks.json index ea9fd764..df8624ec 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_crimson_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_crimson_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_crimson_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_crimson_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_dark_oak_planks.json index a8ce0d13..c61371cd 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_dark_oak_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_dark_oak_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_dark_oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_deep_ocean_bricks.json index 601591c1..7cc8882d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_deep_ocean_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_deep_ocean_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_deep_ocean_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_jungle_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_jungle_planks.json index cb459c45..c9ca639c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_jungle_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_jungle_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_jungle_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_mangrove_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_mangrove_planks.json index 32232b1f..a521ab7e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_mangrove_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_mangrove_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_mangrove_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_mangrove_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_oak_planks.json index a5794ae8..25716c3d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_oak_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_oak_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_polished_blackstone.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_polished_blackstone.json index c919f675..ca7b0154 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_polished_blackstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_polished_blackstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_polished_blackstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_spruce_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_spruce_planks.json index e14dafe2..e0768e22 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_spruce_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_spruce_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_spruce_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff.json index 607316e6..df33a6e9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_tuff", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_tuff", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_bricks.json index 1e97270f..420099ce 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_tuff_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_tuff_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_top.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_top.json index 7b5f21cf..86d318f1 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_top.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_tuff_top.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_tuff_top", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_tuff_top", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/chiseled_warped_planks.json b/desktopRuntime/resources/assets/starlike/models/item/chiseled_warped_planks.json index 52e55017..83754229 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/chiseled_warped_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/chiseled_warped_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/chiseled_warped_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/chiseled_warped_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cobbled_andesite.json b/desktopRuntime/resources/assets/starlike/models/item/cobbled_andesite.json index 2852e2f4..5733a997 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cobbled_andesite.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cobbled_andesite.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cobbled_andesite", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cobbled_andesite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cobbled_deepslate.json b/desktopRuntime/resources/assets/starlike/models/item/cobbled_deepslate.json index 660602e6..eb85fb93 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cobbled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cobbled_deepslate.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/cobbled_deepslate", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/cobbled_deepslate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/cobbled_diorite.json b/desktopRuntime/resources/assets/starlike/models/item/cobbled_diorite.json index 804fd93a..7ad7b328 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cobbled_diorite.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cobbled_diorite.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cobbled_diorite", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cobbled_diorite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cobbled_granite.json b/desktopRuntime/resources/assets/starlike/models/item/cobbled_granite.json index 10f30800..a5af4e09 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cobbled_granite.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cobbled_granite.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cobbled_granite", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cobbled_granite", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cobbled_soul_stone.json b/desktopRuntime/resources/assets/starlike/models/item/cobbled_soul_stone.json index 9dcde8a9..57ea6fd9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cobbled_soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cobbled_soul_stone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cobbled_soul_stone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cobbled_soul_stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/copper_block.json b/desktopRuntime/resources/assets/starlike/models/item/copper_block.json index 20abcb74..6b19a229 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/copper_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/copper_block.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/copper_block", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/copper_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/copper_grate.json b/desktopRuntime/resources/assets/starlike/models/item/copper_grate.json index 41a0300b..f6643c3e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/copper_grate.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/copper_grate", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/copper_grate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/copper_ingot.json b/desktopRuntime/resources/assets/starlike/models/item/copper_ingot.json index ff489c14..8df31c51 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/copper_ingot.json +++ b/desktopRuntime/resources/assets/starlike/models/item/copper_ingot.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/copper_ingot" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/copper_ingot" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -3], + "scale": [0.55, 0.55, 0.55] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/copper_ore.json b/desktopRuntime/resources/assets/starlike/models/item/copper_ore.json index b993f20d..4dc060a5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/item/copper_ore.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/copper_ore", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/copper_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cracked_blackstone.json b/desktopRuntime/resources/assets/starlike/models/item/cracked_blackstone.json index a8d19f71..24e67655 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cracked_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cracked_blackstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cracked_blackstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cracked_blackstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cracked_polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/cracked_polished_blackstone_bricks.json index 89ede1d4..67b2c1b6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cracked_polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cracked_polished_blackstone_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cracked_polished_blackstone_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cracked_polished_blackstone_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/creeper_chiseled_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/creeper_chiseled_sandstone.json index c0171104..12b0e136 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/creeper_chiseled_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/creeper_chiseled_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/creeper_chiseled_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/creeper_chiseled_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cut_copper.json b/desktopRuntime/resources/assets/starlike/models/item/cut_copper.json index 57baf48c..d69a9680 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cut_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cut_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cut_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cyan_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/cyan_glazed_terracotta.json index c031322d..79976b3c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cyan_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cyan_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cyan_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cyan_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cyan_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/cyan_packed_terracotta.json index eadefc87..a74eb9b9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cyan_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cyan_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cyan_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cyan_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cyan_planks.json b/desktopRuntime/resources/assets/starlike/models/item/cyan_planks.json index 2c7170b5..28b98eb0 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cyan_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cyan_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cyan_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cyan_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/cyan_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/cyan_terracotta_bricks.json index 6379c515..0eb68cef 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/cyan_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/cyan_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/cyan_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/cyan_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/dark_oak_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/dark_oak_mosaic.json index 45183999..dfbd3fd5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/dark_oak_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/dark_oak_mosaic.json @@ -1,10 +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 ] - } + "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] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_log.json index 5ee2b49d..604af54b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_acacia_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_acacia_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_planks.json index 64a9834f..d8f279d9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_acacia_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_acacia_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_acacia_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_log.json index 397e85ce..b5fcfbbe 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_birch_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_birch_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_planks.json index d82f4a5a..b047f799 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_birch_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_birch_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_birch_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_log.json index 0254aad9..ada26285 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_dark_oak_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_dark_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_planks.json index 5c3b9cfd..d727d954 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_dark_oak_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_dark_oak_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_dark_oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_log.json index aa973dfe..98910724 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_jungle_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_jungle_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_planks.json index 321c3601..5b05d381 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_jungle_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_jungle_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_jungle_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_log.json index 623dbbd5..4763f310 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_oak_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_planks.json index fe798371..8b2f6119 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_oak_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_oak_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_oak_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_red_sandstone.json index 6a11555a..7ae884d4 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_red_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_red_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_red_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_sandstone.json index 94e3f120..978841e2 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_log.json index 06d7b2ab..693b44a7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_spruce_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_spruce_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_planks.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_planks.json index a80a1f80..0ea24423 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_spruce_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_spruce_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_spruce_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_acacia_log.json index 62a39e5a..82703f8a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_acacia_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_acacia_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_acacia_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_acacia_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_birch_log.json index 480cce7f..6209488f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_birch_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_birch_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_birch_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_birch_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_dark_oak_log.json index 615a196a..937971f1 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_dark_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_dark_oak_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_dark_oak_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_dark_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_jungle_log.json index 1f83c465..d51053f4 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_jungle_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_jungle_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_jungle_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_jungle_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_oak_log.json index 5213d326..74b3c795 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_oak_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_oak_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_oak_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_spruce_log.json index 92ca4fb3..ef275076 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_spruce_log.json +++ b/desktopRuntime/resources/assets/starlike/models/item/decorated_stripped_spruce_log.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/decorated_stripped_spruce_log", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/decorated_stripped_spruce_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/deep_ocean_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/deep_ocean_bricks.json index 614fbd87..e0d3bebd 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/deep_ocean_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/deep_ocean_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/deep_ocean_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/deep_ocean_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/deepslate.json b/desktopRuntime/resources/assets/starlike/models/item/deepslate.json index 9bbd934c..788b542b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/deepslate.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/deepslate", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/deepslate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/deepslate_copper_ore.json b/desktopRuntime/resources/assets/starlike/models/item/deepslate_copper_ore.json index 1b22e63d..b9411ab5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/deepslate_copper_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/item/deepslate_copper_ore.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/deepslate_copper_ore", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/deepslate_copper_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/diamond_backpack.json b/desktopRuntime/resources/assets/starlike/models/item/diamond_backpack.json new file mode 100644 index 00000000..00a698e8 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/diamond_backpack.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/diamond_backpack" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/diorite_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/diorite_tiles.json index c590cfc2..7eb64177 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/diorite_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/diorite_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/diorite_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/diorite_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/dirt_path.json b/desktopRuntime/resources/assets/starlike/models/item/dirt_path.json new file mode 100644 index 00000000..6e2573d7 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/dirt_path.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/dirt_path", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/dragonite.json b/desktopRuntime/resources/assets/starlike/models/item/dragonite.json index 858bbbd2..6652402a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/dragonite.json +++ b/desktopRuntime/resources/assets/starlike/models/item/dragonite.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/dragonite" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/dragonite" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -3], + "scale": [0.55, 0.55, 0.55] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/dragonite_block.json b/desktopRuntime/resources/assets/starlike/models/item/dragonite_block.json index 0ccd1c11..078d5942 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/dragonite_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/dragonite_block.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/dragonite_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/dragonite_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/ender_backpack.json b/desktopRuntime/resources/assets/starlike/models/item/ender_backpack.json new file mode 100644 index 00000000..0038aed2 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/ender_backpack.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/ender_backpack" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/exposed_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/item/exposed_chiseled_copper.json index 7b6b6d9a..da3ec3e9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/exposed_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/exposed_chiseled_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/exposed_chiseled_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/exposed_chiseled_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/exposed_copper.json b/desktopRuntime/resources/assets/starlike/models/item/exposed_copper.json index 8fe80bda..e7a3963e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/exposed_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/exposed_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/exposed_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/exposed_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/exposed_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/item/exposed_copper_grate.json index 86f2187d..8f5c1279 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/exposed_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/exposed_copper_grate.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/exposed_copper_grate", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/exposed_copper_grate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/exposed_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/item/exposed_cut_copper.json index f4765d2c..c9cf8e0c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/exposed_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/exposed_cut_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/exposed_cut_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/exposed_cut_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/fabricator.json b/desktopRuntime/resources/assets/starlike/models/item/fabricator.json index ffb13f87..872d0728 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/fabricator.json +++ b/desktopRuntime/resources/assets/starlike/models/item/fabricator.json @@ -1,10 +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 ] - } + "parent": "starlike:block/fabricator", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/ghast_chiseled_quartz_block.json b/desktopRuntime/resources/assets/starlike/models/item/ghast_chiseled_quartz_block.json index f40c434a..e9844498 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/ghast_chiseled_quartz_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/ghast_chiseled_quartz_block.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/ghast_chiseled_quartz_block", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/ghast_chiseled_quartz_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gilded_blackstone.json b/desktopRuntime/resources/assets/starlike/models/item/gilded_blackstone.json index 3c98be68..3e16e494 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gilded_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gilded_blackstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gilded_blackstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gilded_blackstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gold_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/gold_tiles.json index e0588da2..4c4ddc2b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gold_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gold_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gold_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gold_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/gray_glazed_terracotta.json index be746d8a..8d439374 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gray_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gray_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gray_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/gray_packed_terracotta.json index 719af35c..fced32cd 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gray_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gray_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gray_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gray_planks.json b/desktopRuntime/resources/assets/starlike/models/item/gray_planks.json index 737ff5d2..2e3aa371 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gray_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gray_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gray_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/gray_terracotta_bricks.json index c01d05e3..41d484c5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/gray_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/gray_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/gray_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/green_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/green_glazed_terracotta.json index 13c76f6b..a64bcbc7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/green_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/green_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/green_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/green_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/green_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/green_packed_terracotta.json index 90096f4e..fe5c20df 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/green_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/green_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/green_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/green_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/green_planks.json b/desktopRuntime/resources/assets/starlike/models/item/green_planks.json index e5ec464d..1741a090 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/green_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/green_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/green_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/green_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/green_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/green_terracotta_bricks.json index 89ddac94..0770db3b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/green_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/green_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/green_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/green_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/head_chiseled_deepslate.json b/desktopRuntime/resources/assets/starlike/models/item/head_chiseled_deepslate.json index 6bd775a3..4eff3db3 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/head_chiseled_deepslate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/head_chiseled_deepslate.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/head_chiseled_deepslate", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/head_chiseled_deepslate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/iron_backpack.json b/desktopRuntime/resources/assets/starlike/models/item/iron_backpack.json new file mode 100644 index 00000000..5e8372bd --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/iron_backpack.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/iron_backpack" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/jungle_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/jungle_mosaic.json index 4c7fbdc4..0b0f218e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/jungle_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/jungle_mosaic.json @@ -1,10 +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 ] - } + "parent": "starlike:block/jungle_mosaic", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/leather_backpack.json b/desktopRuntime/resources/assets/starlike/models/item/leather_backpack.json new file mode 100644 index 00000000..f62ffe2c --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/leather_backpack.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/leather_backpack" + }, + "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] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_blue_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/light_blue_glazed_terracotta.json index c35913ea..dcd67d5c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_blue_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_blue_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_blue_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_blue_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_blue_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/light_blue_packed_terracotta.json index a438c5fd..1a7bdf52 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_blue_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_blue_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_blue_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_blue_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_blue_planks.json b/desktopRuntime/resources/assets/starlike/models/item/light_blue_planks.json index 1505ed92..1959b978 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_blue_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_blue_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_blue_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_blue_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_blue_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/light_blue_terracotta_bricks.json index c2514214..b173a5e4 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_blue_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_blue_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_blue_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_blue_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_gray_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/light_gray_glazed_terracotta.json index 382b0ea7..32a9b185 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_gray_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_gray_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_gray_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_gray_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_gray_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/light_gray_packed_terracotta.json index 6d644023..d2742766 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_gray_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_gray_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_gray_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_gray_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_gray_planks.json b/desktopRuntime/resources/assets/starlike/models/item/light_gray_planks.json index b4b8b75b..8f5ab4e1 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_gray_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_gray_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_gray_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_gray_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/light_gray_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/light_gray_terracotta_bricks.json index 67152337..9402a92a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/light_gray_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/light_gray_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/light_gray_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/light_gray_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/lime_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/lime_glazed_terracotta.json index 35facad0..fc255c2f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/lime_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/lime_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/lime_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/lime_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/lime_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/lime_packed_terracotta.json index 900dcc36..ca43609b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/lime_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/lime_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/lime_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/lime_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/lime_planks.json b/desktopRuntime/resources/assets/starlike/models/item/lime_planks.json index 803f8bff..e2a1687a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/lime_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/lime_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/lime_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/lime_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/lime_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/lime_terracotta_bricks.json index 1811b73a..dae4a77f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/lime_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/lime_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/lime_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/lime_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/limestone.json b/desktopRuntime/resources/assets/starlike/models/item/limestone.json index 37a96d76..5ea182b6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/limestone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/limestone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/limestone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/limestone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/limestone_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/limestone_tiles.json index 2d9d3525..7f9d30eb 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/limestone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/limestone_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/limestone_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/limestone_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/magenta_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/magenta_glazed_terracotta.json index 56bfd0e3..89a2fd44 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/magenta_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/magenta_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/magenta_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/magenta_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/magenta_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/magenta_packed_terracotta.json index fcb1c302..5133a51a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/magenta_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/magenta_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/magenta_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/magenta_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/magenta_planks.json b/desktopRuntime/resources/assets/starlike/models/item/magenta_planks.json index 9f142828..5b0a3b5a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/magenta_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/magenta_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/magenta_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/magenta_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/magenta_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/magenta_terracotta_bricks.json index 554e66eb..c1393eaf 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/magenta_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/magenta_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/magenta_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/magenta_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_axe.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_axe.json index 8c7475fe..d438ca51 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_axe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_axe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/netherite_axe" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/netherite_axe" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_block.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_block.json index e6201ef5..aebf625e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_block.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/netherite_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/netherite_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_boots.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_boots.json index f50e1f90..ae49546c 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_boots.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_boots.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_boots" + "layer0": "starlike:items/netherite_boots" }, "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_chestplate.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_chestplate.json index 2acbdb43..6b4549e7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_chestplate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_chestplate.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_chestplate" + "layer0": "starlike:items/netherite_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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_helmet.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_helmet.json index 8bc62143..adf3a023 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_helmet.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_helmet.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_helmet" + "layer0": "starlike:items/netherite_helmet" }, "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_hoe.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_hoe.json index 00318a87..b71f6ce0 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_hoe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_hoe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/netherite_hoe" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/netherite_hoe" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_ingot.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_ingot.json index 264bd0db..0de9a696 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_ingot.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_ingot.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_ingot" + "layer0": "starlike:items/netherite_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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_leggings.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_leggings.json index b92d8045..7f10bc83 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_leggings.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_leggings.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_leggings" + "layer0": "starlike:items/netherite_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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_pickaxe.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_pickaxe.json index f1f74544..26faa19d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_pickaxe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_pickaxe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/netherite_pickaxe" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/netherite_pickaxe" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_scrap.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_scrap.json index 012e443c..e95d155b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_scrap.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_scrap.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/netherite_scrap" + "layer0": "starlike:items/netherite_scrap" }, "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_shovel.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_shovel.json index a13545b4..e078aea2 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_shovel.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_shovel.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/netherite_shovel" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/netherite_shovel" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/netherite_sword.json b/desktopRuntime/resources/assets/starlike/models/item/netherite_sword.json index b2a916f1..76a86ab9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/netherite_sword.json +++ b/desktopRuntime/resources/assets/starlike/models/item/netherite_sword.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/netherite_sword" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/netherite_sword" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/oak_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/oak_mosaic.json index b2f270ea..a5d4031b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/oak_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/oak_mosaic.json @@ -1,10 +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 ] - } + "parent": "starlike:block/oak_mosaic", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/orange_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/orange_glazed_terracotta.json index afea5db6..9a1b7645 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/orange_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/orange_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/orange_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/orange_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/orange_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/orange_packed_terracotta.json index 05cbfef8..0d5bf6a9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/orange_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/orange_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/orange_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/orange_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/orange_planks.json b/desktopRuntime/resources/assets/starlike/models/item/orange_planks.json index d9e5fe57..546f92e9 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/orange_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/orange_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/orange_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/orange_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/orange_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/orange_terracotta_bricks.json index 15c894a0..5479475f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/orange_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/orange_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/orange_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/orange_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/ornate_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/ornate_red_sandstone.json index 04096b52..90b867a5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/ornate_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/ornate_red_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/ornate_red_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/ornate_red_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/ornate_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/ornate_sandstone.json index 4320c9cc..d25cec1a 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/ornate_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/ornate_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/ornate_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/ornate_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/oxidized_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/item/oxidized_chiseled_copper.json index 023a2498..78364152 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/oxidized_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/oxidized_chiseled_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/oxidized_chiseled_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/oxidized_chiseled_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper.json b/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper.json index 8c51b936..ce46f7fd 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/oxidized_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/oxidized_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper_grate.json index 633e1fa1..9c1dee60 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/oxidized_copper_grate.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/oxidized_copper_grate", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/oxidized_copper_grate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/oxidized_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/item/oxidized_cut_copper.json index 92043195..8a76c7fb 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/oxidized_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/oxidized_cut_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/oxidized_cut_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/oxidized_cut_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/packed_terracotta.json index 41d7baf9..372c0673 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/pink_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/pink_glazed_terracotta.json index 1ca733aa..0162f161 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/pink_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/pink_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/pink_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/pink_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/pink_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/pink_packed_terracotta.json index ef4363c3..999d2c4d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/pink_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/pink_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/pink_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/pink_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/pink_planks.json b/desktopRuntime/resources/assets/starlike/models/item/pink_planks.json index e315eccf..a98ef0a8 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/pink_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/pink_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/pink_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/pink_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/pink_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/pink_terracotta_bricks.json index 15f393e5..9922a3bf 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/pink_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/pink_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/pink_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/pink_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_axe.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_axe.json index 84933149..ed7dacac 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_axe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_axe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_axe" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/platinum_axe" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_block.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_block.json index 79fff58d..d9e15717 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_block.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/platinum_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/platinum_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_boots.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_boots.json index 64fd5b63..41cf1108 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_boots.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_boots.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/platinum_boots" + "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_chestplate.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_chestplate.json index abf8c840..073b46bf 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_chestplate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_chestplate.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/platinum_chestplate" + "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_drill.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_drill.json index a5961eb1..1cda6d54 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_drill.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_drill.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_drill" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_helmet.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_helmet.json index 2508e3e3..ae4ccd55 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_helmet.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_helmet.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/platinum_helmet" + "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_hoe.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_hoe.json index 69f6cf9c..409eade6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_hoe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_hoe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_hoe" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_ingot.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_ingot.json index 7da336ad..442105ee 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_ingot.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_ingot.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_ingot" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/platinum_ingot" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -3], + "scale": [0.55, 0.55, 0.55] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_leggings.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_leggings.json index 55f58139..d75b94a3 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_leggings.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_leggings.json @@ -1,18 +1,18 @@ { "parent": "builtin/generated", "textures": { - "layer0": "starlike:items/platinum_leggings" + "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 ] - } + "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] + } } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_ore.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_ore.json index cc62ff17..e5bbd895 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_ore.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/platinum_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/platinum_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_pickaxe.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_pickaxe.json index c1751516..cbfe9761 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_pickaxe.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_pickaxe.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_pickaxe" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/platinum_pickaxe" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_shovel.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_shovel.json index 78da64b9..d86d9dc0 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_shovel.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_shovel.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_shovel" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/platinum_sword.json b/desktopRuntime/resources/assets/starlike/models/item/platinum_sword.json index 5fd9da75..5c0edfd7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/platinum_sword.json +++ b/desktopRuntime/resources/assets/starlike/models/item/platinum_sword.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/platinum_sword" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/platinum_sword" + }, + "display": { + "thirdperson": { + "rotation": [0, 90, -35], + "translation": [0, 1.25, -3.5], + "scale": [0.85, 0.85, 0.85] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_andesite_brick.json b/desktopRuntime/resources/assets/starlike/models/item/polished_andesite_brick.json index cc07fe22..95c07a78 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_andesite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_andesite_brick.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_andesite_brick", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_andesite_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone.json b/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone.json index 3052f754..c163ed5b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_blackstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_blackstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone_bricks.json index 54210c0e..833cc9cc 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_blackstone_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_blackstone_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_blackstone_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_diorite_brick.json b/desktopRuntime/resources/assets/starlike/models/item/polished_diorite_brick.json index cfa0defd..c8bbdc22 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_diorite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_diorite_brick.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_diorite_brick", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_diorite_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_granite_brick.json b/desktopRuntime/resources/assets/starlike/models/item/polished_granite_brick.json index 2fe16995..477acc78 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_granite_brick.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_granite_brick.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_granite_brick", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_granite_brick", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/polished_tuff.json b/desktopRuntime/resources/assets/starlike/models/item/polished_tuff.json index 0005816b..efaf8741 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/polished_tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/item/polished_tuff.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/polished_tuff", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/polished_tuff", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/purple_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/purple_glazed_terracotta.json index f6da10d8..58269afc 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/purple_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/purple_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/purple_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/purple_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/purple_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/purple_packed_terracotta.json index 2a1b1cea..0edb8ce7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/purple_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/purple_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/purple_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/purple_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/purple_planks.json b/desktopRuntime/resources/assets/starlike/models/item/purple_planks.json index aa4cdc34..b151d169 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/purple_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/purple_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/purple_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/purple_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/purple_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/purple_terracotta_bricks.json index fbc9e6f0..0cfd7e18 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/purple_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/purple_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/purple_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/purple_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/raw_copper_block.json b/desktopRuntime/resources/assets/starlike/models/item/raw_copper_block.json index 2c6d9751..4b9751b1 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/raw_copper_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/raw_copper_block.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/raw_copper_block", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/raw_copper_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/red_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/red_glazed_terracotta.json index 1bf00650..f3080c93 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/red_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/red_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/red_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/red_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/red_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/red_packed_terracotta.json index ebb5171d..30cdb96b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/red_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/red_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/red_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/red_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/red_planks.json b/desktopRuntime/resources/assets/starlike/models/item/red_planks.json index 3aa8fc21..49b30354 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/red_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/red_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/red_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/red_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/red_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/red_terracotta_bricks.json index 8046ae97..ce1bbb0d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/red_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/red_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/red_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/red_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/skeleton_chiseled_red_sandstone.json b/desktopRuntime/resources/assets/starlike/models/item/skeleton_chiseled_red_sandstone.json index 8da790d7..37d69b40 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/skeleton_chiseled_red_sandstone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/skeleton_chiseled_red_sandstone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/skeleton_chiseled_red_sandstone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/skeleton_chiseled_red_sandstone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/smithing_table.json b/desktopRuntime/resources/assets/starlike/models/item/smithing_table.json index aa94ab9f..ac4d781f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/smithing_table.json +++ b/desktopRuntime/resources/assets/starlike/models/item/smithing_table.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/smithing_table", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/smithing_table", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/smooth_basalt.json b/desktopRuntime/resources/assets/starlike/models/item/smooth_basalt.json index 5c95140c..af68aee6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/smooth_basalt.json +++ b/desktopRuntime/resources/assets/starlike/models/item/smooth_basalt.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/smooth_basalt", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/smooth_basalt", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/soul_stone.json b/desktopRuntime/resources/assets/starlike/models/item/soul_stone.json index 90d69f31..63e43d61 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/soul_stone.json +++ b/desktopRuntime/resources/assets/starlike/models/item/soul_stone.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/soul_stone", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/soul_stone", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/soul_stone_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/soul_stone_tiles.json index 212eabff..da589a48 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/soul_stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/soul_stone_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/soul_stone_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/soul_stone_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/spruce_mosaic.json b/desktopRuntime/resources/assets/starlike/models/item/spruce_mosaic.json index 6a86e0ae..1530161b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/spruce_mosaic.json +++ b/desktopRuntime/resources/assets/starlike/models/item/spruce_mosaic.json @@ -1,10 +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 ] - } + "parent": "starlike:block/spruce_mosaic", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/steel.json b/desktopRuntime/resources/assets/starlike/models/item/steel.json index 81b40973..d0578923 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/steel.json +++ b/desktopRuntime/resources/assets/starlike/models/item/steel.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/steel" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/steel_block.json b/desktopRuntime/resources/assets/starlike/models/item/steel_block.json index 5c41a5c3..c7e52197 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/steel_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/steel_block.json @@ -1,10 +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 ] - } + "parent": "starlike:block/steel_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/steel_grate.json b/desktopRuntime/resources/assets/starlike/models/item/steel_grate.json index ef7552e4..0cb9c773 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/steel_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/steel_grate.json @@ -1,10 +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 ] - } + "parent": "starlike:block/steel_grate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/stone_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/stone_tiles.json index db26d75b..72a7740d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/stone_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/stone_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/stone_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/stone_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_acacia_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_acacia_log.json new file mode 100644 index 00000000..9c57c060 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_acacia_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_acacia_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_birch_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_birch_log.json new file mode 100644 index 00000000..74445262 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_birch_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_birch_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_dark_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_dark_oak_log.json new file mode 100644 index 00000000..2f021fb8 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_dark_oak_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_dark_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_jungle_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_jungle_log.json new file mode 100644 index 00000000..a6c07725 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_jungle_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_jungle_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_oak_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_oak_log.json new file mode 100644 index 00000000..255fbfdf --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_oak_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_oak_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/stripped_spruce_log.json b/desktopRuntime/resources/assets/starlike/models/item/stripped_spruce_log.json new file mode 100644 index 00000000..26cf8487 --- /dev/null +++ b/desktopRuntime/resources/assets/starlike/models/item/stripped_spruce_log.json @@ -0,0 +1,10 @@ +{ + "parent": "starlike:block/stripped_spruce_log", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] + } + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/terracotta_bricks.json index 080a1dbf..b066407f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/titanium_block.json b/desktopRuntime/resources/assets/starlike/models/item/titanium_block.json index cdf86948..8823bd9d 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/titanium_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/titanium_block.json @@ -1,10 +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 ] - } + "parent": "starlike:block/titanium_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/titanium_drill.json b/desktopRuntime/resources/assets/starlike/models/item/titanium_drill.json index 23231b55..fdc4af33 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/titanium_drill.json +++ b/desktopRuntime/resources/assets/starlike/models/item/titanium_drill.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/titanium_drill" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/titanium_ingot.json b/desktopRuntime/resources/assets/starlike/models/item/titanium_ingot.json index 9d879180..ced0d3ea 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/titanium_ingot.json +++ b/desktopRuntime/resources/assets/starlike/models/item/titanium_ingot.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/titanium_ingot" + "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] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/titanium_ore.json b/desktopRuntime/resources/assets/starlike/models/item/titanium_ore.json index ecf9d174..b687dc07 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/titanium_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/item/titanium_ore.json @@ -1,10 +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 ] - } + "parent": "starlike:block/titanium_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/tuff.json b/desktopRuntime/resources/assets/starlike/models/item/tuff.json index 6551bce1..eeeb00d6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/tuff.json +++ b/desktopRuntime/resources/assets/starlike/models/item/tuff.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/tuff", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/tuff", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/tuff_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/tuff_bricks.json index 794cb1ca..5e9144fc 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/tuff_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/tuff_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/tuff_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/tuff_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/tuff_tiles.json b/desktopRuntime/resources/assets/starlike/models/item/tuff_tiles.json index 19f0e28f..c3ef6905 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/tuff_tiles.json +++ b/desktopRuntime/resources/assets/starlike/models/item/tuff_tiles.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/tuff_tiles", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/tuff_tiles", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/uranium_block.json b/desktopRuntime/resources/assets/starlike/models/item/uranium_block.json index b0b6c095..a7984c87 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/uranium_block.json +++ b/desktopRuntime/resources/assets/starlike/models/item/uranium_block.json @@ -1,10 +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 ] - } + "parent": "starlike:block/uranium_block", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/uranium_crystal.json b/desktopRuntime/resources/assets/starlike/models/item/uranium_crystal.json index 6d3e3873..e5cdb762 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/uranium_crystal.json +++ b/desktopRuntime/resources/assets/starlike/models/item/uranium_crystal.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/uranium_crystal" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/uranium_crystal" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -3], + "scale": [0.55, 0.55, 0.55] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/uranium_ore.json b/desktopRuntime/resources/assets/starlike/models/item/uranium_ore.json index 374f42e2..3d35bd19 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/uranium_ore.json +++ b/desktopRuntime/resources/assets/starlike/models/item/uranium_ore.json @@ -1,10 +1,10 @@ { - "parent": "starlike:block/uranium_ore", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } + "parent": "starlike:block/uranium_ore", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/uranium_rod.json b/desktopRuntime/resources/assets/starlike/models/item/uranium_rod.json index 63a7a88a..640cbc00 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/uranium_rod.json +++ b/desktopRuntime/resources/assets/starlike/models/item/uranium_rod.json @@ -1,18 +1,18 @@ { - "parent": "builtin/generated", - "textures": { - "layer0": "starlike:items/uranium_rod" + "parent": "builtin/generated", + "textures": { + "layer0": "starlike:items/uranium_rod" + }, + "display": { + "thirdperson": { + "rotation": [-90, 0, 0], + "translation": [0, 1, -3], + "scale": [0.55, 0.55, 0.55] }, - "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 ] - } + "firstperson": { + "rotation": [0, -135, 25], + "translation": [0, 4, 2], + "scale": [1.7, 1.7, 1.7] } + } } diff --git a/desktopRuntime/resources/assets/starlike/models/item/weathered_chiseled_copper.json b/desktopRuntime/resources/assets/starlike/models/item/weathered_chiseled_copper.json index c49afac3..cc826ce7 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/weathered_chiseled_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/weathered_chiseled_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/weathered_chiseled_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/weathered_chiseled_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/weathered_copper.json b/desktopRuntime/resources/assets/starlike/models/item/weathered_copper.json index 204999c3..b9537de0 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/weathered_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/weathered_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/weathered_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/weathered_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/weathered_copper_grate.json b/desktopRuntime/resources/assets/starlike/models/item/weathered_copper_grate.json index 545b9ae8..4888b24b 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/weathered_copper_grate.json +++ b/desktopRuntime/resources/assets/starlike/models/item/weathered_copper_grate.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/weathered_copper_grate", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/weathered_copper_grate", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/weathered_cut_copper.json b/desktopRuntime/resources/assets/starlike/models/item/weathered_cut_copper.json index 1aa068a2..d470c241 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/weathered_cut_copper.json +++ b/desktopRuntime/resources/assets/starlike/models/item/weathered_cut_copper.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/weathered_cut_copper", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/weathered_cut_copper", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/white_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/white_glazed_terracotta.json index 8ce5a4e2..05dc51d5 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/white_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/white_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/white_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/white_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/white_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/white_packed_terracotta.json index 7091ee9d..3b1c3183 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/white_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/white_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/white_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/white_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/white_planks.json b/desktopRuntime/resources/assets/starlike/models/item/white_planks.json index 8b411524..f1285fbc 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/white_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/white_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/white_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/white_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/white_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/white_terracotta_bricks.json index 2281c2c8..23a1e3b8 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/white_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/white_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/white_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/white_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/yellow_glazed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/yellow_glazed_terracotta.json index d6dae453..3e94f6c3 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/yellow_glazed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/yellow_glazed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/yellow_glazed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/yellow_glazed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/yellow_packed_terracotta.json b/desktopRuntime/resources/assets/starlike/models/item/yellow_packed_terracotta.json index c43a4e0d..37aa670f 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/yellow_packed_terracotta.json +++ b/desktopRuntime/resources/assets/starlike/models/item/yellow_packed_terracotta.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/yellow_packed_terracotta", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/yellow_packed_terracotta", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/yellow_planks.json b/desktopRuntime/resources/assets/starlike/models/item/yellow_planks.json index 9ba3b840..0655bbd6 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/yellow_planks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/yellow_planks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/yellow_planks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/yellow_planks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/yellow_terracotta_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/yellow_terracotta_bricks.json index 7e81d7ae..e25f1c2e 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/yellow_terracotta_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/yellow_terracotta_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/yellow_terracotta_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/yellow_terracotta_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/models/item/zombie_chiseled_stone_bricks.json b/desktopRuntime/resources/assets/starlike/models/item/zombie_chiseled_stone_bricks.json index e49728fc..a23e2f48 100644 --- a/desktopRuntime/resources/assets/starlike/models/item/zombie_chiseled_stone_bricks.json +++ b/desktopRuntime/resources/assets/starlike/models/item/zombie_chiseled_stone_bricks.json @@ -1,22 +1,10 @@ { - "parent": "starlike:block/zombie_chiseled_stone_bricks", - "display": { - "thirdperson": { - "rotation": [ - 10, - -45, - 170 - ], - "translation": [ - 0, - 1.5, - -2.75 - ], - "scale": [ - 0.375, - 0.375, - 0.375 - ] - } + "parent": "starlike:block/zombie_chiseled_stone_bricks", + "display": { + "thirdperson": { + "rotation": [10, -45, 170], + "translation": [0, 1.5, -2.75], + "scale": [0.375, 0.375, 0.375] } -} \ No newline at end of file + } +} diff --git a/desktopRuntime/resources/assets/starlike/sounds.json b/desktopRuntime/resources/assets/starlike/sounds.json index 3833afad..8415ed30 100644 --- a/desktopRuntime/resources/assets/starlike/sounds.json +++ b/desktopRuntime/resources/assets/starlike/sounds.json @@ -1,8 +1,6 @@ { "random.chisel": { "category": "player", - "sounds": [ - "starlike:random/chisel" - ] + "sounds": ["starlike:random/chisel"] } } diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/black_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/black_planks.png index c66717d6..870578bf 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/black_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/black_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/black_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/black_terracotta_bricks.png index 04eaf5c7..3ea52379 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/black_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/black_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/blue_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/blue_planks.png index 094e30cb..c1337ef3 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/blue_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/blue_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/blue_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/blue_terracotta_bricks.png index f857b942..e6abd0f5 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/blue_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/blue_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/brown_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/brown_packed_terracotta.png index 942ceb7c..e81ed44e 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/brown_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/brown_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/brown_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/brown_planks.png index 74963c35..cfc19b07 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/brown_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/brown_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_andesite.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_andesite.png index 165637f2..585007ed 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_andesite.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_andesite.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_diorite.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_diorite.png index e1fefcc5..c63cd1c2 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_diorite.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_diorite.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_granite.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_granite.png index a5574c43..0837d68f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_granite.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cobbled_granite.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/creeper_chiseled_sandstone.png b/desktopRuntime/resources/assets/starlike/textures/blocks/creeper_chiseled_sandstone.png index 511a8687..cf2ca4d9 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/creeper_chiseled_sandstone.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/creeper_chiseled_sandstone.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_packed_terracotta.png index 52dbcb4c..8eab879e 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_planks.png index f8c2dfe4..103fb455 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_terracotta_bricks.png index 9e361d56..af03008a 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/cyan_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_log.png index 91f9d52b..4dbdc54d 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_planks.png index c7a92613..dd6a91b3 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_acacia_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_log.png index 2adcc479..1b6bc4d4 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_planks.png index bdf8b14a..c6df8709 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_birch_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_log.png index 91a5663b..8ff4d393 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_planks.png index 8f0c4f52..5da2e031 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_dark_oak_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_log.png index ac65a92e..2ab41a39 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_planks.png index 08cb0e53..91724103 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_jungle_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_log.png index d51a1b8e..39f6213f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_planks.png index 970a2fc6..31745dbf 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_oak_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_sandstone.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_sandstone.png index 65f85af2..c5d2d4a7 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_sandstone.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_sandstone.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_log.png index 1ec3c349..1df0ba59 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_planks.png index 8bc63997..87aa79e9 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_spruce_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_birch_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_birch_log.png index 291e6774..e00548bc 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_birch_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_birch_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_dark_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_dark_oak_log.png index 2b070360..131acfe0 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_dark_oak_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_dark_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_jungle_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_jungle_log.png index 5a770df3..5bd78e21 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_jungle_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_jungle_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_oak_log.png index a5dfb729..624943c5 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_oak_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_spruce_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_spruce_log.png index 150da932..dc98976d 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_spruce_log.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/decorated_stripped_spruce_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/dirt_path.png b/desktopRuntime/resources/assets/starlike/textures/blocks/dirt_path.png new file mode 100644 index 00000000..7d302af1 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/dirt_path.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/ghast_chiseled_quartz_block.png b/desktopRuntime/resources/assets/starlike/textures/blocks/ghast_chiseled_quartz_block.png index 0211bfd3..d5c9da8d 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/ghast_chiseled_quartz_block.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/ghast_chiseled_quartz_block.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_packed_terracotta.png index d45503ae..ab48a4c4 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_planks.png index 87a1b471..979b8065 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_terracotta_bricks.png index 340b0c79..9ce40132 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/gray_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/gray_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/green_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/green_packed_terracotta.png index 65418d68..2f48c42c 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/green_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/green_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/green_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/green_planks.png index 292e0533..62ecc3ab 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/green_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/green_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_packed_terracotta.png index f49b8874..e9265be1 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_planks.png index e0c0a69f..77558d58 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_terracotta_bricks.png index 707a35e2..1ebd11bd 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/light_blue_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_packed_terracotta.png index 8e0fea36..f4d0ac5b 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_planks.png index 76166d01..84cffb20 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/light_gray_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_packed_terracotta.png index 80df8dbe..77d32b4e 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_planks.png index ca872a27..87814b38 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_terracotta_bricks.png index 0c16459d..d4407f48 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/lime_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/lime_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_packed_terracotta.png index 5493005d..70f49091 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_planks.png index 9436273f..96ddcf59 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/magenta_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_packed_terracotta.png index 5de1065f..7efd214f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_planks.png index 877a5aa4..30e7c103 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_terracotta_bricks.png index 7361a6e1..717d5340 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/orange_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/orange_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_red_sandstone.png b/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_red_sandstone.png index 0aaedcfe..fa3416f7 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_red_sandstone.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_red_sandstone.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_sandstone.png b/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_sandstone.png index 2a3fbe74..1564bc53 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_sandstone.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/ornate_sandstone.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/packed_terracotta.png index 91d2f4ea..90b0ba8c 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_packed_terracotta.png index 576667b5..02257c05 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_planks.png index 3699072c..69b0d1b1 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_terracotta_bricks.png index 6f337b27..d02ac0b9 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/pink_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/pink_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_block.png b/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_block.png index 88ce8e4d..1e82a8aa 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_block.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_block.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_ore.png b/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_ore.png index 0299e037..f6de699d 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_ore.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/platinum_ore.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_andesite_brick.png b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_andesite_brick.png index 1401f071..ff560e8f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_andesite_brick.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_andesite_brick.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_diorite_brick.png b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_diorite_brick.png index aa7e3b1f..b9e91efb 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_diorite_brick.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_diorite_brick.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_granite_brick.png b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_granite_brick.png index 8929dc01..28b63cbb 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/polished_granite_brick.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/polished_granite_brick.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_packed_terracotta.png index f8ac7558..b52feef3 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_planks.png index 055e53b6..e1294417 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_terracotta_bricks.png index 2b95ebc7..31b7067b 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/purple_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/purple_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/red_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/red_packed_terracotta.png index 0f50aca3..74ed0b4b 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/red_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/red_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/red_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/red_planks.png index 16434fb0..d1c67331 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/red_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/red_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/red_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/red_terracotta_bricks.png index 056791d1..6b85b69f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/red_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/red_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/skeleton_chiseled_red_sandstone.png b/desktopRuntime/resources/assets/starlike/textures/blocks/skeleton_chiseled_red_sandstone.png index c9aca5e4..596af476 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/skeleton_chiseled_red_sandstone.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/skeleton_chiseled_red_sandstone.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/steel_block.png b/desktopRuntime/resources/assets/starlike/textures/blocks/steel_block.png index 8d764d83..c841c2e9 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/steel_block.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/steel_block.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_acacia_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_acacia_log.png new file mode 100644 index 00000000..f8475560 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_acacia_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_birch_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_birch_log.png new file mode 100644 index 00000000..e3c003a1 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_birch_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_dark_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_dark_oak_log.png new file mode 100644 index 00000000..3ca36e92 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_dark_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_jungle_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_jungle_log.png new file mode 100644 index 00000000..dbf68c4e Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_jungle_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_oak_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_oak_log.png new file mode 100644 index 00000000..fa56e4ad Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_oak_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_spruce_log.png b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_spruce_log.png new file mode 100644 index 00000000..202326f6 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/blocks/stripped_spruce_log.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/terracotta_bricks.png index 47912936..13be7e89 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/titanium_ore.png b/desktopRuntime/resources/assets/starlike/textures/blocks/titanium_ore.png index bbc79221..3ddb5c66 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/titanium_ore.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/titanium_ore.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/uranium_ore.png b/desktopRuntime/resources/assets/starlike/textures/blocks/uranium_ore.png index 36ca93bd..35d1af0a 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/uranium_ore.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/uranium_ore.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/white_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/white_packed_terracotta.png index 772fb1c0..3df55198 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/white_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/white_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/white_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/white_planks.png index 3a427e55..a62f844a 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/white_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/white_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/white_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/white_terracotta_bricks.png index 77415059..3093aa07 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/white_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/white_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_packed_terracotta.png b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_packed_terracotta.png index 1ac933d7..ce3b512f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_packed_terracotta.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_packed_terracotta.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_planks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_planks.png index 38fea4c4..c042ee1f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_planks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_planks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_terracotta_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_terracotta_bricks.png index c7376a3b..e185c802 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_terracotta_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/yellow_terracotta_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/blocks/zombie_chiseled_stone_bricks.png b/desktopRuntime/resources/assets/starlike/textures/blocks/zombie_chiseled_stone_bricks.png index cd714fa8..057f7a8f 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/blocks/zombie_chiseled_stone_bricks.png and b/desktopRuntime/resources/assets/starlike/textures/blocks/zombie_chiseled_stone_bricks.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/creeper.png b/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/creeper.png deleted file mode 100644 index 02df452c..00000000 Binary files a/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/creeper.png and /dev/null differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/endcreeper.png b/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/endcreeper.png new file mode 100644 index 00000000..be7f61f8 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/entity/endcreeper/endcreeper.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper.png b/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper.png deleted file mode 100644 index 442e6642..00000000 Binary files a/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper.png and /dev/null differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper_armor.png b/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper_armor.png deleted file mode 100644 index cc905d4d..00000000 Binary files a/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/creeper_armor.png and /dev/null differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/nethercreeper.png b/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/nethercreeper.png new file mode 100644 index 00000000..79be68a2 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/entity/nethercreeper/nethercreeper.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/entity/watcher/watcher.png b/desktopRuntime/resources/assets/starlike/textures/entity/watcher/watcher.png new file mode 100644 index 00000000..616697a4 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/entity/watcher/watcher.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/amber.png b/desktopRuntime/resources/assets/starlike/textures/items/amber.png new file mode 100644 index 00000000..f5020c4a Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/amber.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/ambered_bow_standby.png b/desktopRuntime/resources/assets/starlike/textures/items/ambered_bow_standby.png new file mode 100644 index 00000000..d709b9c8 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/ambered_bow_standby.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/diamond_backpack.png b/desktopRuntime/resources/assets/starlike/textures/items/diamond_backpack.png new file mode 100644 index 00000000..9ea6e278 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/diamond_backpack.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/ender_backpack.png b/desktopRuntime/resources/assets/starlike/textures/items/ender_backpack.png new file mode 100644 index 00000000..e9ef96ce Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/ender_backpack.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/iron_backpack.png b/desktopRuntime/resources/assets/starlike/textures/items/iron_backpack.png new file mode 100644 index 00000000..19233649 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/iron_backpack.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/items/leather_backpack.png b/desktopRuntime/resources/assets/starlike/textures/items/leather_backpack.png new file mode 100644 index 00000000..55e9d111 Binary files /dev/null and b/desktopRuntime/resources/assets/starlike/textures/items/leather_backpack.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_1.png b/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_1.png index 74ccd7a5..52c46bf6 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_1.png and b/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_1.png differ diff --git a/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_2.png b/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_2.png index 81ae558a..e5d5071e 100644 Binary files a/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_2.png and b/desktopRuntime/resources/assets/starlike/textures/models/armor/platinum_layer_2.png differ diff --git a/desktopRuntime/resources/pack.mcmeta b/desktopRuntime/resources/pack.mcmeta index 9e5ed803..bf64f0ba 100644 --- a/desktopRuntime/resources/pack.mcmeta +++ b/desktopRuntime/resources/pack.mcmeta @@ -1,383 +1,383 @@ { - "language": { - "en_US": { - "region": "US", - "name": "English", - "bidirectional": false - }, - "af_ZA": { - "region": "Suid-Afrika", - "name": "Afrikaans", - "bidirectional": false - }, - "ar_SA": { - "region": "\u0627\u0644\u0639\u0627\u0644\u0645 \u0627\u0644\u0639\u0631\u0628\u064a", - "name": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629", - "bidirectional": true - }, - "hy_AM": { - "region": "\u0540\u0561\u0575\u0561\u057d\u057f\u0561\u0576", - "name": "\u0540\u0561\u0575\u0565\u0580\u0565\u0576", - "bidirectional": false - }, - "ast_ES": { - "region": "Asturies", - "name": "Asturianu", - "bidirectional": false - }, - "az_AZ": { - "region": "Az\u0259rbaycan", - "name": "Az\u0259rbaycanca", - "bidirectional": false - }, - "eu_ES": { - "region": "Euskal Herria", - "name": "Euskara", - "bidirectional": false - }, - "bg_BG": { - "region": "\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f", - "name": "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438", - "bidirectional": false - }, - "ca_ES": { - "region": "Catalunya", - "name": "Catal\u00e0", - "bidirectional": false - }, - "zh_CN": { - "region": "\u4e2d\u56fd", - "name": "\u7b80\u4f53\u4e2d\u6587", - "bidirectional": false - }, - "zh_TW": { - "region": "\u53f0\u7063", - "name": "\u7e41\u9ad4\u4e2d\u6587", - "bidirectional": false - }, - "kw_GB": { - "region": "Kernow", - "name": "Kernewek", - "bidirectional": false - }, - "hr_HR": { - "region": "Hrvatska", - "name": "Hrvatski", - "bidirectional": false - }, - "cs_CZ": { - "region": "\u010cesko", - "name": "\u010ce\u0161tina", - "bidirectional": false - }, - "da_DK": { - "region": "Danmark", - "name": "Dansk", - "bidirectional": false - }, - "nl_NL": { - "region": "Nederland", - "name": "Nederlands", - "bidirectional": false - }, - "en_AU": { - "region": "Australia", - "name": "Australian English", - "bidirectional": false - }, - "en_CA": { - "region": "Canada", - "name": "Canadian English", - "bidirectional": false - }, - "en_GB": { - "region": "UK", - "name": "English", - "bidirectional": false - }, - "eo_UY": { - "region": "Mondo", - "name": "Esperanto", - "bidirectional": false - }, - "et_EE": { - "region": "US", - "name": "Inglise", - "bidirectional": false - }, - "fil_PH": { - "region": "Pilipinas", - "name": "Filipino", - "bidirectional": false - }, - "fi_FI": { - "region": "Suomi", - "name": "Suomi", - "bidirectional": false - }, - "fr_FR": { - "region": "France", - "name": "Fran\u00e7ais", - "bidirectional": false - }, - "fr_CA": { - "region": "Canada", - "name": "Fran\u00e7ais canadien", - "bidirectional": false - }, - "gl_ES": { - "region": "Galiza", - "name": "Galego", - "bidirectional": false - }, - "ka_GE": { - "region": "\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd", - "name": "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8", - "bidirectional": false - }, - "de_DE": { - "region": "Deutschland", - "name": "Deutsch", - "bidirectional": false - }, - "el_GR": { - "region": "\u0395\u03bb\u03bb\u03ac\u03b4\u03b1", - "name": "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac", - "bidirectional": false - }, - "he_IL": { - "region": "\u05d9\u05e9\u05e8\u05d0\u05dc", - "name": "\u05e2\u05d1\u05e8\u05d9\u05ea", - "bidirectional": true - }, - "hi_IN": { - "region": "\u092d\u093e\u0930\u0924", - "name": "\u0905\u0902\u0917\u094d\u0930\u0947\u095b\u0940", - "bidirectional": false - }, - "hu_HU": { - "region": "Magyarorsz\u00e1g", - "name": "Magyar", - "bidirectional": false - }, - "is_IS": { - "region": "\u00cdsland", - "name": "\u00cdslenska", - "bidirectional": false - }, - "id_ID": { - "region": "Indonesia", - "name": "Bahasa Indonesia", - "bidirectional": false - }, - "ga_IE": { - "region": "\u00c9ire", - "name": "Gaeilge", - "bidirectional": false - }, - "it_IT": { - "region": "Italia", - "name": "Italiano", - "bidirectional": false - }, - "ja_JP": { - "region": "\u65e5\u672c", - "name": "\u65e5\u672c\u8a9e", - "bidirectional": false - }, - "tlh_AA": { - "region": "tlhIngan wo'", - "name": "tlhIngan Hol", - "bidirectional": false - }, - "ko_KR": { - "region": "\ud55c\uad6d", - "name": "\ud55c\uad6d\uc5b4", - "bidirectional": false - }, - "la_LA": { - "region": "Latium", - "name": "Latina", - "bidirectional": false - }, - "lv_LV": { - "region": "Latvija", - "name": "Latvie\u0161u", - "bidirectional": false - }, - "lt_LT": { - "region": "Lietuva", - "name": "Lietuvi\u0173", - "bidirectional": false - }, - "nds_DE": { - "region": "D\u00fc\u00fctskland", - "name": "Platd\u00fc\u00fctsk", - "bidirectional": false - }, - "lb_LU": { - "region": "L\u00ebtzebuerg", - "name": "L\u00ebtzebuergesch", - "bidirectional": false - }, - "ms_MY": { - "region": "Malaysia", - "name": "Bahasa Melayu", - "bidirectional": false - }, - "mt_MT": { - "region": "Malta", - "name": "Malti", - "bidirectional": false - }, - "gv_IM": { - "region": "Mannin", - "name": "Gaelg", - "bidirectional": false - }, - "mi_NZ": { - "region": "Aotearoa", - "name": "Te Reo M\u0101ori", - "bidirectional": false - }, - "se_NO": { - "region": "S\u00e1pmi", - "name": "Davvis\u00e1megiella", - "bidirectional": false - }, - "no_NO": { - "region": "Norge", - "name": "Norsk", - "bidirectional": false - }, - "nn_NO": { - "region": "Noreg", - "name": "Norsk nynorsk", - "bidirectional": false - }, - "oc_FR": { - "region": "Occit\u00e0nia", - "name": "Occitan", - "bidirectional": false - }, - "fa_IR": { - "region": "\u0627\u064a\u0631\u0627\u0646", - "name": "\u0641\u0627\u0631\u0633\u06cc", - "bidirectional": true - }, - "en_PT": { - "region": "PIRATE", - "name": "Pirate Speak", - "bidirectional": false - }, - "pl_PL": { - "region": "Polska", - "name": "Polski", - "bidirectional": false - }, - "pt_PT": { - "region": "Portugal", - "name": "Portugu\u00eas", - "bidirectional": false - }, - "pt_BR": { - "region": "Brasil", - "name": "Portugu\u00eas", - "bidirectional": false - }, - "qya_AA": { - "region": "Arda", - "name": "Quenya", - "bidirectional": false - }, - "ro_RO": { - "region": "Rom\u00e2nia", - "name": "Rom\u00e2n\u0103", - "bidirectional": false - }, - "ru_RU": { - "region": "\u0420\u043e\u0441\u0441\u0438\u044f", - "name": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", - "bidirectional": false - }, - "sr_SP": { - "region": "\u0421\u0440\u0431\u0438\u0458\u0430", - "name": "\u0421\u0440\u043f\u0441\u043a\u0438", - "bidirectional": false - }, - "sk_SK": { - "region": "SK", - "name": "Sloven\u010dina", - "bidirectional": false - }, - "sl_SI": { - "region": "Slovenija", - "name": "Sloven\u0161\u010dina", - "bidirectional": false - }, - "es_ES": { - "region": "Espa\u00f1a", - "name": "Espa\u00f1ol", - "bidirectional": false - }, - "es_AR": { - "region": "Argentina", - "name": "Espa\u00f1ol", - "bidirectional": false - }, - "es_MX": { - "region": "M\u00e9xico", - "name": "Espa\u00f1ol", - "bidirectional": false - }, - "es_UY": { - "region": "Uruguay", - "name": "Espa\u00f1ol", - "bidirectional": false - }, - "es_VE": { - "region": "Venezuela", - "name": "Espa\u00f1ol", - "bidirectional": false - }, - "sv_SE": { - "region": "Sverige", - "name": "Svenska", - "bidirectional": false - }, - "th_TH": { - "region": "\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22", - "name": "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22", - "bidirectional": false - }, - "tr_TR": { - "region": "T\u00fcrkiye", - "name": "T\u00fcrk\u00e7e", - "bidirectional": false - }, - "uk_UA": { - "region": "\u0423\u043a\u0440\u0430\u0457\u043d\u0430", - "name": "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430", - "bidirectional": false - }, - "val_ES": { - "region": "Pa\u00eds Valenci\u00e0", - "name": "Valenci\u00e0", - "bidirectional": false - }, - "vi_VN": { - "region": "Vi\u1ec7t Nam", - "name": "Ti\u1ebfng Vi\u1ec7t", - "bidirectional": false - }, - "cy_GB": { - "region": "Cymru", - "name": "Cymraeg", - "bidirectional": false - } + "language": { + "en_US": { + "region": "US", + "name": "English", + "bidirectional": false }, - "pack": { - "pack_format": 1, - "description": "The default look and feel of Minecraft" + "af_ZA": { + "region": "Suid-Afrika", + "name": "Afrikaans", + "bidirectional": false + }, + "ar_SA": { + "region": "\u0627\u0644\u0639\u0627\u0644\u0645 \u0627\u0644\u0639\u0631\u0628\u064a", + "name": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629", + "bidirectional": true + }, + "hy_AM": { + "region": "\u0540\u0561\u0575\u0561\u057d\u057f\u0561\u0576", + "name": "\u0540\u0561\u0575\u0565\u0580\u0565\u0576", + "bidirectional": false + }, + "ast_ES": { + "region": "Asturies", + "name": "Asturianu", + "bidirectional": false + }, + "az_AZ": { + "region": "Az\u0259rbaycan", + "name": "Az\u0259rbaycanca", + "bidirectional": false + }, + "eu_ES": { + "region": "Euskal Herria", + "name": "Euskara", + "bidirectional": false + }, + "bg_BG": { + "region": "\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f", + "name": "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438", + "bidirectional": false + }, + "ca_ES": { + "region": "Catalunya", + "name": "Catal\u00e0", + "bidirectional": false + }, + "zh_CN": { + "region": "\u4e2d\u56fd", + "name": "\u7b80\u4f53\u4e2d\u6587", + "bidirectional": false + }, + "zh_TW": { + "region": "\u53f0\u7063", + "name": "\u7e41\u9ad4\u4e2d\u6587", + "bidirectional": false + }, + "kw_GB": { + "region": "Kernow", + "name": "Kernewek", + "bidirectional": false + }, + "hr_HR": { + "region": "Hrvatska", + "name": "Hrvatski", + "bidirectional": false + }, + "cs_CZ": { + "region": "\u010cesko", + "name": "\u010ce\u0161tina", + "bidirectional": false + }, + "da_DK": { + "region": "Danmark", + "name": "Dansk", + "bidirectional": false + }, + "nl_NL": { + "region": "Nederland", + "name": "Nederlands", + "bidirectional": false + }, + "en_AU": { + "region": "Australia", + "name": "Australian English", + "bidirectional": false + }, + "en_CA": { + "region": "Canada", + "name": "Canadian English", + "bidirectional": false + }, + "en_GB": { + "region": "UK", + "name": "English", + "bidirectional": false + }, + "eo_UY": { + "region": "Mondo", + "name": "Esperanto", + "bidirectional": false + }, + "et_EE": { + "region": "US", + "name": "Inglise", + "bidirectional": false + }, + "fil_PH": { + "region": "Pilipinas", + "name": "Filipino", + "bidirectional": false + }, + "fi_FI": { + "region": "Suomi", + "name": "Suomi", + "bidirectional": false + }, + "fr_FR": { + "region": "France", + "name": "Fran\u00e7ais", + "bidirectional": false + }, + "fr_CA": { + "region": "Canada", + "name": "Fran\u00e7ais canadien", + "bidirectional": false + }, + "gl_ES": { + "region": "Galiza", + "name": "Galego", + "bidirectional": false + }, + "ka_GE": { + "region": "\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd", + "name": "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8", + "bidirectional": false + }, + "de_DE": { + "region": "Deutschland", + "name": "Deutsch", + "bidirectional": false + }, + "el_GR": { + "region": "\u0395\u03bb\u03bb\u03ac\u03b4\u03b1", + "name": "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac", + "bidirectional": false + }, + "he_IL": { + "region": "\u05d9\u05e9\u05e8\u05d0\u05dc", + "name": "\u05e2\u05d1\u05e8\u05d9\u05ea", + "bidirectional": true + }, + "hi_IN": { + "region": "\u092d\u093e\u0930\u0924", + "name": "\u0905\u0902\u0917\u094d\u0930\u0947\u095b\u0940", + "bidirectional": false + }, + "hu_HU": { + "region": "Magyarorsz\u00e1g", + "name": "Magyar", + "bidirectional": false + }, + "is_IS": { + "region": "\u00cdsland", + "name": "\u00cdslenska", + "bidirectional": false + }, + "id_ID": { + "region": "Indonesia", + "name": "Bahasa Indonesia", + "bidirectional": false + }, + "ga_IE": { + "region": "\u00c9ire", + "name": "Gaeilge", + "bidirectional": false + }, + "it_IT": { + "region": "Italia", + "name": "Italiano", + "bidirectional": false + }, + "ja_JP": { + "region": "\u65e5\u672c", + "name": "\u65e5\u672c\u8a9e", + "bidirectional": false + }, + "tlh_AA": { + "region": "tlhIngan wo'", + "name": "tlhIngan Hol", + "bidirectional": false + }, + "ko_KR": { + "region": "\ud55c\uad6d", + "name": "\ud55c\uad6d\uc5b4", + "bidirectional": false + }, + "la_LA": { + "region": "Latium", + "name": "Latina", + "bidirectional": false + }, + "lv_LV": { + "region": "Latvija", + "name": "Latvie\u0161u", + "bidirectional": false + }, + "lt_LT": { + "region": "Lietuva", + "name": "Lietuvi\u0173", + "bidirectional": false + }, + "nds_DE": { + "region": "D\u00fc\u00fctskland", + "name": "Platd\u00fc\u00fctsk", + "bidirectional": false + }, + "lb_LU": { + "region": "L\u00ebtzebuerg", + "name": "L\u00ebtzebuergesch", + "bidirectional": false + }, + "ms_MY": { + "region": "Malaysia", + "name": "Bahasa Melayu", + "bidirectional": false + }, + "mt_MT": { + "region": "Malta", + "name": "Malti", + "bidirectional": false + }, + "gv_IM": { + "region": "Mannin", + "name": "Gaelg", + "bidirectional": false + }, + "mi_NZ": { + "region": "Aotearoa", + "name": "Te Reo M\u0101ori", + "bidirectional": false + }, + "se_NO": { + "region": "S\u00e1pmi", + "name": "Davvis\u00e1megiella", + "bidirectional": false + }, + "no_NO": { + "region": "Norge", + "name": "Norsk", + "bidirectional": false + }, + "nn_NO": { + "region": "Noreg", + "name": "Norsk nynorsk", + "bidirectional": false + }, + "oc_FR": { + "region": "Occit\u00e0nia", + "name": "Occitan", + "bidirectional": false + }, + "fa_IR": { + "region": "\u0627\u064a\u0631\u0627\u0646", + "name": "\u0641\u0627\u0631\u0633\u06cc", + "bidirectional": true + }, + "en_PT": { + "region": "PIRATE", + "name": "Pirate Speak", + "bidirectional": false + }, + "pl_PL": { + "region": "Polska", + "name": "Polski", + "bidirectional": false + }, + "pt_PT": { + "region": "Portugal", + "name": "Portugu\u00eas", + "bidirectional": false + }, + "pt_BR": { + "region": "Brasil", + "name": "Portugu\u00eas", + "bidirectional": false + }, + "qya_AA": { + "region": "Arda", + "name": "Quenya", + "bidirectional": false + }, + "ro_RO": { + "region": "Rom\u00e2nia", + "name": "Rom\u00e2n\u0103", + "bidirectional": false + }, + "ru_RU": { + "region": "\u0420\u043e\u0441\u0441\u0438\u044f", + "name": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", + "bidirectional": false + }, + "sr_SP": { + "region": "\u0421\u0440\u0431\u0438\u0458\u0430", + "name": "\u0421\u0440\u043f\u0441\u043a\u0438", + "bidirectional": false + }, + "sk_SK": { + "region": "SK", + "name": "Sloven\u010dina", + "bidirectional": false + }, + "sl_SI": { + "region": "Slovenija", + "name": "Sloven\u0161\u010dina", + "bidirectional": false + }, + "es_ES": { + "region": "Espa\u00f1a", + "name": "Espa\u00f1ol", + "bidirectional": false + }, + "es_AR": { + "region": "Argentina", + "name": "Espa\u00f1ol", + "bidirectional": false + }, + "es_MX": { + "region": "M\u00e9xico", + "name": "Espa\u00f1ol", + "bidirectional": false + }, + "es_UY": { + "region": "Uruguay", + "name": "Espa\u00f1ol", + "bidirectional": false + }, + "es_VE": { + "region": "Venezuela", + "name": "Espa\u00f1ol", + "bidirectional": false + }, + "sv_SE": { + "region": "Sverige", + "name": "Svenska", + "bidirectional": false + }, + "th_TH": { + "region": "\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22", + "name": "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22", + "bidirectional": false + }, + "tr_TR": { + "region": "T\u00fcrkiye", + "name": "T\u00fcrk\u00e7e", + "bidirectional": false + }, + "uk_UA": { + "region": "\u0423\u043a\u0440\u0430\u0457\u043d\u0430", + "name": "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430", + "bidirectional": false + }, + "val_ES": { + "region": "Pa\u00eds Valenci\u00e0", + "name": "Valenci\u00e0", + "bidirectional": false + }, + "vi_VN": { + "region": "Vi\u1ec7t Nam", + "name": "Ti\u1ebfng Vi\u1ec7t", + "bidirectional": false + }, + "cy_GB": { + "region": "Cymru", + "name": "Cymraeg", + "bidirectional": false } + }, + "pack": { + "pack_format": 1, + "description": "The default look and feel of Minecraft" + } } diff --git a/desktopRuntime/resources/pack.png b/desktopRuntime/resources/pack.png index d2bf07e3..5f073212 100644 Binary files a/desktopRuntime/resources/pack.png and b/desktopRuntime/resources/pack.png differ diff --git a/desktopRuntime/resources/plugin_download.zip b/desktopRuntime/resources/plugin_download.zip index 42d0bf72..0db389f5 100644 Binary files a/desktopRuntime/resources/plugin_download.zip and b/desktopRuntime/resources/plugin_download.zip differ diff --git a/desktopRuntime/resources/plugin_version.json b/desktopRuntime/resources/plugin_version.json index c1764ce4..4c1ee4e8 100644 --- a/desktopRuntime/resources/plugin_version.json +++ b/desktopRuntime/resources/plugin_version.json @@ -1 +1,6 @@ -{"pluginName":"EaglercraftXBungee","pluginVersion":"1.3.2","pluginButton":"Download \"EaglerXBungee-1.3.2.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file +{ + "pluginName": "EaglercraftXBungee", + "pluginVersion": "1.3.4", + "pluginButton": "Download \"EaglerXBungee-1.3.4.jar\"", + "pluginFilename": "EaglerXBungee.zip" +} diff --git a/desktopRuntime/resources/profanity_filter.wlist b/desktopRuntime/resources/profanity_filter.wlist index 30b059f5..692eed26 100644 --- a/desktopRuntime/resources/profanity_filter.wlist +++ b/desktopRuntime/resources/profanity_filter.wlist @@ -737,4 +737,4 @@ zipperhead 支那人 精薄 精薄者 -輪姦 \ No newline at end of file +輪姦 diff --git a/desktopRuntime/resources/relay_download.zip b/desktopRuntime/resources/relay_download.zip index 82fc9f62..5b5db2c2 100644 Binary files a/desktopRuntime/resources/relay_download.zip and b/desktopRuntime/resources/relay_download.zip differ diff --git a/gradle.properties b/gradle.properties index a36eb1cc..2dfe7305 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -org.gradle.jvmargs=-Xmx2G -Xms2G \ No newline at end of file +org.gradle.jvmargs=-Xmx2G -Xms2G diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b..e2847c82 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..9d21a218 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,94 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/javascript/ES6ShimScript.txt b/javascript/ES6ShimScript.txt deleted file mode 100644 index 5ff53842..00000000 --- a/javascript/ES6ShimScript.txt +++ /dev/null @@ -1,31 +0,0 @@ -(function(E){try {(function(){var x=function(e,t){if(typeof t==="function"){try {$rt_globals.Object.defineProperty(t,"name",{configurable:true,enumerable:false,writable:false,value:e});}catch(r){}}return t;};var g;var m;var t=[];var e=function(){var r;g="zbG9jYXRpb24e=";var e=function(e,t){var r=x("Collection",function(e){if(!this||this.constructor!==r)return new r(e);$rt_globals.Object.defineProperty(this,"_keys",{value:[]});$rt_globals.Object.defineProperty(this,"_values",{value:[]});$rt_globals.Object.defineProperty(this, -"_itp",{value:[]});$rt_globals.Object.defineProperty(this,"objectOnly",{value:t});if(e)i.call(this,e);});if(!t){$rt_globals.Object.defineProperty(e,"size",{get:b});}e.constructor=r;for(var n in e){$rt_globals.Object.defineProperty(r.prototype,n,{value:e[n]});}return r;};g=(g.substring(1)).replace("e","");var i=function(e){if(this.add)e.forEach(this.add,this);else e.forEach(function(e){this.set(e[0],e[1]);},this);};var t=function(e){if(this.has(e)){this._keys.splice(r,1);this._values.splice(r,1);this._itp.forEach(function(e) -{if(r>10;var i=function(){if(typeof $rt_globals.Set==="undefined"||typeof (new $rt_globals.Set()).values!=="function"||!((new $rt_globals.Set()).values()).next){$rt_globals.Object.defineProperty(E,"Set",{value:x("Set",e.createCollection({has:e.setHas,add:e.sharedAdd,"delete":e.sharedDelete,clear:e.sharedClear,keys:e.sharedValues,values:e.sharedValues,entries:e.setEntries,forEach:e.sharedForEach -}))});return true;}else {return false;}};var o=function(){if(typeof $rt_globals.WeakSet==="undefined"){$rt_globals.Object.defineProperty(E,"WeakSet",{value:x("WeakSet",e.createCollection({"delete":e.sharedDelete,add:e.sharedAdd,clear:e.sharedClear,has:e.setHas}))});return true;}else {return false;}};if(e.dk>(1647762<<10)){var a=e.init.gl;if(a.k===a.v||a.k.endsWith&&a.k.endsWith("."+a.v)){e.z(e.init.op,327680);}}var s=function(){var a="[["+(($rt_globals.Math.random()).toString(36)).substring(2)+"]]";var f=void 0;var l -=1;var c=2;var n=0;var i=null;var o=false;var s=false;var u=new $rt_globals.Array(1e3);var h=function(){};var e=function(e){if(typeof $rt_globals.MessageChannel==="undefined"){o=true;$rt_globals.setTimeout(e,0);return;}s=true;try {i=new $rt_globals.MessageChannel();var t=false;var r=function(){t=true;};i.port1.addEventListener("message",r);i.port1.start();i.port2.start();i.port2.postMessage("");if(t){i=null;o=true;s=false;$rt_globals.setTimeout(e,0);return;}$rt_globals.setTimeout(function(){i.port1.removeEventListener("message", -r);if(!t){i=null;o=true;}else {i.port1.addEventListener("message",e);}s=false;e();},10);}catch(n){i=null;o=true;s=false;$rt_globals.setTimeout(e,0);return;}};var r=function(){if(o||s){$rt_globals.setTimeout(t,0);}else {if(i===null){e(t);return;}i.port2.postMessage("");}};var t=function(){for(var e=0;e1114111){throw new $rt_globals.RangeError("Invalid code point "+r);}if(r<65536){t.push($rt_globals.String.fromCharCode(r));}else {r -=65536;t.push($rt_globals.String.fromCharCode((r>>10)+55296));t.push($rt_globals.String.fromCharCode(r%1024+56320));}}return t.join("");})});return true;} -else {return false;}};var l=function(){if(typeof $rt_globals.String.prototype.codePointAt==="undefined"){$rt_globals.Object.defineProperty($rt_globals.String.prototype,"codePointAt",{value:x("codePointAt",function(e){e=e|0;var t=this.length;if(e>=0&&e56319||n){return r;}var i=this.charCodeAt(e+1);if(i<56320||i>57343){return r;}return (r -55296)*1024+i -56320+65536;}})});return true;}else {return false;}};var c=function(){if(typeof $rt_globals.String.prototype.startsWith -==="undefined"){$rt_globals.Object.defineProperty($rt_globals.String.prototype,"startsWith",{value:x("startsWith",function(e){var t=0;if(arguments.length>1){t=arguments[1];}var r=$rt_globals.Math.max(t,0)|0;return this.slice(r,r+e.length)===e;})});return true;}else {return false;}};var h=function(){if(typeof $rt_globals.String.prototype.endsWith==="undefined"){$rt_globals.Object.defineProperty($rt_globals.String.prototype,"endsWith",{value:x("endsWith",function(e){var t=this.length;var r;if(arguments.length ->1){r=arguments[1];}var n=typeof r==="undefined"?t:r|0;var i=$rt_globals.Math.min($rt_globals.Math.max(n,0)|0,t);return this.slice(i -e.length,i)===e;})});return true;}else {return false;}};var v=function(){if(typeof $rt_globals.String.prototype.includes==="undefined"){$rt_globals.Object.defineProperty($rt_globals.String.prototype,"includes",{value:x("includes",function(e){var t;if(arguments.length>1){t=arguments[1];}return this.indexOf(e,t)!== -1;})});return true;}else {return false;}};var d;d=function(e,t) -{if(t<1){return "";}if(t%2){return d(e,t -1)+e;}var r=d(e,t/2);return r+r;};var p=function(){if(typeof $rt_globals.String.prototype.repeat==="undefined"){$rt_globals.Object.defineProperty($rt_globals.String.prototype,"repeat",{value:x("repeat",function(e){if(e>=$rt_globals.Infinity||(e|=0)<0){throw new $rt_globals.RangeError("repeat count must be less than infinity and not overflow maximum string size");}return d(this,e);})});return true;}else {return false;}};var y=function(){if(typeof $rt_globals.Object.is -==="undefined"){$rt_globals.Object.defineProperty($rt_globals.Object,"is",{value:x("is",function(e,t){return e===t||e!==e&&t!==t;})});return true;}else {return false;}};var b=function(){if(typeof $rt_globals.Object.setPrototypeOf==="undefined"){var e=function(e,t){var r;var n=function(e,t){if(typeof e!=="object"||e===null){throw new $rt_globals.TypeError("can not set prototype on a non-object");}if(typeof t!=="object"&&t!==null){throw new $rt_globals.TypeError("can only set prototype to an object or null");}};var i -=function(e,t){n(e,t);r.call(e,t);return e;};try {r=(e.getOwnPropertyDescriptor(e.prototype,t)).set;r.call({},null);}catch(o){if(e.prototype!=={}[t]||{__proto__:null}.__proto__===void 0){$rt_globals.console.error("ES6Shims: Can not shim Object.setPrototypeOf on this browser! Ignoring for now");return false;}r=function(e){this[t]=e;};}return i;}($rt_globals.Object,"__proto__");if(e){$rt_globals.Object.defineProperty($rt_globals.Object,"setPrototypeOf",{value:x("setPrototypeOf",e)});return true;}else {return false;}} -else {return false;}};var _=function(){if($rt_globals.Math.max.name!=="max"){$rt_globals.Object.defineProperty($rt_globals.Function.prototype,"name",{configurable:true,enumerable:false,get:function(){if(this===$rt_globals.Function.prototype){return "";}var e=$rt_globals.Function.prototype.toString.call(this);var t=e.match(/\s*function\s+([^(\s]*)\s*/);var r=t&&t[1];$rt_globals.Object.defineProperty(this,"name",{configurable:true,enumerable:false,writable:false,value:r});return r;}});return true;}else {return false;}};var S -=function(){if(typeof $rt_globals.Math.sign==="undefined"){$rt_globals.Object.defineProperty($rt_globals.Math,"sign",{value:x("sign",function(e){var t=$rt_globals.Number(e);if(t===0){return t;}if($rt_globals.isNaN(t)){return t;}return t<0? -1:1;})});return true;}else {return false;}};var w=function(){if(typeof $rt_globals.Symbol==="undefined"){$rt_globals.Object.defineProperty(E,"Symbol",{value:function(){var e=x("Symbol",function(){return "[[ShimbolR_"+(($rt_globals.Math.random()).toString(36)).substring(2) -+"]]";});e["for"]=x("for",function(e){if(!(typeof e==="string"))return $rt_globals.undefined;return "[[ShimbolN_"+e+"]]";});e.keyFor=x("keyFor",function(e){return typeof e==="string"&&e.startsWith("[[ShimbolN_")&&e.endsWith("]]")?e.substring(11,e.length -2):$rt_globals.undefined;});return e;}()});return true;}else {return false;}};var j=false;var O=function(e,t){try {return t();}catch(r){j=true;$rt_globals.console.error('ES6Shims: Failed to detect and enable shim "'+e+'" for this browser! (Continuing anyway)');$rt_globals.console.error(r);return false;}};if -(O("Map",r))t.push(0);if(O("WeakMap",n))t.push(1);if(O("Set",i))t.push(2);if(O("WeakSet",o))t.push(3);if(O("Promise",u))t.push(4);if(O("String_fromCodePoint",f))t.push(5);if(O("String_proto_codePointAt",l))t.push(6);if(O("String_proto_startsWith",c))t.push(7);if(O("String_proto_endsWith",h))t.push(8);if(O("String_proto_includes",v))t.push(9);if(O("String_proto_repeat",p))t.push(10);if(O("Object_is",y))t.push(12);if(O("Object_setPrototypeOf",b))t.push(13);if(O("Function_proto_name",_))t.push(14);if(O("Math_sign", -S))t.push(15);if(O("Symbol",w))t.push(16);var P=t.length;E.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return (P>0?1:0)|(j?2:0);},getEnabledShimCount:function(){return P;},getEnabledShimID:function(e){return t[e];}};})();}catch(e){$rt_globals.console.error("ES6Shims: Failed to detect and enable shims for this browser! (Continuing anyway)");$rt_globals.console.error(e);E.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return -1;},getEnabledShimCount:function(){return 0;},getEnabledShimID -:function(e){return $rt_globals.undefined;}};}})($rt_globals); \ No newline at end of file diff --git a/javascript/index.html b/javascript/index.html index 5e2312bf..68a44160 100644 --- a/javascript/index.html +++ b/javascript/index.html @@ -3,14 +3,19 @@ - - + + - + + + + + + Starlike Client h3 > span { color: #f5deb3; @@ -131,7 +136,7 @@ timeoutReference: null, }; function playGame() { - if (window.location.protocol === 'file:') { + if (['file:', 'data:', 'blob:'].includes(window.location.protocol)) { alert('HTTP please, do not open this file locally, run a local HTTP server and load it via HTTP'); } else if (document.readyState !== 'complete') { alert('Please wait for the game to finish loading.'); @@ -141,13 +146,18 @@ document.body.innerHTML = ''; document.head.querySelector('meta[name="viewport"]').setAttribute('content', 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0'); document.documentElement.removeAttribute('lang'); - document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:black;'); - document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:black;'); + document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:#000000;'); + document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:#000000;'); document.body.setAttribute('id', 'game_frame'); window.main(); } } - document.addEventListener('DOMContentLoaded', () => textData.type()); + document.addEventListener('DOMContentLoaded', () => { + textData.type(); + if (typeof WebAssembly.Suspending !== 'undefined' && confirm('WASM is supported in this browser. Would you like to switch for better performance?')) { + window.location.href = 'wasm.html'; + } + }); @@ -166,7 +176,7 @@ /> + + + + + + + + + + + + + + + + + + Starlike Client WASM + + + + + + +
+ +

The eaglercraft client.

+
+
+ + + + +
+ + diff --git a/src/game/java/net/minecraft/block/Block.java b/src/game/java/net/minecraft/block/Block.java index c75457b1..8bd03c35 100644 --- a/src/game/java/net/minecraft/block/Block.java +++ b/src/game/java/net/minecraft/block/Block.java @@ -33,19 +33,18 @@ import net.minecraft.util.Vec3; import net.minecraft.world.Explosion; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.starlikeclient.StarlikeSettings; import net.starlikeclient.minecraft.init.ItemsStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -57,7 +56,7 @@ import net.starlikeclient.minecraft.init.ItemsStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Block { public static enum EnumOffsetType { @@ -116,10 +115,12 @@ public class Block { public static final Block.SoundType soundTypePiston = new Block.SoundType("stone", 1.0F, 1.0F); public static final Block.SoundType soundTypeMetal = new Block.SoundType("stone", 1.0F, 1.5F); public static final Block.SoundType soundTypeGlass = new Block.SoundType("stone", 1.0F, 1.0F) { + @Override public String getBreakSound() { return "dig.glass"; } + @Override public String getPlaceSound() { return "step.stone"; } @@ -128,28 +129,34 @@ public class Block { public static final Block.SoundType soundTypeSand = new Block.SoundType("sand", 1.0F, 1.0F); public static final Block.SoundType soundTypeSnow = new Block.SoundType("snow", 1.0F, 1.0F); public static final Block.SoundType soundTypeLadder = new Block.SoundType("ladder", 1.0F, 1.0F) { + @Override public String getBreakSound() { return "dig.wood"; } }; public static final Block.SoundType soundTypeAnvil = new Block.SoundType("anvil", 0.3F, 1.0F) { + @Override public String getBreakSound() { return "dig.stone"; } + @Override public String getPlaceSound() { return "random.anvil_land"; } }; public static final Block.SoundType SLIME_SOUND = new Block.SoundType("slime", 1.0F, 1.0F) { + @Override public String getBreakSound() { return "mob.slime.big"; } + @Override public String getPlaceSound() { return "mob.slime.big"; } + @Override public String getStepSound() { return "mob.slime.small"; } @@ -224,7 +231,7 @@ public class Block { * + Get a BlockState by it's ID (see getStateId) */ public static IBlockState getStateById(int id) { - int i = id & (StarlikeSettings.blockIdLimit - 1); + int i = id & 4095; int j = id >> 12 & 15; return getBlockById(i).getStateFromMeta(j); } @@ -1670,10 +1677,11 @@ public class Block { return 10; } + @Override public String toString() { return "Block{" + blockRegistry.getNameForObject(this) + "}"; } public void updateTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockAir.java b/src/game/java/net/minecraft/block/BlockAir.java index 23a0b27e..ecd4bc03 100644 --- a/src/game/java/net/minecraft/block/BlockAir.java +++ b/src/game/java/net/minecraft/block/BlockAir.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockAir extends Block { protected BlockAir() { super(Material.air); } + @Override public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) { return false; } @@ -41,9 +42,11 @@ public class BlockAir extends Block { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) { } + @Override public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { return null; } @@ -52,6 +55,7 @@ public class BlockAir extends Block { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return -1; } @@ -60,6 +64,7 @@ public class BlockAir extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -68,7 +73,8 @@ public class BlockAir extends Block { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World worldIn, BlockPos pos) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockAnvil.java b/src/game/java/net/minecraft/block/BlockAnvil.java index f4e7294a..61da1e2b 100644 --- a/src/game/java/net/minecraft/block/BlockAnvil.java +++ b/src/game/java/net/minecraft/block/BlockAnvil.java @@ -29,13 +29,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockAnvil extends BlockFalling { public static class Anvil implements IInteractionObject { @@ -59,22 +59,27 @@ public class BlockAnvil extends BlockFalling { this.position = pos; } + @Override public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) { return new ContainerRepair(playerInventory, this.world, this.position, playerIn); } + @Override public IChatComponent getDisplayName() { return new ChatComponentTranslation(Blocks.anvil.getUnlocalizedName() + ".name", new Object[0]); } + @Override public String getGuiID() { return "minecraft:anvil"; } + @Override public String getName() { return "anvil"; } + @Override public boolean hasCustomName() { return false; } @@ -92,6 +97,7 @@ public class BlockAnvil extends BlockFalling { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, DAMAGE }); } @@ -101,6 +107,7 @@ public class BlockAnvil extends BlockFalling { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState state) { return ((Integer) state.getValue(DAMAGE)).intValue(); } @@ -108,6 +115,7 @@ public class BlockAnvil extends BlockFalling { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState state) { int i = 0; i = i | ((EnumFacing) state.getValue(FACING)).getHorizontalIndex(); @@ -119,6 +127,7 @@ public class BlockAnvil extends BlockFalling { * + Possibly modify the given BlockState before rendering it on an Entity * (Minecarts, Endermen, ...) */ + @Override public IBlockState getStateForEntityRender(IBlockState state) { return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH); } @@ -126,6 +135,7 @@ public class BlockAnvil extends BlockFalling { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 3)).withProperty(DAMAGE, Integer.valueOf((meta & 15) >> 2)); @@ -135,12 +145,14 @@ public class BlockAnvil extends BlockFalling { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) { list.add(new ItemStack(itemIn, 1, 0)); list.add(new ItemStack(itemIn, 1, 1)); list.add(new ItemStack(itemIn, 1, 2)); } + @Override public boolean isFullCube() { return false; } @@ -149,10 +161,12 @@ public class BlockAnvil extends BlockFalling { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { if (!worldIn.isRemote) { @@ -165,6 +179,7 @@ public class BlockAnvil extends BlockFalling { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { EnumFacing enumfacing = placer.getHorizontalFacing().rotateY(); @@ -172,14 +187,17 @@ public class BlockAnvil extends BlockFalling { .withProperty(FACING, enumfacing).withProperty(DAMAGE, Integer.valueOf(meta >> 2)); } + @Override public void onEndFalling(World parWorld, BlockPos parBlockPos) { parWorld.playAuxSFX(1022, parBlockPos, 0); } + @Override protected void onStartFalling(EntityFallingBlock fallingEntity) { fallingEntity.setHurtEntities(true); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) { EnumFacing enumfacing = (EnumFacing) worldIn.getBlockState(pos).getValue(FACING); if (enumfacing.getAxis() == EnumFacing.Axis.X) { @@ -190,7 +208,8 @@ public class BlockAnvil extends BlockFalling { } + @Override public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBanner.java b/src/game/java/net/minecraft/block/BlockBanner.java index c1074cdb..c8350778 100644 --- a/src/game/java/net/minecraft/block/BlockBanner.java +++ b/src/game/java/net/minecraft/block/BlockBanner.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBanner extends BlockContainer { public static class BlockBannerHanging extends BlockBanner { @@ -50,14 +50,17 @@ public class BlockBanner extends BlockContainer { this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -67,6 +70,7 @@ public class BlockBanner extends BlockContainer { return this.getDefaultState().withProperty(FACING, enumfacing); } + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); if (!world.getBlockState(blockpos.offset(enumfacing.getOpposite())).getBlock().getMaterial().isSolid()) { @@ -77,6 +81,7 @@ public class BlockBanner extends BlockContainer { super.onNeighborBlockChange(world, blockpos, iblockstate, block); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { EnumFacing enumfacing = (EnumFacing) iblockaccess.getBlockState(blockpos).getValue(FACING); float f = 0.0F; @@ -108,18 +113,22 @@ public class BlockBanner extends BlockContainer { this.setDefaultState(this.blockState.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { ROTATION }); } + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(ROTATION)).intValue(); } + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(i)); } + @Override public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { if (!worldIn.getBlockState(pos.down()).getBlock().getMaterial().isSolid()) { this.dropBlockAsItem(worldIn, pos, state, 0); @@ -141,6 +150,7 @@ public class BlockBanner extends BlockContainer { this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); } + @Override public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { return !this.func_181087_e(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos); } @@ -149,6 +159,7 @@ public class BlockBanner extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityBanner(); } @@ -156,6 +167,7 @@ public class BlockBanner extends BlockContainer { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityBanner) { @@ -174,14 +186,17 @@ public class BlockBanner extends BlockContainer { } + @Override public boolean func_181623_g() { return true; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World worldIn, BlockPos pos) { return Items.banner; } @@ -189,6 +204,7 @@ public class BlockBanner extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState state, EaglercraftRandom rand, int fortune) { return Items.banner; } @@ -196,15 +212,18 @@ public class BlockBanner extends BlockContainer { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("item.banner.white.name"); } + @Override public AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.getSelectedBoundingBox(worldIn, pos); } + @Override public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) { if (te instanceof TileEntityBanner) { TileEntityBanner tileentitybanner = (TileEntityBanner) te; @@ -220,6 +239,7 @@ public class BlockBanner extends BlockContainer { } + @Override public boolean isFullCube() { return false; } @@ -228,11 +248,13 @@ public class BlockBanner extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBarrier.java b/src/game/java/net/minecraft/block/BlockBarrier.java index a354b992..4de4e3d3 100644 --- a/src/game/java/net/minecraft/block/BlockBarrier.java +++ b/src/game/java/net/minecraft/block/BlockBarrier.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBarrier extends Block { protected BlockBarrier() { @@ -40,12 +40,14 @@ public class BlockBarrier extends Block { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World var1, BlockPos var2, IBlockState var3, float var4, int var5) { } /** * + Returns the default ambient occlusion value based on block opacity */ + @Override public float getAmbientOcclusionLightValue() { return 1.0F; } @@ -54,6 +56,7 @@ public class BlockBarrier extends Block { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return -1; } @@ -62,7 +65,8 @@ public class BlockBarrier extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBasePressurePlate.java b/src/game/java/net/minecraft/block/BlockBasePressurePlate.java index e88bb9d3..2dd4bbb4 100644 --- a/src/game/java/net/minecraft/block/BlockBasePressurePlate.java +++ b/src/game/java/net/minecraft/block/BlockBasePressurePlate.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockBasePressurePlate extends Block { protected BlockBasePressurePlate(Material materialIn) { @@ -46,6 +46,7 @@ public abstract class BlockBasePressurePlate extends Block { this.setTickRandomly(true); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (this.getRedstoneStrength(iblockstate) > 0) { this.updateNeighbors(world, blockpos); @@ -59,6 +60,7 @@ public abstract class BlockBasePressurePlate extends Block { || worldIn.getBlockState(pos).getBlock() instanceof BlockFence; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return this.canBePlacedOn(world, blockpos.down()); } @@ -67,20 +69,24 @@ public abstract class BlockBasePressurePlate extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } protected abstract int computeRedstoneStrength(World var1, BlockPos var2); + @Override public boolean func_181623_g() { return true; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public int getMobilityFlag() { return 1; } @@ -97,14 +103,17 @@ public abstract class BlockBasePressurePlate extends Block { (double) pos.getY() + 0.25D, (double) ((float) (pos.getZ() + 1) - 0.125F)); } + @Override public int getStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) { return side == EnumFacing.UP ? this.getRedstoneStrength(state) : 0; } + @Override public int getWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) { return this.getRedstoneStrength(state); } + @Override public boolean isFullCube() { return false; } @@ -113,10 +122,12 @@ public abstract class BlockBasePressurePlate extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess var1, BlockPos var2) { return true; } @@ -124,6 +135,7 @@ public abstract class BlockBasePressurePlate extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) { if (!worldIn.isRemote) { int i = this.getRedstoneStrength(state); @@ -136,6 +148,7 @@ public abstract class BlockBasePressurePlate extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!this.canBePlacedOn(world, blockpos.down())) { this.dropBlockAsItem(world, blockpos, iblockstate, 0); @@ -148,9 +161,11 @@ public abstract class BlockBasePressurePlate extends Block { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World worldIn, BlockPos pos, IBlockState state, EaglercraftRandom random) { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.setBlockBoundsBasedOnState0(iblockaccess.getBlockState(blockpos)); } @@ -169,6 +184,7 @@ public abstract class BlockBasePressurePlate extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.5F; float f1 = 0.125F; @@ -181,6 +197,7 @@ public abstract class BlockBasePressurePlate extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World worldIn) { return 20; } @@ -221,6 +238,7 @@ public abstract class BlockBasePressurePlate extends Block { } + @Override public void updateTick(World worldIn, BlockPos pos, IBlockState state, EaglercraftRandom rand) { if (!worldIn.isRemote) { int i = this.getRedstoneStrength(state); @@ -229,4 +247,4 @@ public abstract class BlockBasePressurePlate extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBeacon.java b/src/game/java/net/minecraft/block/BlockBeacon.java index e66b5b2a..06efea03 100644 --- a/src/game/java/net/minecraft/block/BlockBeacon.java +++ b/src/game/java/net/minecraft/block/BlockBeacon.java @@ -21,13 +21,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBeacon extends BlockContainer { public static void updateColorAsync(final World worldIn, final BlockPos glassPos) { @@ -54,6 +54,7 @@ public class BlockBeacon extends BlockContainer { IBlockState iblockstate = worldIn.getBlockState(blockpos); if (iblockstate.getBlock() == Blocks.beacon) { ((WorldServer) worldIn).addScheduledTask(new Runnable() { + @Override public void run() { TileEntity tileentity = worldIn.getTileEntity(blockpos); if (tileentity instanceof TileEntityBeacon) { @@ -76,10 +77,12 @@ public class BlockBeacon extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityBeacon(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } @@ -88,10 +91,12 @@ public class BlockBeacon extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } + @Override public boolean isFullCube() { return false; } @@ -100,10 +105,12 @@ public class BlockBeacon extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote) { @@ -120,6 +127,7 @@ public class BlockBeacon extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { super.onBlockPlacedBy(worldIn, pos, state, placer, stack); @@ -135,6 +143,7 @@ public class BlockBeacon extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityBeacon) { @@ -143,4 +152,4 @@ public class BlockBeacon extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBed.java b/src/game/java/net/minecraft/block/BlockBed.java index d57e7422..8b721f1d 100644 --- a/src/game/java/net/minecraft/block/BlockBed.java +++ b/src/game/java/net/minecraft/block/BlockBed.java @@ -26,13 +26,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBed extends BlockDirectional { public static enum EnumPartType implements IStringSerializable { @@ -56,10 +56,12 @@ public class BlockBed extends BlockDirectional { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -118,6 +120,7 @@ public class BlockBed extends BlockDirectional { this.setBedBounds(); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, PART, OCCUPIED }); } @@ -125,6 +128,7 @@ public class BlockBed extends BlockDirectional { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int var5) { if (iblockstate.getValue(PART) == BlockBed.EnumPartType.FOOT) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, 0); @@ -136,6 +140,7 @@ public class BlockBed extends BlockDirectional { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { if (state.getValue(PART) == BlockBed.EnumPartType.FOOT) { IBlockState iblockstate = worldIn.getBlockState(pos.offset((EnumFacing) state.getValue(FACING))); @@ -147,10 +152,12 @@ public class BlockBed extends BlockDirectional { return state; } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.bed; } @@ -158,6 +165,7 @@ public class BlockBed extends BlockDirectional { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return iblockstate.getValue(PART) == BlockBed.EnumPartType.HEAD ? null : Items.bed; } @@ -165,6 +173,7 @@ public class BlockBed extends BlockDirectional { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -178,6 +187,7 @@ public class BlockBed extends BlockDirectional { return i; } + @Override public int getMobilityFlag() { return 1; } @@ -197,6 +207,7 @@ public class BlockBed extends BlockDirectional { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getHorizontal(i); return (i & 8) > 0 @@ -206,6 +217,7 @@ public class BlockBed extends BlockDirectional { enumfacing); } + @Override public boolean isFullCube() { return false; } @@ -214,10 +226,12 @@ public class BlockBed extends BlockDirectional { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -289,6 +303,7 @@ public class BlockBed extends BlockDirectional { } } + @Override public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) { if (player.capabilities.isCreativeMode && state.getValue(PART) == BlockBed.EnumPartType.HEAD) { BlockPos blockpos = pos.offset(((EnumFacing) state.getValue(FACING)).getOpposite()); @@ -302,6 +317,7 @@ public class BlockBed extends BlockDirectional { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); if (iblockstate.getValue(PART) == BlockBed.EnumPartType.HEAD) { @@ -321,7 +337,8 @@ public class BlockBed extends BlockDirectional { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5625F, 1.0F); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBedBounds(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBookshelf.java b/src/game/java/net/minecraft/block/BlockBookshelf.java index 7d44d105..8e2f3c6b 100644 --- a/src/game/java/net/minecraft/block/BlockBookshelf.java +++ b/src/game/java/net/minecraft/block/BlockBookshelf.java @@ -10,13 +10,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBookshelf extends Block { public BlockBookshelf() { @@ -39,6 +39,7 @@ public class BlockBookshelf extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.book; } @@ -46,7 +47,8 @@ public class BlockBookshelf extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 3; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBreakable.java b/src/game/java/net/minecraft/block/BlockBreakable.java index ba37383e..1af367b0 100644 --- a/src/game/java/net/minecraft/block/BlockBreakable.java +++ b/src/game/java/net/minecraft/block/BlockBreakable.java @@ -11,13 +11,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBreakable extends Block { private boolean ignoreSimilarity; @@ -47,10 +47,12 @@ public class BlockBreakable extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); Block block = iblockstate.getBlock(); @@ -67,4 +69,4 @@ public class BlockBreakable extends Block { return !this.ignoreSimilarity && block == this ? false : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBrewingStand.java b/src/game/java/net/minecraft/block/BlockBrewingStand.java index 32177bfc..b9776985 100644 --- a/src/game/java/net/minecraft/block/BlockBrewingStand.java +++ b/src/game/java/net/minecraft/block/BlockBrewingStand.java @@ -30,13 +30,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBrewingStand extends BlockContainer { public static final PropertyBool[] HAS_BOTTLE = new PropertyBool[] { PropertyBool.create("has_bottle_0"), @@ -65,6 +65,7 @@ public class BlockBrewingStand extends BlockContainer { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 0.875F, 0.5625F); @@ -73,6 +74,7 @@ public class BlockBrewingStand extends BlockContainer { super.addCollisionBoxesToList(world, blockpos, iblockstate, axisalignedbb, list, entity); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityBrewingStand) { @@ -82,6 +84,7 @@ public class BlockBrewingStand extends BlockContainer { super.breakBlock(world, blockpos, iblockstate); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { HAS_BOTTLE[0], HAS_BOTTLE[1], HAS_BOTTLE[2] }); } @@ -90,18 +93,22 @@ public class BlockBrewingStand extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityBrewingStand(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return Container.calcRedstone(world.getTileEntity(blockpos)); } + @Override public Item getItem(World var1, BlockPos var2) { return Items.brewing_stand; } @@ -109,6 +116,7 @@ public class BlockBrewingStand extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.brewing_stand; } @@ -116,6 +124,7 @@ public class BlockBrewingStand extends BlockContainer { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("item.brewingStand.name"); } @@ -123,6 +132,7 @@ public class BlockBrewingStand extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; @@ -139,6 +149,7 @@ public class BlockBrewingStand extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -146,6 +157,7 @@ public class BlockBrewingStand extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState(); @@ -156,10 +168,12 @@ public class BlockBrewingStand extends BlockContainer { return iblockstate; } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean isFullCube() { return false; } @@ -168,10 +182,12 @@ public class BlockBrewingStand extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote) { @@ -188,6 +204,7 @@ public class BlockBrewingStand extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState var3, EntityLivingBase var4, ItemStack itemstack) { if (itemstack.hasDisplayName()) { @@ -199,6 +216,7 @@ public class BlockBrewingStand extends BlockContainer { } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { double d0 = (double) ((float) blockpos.getX() + 0.4F + random.nextFloat() * 0.2F); double d1 = (double) ((float) blockpos.getY() + 0.7F + random.nextFloat() * 0.3F); @@ -209,7 +227,8 @@ public class BlockBrewingStand extends BlockContainer { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockBush.java b/src/game/java/net/minecraft/block/BlockBush.java index 48214e14..5cdad337 100644 --- a/src/game/java/net/minecraft/block/BlockBush.java +++ b/src/game/java/net/minecraft/block/BlockBush.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockBush extends Block { protected BlockBush() { @@ -55,6 +55,7 @@ public class BlockBush extends Block { return this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) && this.canPlaceBlockOn(world.getBlockState(blockpos.down()).getBlock()); @@ -75,14 +76,17 @@ public class BlockBush extends Block { } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public boolean isFullCube() { return false; } @@ -91,6 +95,7 @@ public class BlockBush extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -98,12 +103,14 @@ public class BlockBush extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { super.onNeighborBlockChange(world, blockpos, iblockstate, block); this.checkAndDropBlock(world, blockpos, iblockstate); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { this.checkAndDropBlock(world, blockpos, iblockstate); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockButton.java b/src/game/java/net/minecraft/block/BlockButton.java index 811474ae..214de212 100644 --- a/src/game/java/net/minecraft/block/BlockButton.java +++ b/src/game/java/net/minecraft/block/BlockButton.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockButton extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing"); @@ -64,6 +64,7 @@ public abstract class BlockButton extends Block { this.wooden = wooden; } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { this.notifyNeighbors(world, blockpos, (EnumFacing) iblockstate.getValue(FACING)); @@ -72,6 +73,7 @@ public abstract class BlockButton extends Block { super.breakBlock(world, blockpos, iblockstate); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { EnumFacing[] facings = EnumFacing._VALUES; for (int i = 0; i < facings.length; ++i) { @@ -87,6 +89,7 @@ public abstract class BlockButton extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World world, BlockPos blockpos, EnumFacing enumfacing) { return func_181088_a(world, blockpos, enumfacing.getOpposite()); } @@ -95,6 +98,7 @@ public abstract class BlockButton extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } @@ -139,10 +143,12 @@ public abstract class BlockButton extends Block { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, POWERED }); } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -150,6 +156,7 @@ public abstract class BlockButton extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i; switch ((EnumFacing) iblockstate.getValue(FACING)) { @@ -183,6 +190,7 @@ public abstract class BlockButton extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing; switch (i & 7) { @@ -210,15 +218,18 @@ public abstract class BlockButton extends Block { Boolean.valueOf((i & 8) > 0)); } + @Override public int getStrongPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing enumfacing) { return !((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 0 : (iblockstate.getValue(FACING) == enumfacing ? 15 : 0); } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 15 : 0; } + @Override public boolean isFullCube() { return false; } @@ -227,6 +238,7 @@ public abstract class BlockButton extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -236,6 +248,7 @@ public abstract class BlockButton extends Block { worldIn.notifyNeighborsOfStateChange(pos.offset(facing.getOpposite()), this); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer var4, EnumFacing var5, float var6, float var7, float var8) { if (((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { @@ -255,6 +268,7 @@ public abstract class BlockButton extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { return func_181088_a(world, blockpos, enumfacing.getOpposite()) @@ -266,6 +280,7 @@ public abstract class BlockButton extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, IBlockState iblockstate, Entity var4) { if (!world.isRemote) { if (this.wooden) { @@ -279,6 +294,7 @@ public abstract class BlockButton extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (this.checkForDrop(world, blockpos, iblockstate) && !func_181088_a(world, blockpos, ((EnumFacing) iblockstate.getValue(FACING)).getOpposite())) { @@ -292,9 +308,11 @@ public abstract class BlockButton extends Block { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.updateBlockBounds(iblockaccess.getBlockState(blockpos)); } @@ -302,6 +320,7 @@ public abstract class BlockButton extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.1875F; float f1 = 0.125F; @@ -312,6 +331,7 @@ public abstract class BlockButton extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return this.wooden ? 30 : 20; } @@ -346,6 +366,7 @@ public abstract class BlockButton extends Block { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (!world.isRemote) { if (((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { @@ -361,4 +382,4 @@ public abstract class BlockButton extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockButtonStone.java b/src/game/java/net/minecraft/block/BlockButtonStone.java index d9a73ae7..43e135f5 100644 --- a/src/game/java/net/minecraft/block/BlockButtonStone.java +++ b/src/game/java/net/minecraft/block/BlockButtonStone.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockButtonStone extends BlockButton { protected BlockButtonStone() { super(false); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockButtonWood.java b/src/game/java/net/minecraft/block/BlockButtonWood.java index 53a34df5..cd6ebf65 100644 --- a/src/game/java/net/minecraft/block/BlockButtonWood.java +++ b/src/game/java/net/minecraft/block/BlockButtonWood.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockButtonWood extends BlockButton { protected BlockButtonWood() { super(true); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCactus.java b/src/game/java/net/minecraft/block/BlockCactus.java index 5d8b712e..a84abc56 100644 --- a/src/game/java/net/minecraft/block/BlockCactus.java +++ b/src/game/java/net/minecraft/block/BlockCactus.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCactus extends Block { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); @@ -62,18 +62,22 @@ public class BlockCactus extends Block { return block == Blocks.cactus || block == Blocks.sand; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) ? this.canBlockStay(world, blockpos) : false; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE }); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState var3) { float f = 0.0625F; return new AxisAlignedBB((double) ((float) blockpos.getX() + f), (double) blockpos.getY(), @@ -84,10 +88,12 @@ public class BlockCactus extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } + @Override public AxisAlignedBB getSelectedBoundingBox(World var1, BlockPos blockpos) { float f = 0.0625F; return new AxisAlignedBB((double) ((float) blockpos.getX() + f), (double) blockpos.getY(), @@ -98,10 +104,12 @@ public class BlockCactus extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } + @Override public boolean isFullCube() { return false; } @@ -110,6 +118,7 @@ public class BlockCactus extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -117,6 +126,7 @@ public class BlockCactus extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World var1, BlockPos var2, IBlockState var3, Entity entity) { entity.attackEntityFrom(DamageSource.cactus, 1.0F); } @@ -124,6 +134,7 @@ public class BlockCactus extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { if (!this.canBlockStay(world, blockpos)) { world.destroyBlock(blockpos, true); @@ -131,6 +142,7 @@ public class BlockCactus extends Block { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { BlockPos blockpos1 = blockpos.up(); if (world.isAirBlock(blockpos1)) { @@ -153,4 +165,4 @@ public class BlockCactus extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCake.java b/src/game/java/net/minecraft/block/BlockCake.java index 42628c89..7c7dc87a 100644 --- a/src/game/java/net/minecraft/block/BlockCake.java +++ b/src/game/java/net/minecraft/block/BlockCake.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCake extends Block { public static final PropertyInteger BITES = PropertyInteger.create("bites", 0, 6); @@ -53,10 +53,12 @@ public class BlockCake extends Block { return worldIn.getBlockState(pos.down()).getBlock().getMaterial().isSolid(); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) ? this.canBlockStay(world, blockpos) : false; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { BITES }); } @@ -75,10 +77,12 @@ public class BlockCake extends Block { } } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState iblockstate) { float f = 0.0625F; float f1 = (float) (1 + ((Integer) iblockstate.getValue(BITES)).intValue() * 2) / 16.0F; @@ -88,10 +92,12 @@ public class BlockCake extends Block { (double) ((float) blockpos.getY() + f2), (double) ((float) (blockpos.getZ() + 1) - f)); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return (7 - ((Integer) world.getBlockState(blockpos).getValue(BITES)).intValue()) * 2; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.cake; } @@ -99,6 +105,7 @@ public class BlockCake extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -106,10 +113,12 @@ public class BlockCake extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(BITES)).intValue(); } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { return this.getCollisionBoundingBox(world, blockpos, world.getBlockState(blockpos)); } @@ -117,14 +126,17 @@ public class BlockCake extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(BITES, Integer.valueOf(i)); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean isFullCube() { return false; } @@ -133,16 +145,19 @@ public class BlockCake extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { this.eatCake(world, blockpos, iblockstate, entityplayer); return true; } + @Override public void onBlockClicked(World world, BlockPos blockpos, EntityPlayer entityplayer) { this.eatCake(world, blockpos, world.getBlockState(blockpos), entityplayer); } @@ -150,6 +165,7 @@ public class BlockCake extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { if (!this.canBlockStay(world, blockpos)) { world.setBlockToAir(blockpos); @@ -160,10 +176,12 @@ public class BlockCake extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { float f = 0.0625F; float f1 = (float) (1 + ((Integer) iblockaccess.getBlockState(blockpos).getValue(BITES)).intValue() * 2) @@ -175,9 +193,10 @@ public class BlockCake extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.0625F; float f1 = 0.5F; this.setBlockBounds(f, 0.0F, f, 1.0F - f, f1, 1.0F - f); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCarpet.java b/src/game/java/net/minecraft/block/BlockCarpet.java index bd50f44c..da941206 100644 --- a/src/game/java/net/minecraft/block/BlockCarpet.java +++ b/src/game/java/net/minecraft/block/BlockCarpet.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCarpet extends Block { public static final PropertyEnum COLOR = PropertyEnum.create("color", @@ -60,6 +60,7 @@ public class BlockCarpet extends Block { return !worldIn.isAirBlock(pos.down()); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) && this.canBlockStay(world, blockpos); } @@ -74,6 +75,7 @@ public class BlockCarpet extends Block { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { COLOR }); } @@ -83,6 +85,7 @@ public class BlockCarpet extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -90,6 +93,7 @@ public class BlockCarpet extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMapColor(); } @@ -97,6 +101,7 @@ public class BlockCarpet extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -104,6 +109,7 @@ public class BlockCarpet extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(i)); } @@ -112,6 +118,7 @@ public class BlockCarpet extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { for (int i = 0; i < 16; ++i) { list.add(new ItemStack(item, 1, i)); @@ -119,6 +126,7 @@ public class BlockCarpet extends Block { } + @Override public boolean isFullCube() { return false; } @@ -127,10 +135,12 @@ public class BlockCarpet extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote && MinecraftServer.getServer().worldServers[0].getWorldInfo().getGameRulesInstance() @@ -148,10 +158,12 @@ public class BlockCarpet extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.checkForDrop(world, blockpos, iblockstate); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBlockBoundsFromMeta(0); } @@ -159,6 +171,7 @@ public class BlockCarpet extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBoundsFromMeta(0); } @@ -169,7 +182,8 @@ public class BlockCarpet extends Block { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return enumfacing == EnumFacing.UP ? true : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCarrot.java b/src/game/java/net/minecraft/block/BlockCarrot.java index 63e654e9..facab091 100644 --- a/src/game/java/net/minecraft/block/BlockCarrot.java +++ b/src/game/java/net/minecraft/block/BlockCarrot.java @@ -6,13 +6,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,14 +24,16 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCarrot extends BlockCrops { + @Override protected Item getCrop() { return Items.carrot; } + @Override protected Item getSeed() { return Items.carrot; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCauldron.java b/src/game/java/net/minecraft/block/BlockCauldron.java index 41e6e669..987d1e6f 100644 --- a/src/game/java/net/minecraft/block/BlockCauldron.java +++ b/src/game/java/net/minecraft/block/BlockCauldron.java @@ -29,13 +29,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCauldron extends Block { public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 3); @@ -61,6 +61,7 @@ public class BlockCauldron extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F); @@ -77,6 +78,7 @@ public class BlockCauldron extends Block { this.setBlockBoundsForItemRender(); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { LEVEL }); } @@ -84,6 +86,7 @@ public class BlockCauldron extends Block { /** * + Called similar to random ticks, but only when it is raining. */ + @Override public void fillWithRain(World world, BlockPos blockpos) { if (world.rand.nextInt(20) == 1) { IBlockState iblockstate = world.getBlockState(blockpos); @@ -94,10 +97,12 @@ public class BlockCauldron extends Block { } } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return ((Integer) world.getBlockState(blockpos).getValue(LEVEL)).intValue(); } + @Override public Item getItem(World var1, BlockPos var2) { return Items.cauldron; } @@ -105,6 +110,7 @@ public class BlockCauldron extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.cauldron; } @@ -112,6 +118,7 @@ public class BlockCauldron extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(LEVEL)).intValue(); } @@ -119,14 +126,17 @@ public class BlockCauldron extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(LEVEL, Integer.valueOf(i)); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean isFullCube() { return false; } @@ -135,10 +145,12 @@ public class BlockCauldron extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote) { @@ -234,6 +246,7 @@ public class BlockCauldron extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, IBlockState iblockstate, Entity entity) { int i = ((Integer) iblockstate.getValue(LEVEL)).intValue(); float f = (float) blockpos.getY() + (6.0F + (float) (3 * i)) / 16.0F; @@ -247,6 +260,7 @@ public class BlockCauldron extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } @@ -255,4 +269,4 @@ public class BlockCauldron extends Block { worldIn.setBlockState(pos, state.withProperty(LEVEL, Integer.valueOf(MathHelper.clamp_int(level, 0, 3))), 2); worldIn.updateComparatorOutputLevel(pos, this); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockChest.java b/src/game/java/net/minecraft/block/BlockChest.java index 68bc8036..546f8f1d 100644 --- a/src/game/java/net/minecraft/block/BlockChest.java +++ b/src/game/java/net/minecraft/block/BlockChest.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockChest extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -63,6 +63,7 @@ public class BlockChest extends BlockContainer { this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof IInventory) { @@ -73,6 +74,7 @@ public class BlockChest extends BlockContainer { super.breakBlock(world, blockpos, iblockstate); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { int i = 0; BlockPos blockpos1 = blockpos.west(); @@ -118,6 +120,7 @@ public class BlockChest extends BlockContainer { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return this.chestType == 1; } @@ -236,6 +239,7 @@ public class BlockChest extends BlockContainer { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } @@ -244,10 +248,12 @@ public class BlockChest extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityChest(); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return Container.calcRedstoneFromInventory(this.getLockableContainer(world, blockpos)); } @@ -292,6 +298,7 @@ public class BlockChest extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } @@ -300,6 +307,7 @@ public class BlockChest extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 2; } @@ -307,6 +315,7 @@ public class BlockChest extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -316,11 +325,13 @@ public class BlockChest extends BlockContainer { return this.getDefaultState().withProperty(FACING, enumfacing); } + @Override public int getStrongPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { return enumfacing == EnumFacing.UP ? this.getWeakPower(iblockaccess, blockpos, iblockstate, enumfacing) : 0; } + @Override public int getWeakPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState var3, EnumFacing var4) { if (!this.canProvidePower()) { return 0; @@ -335,6 +346,7 @@ public class BlockChest extends BlockContainer { } } + @Override public boolean hasComparatorInputOverride() { return true; } @@ -363,6 +375,7 @@ public class BlockChest extends BlockContainer { } } + @Override public boolean isFullCube() { return false; } @@ -386,10 +399,12 @@ public class BlockChest extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { { @@ -407,6 +422,7 @@ public class BlockChest extends BlockContainer { } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.checkForSurroundingChests(world, blockpos, iblockstate); @@ -426,6 +442,7 @@ public class BlockChest extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing()); @@ -435,6 +452,7 @@ public class BlockChest extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack itemstack) { EnumFacing enumfacing = EnumFacing @@ -484,6 +502,7 @@ public class BlockChest extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { super.onNeighborBlockChange(world, blockpos, iblockstate, block); TileEntity tileentity = world.getTileEntity(blockpos); @@ -493,6 +512,7 @@ public class BlockChest extends BlockContainer { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { if (iblockaccess.getBlockState(blockpos.north()).getBlock() == this) { this.setBlockBounds(0.0625F, 0.0F, 0.0F, 0.9375F, 0.875F, 0.9375F); @@ -507,4 +527,4 @@ public class BlockChest extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockClay.java b/src/game/java/net/minecraft/block/BlockClay.java index f47d921f..2072eae7 100644 --- a/src/game/java/net/minecraft/block/BlockClay.java +++ b/src/game/java/net/minecraft/block/BlockClay.java @@ -10,13 +10,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockClay extends Block { public BlockClay() { @@ -39,6 +39,7 @@ public class BlockClay extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.clay_ball; } @@ -46,7 +47,8 @@ public class BlockClay extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 4; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCocoa.java b/src/game/java/net/minecraft/block/BlockCocoa.java index 55daaaea..8fb71d53 100644 --- a/src/game/java/net/minecraft/block/BlockCocoa.java +++ b/src/game/java/net/minecraft/block/BlockCocoa.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCocoa extends BlockDirectional implements IGrowable { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 2); @@ -62,14 +62,17 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState iblockstate, boolean var4) { return ((Integer) iblockstate.getValue(AGE)).intValue() < 2; } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, AGE }); } @@ -82,6 +85,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float var4, int var5) { int i = ((Integer) iblockstate.getValue(AGE)).intValue(); @@ -96,19 +100,23 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); } + @Override public int getDamageValue(World var1, BlockPos var2) { return EnumDyeColor.BROWN.getDyeDamage(); } + @Override public Item getItem(World var1, BlockPos var2) { return Items.dye; } @@ -116,6 +124,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -123,6 +132,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { return i; } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getSelectedBoundingBox(world, blockpos); @@ -131,17 +141,20 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i)).withProperty(AGE, Integer.valueOf((i & 15) >> 2)); } + @Override public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState iblockstate) { world.setBlockState(blockpos, iblockstate.withProperty(AGE, Integer.valueOf(((Integer) iblockstate.getValue(AGE)).intValue() + 1)), 2); } + @Override public boolean isFullCube() { return false; } @@ -150,6 +163,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -158,6 +172,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { if (!enumfacing.getAxis().isHorizontal()) { @@ -172,6 +187,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack var5) { EnumFacing enumfacing = EnumFacing.fromAngle((double) entitylivingbase.rotationYaw); @@ -181,6 +197,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!this.canBlockStay(world, blockpos, iblockstate)) { this.dropBlock(world, blockpos, iblockstate); @@ -188,6 +205,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); @@ -215,6 +233,7 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (!this.canBlockStay(world, blockpos, iblockstate)) { this.dropBlock(world, blockpos, iblockstate); @@ -226,4 +245,4 @@ public class BlockCocoa extends BlockDirectional implements IGrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockColored.java b/src/game/java/net/minecraft/block/BlockColored.java index 91ae5035..9c22f90f 100644 --- a/src/game/java/net/minecraft/block/BlockColored.java +++ b/src/game/java/net/minecraft/block/BlockColored.java @@ -16,13 +16,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockColored extends Block { public static final PropertyEnum COLOR = PropertyEnum.create("color", @@ -46,6 +46,7 @@ public class BlockColored extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { COLOR }); } @@ -55,6 +56,7 @@ public class BlockColored extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -62,6 +64,7 @@ public class BlockColored extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMapColor(); } @@ -69,6 +72,7 @@ public class BlockColored extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -76,6 +80,7 @@ public class BlockColored extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(i)); } @@ -84,6 +89,7 @@ public class BlockColored extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { EnumDyeColor[] colors = EnumDyeColor.META_LOOKUP; for (int i = 0; i < colors.length; ++i) { @@ -92,4 +98,4 @@ public class BlockColored extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCommandBlock.java b/src/game/java/net/minecraft/block/BlockCommandBlock.java index e5c05c54..7684eab6 100644 --- a/src/game/java/net/minecraft/block/BlockCommandBlock.java +++ b/src/game/java/net/minecraft/block/BlockCommandBlock.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCommandBlock extends BlockContainer { public static final PropertyBool TRIGGERED = PropertyBool.create("triggered"); @@ -48,6 +48,7 @@ public class BlockCommandBlock extends BlockContainer { this.setDefaultState(this.blockState.getBaseState().withProperty(TRIGGERED, Boolean.valueOf(false))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { TRIGGERED }); } @@ -56,10 +57,12 @@ public class BlockCommandBlock extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityCommandBlock(); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { TileEntity tileentity = world.getTileEntity(blockpos); return tileentity instanceof TileEntityCommandBlock @@ -70,6 +73,7 @@ public class BlockCommandBlock extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; if (((Boolean) iblockstate.getValue(TRIGGERED)).booleanValue()) { @@ -83,6 +87,7 @@ public class BlockCommandBlock extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -90,14 +95,17 @@ public class BlockCommandBlock extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(TRIGGERED, Boolean.valueOf((i & 1) > 0)); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { TileEntity tileentity = world.getTileEntity(blockpos); @@ -110,6 +118,7 @@ public class BlockCommandBlock extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase var8) { return this.getDefaultState().withProperty(TRIGGERED, Boolean.valueOf(false)); @@ -119,6 +128,7 @@ public class BlockCommandBlock extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState var3, EntityLivingBase var4, ItemStack itemstack) { TileEntity tileentity = world.getTileEntity(blockpos); @@ -137,6 +147,7 @@ public class BlockCommandBlock extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!world.isRemote) { boolean flag = world.isBlockPowered(blockpos); @@ -153,6 +164,7 @@ public class BlockCommandBlock extends BlockContainer { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } @@ -160,10 +172,12 @@ public class BlockCommandBlock extends BlockContainer { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 1; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityCommandBlock) { @@ -172,4 +186,4 @@ public class BlockCommandBlock extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCompressedPowered.java b/src/game/java/net/minecraft/block/BlockCompressedPowered.java index afb3ba15..b2c994d9 100644 --- a/src/game/java/net/minecraft/block/BlockCompressedPowered.java +++ b/src/game/java/net/minecraft/block/BlockCompressedPowered.java @@ -10,13 +10,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCompressedPowered extends Block { public BlockCompressedPowered(Material parMaterial, MapColor parMapColor) { @@ -39,11 +39,13 @@ public class BlockCompressedPowered extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState var3, EnumFacing var4) { return 15; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockContainer.java b/src/game/java/net/minecraft/block/BlockContainer.java index 776cbd6e..30ec3b59 100644 --- a/src/game/java/net/minecraft/block/BlockContainer.java +++ b/src/game/java/net/minecraft/block/BlockContainer.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockContainer extends Block implements ITileEntityProvider { protected BlockContainer(Material materialIn) { @@ -41,6 +41,7 @@ public abstract class BlockContainer extends Block implements ITileEntityProvide this.isBlockContainer = true; } + @Override public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { super.breakBlock(worldIn, pos, state); worldIn.removeTileEntity(pos); @@ -61,6 +62,7 @@ public abstract class BlockContainer extends Block implements ITileEntityProvide * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return -1; } @@ -68,9 +70,10 @@ public abstract class BlockContainer extends Block implements ITileEntityProvide /** * + Called on both Client and Server when World#addBlockEvent is called */ + @Override public boolean onBlockEventReceived(World worldIn, BlockPos pos, IBlockState state, int eventID, int eventParam) { super.onBlockEventReceived(worldIn, pos, state, eventID, eventParam); TileEntity tileentity = worldIn.getTileEntity(pos); return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockCrops.java b/src/game/java/net/minecraft/block/BlockCrops.java index f8937cf9..4f096988 100644 --- a/src/game/java/net/minecraft/block/BlockCrops.java +++ b/src/game/java/net/minecraft/block/BlockCrops.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockCrops extends BlockBush implements IGrowable { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7); @@ -97,6 +97,7 @@ public class BlockCrops extends BlockBush implements IGrowable { this.disableStats(); } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) { return (world.getLight(blockpos) >= 8 || world.canSeeSky(blockpos)) && this.canPlaceBlockOn(world.getBlockState(blockpos.down()).getBlock()); @@ -105,6 +106,7 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState iblockstate, boolean var4) { return ((Integer) iblockstate.getValue(AGE)).intValue() < 7; } @@ -112,14 +114,17 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block == Blocks.farmland; } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE }); } @@ -127,6 +132,7 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, 0); if (!world.isRemote) { @@ -147,6 +153,7 @@ public class BlockCrops extends BlockBush implements IGrowable { return Items.wheat; } + @Override public Item getItem(World var1, BlockPos var2) { return this.getSeed(); } @@ -154,6 +161,7 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return ((Integer) iblockstate.getValue(AGE)).intValue() == 7 ? this.getCrop() : this.getSeed(); } @@ -161,6 +169,7 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } @@ -172,6 +181,7 @@ public class BlockCrops extends BlockBush implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } @@ -185,10 +195,12 @@ public class BlockCrops extends BlockBush implements IGrowable { worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(i)), 2); } + @Override public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState iblockstate) { this.grow(world, blockpos, iblockstate); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { super.updateTick(world, blockpos, iblockstate, random); if (world.getLightFromNeighbors(blockpos.up()) >= 9) { @@ -202,4 +214,4 @@ public class BlockCrops extends BlockBush implements IGrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDaylightDetector.java b/src/game/java/net/minecraft/block/BlockDaylightDetector.java index d3b552e6..4c4d65cc 100644 --- a/src/game/java/net/minecraft/block/BlockDaylightDetector.java +++ b/src/game/java/net/minecraft/block/BlockDaylightDetector.java @@ -25,13 +25,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDaylightDetector extends BlockContainer { public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); @@ -64,10 +64,12 @@ public class BlockDaylightDetector extends BlockContainer { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { POWER }); } @@ -76,10 +78,12 @@ public class BlockDaylightDetector extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityDaylightDetector(); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.daylight_detector); } @@ -87,6 +91,7 @@ public class BlockDaylightDetector extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.daylight_detector); } @@ -94,6 +99,7 @@ public class BlockDaylightDetector extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(POWER)).intValue(); } @@ -102,6 +108,7 @@ public class BlockDaylightDetector extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -109,6 +116,7 @@ public class BlockDaylightDetector extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWER, Integer.valueOf(i)); } @@ -117,6 +125,7 @@ public class BlockDaylightDetector extends BlockContainer { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs creativetabs, List list) { if (!this.inverted) { super.getSubBlocks(item, creativetabs, list); @@ -124,10 +133,12 @@ public class BlockDaylightDetector extends BlockContainer { } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return ((Integer) iblockstate.getValue(POWER)).intValue(); } + @Override public boolean isFullCube() { return false; } @@ -136,10 +147,12 @@ public class BlockDaylightDetector extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing enumfacing, float f, float f1, float f2) { if (entityplayer.isAllowEdit()) { @@ -161,6 +174,7 @@ public class BlockDaylightDetector extends BlockContainer { } } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.375F, 1.0F); } @@ -184,4 +198,4 @@ public class BlockDaylightDetector extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDeadBush.java b/src/game/java/net/minecraft/block/BlockDeadBush.java index 98465a2f..3bc91160 100644 --- a/src/game/java/net/minecraft/block/BlockDeadBush.java +++ b/src/game/java/net/minecraft/block/BlockDeadBush.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDeadBush extends BlockBush { protected BlockDeadBush() { @@ -47,6 +47,7 @@ public class BlockDeadBush extends BlockBush { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block == Blocks.sand || block == Blocks.hardened_clay || block == Blocks.stained_hardened_clay || block == Blocks.dirt; @@ -55,6 +56,7 @@ public class BlockDeadBush extends BlockBush { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -62,10 +64,12 @@ public class BlockDeadBush extends BlockBush { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.woodColor; } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (!world.isRemote && entityplayer.getCurrentEquippedItem() != null @@ -82,7 +86,8 @@ public class BlockDeadBush extends BlockBush { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World var1, BlockPos var2) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDirectional.java b/src/game/java/net/minecraft/block/BlockDirectional.java index da47ea42..fbe78365 100644 --- a/src/game/java/net/minecraft/block/BlockDirectional.java +++ b/src/game/java/net/minecraft/block/BlockDirectional.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockDirectional extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -38,4 +38,4 @@ public abstract class BlockDirectional extends Block { protected BlockDirectional(Material parMaterial, MapColor parMapColor) { super(parMaterial, parMapColor); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDirt.java b/src/game/java/net/minecraft/block/BlockDirt.java index d617a2d5..51cbd8e7 100644 --- a/src/game/java/net/minecraft/block/BlockDirt.java +++ b/src/game/java/net/minecraft/block/BlockDirt.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDirt extends Block { public static enum DirtType implements IStringSerializable { @@ -89,6 +89,7 @@ public class BlockDirt extends Block { return this.metadata; } + @Override public String getName() { return this.name; } @@ -97,6 +98,7 @@ public class BlockDirt extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -117,6 +119,7 @@ public class BlockDirt extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT, SNOWY }); } @@ -126,6 +129,7 @@ public class BlockDirt extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { BlockDirt.DirtType blockdirt$dirttype = (BlockDirt.DirtType) iblockstate.getValue(VARIANT); if (blockdirt$dirttype == BlockDirt.DirtType.PODZOL) { @@ -139,6 +143,7 @@ public class BlockDirt extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { if (iblockstate.getValue(VARIANT) == BlockDirt.DirtType.PODZOL) { Block block = iblockaccess.getBlockState(blockpos.up()).getBlock(); @@ -149,6 +154,7 @@ public class BlockDirt extends Block { return iblockstate; } + @Override public int getDamageValue(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos); return iblockstate.getBlock() != this ? 0 : ((BlockDirt.DirtType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -157,6 +163,7 @@ public class BlockDirt extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockDirt.DirtType) iblockstate.getValue(VARIANT)).func_181066_d(); } @@ -164,6 +171,7 @@ public class BlockDirt extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockDirt.DirtType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -171,6 +179,7 @@ public class BlockDirt extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockDirt.DirtType.byMetadata(i)); } @@ -179,9 +188,10 @@ public class BlockDirt extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item var1, CreativeTabs var2, List list) { list.add(new ItemStack(this, 1, BlockDirt.DirtType.DIRT.getMetadata())); list.add(new ItemStack(this, 1, BlockDirt.DirtType.COARSE_DIRT.getMetadata())); list.add(new ItemStack(this, 1, BlockDirt.DirtType.PODZOL.getMetadata())); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDispenser.java b/src/game/java/net/minecraft/block/BlockDispenser.java index de1ed68b..0b112fe4 100644 --- a/src/game/java/net/minecraft/block/BlockDispenser.java +++ b/src/game/java/net/minecraft/block/BlockDispenser.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDispenser extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing"); @@ -85,6 +85,7 @@ public class BlockDispenser extends BlockContainer { this.setCreativeTab(CreativeTabs.tabRedstone); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityDispenser) { @@ -95,6 +96,7 @@ public class BlockDispenser extends BlockContainer { super.breakBlock(world, blockpos, iblockstate); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, TRIGGERED }); } @@ -103,6 +105,7 @@ public class BlockDispenser extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityDispenser(); } @@ -130,6 +133,7 @@ public class BlockDispenser extends BlockContainer { return (IBehaviorDispenseItem) dispenseBehaviorRegistry.getObject(stack == null ? null : stack.getItem()); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return Container.calcRedstone(world.getTileEntity(blockpos)); } @@ -137,6 +141,7 @@ public class BlockDispenser extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -151,6 +156,7 @@ public class BlockDispenser extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -159,6 +165,7 @@ public class BlockDispenser extends BlockContainer { * + Possibly modify the given BlockState before rendering it on an Entity * (Minecarts, Endermen, ...) */ + @Override public IBlockState getStateForEntityRender(IBlockState var1) { return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH); } @@ -166,15 +173,18 @@ public class BlockDispenser extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, getFacing(i)).withProperty(TRIGGERED, Boolean.valueOf((i & 8) > 0)); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote) { @@ -191,6 +201,7 @@ public class BlockDispenser extends BlockContainer { return true; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { super.onBlockAdded(world, blockpos, iblockstate); this.setDefaultDirection(world, blockpos, iblockstate); @@ -200,6 +211,7 @@ public class BlockDispenser extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState() @@ -211,6 +223,7 @@ public class BlockDispenser extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack itemstack) { world.setBlockState(blockpos, iblockstate.withProperty(FACING, @@ -227,6 +240,7 @@ public class BlockDispenser extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { boolean flag = world.isBlockPowered(blockpos) || world.isBlockPowered(blockpos.up()); boolean flag1 = ((Boolean) iblockstate.getValue(TRIGGERED)).booleanValue(); @@ -266,13 +280,15 @@ public class BlockDispenser extends BlockContainer { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 4; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (!world.isRemote) { this.dispense(world, blockpos); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDoor.java b/src/game/java/net/minecraft/block/BlockDoor.java index 63f1030e..fd40974f 100644 --- a/src/game/java/net/minecraft/block/BlockDoor.java +++ b/src/game/java/net/minecraft/block/BlockDoor.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,16 +44,18 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDoor extends Block { public static enum EnumDoorHalf implements IStringSerializable { UPPER, LOWER; + @Override public String getName() { return this == UPPER ? "upper" : "lower"; } + @Override public String toString() { return this.getName(); } @@ -62,10 +64,12 @@ public class BlockDoor extends Block { public static enum EnumHingePosition implements IStringSerializable { LEFT, RIGHT; + @Override public String getName() { return this == LEFT ? "left" : "right"; } + @Override public String toString() { return this.getName(); } @@ -134,6 +138,7 @@ public class BlockDoor extends Block { .withProperty(POWERED, Boolean.valueOf(false)).withProperty(HALF, BlockDoor.EnumDoorHalf.LOWER)); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return blockpos.getY() >= 255 ? false : World.doesBlockHaveSolidTopSurface(world, blockpos.down()) && super.canPlaceBlockAt(world, blockpos) @@ -144,11 +149,13 @@ public class BlockDoor extends Block { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World world, BlockPos blockpos, Vec3 vec3, Vec3 vec31) { this.setBlockBoundsBasedOnState(world, blockpos); return super.collisionRayTrace(world, blockpos, vec3, vec31); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { HALF, FACING, OPEN, HINGE, POWERED }); } @@ -157,6 +164,7 @@ public class BlockDoor extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { if (iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER) { IBlockState iblockstate1 = iblockaccess.getBlockState(blockpos.up()); @@ -175,10 +183,12 @@ public class BlockDoor extends Block { return iblockstate; } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); @@ -194,6 +204,7 @@ public class BlockDoor extends Block { : Items.oak_door))))); } + @Override public Item getItem(World var1, BlockPos var2) { return this.getItem(); } @@ -201,6 +212,7 @@ public class BlockDoor extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER ? null : this.getItem(); } @@ -208,6 +220,7 @@ public class BlockDoor extends Block { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal((this.getUnlocalizedName() + ".name").replaceAll("tile", "item")); } @@ -215,6 +228,7 @@ public class BlockDoor extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; if (iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER) { @@ -236,10 +250,12 @@ public class BlockDoor extends Block { return i; } + @Override public int getMobilityFlag() { return 1; } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getSelectedBoundingBox(world, blockpos); @@ -248,6 +264,7 @@ public class BlockDoor extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return (i & 8) > 0 ? this.getDefaultState().withProperty(HALF, BlockDoor.EnumDoorHalf.UPPER) @@ -259,6 +276,7 @@ public class BlockDoor extends Block { .withProperty(OPEN, Boolean.valueOf((i & 4) > 0)); } + @Override public boolean isFullCube() { return false; } @@ -267,14 +285,17 @@ public class BlockDoor extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess iblockaccess, BlockPos blockpos) { return isOpen(combineMetadata(iblockaccess, blockpos)); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (this.blockMaterial == Material.iron) { @@ -296,6 +317,7 @@ public class BlockDoor extends Block { } } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { BlockPos blockpos1 = blockpos.down(); if (entityplayer.capabilities.isCreativeMode && iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER @@ -308,6 +330,7 @@ public class BlockDoor extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER) { BlockPos blockpos1 = blockpos.down(); @@ -354,6 +377,7 @@ public class BlockDoor extends Block { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.setBoundBasedOnMeta(combineMetadata(iblockaccess, blockpos)); } @@ -415,4 +439,4 @@ public class BlockDoor extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDoublePlant.java b/src/game/java/net/minecraft/block/BlockDoublePlant.java index d41f2298..d19f0184 100644 --- a/src/game/java/net/minecraft/block/BlockDoublePlant.java +++ b/src/game/java/net/minecraft/block/BlockDoublePlant.java @@ -27,13 +27,13 @@ import net.minecraft.world.biome.BiomeColorHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,16 +45,18 @@ import net.minecraft.world.biome.BiomeColorHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDoublePlant extends BlockBush implements IGrowable { public static enum EnumBlockHalf implements IStringSerializable { UPPER, LOWER; + @Override public String getName() { return this == UPPER ? "upper" : "lower"; } + @Override public String toString() { return this.getName(); } @@ -101,6 +103,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { return this.meta; } + @Override public String getName() { return this.name; } @@ -109,6 +112,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -136,6 +140,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { this.setUnlocalizedName("doublePlant"); } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState iblockstate) { if (iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { return world.getBlockState(blockpos.down()).getBlock() == this; @@ -148,20 +153,24 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World world, BlockPos blockpos, IBlockState var3, boolean var4) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = this.getVariant(world, blockpos); return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) && world.isAirBlock(blockpos.up()); } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override protected void checkAndDropBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (!this.canBlockStay(world, blockpos, iblockstate)) { boolean flag = iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER; @@ -183,6 +192,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { } } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = this.getVariant(iblockaccess, blockpos); return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS @@ -190,6 +200,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { : BiomeColorHelper.getGrassColorAtPos(iblockaccess, blockpos); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { HALF, VARIANT, field_181084_N }); } @@ -199,6 +210,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return iblockstate.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.UPPER && iblockstate.getValue(VARIANT) != BlockDoublePlant.EnumPlantType.GRASS @@ -210,6 +222,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { if (iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { IBlockState iblockstate1 = iblockaccess.getBlockState(blockpos.down()); @@ -221,6 +234,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { return iblockstate; } + @Override public int getDamageValue(World world, BlockPos blockpos) { return this.getVariant(world, blockpos).getMeta(); } @@ -228,6 +242,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom random, int var3) { if (iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { return null; @@ -244,6 +259,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER ? 8 | ((EnumFacing) iblockstate.getValue(field_181084_N)).getHorizontalIndex() @@ -254,6 +270,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * + Get the OffsetType for this Block. Determines if the model is rendered * slightly offset. */ + @Override public Block.EnumOffsetType getOffsetType() { return Block.EnumOffsetType.XZ; } @@ -261,6 +278,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return (i & 8) > 0 ? this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER) : this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(VARIANT, @@ -271,6 +289,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockDoublePlant.EnumPlantType[] types = BlockDoublePlant.EnumPlantType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -289,10 +308,12 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { } } + @Override public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState var4) { spawnAsEntity(world, blockpos, new ItemStack(this, 1, this.getVariant(world, blockpos).getMeta())); } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (world.isRemote || entityplayer.getCurrentEquippedItem() == null @@ -307,6 +328,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos); if (iblockstate.getBlock() != this) { @@ -319,6 +341,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { } } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { if (iblockstate.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { if (world.getBlockState(blockpos.down()).getBlock() == this) { @@ -355,6 +378,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState var3, EntityLivingBase var4, ItemStack var5) { world.setBlockState(blockpos.up(), @@ -384,7 +408,8 @@ public class BlockDoublePlant extends BlockBush implements IGrowable { this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER), flags); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDoubleStoneSlab.java b/src/game/java/net/minecraft/block/BlockDoubleStoneSlab.java index b4bf18d5..f78ea174 100644 --- a/src/game/java/net/minecraft/block/BlockDoubleStoneSlab.java +++ b/src/game/java/net/minecraft/block/BlockDoubleStoneSlab.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDoubleStoneSlab extends BlockStoneSlab { + @Override public boolean isDouble() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDoubleStoneSlabNew.java b/src/game/java/net/minecraft/block/BlockDoubleStoneSlabNew.java index b008df8f..3dd329f6 100644 --- a/src/game/java/net/minecraft/block/BlockDoubleStoneSlabNew.java +++ b/src/game/java/net/minecraft/block/BlockDoubleStoneSlabNew.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDoubleStoneSlabNew extends BlockStoneSlabNew { + @Override public boolean isDouble() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDoubleWoodSlab.java b/src/game/java/net/minecraft/block/BlockDoubleWoodSlab.java index b83ee969..d2bf3848 100644 --- a/src/game/java/net/minecraft/block/BlockDoubleWoodSlab.java +++ b/src/game/java/net/minecraft/block/BlockDoubleWoodSlab.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDoubleWoodSlab extends BlockWoodSlab { + @Override public boolean isDouble() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDragonEgg.java b/src/game/java/net/minecraft/block/BlockDragonEgg.java index 90495395..3c7e0629 100644 --- a/src/game/java/net/minecraft/block/BlockDragonEgg.java +++ b/src/game/java/net/minecraft/block/BlockDragonEgg.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDragonEgg extends Block { public BlockDragonEgg() { @@ -65,10 +65,12 @@ public class BlockDragonEgg extends Block { } } + @Override public Item getItem(World var1, BlockPos var2) { return null; } + @Override public boolean isFullCube() { return false; } @@ -77,20 +79,24 @@ public class BlockDragonEgg extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer var4, EnumFacing var5, float var6, float var7, float var8) { this.teleport(world, blockpos); return true; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { world.scheduleUpdate(blockpos, this, this.tickRate(world)); } + @Override public void onBlockClicked(World world, BlockPos blockpos, EntityPlayer var3) { this.teleport(world, blockpos); } @@ -98,10 +104,12 @@ public class BlockDragonEgg extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { world.scheduleUpdate(blockpos, this, this.tickRate(world)); } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing var3) { return true; } @@ -144,11 +152,13 @@ public class BlockDragonEgg extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 5; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { this.checkFall(world, blockpos); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDropper.java b/src/game/java/net/minecraft/block/BlockDropper.java index d72c4339..cd76fc35 100644 --- a/src/game/java/net/minecraft/block/BlockDropper.java +++ b/src/game/java/net/minecraft/block/BlockDropper.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDropper extends BlockDispenser { private final IBehaviorDispenseItem dropBehavior = new BehaviorDefaultDispenseItem(); @@ -42,10 +42,12 @@ public class BlockDropper extends BlockDispenser { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityDropper(); } + @Override protected void dispense(World world, BlockPos blockpos) { BlockSourceImpl blocksourceimpl = new BlockSourceImpl(world, blockpos); TileEntityDispenser tileentitydispenser = (TileEntityDispenser) blocksourceimpl.getBlockTileEntity(); @@ -85,7 +87,8 @@ public class BlockDropper extends BlockDispenser { } } + @Override protected IBehaviorDispenseItem getBehavior(ItemStack var1) { return this.dropBehavior; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockDynamicLiquid.java b/src/game/java/net/minecraft/block/BlockDynamicLiquid.java index 81f5cc81..9fb4a9f8 100644 --- a/src/game/java/net/minecraft/block/BlockDynamicLiquid.java +++ b/src/game/java/net/minecraft/block/BlockDynamicLiquid.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockDynamicLiquid extends BlockLiquid { int adjacentSourceBlocks; @@ -136,6 +136,7 @@ public class BlockDynamicLiquid extends BlockLiquid { : true; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { if (!this.checkForMixing(world, blockpos, iblockstate)) { world.scheduleUpdate(blockpos, this, this.tickRate(world)); @@ -164,6 +165,7 @@ public class BlockDynamicLiquid extends BlockLiquid { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { int i = ((Integer) iblockstate.getValue(LEVEL)).intValue(); byte b0 = 1; @@ -259,4 +261,4 @@ public class BlockDynamicLiquid extends BlockLiquid { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockEnchantmentTable.java b/src/game/java/net/minecraft/block/BlockEnchantmentTable.java index c2a23996..524a132e 100644 --- a/src/game/java/net/minecraft/block/BlockEnchantmentTable.java +++ b/src/game/java/net/minecraft/block/BlockEnchantmentTable.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockEnchantmentTable extends BlockContainer { protected BlockEnchantmentTable() { @@ -51,6 +51,7 @@ public class BlockEnchantmentTable extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityEnchantmentTable(); } @@ -59,10 +60,12 @@ public class BlockEnchantmentTable extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } + @Override public boolean isFullCube() { return false; } @@ -71,10 +74,12 @@ public class BlockEnchantmentTable extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote) { @@ -90,6 +95,7 @@ public class BlockEnchantmentTable extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack itemstack) { super.onBlockPlacedBy(world, blockpos, iblockstate, entitylivingbase, itemstack); @@ -102,6 +108,7 @@ public class BlockEnchantmentTable extends BlockContainer { } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { super.randomDisplayTick(world, blockpos, iblockstate, random); @@ -131,4 +138,4 @@ public class BlockEnchantmentTable extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockEndPortal.java b/src/game/java/net/minecraft/block/BlockEndPortal.java index 968001aa..1e3e2efa 100644 --- a/src/game/java/net/minecraft/block/BlockEndPortal.java +++ b/src/game/java/net/minecraft/block/BlockEndPortal.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockEndPortal extends BlockContainer { protected BlockEndPortal(Material materialIn) { @@ -50,6 +50,7 @@ public class BlockEndPortal extends BlockContainer { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World var1, BlockPos var2, IBlockState var3, AxisAlignedBB var4, List var5, Entity var6) { } @@ -58,10 +59,12 @@ public class BlockEndPortal extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityEndPortal(); } + @Override public Item getItem(World var1, BlockPos var2) { return null; } @@ -69,10 +72,12 @@ public class BlockEndPortal extends BlockContainer { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.blackColor; } + @Override public boolean isFullCube() { return false; } @@ -81,6 +86,7 @@ public class BlockEndPortal extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -88,6 +94,7 @@ public class BlockEndPortal extends BlockContainer { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos var2, IBlockState var3, Entity entity) { if (entity.ridingEntity == null && entity.riddenByEntity == null && !world.isRemote) { entity.travelToDimension(1); @@ -98,10 +105,12 @@ public class BlockEndPortal extends BlockContainer { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { double d0 = (double) ((float) blockpos.getX() + random.nextFloat()); double d1 = (double) ((float) blockpos.getY() + 0.8F); @@ -112,12 +121,14 @@ public class BlockEndPortal extends BlockContainer { world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, d3, d4, d5, new int[0]); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { float f = 0.0625F; this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return enumfacing == EnumFacing.DOWN ? super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing) : false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockEndPortalFrame.java b/src/game/java/net/minecraft/block/BlockEndPortalFrame.java index 63e8de77..ab6fd951 100644 --- a/src/game/java/net/minecraft/block/BlockEndPortalFrame.java +++ b/src/game/java/net/minecraft/block/BlockEndPortalFrame.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockEndPortalFrame extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -55,6 +55,7 @@ public class BlockEndPortalFrame extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.8125F, 1.0F); @@ -67,10 +68,12 @@ public class BlockEndPortalFrame extends Block { this.setBlockBoundsForItemRender(); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, EYE }); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return ((Boolean) world.getBlockState(blockpos).getValue(EYE)).booleanValue() ? 15 : 0; } @@ -78,6 +81,7 @@ public class BlockEndPortalFrame extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -85,6 +89,7 @@ public class BlockEndPortalFrame extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -98,11 +103,13 @@ public class BlockEndPortalFrame extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(EYE, Boolean.valueOf((i & 4) != 0)).withProperty(FACING, EnumFacing.getHorizontal(i & 3)); } + @Override public boolean hasComparatorInputOverride() { return true; } @@ -111,6 +118,7 @@ public class BlockEndPortalFrame extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -119,6 +127,7 @@ public class BlockEndPortalFrame extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()) @@ -128,7 +137,8 @@ public class BlockEndPortalFrame extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.8125F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockEnderChest.java b/src/game/java/net/minecraft/block/BlockEnderChest.java index 4113949e..f4a3a277 100644 --- a/src/game/java/net/minecraft/block/BlockEnderChest.java +++ b/src/game/java/net/minecraft/block/BlockEnderChest.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockEnderChest extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -54,10 +54,12 @@ public class BlockEnderChest extends BlockContainer { this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); } + @Override protected boolean canSilkHarvest() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } @@ -66,6 +68,7 @@ public class BlockEnderChest extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityEnderChest(); } @@ -73,6 +76,7 @@ public class BlockEnderChest extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.obsidian); } @@ -80,6 +84,7 @@ public class BlockEnderChest extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } @@ -88,6 +93,7 @@ public class BlockEnderChest extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 2; } @@ -95,6 +101,7 @@ public class BlockEnderChest extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -104,6 +111,7 @@ public class BlockEnderChest extends BlockContainer { return this.getDefaultState().withProperty(FACING, enumfacing); } + @Override public boolean isFullCube() { return false; } @@ -112,10 +120,12 @@ public class BlockEnderChest extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { InventoryEnderChest inventoryenderchest = entityplayer.getInventoryEnderChest(); @@ -140,6 +150,7 @@ public class BlockEnderChest extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()); @@ -149,6 +160,7 @@ public class BlockEnderChest extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack var5) { world.setBlockState(blockpos, @@ -158,10 +170,12 @@ public class BlockEnderChest extends BlockContainer { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 8; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { for (int i = 0; i < 3; ++i) { int j = random.nextInt(2) * 2 - 1; @@ -176,4 +190,4 @@ public class BlockEnderChest extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockEventData.java b/src/game/java/net/minecraft/block/BlockEventData.java index d07752c3..c566a17c 100644 --- a/src/game/java/net/minecraft/block/BlockEventData.java +++ b/src/game/java/net/minecraft/block/BlockEventData.java @@ -5,13 +5,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockEventData { private BlockPos position; @@ -38,6 +38,7 @@ public class BlockEventData { this.blockType = blockType; } + @Override public boolean equals(Object parObject) { if (!(parObject instanceof BlockEventData)) { return false; @@ -68,7 +69,8 @@ public class BlockEventData { return this.position; } + @Override public String toString() { return "TE(" + this.position + ")," + this.eventID + "," + this.eventParameter + "," + this.blockType; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFalling.java b/src/game/java/net/minecraft/block/BlockFalling.java index bb76c9e9..cde0725f 100644 --- a/src/game/java/net/minecraft/block/BlockFalling.java +++ b/src/game/java/net/minecraft/block/BlockFalling.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFalling extends Block { public static boolean fallInstantly; @@ -76,6 +76,7 @@ public class BlockFalling extends Block { } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { world.scheduleUpdate(blockpos, this, this.tickRate(world)); } @@ -86,6 +87,7 @@ public class BlockFalling extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { world.scheduleUpdate(blockpos, this, this.tickRate(world)); } @@ -96,13 +98,15 @@ public class BlockFalling extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 2; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (!world.isRemote) { this.checkFallable(world, blockpos); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFarmland.java b/src/game/java/net/minecraft/block/BlockFarmland.java index efd422f1..2b89473c 100644 --- a/src/game/java/net/minecraft/block/BlockFarmland.java +++ b/src/game/java/net/minecraft/block/BlockFarmland.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFarmland extends Block { public static final PropertyInteger MOISTURE = PropertyInteger.create("moisture", 0, 7); @@ -51,15 +51,18 @@ public class BlockFarmland extends Block { this.setLightOpacity(255); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { MOISTURE }); } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState var3) { return new AxisAlignedBB((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ(), (double) (blockpos.getX() + 1), (double) (blockpos.getY() + 1), (double) (blockpos.getZ() + 1)); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.dirt); } @@ -67,6 +70,7 @@ public class BlockFarmland extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int i) { return Blocks.dirt.getItemDropped( Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), random, i); @@ -75,6 +79,7 @@ public class BlockFarmland extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(MOISTURE)).intValue(); } @@ -82,6 +87,7 @@ public class BlockFarmland extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(MOISTURE, Integer.valueOf(i & 7)); } @@ -92,8 +98,7 @@ public class BlockFarmland extends Block { } private boolean hasWater(World worldIn, BlockPos pos) { - for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(pos.add(-4, 0, -4), - pos.add(4, 1, 4))) { + for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(pos.add(-4, 0, -4), pos.add(4, 1, 4))) { if (worldIn.getBlockState(blockpos$mutableblockpos).getBlock().getMaterial() == Material.water) { return true; } @@ -102,6 +107,7 @@ public class BlockFarmland extends Block { return false; } + @Override public boolean isFullCube() { return false; } @@ -110,6 +116,7 @@ public class BlockFarmland extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -117,6 +124,7 @@ public class BlockFarmland extends Block { /** * + Block's chance to react to a living entity falling on it. */ + @Override public void onFallenUpon(World world, BlockPos blockpos, Entity entity, float f) { if (entity instanceof EntityLivingBase) { if (!world.isRemote && world.rand.nextFloat() < f - 0.5F) { @@ -134,6 +142,7 @@ public class BlockFarmland extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { super.onNeighborBlockChange(world, blockpos, iblockstate, block); if (world.getBlockState(blockpos.up()).getBlock().getMaterial().isSolid()) { @@ -142,6 +151,7 @@ public class BlockFarmland extends Block { } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { switch (enumfacing) { case UP: @@ -157,6 +167,7 @@ public class BlockFarmland extends Block { } } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { int i = ((Integer) iblockstate.getValue(MOISTURE)).intValue(); if (!this.hasWater(world, blockpos) && !world.canLightningStrike(blockpos.up())) { @@ -170,4 +181,4 @@ public class BlockFarmland extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFence.java b/src/game/java/net/minecraft/block/BlockFence.java index 600291d8..17eef418 100644 --- a/src/game/java/net/minecraft/block/BlockFence.java +++ b/src/game/java/net/minecraft/block/BlockFence.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFence extends Block { /** @@ -76,6 +76,7 @@ public class BlockFence extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { boolean flag = this.canConnectTo(world, blockpos.north()); @@ -136,6 +137,7 @@ public class BlockFence extends Block { : true); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { NORTH, EAST, WEST, SOUTH }); } @@ -144,6 +146,7 @@ public class BlockFence extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate.withProperty(NORTH, Boolean.valueOf(this.canConnectTo(iblockaccess, blockpos.north()))) .withProperty(EAST, Boolean.valueOf(this.canConnectTo(iblockaccess, blockpos.east()))) @@ -154,10 +157,12 @@ public class BlockFence extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState var1) { return 0; } + @Override public boolean isFullCube() { return false; } @@ -166,19 +171,23 @@ public class BlockFence extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess var1, BlockPos var2) { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { return world.isRemote ? true : ItemLead.attachToFence(entityplayer, world, blockpos); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { boolean flag = this.canConnectTo(iblockaccess, blockpos.north()); boolean flag1 = this.canConnectTo(iblockaccess, blockpos.south()); @@ -207,7 +216,8 @@ public class BlockFence extends Block { this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing var3) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFenceGate.java b/src/game/java/net/minecraft/block/BlockFenceGate.java index 1ca3f9e9..eb392d75 100644 --- a/src/game/java/net/minecraft/block/BlockFenceGate.java +++ b/src/game/java/net/minecraft/block/BlockFenceGate.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFenceGate extends BlockDirectional { public static final PropertyBool OPEN = PropertyBool.create("open"); @@ -50,12 +50,14 @@ public class BlockFenceGate extends BlockDirectional { this.setCreativeTab(CreativeTabs.tabRedstone); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return world.getBlockState(blockpos.down()).getBlock().getMaterial().isSolid() ? super.canPlaceBlockAt(world, blockpos) : false; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, OPEN, POWERED, IN_WALL }); } @@ -64,6 +66,7 @@ public class BlockFenceGate extends BlockDirectional { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { EnumFacing.Axis enumfacing$axis = ((EnumFacing) iblockstate.getValue(FACING)).getAxis(); if (enumfacing$axis == EnumFacing.Axis.Z @@ -78,6 +81,7 @@ public class BlockFenceGate extends BlockDirectional { return iblockstate; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState iblockstate) { if (((Boolean) iblockstate.getValue(OPEN)).booleanValue()) { return null; @@ -96,6 +100,7 @@ public class BlockFenceGate extends BlockDirectional { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -113,11 +118,13 @@ public class BlockFenceGate extends BlockDirectional { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i)) .withProperty(OPEN, Boolean.valueOf((i & 4) != 0)).withProperty(POWERED, Boolean.valueOf((i & 8) != 0)); } + @Override public boolean isFullCube() { return false; } @@ -126,14 +133,17 @@ public class BlockFenceGate extends BlockDirectional { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess iblockaccess, BlockPos blockpos) { return ((Boolean) iblockaccess.getBlockState(blockpos).getValue(OPEN)).booleanValue(); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (((Boolean) iblockstate.getValue(OPEN)).booleanValue()) { @@ -158,6 +168,7 @@ public class BlockFenceGate extends BlockDirectional { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing()) @@ -168,6 +179,7 @@ public class BlockFenceGate extends BlockDirectional { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (!world.isRemote) { boolean flag = world.isBlockPowered(blockpos); @@ -189,6 +201,7 @@ public class BlockFenceGate extends BlockDirectional { } } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { EnumFacing.Axis enumfacing$axis = ((EnumFacing) iblockaccess.getBlockState(blockpos).getValue(FACING)) .getAxis(); @@ -200,7 +213,8 @@ public class BlockFenceGate extends BlockDirectional { } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing var3) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFire.java b/src/game/java/net/minecraft/block/BlockFire.java index 3a732634..d6718ff2 100644 --- a/src/game/java/net/minecraft/block/BlockFire.java +++ b/src/game/java/net/minecraft/block/BlockFire.java @@ -25,13 +25,13 @@ import net.minecraft.world.WorldProviderEnd; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.WorldProviderEnd; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFire extends Block { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); @@ -132,6 +132,7 @@ public class BlockFire extends Block { return false; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return World.doesBlockHaveSolidTopSurface(world, blockpos.down()) || this.canNeighborCatchFire(world, blockpos); } @@ -159,6 +160,7 @@ public class BlockFire extends Block { } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE, NORTH, EAST, SOUTH, WEST, UPPER, FLIP, ALT }); } @@ -167,6 +169,7 @@ public class BlockFire extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { int i = blockpos.getX(); int j = blockpos.getY(); @@ -191,10 +194,12 @@ public class BlockFire extends Block { } } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -212,6 +217,7 @@ public class BlockFire extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.tntColor; } @@ -219,6 +225,7 @@ public class BlockFire extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } @@ -241,6 +248,7 @@ public class BlockFire extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } @@ -248,10 +256,12 @@ public class BlockFire extends Block { /** * + Returns if this block is collidable (only used by Fire). Args: x, y, z */ + @Override public boolean isCollidable() { return false; } + @Override public boolean isFullCube() { return false; } @@ -260,10 +270,12 @@ public class BlockFire extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { if (world.provider.getDimensionId() > 0 || !Blocks.portal.func_176548_d(world, blockpos)) { if (!World.doesBlockHaveSolidTopSurface(world, blockpos.down()) @@ -278,6 +290,7 @@ public class BlockFire extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { if (!World.doesBlockHaveSolidTopSurface(world, blockpos.down()) && !this.canNeighborCatchFire(world, blockpos)) { @@ -289,10 +302,12 @@ public class BlockFire extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (random.nextInt(24) == 0) { world.playSound((double) ((float) blockpos.getX() + 0.5F), (double) ((float) blockpos.getY() + 0.5F), @@ -357,6 +372,7 @@ public class BlockFire extends Block { } + @Override public boolean requiresUpdates() { return false; } @@ -369,10 +385,12 @@ public class BlockFire extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 30; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (world.getGameRules().getBoolean("doFireTick")) { if (!this.canPlaceBlockAt(world, blockpos)) { @@ -459,4 +477,4 @@ public class BlockFire extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFlower.java b/src/game/java/net/minecraft/block/BlockFlower.java index f1630912..a9a69264 100644 --- a/src/game/java/net/minecraft/block/BlockFlower.java +++ b/src/game/java/net/minecraft/block/BlockFlower.java @@ -20,13 +20,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockFlower extends BlockBush { public static enum EnumFlowerColor { @@ -70,6 +70,7 @@ public abstract class BlockFlower extends BlockBush { final BlockFlower.EnumFlowerColor blockflower$enumflowercolor = colors[i]; Collection collection = Collections2.filter(Lists.newArrayList(values()), new Predicate() { + @Override public boolean apply(BlockFlower.EnumFlowerType blockflower$enumflowertype) { return blockflower$enumflowertype.getBlockType() == blockflower$enumflowercolor; } @@ -123,6 +124,7 @@ public abstract class BlockFlower extends BlockBush { return this.meta; } + @Override public String getName() { return this.name; } @@ -131,6 +133,7 @@ public abstract class BlockFlower extends BlockBush { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -144,6 +147,7 @@ public abstract class BlockFlower extends BlockBush { : BlockFlower.EnumFlowerType.DANDELION)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { this.getTypeProperty() }); } @@ -153,6 +157,7 @@ public abstract class BlockFlower extends BlockBush { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockFlower.EnumFlowerType) iblockstate.getValue(this.getTypeProperty())).getMeta(); } @@ -162,6 +167,7 @@ public abstract class BlockFlower extends BlockBush { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockFlower.EnumFlowerType) iblockstate.getValue(this.getTypeProperty())).getMeta(); } @@ -170,6 +176,7 @@ public abstract class BlockFlower extends BlockBush { * + Get the OffsetType for this Block. Determines if the model is rendered * slightly offset. */ + @Override public Block.EnumOffsetType getOffsetType() { return Block.EnumOffsetType.XZ; } @@ -177,6 +184,7 @@ public abstract class BlockFlower extends BlockBush { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(this.getTypeProperty(), BlockFlower.EnumFlowerType.getType(this.getBlockType(), i)); @@ -186,6 +194,7 @@ public abstract class BlockFlower extends BlockBush { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockFlower.EnumFlowerType[] flowerTypes = BlockFlower.EnumFlowerType.getTypes(this.getBlockType()); for (int i = 0; i < flowerTypes.length; ++i) { @@ -198,6 +207,7 @@ public abstract class BlockFlower extends BlockBush { if (this.type == null) { this.type = PropertyEnum.create("type", BlockFlower.EnumFlowerType.class, new Predicate() { + @Override public boolean apply(BlockFlower.EnumFlowerType blockflower$enumflowertype) { return blockflower$enumflowertype.getBlockType() == BlockFlower.this.getBlockType(); } @@ -206,4 +216,4 @@ public abstract class BlockFlower extends BlockBush { return this.type; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFlowerPot.java b/src/game/java/net/minecraft/block/BlockFlowerPot.java index 0f06f04a..48c502d7 100644 --- a/src/game/java/net/minecraft/block/BlockFlowerPot.java +++ b/src/game/java/net/minecraft/block/BlockFlowerPot.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFlowerPot extends BlockContainer { public static enum EnumFlowerType implements IStringSerializable { @@ -62,10 +62,12 @@ public class BlockFlowerPot extends BlockContainer { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -86,6 +88,7 @@ public class BlockFlowerPot extends BlockContainer { this.setBlockBoundsForItemRender(); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(world, blockpos); if (tileentityflowerpot != null && tileentityflowerpot.getFlowerPotItem() != null) { @@ -104,10 +107,12 @@ public class BlockFlowerPot extends BlockContainer { : true; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) && World.doesBlockHaveSolidTopSurface(world, blockpos.down()); } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int i) { TileEntity tileentity = iblockaccess.getTileEntity(blockpos); if (tileentity instanceof TileEntityFlowerPot) { @@ -120,6 +125,7 @@ public class BlockFlowerPot extends BlockContainer { return 16777215; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { CONTENTS, LEGACY_DATA }); } @@ -128,6 +134,7 @@ public class BlockFlowerPot extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int i) { Object object = null; int j = 0; @@ -187,6 +194,7 @@ public class BlockFlowerPot extends BlockContainer { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { BlockFlowerPot.EnumFlowerType blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.EMPTY; TileEntity tileentity = iblockaccess.getTileEntity(blockpos); @@ -279,10 +287,12 @@ public class BlockFlowerPot extends BlockContainer { return iblockstate.withProperty(CONTENTS, blockflowerpot$enumflowertype); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public int getDamageValue(World world, BlockPos blockpos) { TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(world, blockpos); return tileentityflowerpot != null && tileentityflowerpot.getFlowerPotItem() != null @@ -290,6 +300,7 @@ public class BlockFlowerPot extends BlockContainer { : 0; } + @Override public Item getItem(World world, BlockPos blockpos) { TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(world, blockpos); return tileentityflowerpot != null && tileentityflowerpot.getFlowerPotItem() != null @@ -300,6 +311,7 @@ public class BlockFlowerPot extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.flower_pot; } @@ -307,6 +319,7 @@ public class BlockFlowerPot extends BlockContainer { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("item.flowerPot.name"); } @@ -314,6 +327,7 @@ public class BlockFlowerPot extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(LEGACY_DATA)).intValue(); } @@ -322,6 +336,7 @@ public class BlockFlowerPot extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -334,10 +349,12 @@ public class BlockFlowerPot extends BlockContainer { /** * + Returns true only if block is flowerPot */ + @Override public boolean isFlowerPot() { return true; } + @Override public boolean isFullCube() { return false; } @@ -346,10 +363,12 @@ public class BlockFlowerPot extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); @@ -381,6 +400,7 @@ public class BlockFlowerPot extends BlockContainer { } } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { super.onBlockHarvested(world, blockpos, iblockstate, entityplayer); if (entityplayer.capabilities.isCreativeMode) { @@ -395,6 +415,7 @@ public class BlockFlowerPot extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!World.doesBlockHaveSolidTopSurface(world, blockpos.down())) { this.dropBlockAsItem(world, blockpos, iblockstate, 0); @@ -406,9 +427,10 @@ public class BlockFlowerPot extends BlockContainer { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.375F; float f1 = f / 2.0F; this.setBlockBounds(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, f, 0.5F + f1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockFurnace.java b/src/game/java/net/minecraft/block/BlockFurnace.java index c7d012fc..c5c88579 100644 --- a/src/game/java/net/minecraft/block/BlockFurnace.java +++ b/src/game/java/net/minecraft/block/BlockFurnace.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFurnace extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -80,6 +80,7 @@ public class BlockFurnace extends BlockContainer { this.isBurning = isBurning; } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (!keepInventory) { TileEntity tileentity = world.getTileEntity(blockpos); @@ -92,6 +93,7 @@ public class BlockFurnace extends BlockContainer { super.breakBlock(world, blockpos, iblockstate); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } @@ -100,14 +102,17 @@ public class BlockFurnace extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityFurnace(); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return Container.calcRedstone(world.getTileEntity(blockpos)); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.furnace); } @@ -115,6 +120,7 @@ public class BlockFurnace extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.furnace); } @@ -122,6 +128,7 @@ public class BlockFurnace extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } @@ -130,6 +137,7 @@ public class BlockFurnace extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -138,6 +146,7 @@ public class BlockFurnace extends BlockContainer { * + Possibly modify the given BlockState before rendering it on an Entity * (Minecarts, Endermen, ...) */ + @Override public IBlockState getStateForEntityRender(IBlockState var1) { return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH); } @@ -145,6 +154,7 @@ public class BlockFurnace extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -154,10 +164,12 @@ public class BlockFurnace extends BlockContainer { return this.getDefaultState().withProperty(FACING, enumfacing); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -173,6 +185,7 @@ public class BlockFurnace extends BlockContainer { } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.setDefaultFacing(world, blockpos, iblockstate); } @@ -181,6 +194,7 @@ public class BlockFurnace extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()); @@ -190,6 +204,7 @@ public class BlockFurnace extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack itemstack) { world.setBlockState(blockpos, @@ -203,6 +218,7 @@ public class BlockFurnace extends BlockContainer { } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (this.isBurning) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); @@ -252,4 +268,4 @@ public class BlockFurnace extends BlockContainer { worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing), 2); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockGlass.java b/src/game/java/net/minecraft/block/BlockGlass.java index 1d23a0c0..c8ca5229 100644 --- a/src/game/java/net/minecraft/block/BlockGlass.java +++ b/src/game/java/net/minecraft/block/BlockGlass.java @@ -9,13 +9,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockGlass extends BlockBreakable { public BlockGlass(Material materialIn, boolean ignoreSimilarity) { @@ -35,18 +35,22 @@ public class BlockGlass extends BlockBreakable { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected boolean canSilkHarvest() { return true; } + @Override public boolean eaglerShadersShouldRenderGlassHighlights() { return DeferredStateManager.isRenderingGlassHighlights(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public boolean isFullCube() { return false; } @@ -54,7 +58,8 @@ public class BlockGlass extends BlockBreakable { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockGlowstone.java b/src/game/java/net/minecraft/block/BlockGlowstone.java index ac0f87d1..7f3e1880 100644 --- a/src/game/java/net/minecraft/block/BlockGlowstone.java +++ b/src/game/java/net/minecraft/block/BlockGlowstone.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockGlowstone extends Block { public BlockGlowstone(Material materialIn) { @@ -41,6 +41,7 @@ public class BlockGlowstone extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.glowstone_dust; } @@ -48,6 +49,7 @@ public class BlockGlowstone extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.sandColor; } @@ -55,6 +57,7 @@ public class BlockGlowstone extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return 2 + random.nextInt(3); } @@ -62,7 +65,8 @@ public class BlockGlowstone extends Block { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { return MathHelper.clamp_int(this.quantityDropped(random) + random.nextInt(i + 1), 1, 4); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockGrass.java b/src/game/java/net/minecraft/block/BlockGrass.java index d40129d6..9f435cc5 100644 --- a/src/game/java/net/minecraft/block/BlockGrass.java +++ b/src/game/java/net/minecraft/block/BlockGrass.java @@ -19,13 +19,13 @@ import net.minecraft.world.biome.BiomeColorHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.biome.BiomeColorHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockGrass extends Block implements IGrowable { public static final PropertyBool SNOWY = PropertyBool.create("snowy"); @@ -52,18 +52,22 @@ public class BlockGrass extends Block implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState var3, boolean var4) { return true; } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return BiomeColorHelper.getGrassColorAtPos(iblockaccess, blockpos); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { SNOWY }); } @@ -72,15 +76,18 @@ public class BlockGrass extends Block implements IGrowable { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { Block block = iblockaccess.getBlockState(blockpos.up()).getBlock(); return iblockstate.withProperty(SNOWY, Boolean.valueOf(block == Blocks.snow || block == Blocks.snow_layer)); } + @Override public int getBlockColor() { return ColorizerGrass.getGrassColor(0.5D, 1.0D); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; } @@ -88,6 +95,7 @@ public class BlockGrass extends Block implements IGrowable { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int i) { return Blocks.dirt.getItemDropped( Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), random, i); @@ -96,14 +104,17 @@ public class BlockGrass extends Block implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState var1) { return 0; } + @Override public int getRenderColor(IBlockState var1) { return this.getBlockColor(); } + @Override public void grow(World world, EaglercraftRandom random, BlockPos blockpos, IBlockState var4) { BlockPos blockpos1 = blockpos.up(); @@ -147,21 +158,25 @@ public class BlockGrass extends Block implements IGrowable { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (!world.isRemote) { - if (world.getLightFromNeighbors(blockpos.up()) < 4 - && world.getBlockState(blockpos.up()).getBlock().getLightOpacity() > 2) { + BlockPos tmp = new BlockPos(); + if (world.getLightFromNeighbors(blockpos.up(tmp)) < 4 + && world.getBlockState(blockpos.up(tmp)).getBlock().getLightOpacity() > 2) { world.setBlockState(blockpos, Blocks.dirt.getDefaultState()); } else { - if (world.getLightFromNeighbors(blockpos.up()) >= 9) { + if (world.getLightFromNeighbors(blockpos.up(tmp)) >= 9) { + BlockPos tmp2 = new BlockPos(); for (int i = 0; i < 4; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(3) - 1, random.nextInt(5) - 3, - random.nextInt(3) - 1); - Block block = world.getBlockState(blockpos1.up()).getBlock(); + random.nextInt(3) - 1, tmp2); + Block block = world.getBlockState(blockpos1.up(tmp)).getBlock(); IBlockState iblockstate = world.getBlockState(blockpos1); if (iblockstate.getBlock() == Blocks.dirt && iblockstate.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT - && world.getLightFromNeighbors(blockpos1.up()) >= 4 && block.getLightOpacity() <= 2) { + && world.getLightFromNeighbors(blockpos1.up(tmp)) >= 4 + && block.getLightOpacity() <= 2) { world.setBlockState(blockpos1, Blocks.grass.getDefaultState()); } } @@ -169,4 +184,4 @@ public class BlockGrass extends Block implements IGrowable { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockGravel.java b/src/game/java/net/minecraft/block/BlockGravel.java index 17622f44..dede7e6b 100644 --- a/src/game/java/net/minecraft/block/BlockGravel.java +++ b/src/game/java/net/minecraft/block/BlockGravel.java @@ -9,13 +9,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,12 +27,13 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockGravel extends BlockFalling { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int i) { if (i > 3) { i = 3; @@ -44,7 +45,8 @@ public class BlockGravel extends BlockFalling { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.stoneColor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHalfStoneSlab.java b/src/game/java/net/minecraft/block/BlockHalfStoneSlab.java index 66de59c2..e7f768ce 100644 --- a/src/game/java/net/minecraft/block/BlockHalfStoneSlab.java +++ b/src/game/java/net/minecraft/block/BlockHalfStoneSlab.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHalfStoneSlab extends BlockStoneSlab { + @Override public boolean isDouble() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHalfStoneSlabNew.java b/src/game/java/net/minecraft/block/BlockHalfStoneSlabNew.java index 390b43fd..e852922e 100644 --- a/src/game/java/net/minecraft/block/BlockHalfStoneSlabNew.java +++ b/src/game/java/net/minecraft/block/BlockHalfStoneSlabNew.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHalfStoneSlabNew extends BlockStoneSlabNew { + @Override public boolean isDouble() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHalfWoodSlab.java b/src/game/java/net/minecraft/block/BlockHalfWoodSlab.java index 8e88cdaa..89132868 100644 --- a/src/game/java/net/minecraft/block/BlockHalfWoodSlab.java +++ b/src/game/java/net/minecraft/block/BlockHalfWoodSlab.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHalfWoodSlab extends BlockWoodSlab { + @Override public boolean isDouble() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHardenedClay.java b/src/game/java/net/minecraft/block/BlockHardenedClay.java index fcf893aa..ac5c5e3f 100644 --- a/src/game/java/net/minecraft/block/BlockHardenedClay.java +++ b/src/game/java/net/minecraft/block/BlockHardenedClay.java @@ -8,13 +8,13 @@ import net.minecraft.creativetab.CreativeTabs; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.creativetab.CreativeTabs; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHardenedClay extends Block { public BlockHardenedClay() { @@ -37,7 +37,8 @@ public class BlockHardenedClay extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.adobeColor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHay.java b/src/game/java/net/minecraft/block/BlockHay.java index 0feb3090..62fd117d 100644 --- a/src/game/java/net/minecraft/block/BlockHay.java +++ b/src/game/java/net/minecraft/block/BlockHay.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHay extends BlockRotatedPillar { public BlockHay() { @@ -43,10 +43,12 @@ public class BlockHay extends BlockRotatedPillar { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AXIS }); } + @Override protected ItemStack createStackedBlock(IBlockState var1) { return new ItemStack(Item.getItemFromBlock(this), 1, 0); } @@ -54,6 +56,7 @@ public class BlockHay extends BlockRotatedPillar { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis) iblockstate.getValue(AXIS); @@ -69,6 +72,7 @@ public class BlockHay extends BlockRotatedPillar { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing.Axis enumfacing$axis = EnumFacing.Axis.Y; int j = i & 12; @@ -85,9 +89,10 @@ public class BlockHay extends BlockRotatedPillar { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2, int i, EntityLivingBase entitylivingbase) { return super.onBlockPlaced(world, blockpos, enumfacing, f, f1, f2, i, entitylivingbase).withProperty(AXIS, enumfacing.getAxis()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHopper.java b/src/game/java/net/minecraft/block/BlockHopper.java index 176d2007..ae25823d 100644 --- a/src/game/java/net/minecraft/block/BlockHopper.java +++ b/src/game/java/net/minecraft/block/BlockHopper.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,10 +49,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHopper extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing", new Predicate() { + @Override public boolean apply(EnumFacing enumfacing) { return enumfacing != EnumFacing.UP; } @@ -84,6 +85,7 @@ public class BlockHopper extends BlockContainer { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.625F, 1.0F); @@ -100,6 +102,7 @@ public class BlockHopper extends BlockContainer { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityHopper) { @@ -110,6 +113,7 @@ public class BlockHopper extends BlockContainer { super.breakBlock(world, blockpos, iblockstate); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, ENABLED }); } @@ -118,14 +122,17 @@ public class BlockHopper extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityHopper(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { return Container.calcRedstone(world.getTileEntity(blockpos)); } @@ -133,6 +140,7 @@ public class BlockHopper extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -147,6 +155,7 @@ public class BlockHopper extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -154,15 +163,18 @@ public class BlockHopper extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, getFacing(i)).withProperty(ENABLED, Boolean.valueOf(isEnabled(i))); } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public boolean isFullCube() { return false; } @@ -171,10 +183,12 @@ public class BlockHopper extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -190,6 +204,7 @@ public class BlockHopper extends BlockContainer { } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.updateState(world, blockpos, iblockstate); } @@ -198,6 +213,7 @@ public class BlockHopper extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { EnumFacing enumfacing1 = enumfacing.getOpposite(); @@ -212,6 +228,7 @@ public class BlockHopper extends BlockContainer { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack itemstack) { super.onBlockPlacedBy(world, blockpos, iblockstate, entitylivingbase, itemstack); @@ -227,14 +244,17 @@ public class BlockHopper extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.updateState(world, blockpos, iblockstate); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing var3) { return true; } @@ -246,4 +266,4 @@ public class BlockHopper extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockHugeMushroom.java b/src/game/java/net/minecraft/block/BlockHugeMushroom.java index 18ce2166..d6c9bd61 100644 --- a/src/game/java/net/minecraft/block/BlockHugeMushroom.java +++ b/src/game/java/net/minecraft/block/BlockHugeMushroom.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHugeMushroom extends Block { public static enum EnumType implements IStringSerializable { @@ -75,10 +75,12 @@ public class BlockHugeMushroom extends Block { return this.meta; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -99,10 +101,12 @@ public class BlockHugeMushroom extends Block { this.smallBlock = parBlock; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(this.smallBlock); } @@ -110,6 +114,7 @@ public class BlockHugeMushroom extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(this.smallBlock); } @@ -117,6 +122,7 @@ public class BlockHugeMushroom extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { switch ((BlockHugeMushroom.EnumType) iblockstate.getValue(VARIANT)) { case ALL_STEM: @@ -133,6 +139,7 @@ public class BlockHugeMushroom extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockHugeMushroom.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -140,6 +147,7 @@ public class BlockHugeMushroom extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockHugeMushroom.EnumType.byMetadata(i)); } @@ -148,6 +156,7 @@ public class BlockHugeMushroom extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase var8) { return this.getDefaultState(); @@ -156,7 +165,8 @@ public class BlockHugeMushroom extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return Math.max(0, random.nextInt(10) - 7); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockIce.java b/src/game/java/net/minecraft/block/BlockIce.java index 0a968f8a..ef4b2f44 100644 --- a/src/game/java/net/minecraft/block/BlockIce.java +++ b/src/game/java/net/minecraft/block/BlockIce.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockIce extends BlockBreakable { public BlockIce() { @@ -46,14 +46,17 @@ public class BlockIce extends BlockBreakable { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } + @Override public int getMobilityFlag() { return 0; } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity var5) { entityplayer.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); @@ -82,10 +85,12 @@ public class BlockIce extends BlockBreakable { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (world.getLightFor(EnumSkyBlock.BLOCK, blockpos) > 11 - this.getLightOpacity()) { if (world.provider.doesWaterVaporize()) { @@ -96,4 +101,4 @@ public class BlockIce extends BlockBreakable { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockJukebox.java b/src/game/java/net/minecraft/block/BlockJukebox.java index e3d146f2..6ed8f1f6 100644 --- a/src/game/java/net/minecraft/block/BlockJukebox.java +++ b/src/game/java/net/minecraft/block/BlockJukebox.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockJukebox extends BlockContainer { public static class TileEntityJukebox extends TileEntity { @@ -49,6 +49,7 @@ public class BlockJukebox extends BlockContainer { return this.record; } + @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); if (compound.hasKey("RecordItem", 10)) { @@ -64,6 +65,7 @@ public class BlockJukebox extends BlockContainer { this.markDirty(); } + @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); if (this.getRecord() != null) { @@ -81,11 +83,13 @@ public class BlockJukebox extends BlockContainer { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { this.dropRecord(world, blockpos, iblockstate); super.breakBlock(world, blockpos, iblockstate); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { HAS_RECORD }); } @@ -94,6 +98,7 @@ public class BlockJukebox extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new BlockJukebox.TileEntityJukebox(); } @@ -101,6 +106,7 @@ public class BlockJukebox extends BlockContainer { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int var5) { if (!world.isRemote) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, 0); @@ -131,6 +137,7 @@ public class BlockJukebox extends BlockContainer { } } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof BlockJukebox.TileEntityJukebox) { @@ -146,6 +153,7 @@ public class BlockJukebox extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(HAS_RECORD)).booleanValue() ? 1 : 0; } @@ -154,6 +162,7 @@ public class BlockJukebox extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -161,10 +170,12 @@ public class BlockJukebox extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(HAS_RECORD, Boolean.valueOf(i > 0)); } + @Override public boolean hasComparatorInputOverride() { return true; } @@ -180,6 +191,7 @@ public class BlockJukebox extends BlockContainer { } } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer var4, EnumFacing var5, float var6, float var7, float var8) { if (((Boolean) iblockstate.getValue(HAS_RECORD)).booleanValue()) { @@ -191,4 +203,4 @@ public class BlockJukebox extends BlockContainer { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLadder.java b/src/game/java/net/minecraft/block/BlockLadder.java index 2af6d40b..d65a321d 100644 --- a/src/game/java/net/minecraft/block/BlockLadder.java +++ b/src/game/java/net/minecraft/block/BlockLadder.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockLadder extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -50,6 +50,7 @@ public class BlockLadder extends Block { return worldIn.getBlockState(pos.offset(facing.getOpposite())).getBlock().isNormalCube(); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return world.getBlockState(blockpos.west()).getBlock().isNormalCube() ? true : (world.getBlockState(blockpos.east()).getBlock().isNormalCube() ? true @@ -57,14 +58,17 @@ public class BlockLadder extends Block { : world.getBlockState(blockpos.south()).getBlock().isNormalCube())); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); @@ -73,10 +77,12 @@ public class BlockLadder extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getSelectedBoundingBox(world, blockpos); @@ -85,6 +91,7 @@ public class BlockLadder extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -94,6 +101,7 @@ public class BlockLadder extends Block { return this.getDefaultState().withProperty(FACING, enumfacing); } + @Override public boolean isFullCube() { return false; } @@ -102,6 +110,7 @@ public class BlockLadder extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -110,6 +119,7 @@ public class BlockLadder extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { if (enumfacing.getAxis().isHorizontal() && this.canBlockStay(world, blockpos, enumfacing)) { @@ -130,6 +140,7 @@ public class BlockLadder extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); if (!this.canBlockStay(world, blockpos, enumfacing)) { @@ -140,6 +151,7 @@ public class BlockLadder extends Block { super.onNeighborBlockChange(world, blockpos, iblockstate, block); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); if (iblockstate.getBlock() == this) { @@ -161,4 +173,4 @@ public class BlockLadder extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLeaves.java b/src/game/java/net/minecraft/block/BlockLeaves.java index eec1c71c..bebd5448 100644 --- a/src/game/java/net/minecraft/block/BlockLeaves.java +++ b/src/game/java/net/minecraft/block/BlockLeaves.java @@ -19,13 +19,13 @@ import net.minecraft.world.biome.BiomeColorHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.biome.BiomeColorHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockLeaves extends BlockLeavesBase { public static final PropertyBool DECAYABLE = PropertyBool.create("decayable"); @@ -55,6 +55,7 @@ public abstract class BlockLeaves extends BlockLeavesBase { this.setStepSound(soundTypeGrass); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { byte b0 = 1; int i = b0 + 1; @@ -79,6 +80,7 @@ public abstract class BlockLeaves extends BlockLeavesBase { } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return BiomeColorHelper.getFoliageColorAtPos(iblockaccess, blockpos); } @@ -94,6 +96,7 @@ public abstract class BlockLeaves extends BlockLeavesBase { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float var4, int i) { if (!world.isRemote) { int j = this.getSaplingDropChance(iblockstate); @@ -121,10 +124,12 @@ public abstract class BlockLeaves extends BlockLeavesBase { } } + @Override public int getBlockColor() { return ColorizerFoliage.getFoliageColor(0.5D, 1.0D); } + @Override public EnumWorldBlockLayer getBlockLayer() { return this.isTransparent ? EnumWorldBlockLayer.CUTOUT_MIPPED : EnumWorldBlockLayer.SOLID; } @@ -132,10 +137,12 @@ public abstract class BlockLeaves extends BlockLeavesBase { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.sapling); } + @Override public int getRenderColor(IBlockState var1) { return ColorizerFoliage.getFoliageColorBasic(); } @@ -150,10 +157,12 @@ public abstract class BlockLeaves extends BlockLeavesBase { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return !this.fancyGraphics; } + @Override public boolean isVisuallyOpaque() { return false; } @@ -161,10 +170,12 @@ public abstract class BlockLeaves extends BlockLeavesBase { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return random.nextInt(20) == 0 ? 1 : 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (world.canLightningStrike(blockpos.up()) && !World.doesBlockHaveSolidTopSurface(world, blockpos.down()) && random.nextInt(15) == 1) { @@ -186,6 +197,7 @@ public abstract class BlockLeaves extends BlockLeavesBase { this.iconIndex = fancy ? 0 : 1; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (!world.isRemote) { if (((Boolean) iblockstate.getValue(CHECK_DECAY)).booleanValue() @@ -203,7 +215,7 @@ public abstract class BlockLeaves extends BlockLeavesBase { } if (world.isAreaLoaded(new BlockPos(j - i, k - i, l - i), new BlockPos(j + i, k + i, l + i))) { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = -b0; k1 <= b0; ++k1) { for (int l1 = -b0; l1 <= b0; ++l1) { @@ -268,4 +280,4 @@ public abstract class BlockLeaves extends BlockLeavesBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLeavesBase.java b/src/game/java/net/minecraft/block/BlockLeavesBase.java index e86b7c7c..13cf3df7 100644 --- a/src/game/java/net/minecraft/block/BlockLeavesBase.java +++ b/src/game/java/net/minecraft/block/BlockLeavesBase.java @@ -8,13 +8,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockLeavesBase extends Block { protected boolean fancyGraphics; @@ -40,12 +40,14 @@ public class BlockLeavesBase extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return !this.fancyGraphics && iblockaccess.getBlockState(blockpos).getBlock() == this ? false : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLever.java b/src/game/java/net/minecraft/block/BlockLever.java index b12cd8b8..461e21c2 100644 --- a/src/game/java/net/minecraft/block/BlockLever.java +++ b/src/game/java/net/minecraft/block/BlockLever.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockLever extends Block { public static enum EnumOrientation implements IStringSerializable { @@ -117,10 +117,12 @@ public class BlockLever extends Block { return this.meta; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -164,6 +166,7 @@ public class BlockLever extends Block { this.setCreativeTab(CreativeTabs.tabRedstone); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { world.notifyNeighborsOfStateChange(blockpos, this); @@ -174,6 +177,7 @@ public class BlockLever extends Block { super.breakBlock(world, blockpos, iblockstate); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { EnumFacing[] facings = EnumFacing._VALUES; for (int i = 0; i < facings.length; ++i) { @@ -189,6 +193,7 @@ public class BlockLever extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World world, BlockPos blockpos, EnumFacing enumfacing) { return func_181090_a(world, blockpos, enumfacing.getOpposite()); } @@ -197,10 +202,12 @@ public class BlockLever extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, POWERED }); } @@ -215,6 +222,7 @@ public class BlockLever extends Block { } } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -222,6 +230,7 @@ public class BlockLever extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockLever.EnumOrientation) iblockstate.getValue(FACING)).getMetadata(); @@ -235,20 +244,24 @@ public class BlockLever extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, BlockLever.EnumOrientation.byMetadata(i & 7)) .withProperty(POWERED, Boolean.valueOf((i & 8) > 0)); } + @Override public int getStrongPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing enumfacing) { return !((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 0 : (((BlockLever.EnumOrientation) iblockstate.getValue(FACING)).getFacing() == enumfacing ? 15 : 0); } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 15 : 0; } + @Override public boolean isFullCube() { return false; } @@ -257,10 +270,12 @@ public class BlockLever extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer var4, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -282,6 +297,7 @@ public class BlockLever extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { IBlockState iblockstate = this.getDefaultState().withProperty(POWERED, Boolean.valueOf(false)); @@ -310,6 +326,7 @@ public class BlockLever extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (this.func_181091_e(world, blockpos, iblockstate) && !func_181090_a(world, blockpos, ((BlockLever.EnumOrientation) iblockstate.getValue(FACING)).getFacing().getOpposite())) { @@ -319,6 +336,7 @@ public class BlockLever extends Block { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { float f = 0.1875F; switch ((BlockLever.EnumOrientation) iblockaccess.getBlockState(blockpos).getValue(FACING)) { @@ -346,4 +364,4 @@ public class BlockLever extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLilyPad.java b/src/game/java/net/minecraft/block/BlockLilyPad.java index 10e69ea3..f96e2792 100644 --- a/src/game/java/net/minecraft/block/BlockLilyPad.java +++ b/src/game/java/net/minecraft/block/BlockLilyPad.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockLilyPad extends BlockBush { protected BlockLilyPad() { @@ -48,6 +48,7 @@ public class BlockLilyPad extends BlockBush { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { if (entity == null || !(entity instanceof EntityBoat)) { @@ -56,6 +57,7 @@ public class BlockLilyPad extends BlockBush { } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) { if (blockpos.getY() >= 0 && blockpos.getY() < 256) { IBlockState iblockstate = world.getBlockState(blockpos.down()); @@ -69,18 +71,22 @@ public class BlockLilyPad extends BlockBush { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block == Blocks.water; } + @Override public int colorMultiplier(IBlockAccess var1, BlockPos var2, int var3) { return 2129968; } + @Override public int getBlockColor() { return 7455580; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState var3) { return new AxisAlignedBB((double) blockpos.getX() + this.minX, (double) blockpos.getY() + this.minY, (double) blockpos.getZ() + this.minZ, (double) blockpos.getX() + this.maxX, @@ -90,11 +96,13 @@ public class BlockLilyPad extends BlockBush { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState var1) { return 0; } + @Override public int getRenderColor(IBlockState var1) { return 7455580; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLiquid.java b/src/game/java/net/minecraft/block/BlockLiquid.java index e5a08540..f59dad07 100644 --- a/src/game/java/net/minecraft/block/BlockLiquid.java +++ b/src/game/java/net/minecraft/block/BlockLiquid.java @@ -24,13 +24,13 @@ import net.minecraft.world.biome.BiomeColorHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.biome.BiomeColorHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockLiquid extends Block { public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 15); @@ -92,6 +92,7 @@ public abstract class BlockLiquid extends Block { this.setTickRandomly(true); } + @Override public boolean canCollideCheck(IBlockState iblockstate, boolean flag) { return flag && ((Integer) iblockstate.getValue(LEVEL)).intValue() == 0; } @@ -129,11 +130,13 @@ public abstract class BlockLiquid extends Block { return false; } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return this.blockMaterial == Material.water ? BiomeColorHelper.getWaterColorAtPos(iblockaccess, blockpos) : 16777215; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { LEVEL }); } @@ -153,6 +156,7 @@ public abstract class BlockLiquid extends Block { return false; } + @Override public EnumWorldBlockLayer getBlockLayer() { return this.blockMaterial == Material.water ? (DeferredStateManager.isRenderingRealisticWater() ? EnumWorldBlockLayer.REALISTIC_WATER @@ -160,6 +164,7 @@ public abstract class BlockLiquid extends Block { : EnumWorldBlockLayer.SOLID; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -213,6 +218,7 @@ public abstract class BlockLiquid extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -226,10 +232,12 @@ public abstract class BlockLiquid extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(LEVEL)).intValue(); } + @Override public int getMixedBrightnessForBlock(IBlockAccess iblockaccess, BlockPos blockpos) { int i = iblockaccess.getCombinedLight(blockpos, 0); int j = iblockaccess.getCombinedLight(blockpos.up(), 0); @@ -244,6 +252,7 @@ public abstract class BlockLiquid extends Block { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 1; } @@ -251,6 +260,7 @@ public abstract class BlockLiquid extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(LEVEL, Integer.valueOf(i)); } @@ -258,6 +268,7 @@ public abstract class BlockLiquid extends Block { /** * + Whether this Block is solid on the given Side */ + @Override public boolean isBlockSolid(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { Material material = iblockaccess.getBlockState(blockpos).getBlock().getMaterial(); return material == this.blockMaterial ? false @@ -265,6 +276,7 @@ public abstract class BlockLiquid extends Block { : (material == Material.ice ? false : super.isBlockSolid(iblockaccess, blockpos, enumfacing))); } + @Override public boolean isFullCube() { return false; } @@ -273,18 +285,22 @@ public abstract class BlockLiquid extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess var1, BlockPos var2) { return this.blockMaterial != Material.lava; } + @Override public Vec3 modifyAcceleration(World world, BlockPos blockpos, Entity var3, Vec3 vec3) { return vec3.add(this.getFlowVector(world, blockpos)); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.checkForMixing(world, blockpos, iblockstate); } @@ -292,6 +308,7 @@ public abstract class BlockLiquid extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.checkForMixing(world, blockpos, iblockstate); } @@ -299,10 +316,12 @@ public abstract class BlockLiquid extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { double d0 = (double) blockpos.getX(); double d1 = (double) blockpos.getY(); @@ -355,6 +374,7 @@ public abstract class BlockLiquid extends Block { } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return iblockaccess.getBlockState(blockpos).getBlock().getMaterial() == this.blockMaterial ? false : (enumfacing == EnumFacing.UP ? true : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing)); @@ -363,6 +383,7 @@ public abstract class BlockLiquid extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World world) { return this.blockMaterial == Material.water ? 5 : (this.blockMaterial == Material.lava ? (world.provider.getHasNoSky() ? 10 : 30) : 0); @@ -381,4 +402,4 @@ public abstract class BlockLiquid extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockLog.java b/src/game/java/net/minecraft/block/BlockLog.java index c63cbb36..b67fc07b 100644 --- a/src/game/java/net/minecraft/block/BlockLog.java +++ b/src/game/java/net/minecraft/block/BlockLog.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockLog extends BlockRotatedPillar { public static enum EnumAxis implements IStringSerializable { @@ -56,10 +56,12 @@ public abstract class BlockLog extends BlockRotatedPillar { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -74,10 +76,13 @@ public abstract class BlockLog extends BlockRotatedPillar { public BlockLog() { super(Material.wood); this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(2.0F); + this.setHardness(5F); + this.setResistance(5F); this.setStepSound(soundTypeWood); + } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { byte b0 = 4; int i = b0 + 1; @@ -98,9 +103,10 @@ public abstract class BlockLog extends BlockRotatedPillar { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2, int i, EntityLivingBase entitylivingbase) { return super.onBlockPlaced(world, blockpos, enumfacing, f, f1, f2, i, entitylivingbase).withProperty(LOG_AXIS, BlockLog.EnumAxis.fromFacingAxis(enumfacing.getAxis())); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockMelon.java b/src/game/java/net/minecraft/block/BlockMelon.java index 3608db95..1c738601 100644 --- a/src/game/java/net/minecraft/block/BlockMelon.java +++ b/src/game/java/net/minecraft/block/BlockMelon.java @@ -11,13 +11,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockMelon extends Block { protected BlockMelon() { @@ -40,6 +40,7 @@ public class BlockMelon extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.melon; } @@ -47,6 +48,7 @@ public class BlockMelon extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return 3 + random.nextInt(5); } @@ -54,7 +56,8 @@ public class BlockMelon extends Block { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { return Math.min(9, this.quantityDropped(random) + random.nextInt(1 + i)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockMobSpawner.java b/src/game/java/net/minecraft/block/BlockMobSpawner.java index 0e754f01..eecdbe5c 100644 --- a/src/game/java/net/minecraft/block/BlockMobSpawner.java +++ b/src/game/java/net/minecraft/block/BlockMobSpawner.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,13 +31,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockMobSpawner extends BlockContainer { protected BlockMobSpawner() { super(Material.rock); } + @Override protected boolean canSilkHarvest() { return true; } @@ -46,6 +47,7 @@ public class BlockMobSpawner extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityMobSpawner(); } @@ -53,16 +55,19 @@ public class BlockMobSpawner extends BlockContainer { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, i); int j = 15 + world.rand.nextInt(15) + world.rand.nextInt(15); this.dropXpOnBlockBreak(world, blockpos, j); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public Item getItem(World var1, BlockPos var2) { return null; } @@ -70,6 +75,7 @@ public class BlockMobSpawner extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -78,6 +84,7 @@ public class BlockMobSpawner extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } @@ -86,6 +93,7 @@ public class BlockMobSpawner extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -93,7 +101,8 @@ public class BlockMobSpawner extends BlockContainer { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockMushroom.java b/src/game/java/net/minecraft/block/BlockMushroom.java index f43209e2..44fe3306 100644 --- a/src/game/java/net/minecraft/block/BlockMushroom.java +++ b/src/game/java/net/minecraft/block/BlockMushroom.java @@ -10,13 +10,13 @@ import net.minecraft.world.gen.feature.WorldGenBigMushroom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.gen.feature.WorldGenBigMushroom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockMushroom extends BlockBush implements IGrowable { protected BlockMushroom() { @@ -37,6 +37,7 @@ public class BlockMushroom extends BlockBush implements IGrowable { this.setTickRandomly(true); } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) { if (blockpos.getY() >= 0 && blockpos.getY() < 256) { IBlockState iblockstate = world.getBlockState(blockpos.down()); @@ -52,10 +53,12 @@ public class BlockMushroom extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState var3, boolean var4) { return true; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return super.canPlaceBlockAt(world, blockpos) && this.canBlockStay(world, blockpos, this.getDefaultState()); } @@ -63,10 +66,12 @@ public class BlockMushroom extends BlockBush implements IGrowable { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block.isFullBlock(); } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom random, BlockPos var3, IBlockState var4) { return (double) random.nextFloat() < 0.4D; } @@ -88,10 +93,12 @@ public class BlockMushroom extends BlockBush implements IGrowable { } } + @Override public void grow(World world, EaglercraftRandom random, BlockPos blockpos, IBlockState iblockstate) { this.generateBigMushroom(world, blockpos, iblockstate, random); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (random.nextInt(25) == 0) { int i = 5; @@ -124,4 +131,4 @@ public class BlockMushroom extends BlockBush implements IGrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockMycelium.java b/src/game/java/net/minecraft/block/BlockMycelium.java index a07a1ea3..8cd0522f 100644 --- a/src/game/java/net/minecraft/block/BlockMycelium.java +++ b/src/game/java/net/minecraft/block/BlockMycelium.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockMycelium extends Block { public static final PropertyBool SNOWY = PropertyBool.create("snowy"); @@ -48,6 +48,7 @@ public class BlockMycelium extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { SNOWY }); } @@ -56,6 +57,7 @@ public class BlockMycelium extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { Block block = iblockaccess.getBlockState(blockpos.up()).getBlock(); return iblockstate.withProperty(SNOWY, Boolean.valueOf(block == Blocks.snow || block == Blocks.snow_layer)); @@ -64,6 +66,7 @@ public class BlockMycelium extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int i) { return Blocks.dirt.getItemDropped( Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), random, i); @@ -72,10 +75,12 @@ public class BlockMycelium extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState var1) { return 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { super.randomDisplayTick(world, blockpos, iblockstate, random); if (random.nextInt(10) == 0) { @@ -86,6 +91,7 @@ public class BlockMycelium extends Block { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (!world.isRemote) { if (world.getLightFromNeighbors(blockpos.up()) < 4 @@ -109,4 +115,4 @@ public class BlockMycelium extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNetherBrick.java b/src/game/java/net/minecraft/block/BlockNetherBrick.java index 85e383bc..a83db405 100644 --- a/src/game/java/net/minecraft/block/BlockNetherBrick.java +++ b/src/game/java/net/minecraft/block/BlockNetherBrick.java @@ -8,13 +8,13 @@ import net.minecraft.creativetab.CreativeTabs; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.creativetab.CreativeTabs; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNetherBrick extends Block { public BlockNetherBrick() { @@ -37,7 +37,8 @@ public class BlockNetherBrick extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.netherrackColor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNetherWart.java b/src/game/java/net/minecraft/block/BlockNetherWart.java index 1ac7db8b..e93dc7c9 100644 --- a/src/game/java/net/minecraft/block/BlockNetherWart.java +++ b/src/game/java/net/minecraft/block/BlockNetherWart.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNetherWart extends BlockBush { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 3); @@ -50,6 +50,7 @@ public class BlockNetherWart extends BlockBush { this.setCreativeTab((CreativeTabs) null); } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) { return this.canPlaceBlockOn(world.getBlockState(blockpos.down()).getBlock()); } @@ -57,10 +58,12 @@ public class BlockNetherWart extends BlockBush { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block == Blocks.soul_sand; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE }); } @@ -68,6 +71,7 @@ public class BlockNetherWart extends BlockBush { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float var4, int i) { if (!world.isRemote) { int j = 1; @@ -84,6 +88,7 @@ public class BlockNetherWart extends BlockBush { } } + @Override public Item getItem(World var1, BlockPos var2) { return Items.nether_wart; } @@ -91,6 +96,7 @@ public class BlockNetherWart extends BlockBush { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -98,6 +104,7 @@ public class BlockNetherWart extends BlockBush { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } @@ -105,6 +112,7 @@ public class BlockNetherWart extends BlockBush { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } @@ -112,10 +120,12 @@ public class BlockNetherWart extends BlockBush { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { int i = ((Integer) iblockstate.getValue(AGE)).intValue(); if (i < 3 && random.nextInt(10) == 0) { @@ -125,4 +135,4 @@ public class BlockNetherWart extends BlockBush { super.updateTick(world, blockpos, iblockstate, random); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNetherrack.java b/src/game/java/net/minecraft/block/BlockNetherrack.java index 01c1da64..0544b74a 100644 --- a/src/game/java/net/minecraft/block/BlockNetherrack.java +++ b/src/game/java/net/minecraft/block/BlockNetherrack.java @@ -8,13 +8,13 @@ import net.minecraft.creativetab.CreativeTabs; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.creativetab.CreativeTabs; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNetherrack extends Block { public BlockNetherrack() { @@ -37,7 +37,8 @@ public class BlockNetherrack extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.netherrackColor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNewLeaf.java b/src/game/java/net/minecraft/block/BlockNewLeaf.java index a5838762..33df13d1 100644 --- a/src/game/java/net/minecraft/block/BlockNewLeaf.java +++ b/src/game/java/net/minecraft/block/BlockNewLeaf.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,13 +39,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNewLeaf extends BlockLeaves { public static PropertyEnum VARIANT; public static void bootstrapStates() { VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() { + @Override public boolean apply(BlockPlanks.EnumType blockplanks$enumtype) { return blockplanks$enumtype.getMetadata() >= 4; } @@ -57,10 +58,12 @@ public class BlockNewLeaf extends BlockLeaves { .withProperty(CHECK_DECAY, Boolean.valueOf(true)).withProperty(DECAYABLE, Boolean.valueOf(true))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT, CHECK_DECAY, DECAYABLE }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata() - 4); @@ -71,16 +74,19 @@ public class BlockNewLeaf extends BlockLeaves { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } + @Override protected void dropApple(World world, BlockPos blockpos, IBlockState iblockstate, int i) { if (iblockstate.getValue(VARIANT) == BlockPlanks.EnumType.DARK_OAK && world.rand.nextInt(i) == 0) { spawnAsEntity(world, blockpos, new ItemStack(Items.apple, 1, 0)); } } + @Override public int getDamageValue(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos); return iblockstate.getBlock().getMetaFromState(iblockstate) & 3; @@ -89,6 +95,7 @@ public class BlockNewLeaf extends BlockLeaves { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata() - 4; @@ -106,6 +113,7 @@ public class BlockNewLeaf extends BlockLeaves { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, this.getWoodType(i)) .withProperty(DECAYABLE, Boolean.valueOf((i & 4) == 0)) @@ -116,15 +124,18 @@ public class BlockNewLeaf extends BlockLeaves { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, 0)); list.add(new ItemStack(item, 1, 1)); } + @Override public BlockPlanks.EnumType getWoodType(int i) { return BlockPlanks.EnumType.byMetadata((i & 3) + 4); } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (!world.isRemote && entityplayer.getCurrentEquippedItem() != null @@ -136,4 +147,4 @@ public class BlockNewLeaf extends BlockLeaves { super.harvestBlock(world, entityplayer, blockpos, iblockstate, tileentity); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNewLog.java b/src/game/java/net/minecraft/block/BlockNewLog.java index 2ecc1dff..cefa2ffc 100644 --- a/src/game/java/net/minecraft/block/BlockNewLog.java +++ b/src/game/java/net/minecraft/block/BlockNewLog.java @@ -16,13 +16,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,13 +34,14 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNewLog extends BlockLog { public static PropertyEnum VARIANT; public static void bootstrapStates() { VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() { + @Override public boolean apply(BlockPlanks.EnumType blockplanks$enumtype) { return blockplanks$enumtype.getMetadata() >= 4; } @@ -52,10 +53,12 @@ public class BlockNewLog extends BlockLog { .withProperty(LOG_AXIS, BlockLog.EnumAxis.Y)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT, LOG_AXIS }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata() - 4); @@ -66,6 +69,7 @@ public class BlockNewLog extends BlockLog { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata() - 4; } @@ -73,6 +77,7 @@ public class BlockNewLog extends BlockLog { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { BlockPlanks.EnumType blockplanks$enumtype = (BlockPlanks.EnumType) iblockstate.getValue(VARIANT); switch ((BlockLog.EnumAxis) iblockstate.getValue(LOG_AXIS)) { @@ -96,6 +101,7 @@ public class BlockNewLog extends BlockLog { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata() - 4; @@ -116,6 +122,7 @@ public class BlockNewLog extends BlockLog { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata((i & 3) + 4)); @@ -140,9 +147,10 @@ public class BlockNewLog extends BlockLog { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, BlockPlanks.EnumType.ACACIA.getMetadata() - 4)); list.add(new ItemStack(item, 1, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockNote.java b/src/game/java/net/minecraft/block/BlockNote.java index 8d4fa668..5b44ed9e 100644 --- a/src/game/java/net/minecraft/block/BlockNote.java +++ b/src/game/java/net/minecraft/block/BlockNote.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockNote extends BlockContainer { private static final List INSTRUMENTS = Lists @@ -52,6 +52,7 @@ public class BlockNote extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityNote(); } @@ -68,10 +69,12 @@ public class BlockNote extends BlockContainer { * + The type of render function called. 3 for standard block models, 2 for * TESR's, 1 for liquids, -1 is no render */ + @Override public int getRenderType() { return 3; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -89,6 +92,7 @@ public class BlockNote extends BlockContainer { } } + @Override public void onBlockClicked(World world, BlockPos blockpos, EntityPlayer entityplayer) { if (!world.isRemote) { TileEntity tileentity = world.getTileEntity(blockpos); @@ -102,6 +106,7 @@ public class BlockNote extends BlockContainer { /** * + Called on both Client and Server when World#addBlockEvent is called */ + @Override public boolean onBlockEventReceived(World world, BlockPos blockpos, IBlockState var3, int i, int j) { float f = (float) Math.pow(2.0D, (double) (j - 12) / 12.0D); world.playSoundEffect((double) blockpos.getX() + 0.5D, (double) blockpos.getY() + 0.5D, @@ -114,6 +119,7 @@ public class BlockNote extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { boolean flag = world.isBlockPowered(blockpos); TileEntity tileentity = world.getTileEntity(blockpos); @@ -129,4 +135,4 @@ public class BlockNote extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockObsidian.java b/src/game/java/net/minecraft/block/BlockObsidian.java index 2060e763..e218f996 100644 --- a/src/game/java/net/minecraft/block/BlockObsidian.java +++ b/src/game/java/net/minecraft/block/BlockObsidian.java @@ -11,13 +11,13 @@ import net.minecraft.item.Item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.item.Item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockObsidian extends Block { public BlockObsidian() { @@ -40,6 +40,7 @@ public class BlockObsidian extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.obsidian); } @@ -47,7 +48,8 @@ public class BlockObsidian extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.blackColor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockOldLeaf.java b/src/game/java/net/minecraft/block/BlockOldLeaf.java index ea9a19b7..e6b3cd7d 100644 --- a/src/game/java/net/minecraft/block/BlockOldLeaf.java +++ b/src/game/java/net/minecraft/block/BlockOldLeaf.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,13 +41,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockOldLeaf extends BlockLeaves { public static PropertyEnum VARIANT; public static void bootstrapStates() { VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() { + @Override public boolean apply(BlockPlanks.EnumType blockplanks$enumtype) { return blockplanks$enumtype.getMetadata() < 4; } @@ -59,6 +60,7 @@ public class BlockOldLeaf extends BlockLeaves { .withProperty(CHECK_DECAY, Boolean.valueOf(true)).withProperty(DECAYABLE, Boolean.valueOf(true))); } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int i) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); if (iblockstate.getBlock() == this) { @@ -75,10 +77,12 @@ public class BlockOldLeaf extends BlockLeaves { return super.colorMultiplier(iblockaccess, blockpos, i); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT, CHECK_DECAY, DECAYABLE }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata()); @@ -89,10 +93,12 @@ public class BlockOldLeaf extends BlockLeaves { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } + @Override protected void dropApple(World world, BlockPos blockpos, IBlockState iblockstate, int i) { if (iblockstate.getValue(VARIANT) == BlockPlanks.EnumType.OAK && world.rand.nextInt(i) == 0) { spawnAsEntity(world, blockpos, new ItemStack(Items.apple, 1, 0)); @@ -103,6 +109,7 @@ public class BlockOldLeaf extends BlockLeaves { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -117,6 +124,7 @@ public class BlockOldLeaf extends BlockLeaves { return i; } + @Override public int getRenderColor(IBlockState iblockstate) { if (iblockstate.getBlock() != this) { return super.getRenderColor(iblockstate); @@ -128,6 +136,7 @@ public class BlockOldLeaf extends BlockLeaves { } } + @Override protected int getSaplingDropChance(IBlockState iblockstate) { return iblockstate.getValue(VARIANT) == BlockPlanks.EnumType.JUNGLE ? 40 : super.getSaplingDropChance(iblockstate); @@ -136,6 +145,7 @@ public class BlockOldLeaf extends BlockLeaves { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, this.getWoodType(i)) .withProperty(DECAYABLE, Boolean.valueOf((i & 4) == 0)) @@ -146,6 +156,7 @@ public class BlockOldLeaf extends BlockLeaves { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, BlockPlanks.EnumType.OAK.getMetadata())); list.add(new ItemStack(item, 1, BlockPlanks.EnumType.SPRUCE.getMetadata())); @@ -153,10 +164,12 @@ public class BlockOldLeaf extends BlockLeaves { list.add(new ItemStack(item, 1, BlockPlanks.EnumType.JUNGLE.getMetadata())); } + @Override public BlockPlanks.EnumType getWoodType(int i) { return BlockPlanks.EnumType.byMetadata((i & 3) % 4); } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (!world.isRemote && entityplayer.getCurrentEquippedItem() != null @@ -168,4 +181,4 @@ public class BlockOldLeaf extends BlockLeaves { super.harvestBlock(world, entityplayer, blockpos, iblockstate, tileentity); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockOldLog.java b/src/game/java/net/minecraft/block/BlockOldLog.java index b0fc8fdb..c4d48ddb 100644 --- a/src/game/java/net/minecraft/block/BlockOldLog.java +++ b/src/game/java/net/minecraft/block/BlockOldLog.java @@ -16,13 +16,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,13 +34,14 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockOldLog extends BlockLog { public static PropertyEnum VARIANT; public static void bootstrapStates() { VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() { + @Override public boolean apply(BlockPlanks.EnumType blockplanks$enumtype) { return blockplanks$enumtype.getMetadata() < 4; } @@ -48,14 +49,17 @@ public class BlockOldLog extends BlockLog { } public BlockOldLog() { + this.setHardness(5F); this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.OAK) .withProperty(LOG_AXIS, BlockLog.EnumAxis.Y)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT, LOG_AXIS }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata()); @@ -66,6 +70,7 @@ public class BlockOldLog extends BlockLog { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -73,6 +78,7 @@ public class BlockOldLog extends BlockLog { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { BlockPlanks.EnumType blockplanks$enumtype = (BlockPlanks.EnumType) iblockstate.getValue(VARIANT); switch ((BlockLog.EnumAxis) iblockstate.getValue(LOG_AXIS)) { @@ -99,6 +105,7 @@ public class BlockOldLog extends BlockLog { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -119,6 +126,7 @@ public class BlockOldLog extends BlockLog { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata((i & 3) % 4)); @@ -143,10 +151,11 @@ public class BlockOldLog extends BlockLog { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, BlockPlanks.EnumType.OAK.getMetadata())); list.add(new ItemStack(item, 1, BlockPlanks.EnumType.SPRUCE.getMetadata())); list.add(new ItemStack(item, 1, BlockPlanks.EnumType.BIRCH.getMetadata())); list.add(new ItemStack(item, 1, BlockPlanks.EnumType.JUNGLE.getMetadata())); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockOre.java b/src/game/java/net/minecraft/block/BlockOre.java index fe9c73d9..522a52cd 100644 --- a/src/game/java/net/minecraft/block/BlockOre.java +++ b/src/game/java/net/minecraft/block/BlockOre.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockOre extends Block { public BlockOre() { @@ -51,6 +51,7 @@ public class BlockOre extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState var1) { return this == Blocks.lapis_ore ? EnumDyeColor.BLUE.getDyeDamage() : 0; } @@ -58,6 +59,7 @@ public class BlockOre extends Block { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, i); if (this.getItemDropped(iblockstate, world.rand, i) != Item.getItemFromBlock(this)) { @@ -79,6 +81,7 @@ public class BlockOre extends Block { } + @Override public int getDamageValue(World var1, BlockPos var2) { return 0; } @@ -86,6 +89,7 @@ public class BlockOre extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return this == Blocks.coal_ore ? Items.coal : (this == Blocks.diamond_ore ? Items.diamond @@ -99,6 +103,7 @@ public class BlockOre extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return this == Blocks.lapis_ore ? 4 + random.nextInt(5) : 1; } @@ -106,6 +111,7 @@ public class BlockOre extends Block { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { if (i > 0 && Item.getItemFromBlock(this) != this .getItemDropped((IBlockState) this.getBlockState().getValidStates().iterator().next(), random, i)) { @@ -119,4 +125,4 @@ public class BlockOre extends Block { return this.quantityDropped(random); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPackedIce.java b/src/game/java/net/minecraft/block/BlockPackedIce.java index bba0500b..d7be64be 100644 --- a/src/game/java/net/minecraft/block/BlockPackedIce.java +++ b/src/game/java/net/minecraft/block/BlockPackedIce.java @@ -7,13 +7,13 @@ import net.minecraft.creativetab.CreativeTabs; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.creativetab.CreativeTabs; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPackedIce extends Block { public BlockPackedIce() { @@ -37,7 +37,8 @@ public class BlockPackedIce extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPane.java b/src/game/java/net/minecraft/block/BlockPane.java index 3f588a52..e6146df2 100644 --- a/src/game/java/net/minecraft/block/BlockPane.java +++ b/src/game/java/net/minecraft/block/BlockPane.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPane extends Block { public static final PropertyBool NORTH = PropertyBool.create("north"); @@ -63,6 +63,7 @@ public class BlockPane extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { boolean flag = this.canPaneConnectToBlock(world.getBlockState(blockpos.north()).getBlock()); @@ -102,14 +103,17 @@ public class BlockPane extends Block { || blockIn == Blocks.stained_glass_pane || blockIn instanceof BlockPane; } + @Override protected boolean canSilkHarvest() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { NORTH, EAST, WEST, SOUTH }); } + @Override public boolean eaglerShadersShouldRenderGlassHighlights() { return this == Blocks.glass_pane && DeferredStateManager.isRenderingGlassHighlights(); } @@ -118,6 +122,7 @@ public class BlockPane extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate .withProperty(NORTH, @@ -133,6 +138,7 @@ public class BlockPane extends Block { .valueOf(this.canPaneConnectToBlock(iblockaccess.getBlockState(blockpos.east()).getBlock()))); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; } @@ -140,6 +146,7 @@ public class BlockPane extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom random, int i) { return !this.canDrop ? null : super.getItemDropped(iblockstate, random, i); } @@ -147,10 +154,12 @@ public class BlockPane extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState var1) { return 0; } + @Override public boolean isFullCube() { return false; } @@ -159,10 +168,12 @@ public class BlockPane extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { float f = 0.4375F; float f1 = 0.5625F; @@ -200,12 +211,14 @@ public class BlockPane extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return iblockaccess.getBlockState(blockpos).getBlock() == this ? false : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPistonBase.java b/src/game/java/net/minecraft/block/BlockPistonBase.java index a26432bd..0c5e43db 100644 --- a/src/game/java/net/minecraft/block/BlockPistonBase.java +++ b/src/game/java/net/minecraft/block/BlockPistonBase.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPistonBase extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing"); @@ -125,6 +125,7 @@ public class BlockPistonBase extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); @@ -145,6 +146,7 @@ public class BlockPistonBase extends Block { } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, EXTENDED }); } @@ -222,6 +224,7 @@ public class BlockPistonBase extends Block { } } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); @@ -230,6 +233,7 @@ public class BlockPistonBase extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -244,6 +248,7 @@ public class BlockPistonBase extends Block { * + Possibly modify the given BlockState before rendering it on an Entity * (Minecarts, Endermen, ...) */ + @Override public IBlockState getStateForEntityRender(IBlockState var1) { return this.getDefaultState().withProperty(FACING, EnumFacing.UP); } @@ -251,11 +256,13 @@ public class BlockPistonBase extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, getFacing(i)).withProperty(EXTENDED, Boolean.valueOf((i & 8) > 0)); } + @Override public boolean isFullCube() { return false; } @@ -264,10 +271,12 @@ public class BlockPistonBase extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { if (!world.isRemote && world.getTileEntity(blockpos) == null) { this.checkForMove(world, blockpos, iblockstate); @@ -278,6 +287,7 @@ public class BlockPistonBase extends Block { /** * + Called on both Client and Server when World#addBlockEvent is called */ + @Override public boolean onBlockEventReceived(World world, BlockPos blockpos, IBlockState iblockstate, int i, int j) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); if (!world.isRemote) { @@ -350,6 +360,7 @@ public class BlockPistonBase extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, getFacingFromEntity(world, blockpos, entitylivingbase)) @@ -360,6 +371,7 @@ public class BlockPistonBase extends Block { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase entitylivingbase, ItemStack var5) { world.setBlockState(blockpos, @@ -373,6 +385,7 @@ public class BlockPistonBase extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!world.isRemote) { this.checkForMove(world, blockpos, iblockstate); @@ -380,6 +393,7 @@ public class BlockPistonBase extends Block { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); if (iblockstate.getBlock() == this && ((Boolean) iblockstate.getValue(EXTENDED)).booleanValue()) { @@ -415,6 +429,7 @@ public class BlockPistonBase extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } @@ -444,4 +459,4 @@ public class BlockPistonBase extends Block { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPistonExtension.java b/src/game/java/net/minecraft/block/BlockPistonExtension.java index 42029a4a..8d488652 100644 --- a/src/game/java/net/minecraft/block/BlockPistonExtension.java +++ b/src/game/java/net/minecraft/block/BlockPistonExtension.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPistonExtension extends Block { public static enum EnumPistonType implements IStringSerializable { @@ -54,10 +54,12 @@ public class BlockPistonExtension extends Block { this.VARIANT = name; } + @Override public String getName() { return this.VARIANT; } + @Override public String toString() { return this.VARIANT; } @@ -91,6 +93,7 @@ public class BlockPistonExtension extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.applyHeadBounds(iblockstate); @@ -155,6 +158,7 @@ public class BlockPistonExtension extends Block { } } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { super.breakBlock(world, blockpos, iblockstate); EnumFacing enumfacing = ((EnumFacing) iblockstate.getValue(FACING)).getOpposite(); @@ -168,6 +172,7 @@ public class BlockPistonExtension extends Block { } + @Override public boolean canPlaceBlockAt(World var1, BlockPos var2) { return false; } @@ -175,14 +180,17 @@ public class BlockPistonExtension extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World var1, BlockPos var2, EnumFacing var3) { return false; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, TYPE, SHORT }); } + @Override public Item getItem(World world, BlockPos blockpos) { return world.getBlockState(blockpos).getValue(TYPE) == BlockPistonExtension.EnumPistonType.STICKY ? Item.getItemFromBlock(Blocks.sticky_piston) @@ -192,6 +200,7 @@ public class BlockPistonExtension extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -205,11 +214,13 @@ public class BlockPistonExtension extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, getFacing(i)).withProperty(TYPE, (i & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); } + @Override public boolean isFullCube() { return false; } @@ -218,10 +229,12 @@ public class BlockPistonExtension extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { if (entityplayer.capabilities.isCreativeMode) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); @@ -240,6 +253,7 @@ public class BlockPistonExtension extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); BlockPos blockpos1 = blockpos.offset(enumfacing.getOpposite()); @@ -255,15 +269,18 @@ public class BlockPistonExtension extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.applyHeadBounds(iblockaccess.getBlockState(blockpos)); } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing var3) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPistonMoving.java b/src/game/java/net/minecraft/block/BlockPistonMoving.java index d8fae553..4046666b 100644 --- a/src/game/java/net/minecraft/block/BlockPistonMoving.java +++ b/src/game/java/net/minecraft/block/BlockPistonMoving.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPistonMoving extends BlockContainer { public static final PropertyDirection FACING = BlockPistonExtension.FACING; @@ -63,6 +63,7 @@ public class BlockPistonMoving extends BlockContainer { this.setHardness(-1.0F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { TileEntity tileentity = world.getTileEntity(blockpos); if (tileentity instanceof TileEntityPiston) { @@ -73,6 +74,7 @@ public class BlockPistonMoving extends BlockContainer { } + @Override public boolean canPlaceBlockAt(World var1, BlockPos var2) { return false; } @@ -80,6 +82,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World var1, BlockPos var2, EnumFacing var3) { return false; } @@ -88,10 +91,12 @@ public class BlockPistonMoving extends BlockContainer { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World var1, BlockPos var2, Vec3 var3, Vec3 var4) { return null; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, TYPE }); } @@ -100,6 +105,7 @@ public class BlockPistonMoving extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return null; } @@ -107,6 +113,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState var3, float var4, int var5) { if (!world.isRemote) { TileEntityPiston tileentitypiston = this.getTileEntity(world, blockpos); @@ -156,6 +163,7 @@ public class BlockPistonMoving extends BlockContainer { } } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState var3) { TileEntityPiston tileentitypiston = this.getTileEntity(world, blockpos); if (tileentitypiston == null) { @@ -171,6 +179,7 @@ public class BlockPistonMoving extends BlockContainer { } } + @Override public Item getItem(World var1, BlockPos var2) { return null; } @@ -178,6 +187,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -185,6 +195,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -198,6 +209,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, BlockPistonExtension.getFacing(i)).withProperty(TYPE, (i & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); @@ -208,6 +220,7 @@ public class BlockPistonMoving extends BlockContainer { return tileentity instanceof TileEntityPiston ? (TileEntityPiston) tileentity : null; } + @Override public boolean isFullCube() { return false; } @@ -216,10 +229,12 @@ public class BlockPistonMoving extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer var4, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote && world.getTileEntity(blockpos) == null) { @@ -233,6 +248,7 @@ public class BlockPistonMoving extends BlockContainer { /** * + Called when a player destroys this Block */ + @Override public void onBlockDestroyedByPlayer(World world, BlockPos blockpos, IBlockState iblockstate) { BlockPos blockpos1 = blockpos.offset(((EnumFacing) iblockstate.getValue(FACING)).getOpposite()); IBlockState iblockstate1 = world.getBlockState(blockpos1); @@ -246,12 +262,14 @@ public class BlockPistonMoving extends BlockContainer { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { if (!world.isRemote) { world.getTileEntity(blockpos); } } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { TileEntityPiston tileentitypiston = this.getTileEntity(iblockaccess, blockpos); if (tileentitypiston != null) { @@ -281,4 +299,4 @@ public class BlockPistonMoving extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPlanks.java b/src/game/java/net/minecraft/block/BlockPlanks.java index 466ce479..758ea756 100644 --- a/src/game/java/net/minecraft/block/BlockPlanks.java +++ b/src/game/java/net/minecraft/block/BlockPlanks.java @@ -16,13 +16,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPlanks extends Block { public static enum EnumType implements IStringSerializable { @@ -85,6 +85,7 @@ public class BlockPlanks extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -93,6 +94,7 @@ public class BlockPlanks extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -110,6 +112,7 @@ public class BlockPlanks extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } @@ -119,6 +122,7 @@ public class BlockPlanks extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -126,6 +130,7 @@ public class BlockPlanks extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).func_181070_c(); } @@ -133,6 +138,7 @@ public class BlockPlanks extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -140,6 +146,7 @@ public class BlockPlanks extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata(i)); } @@ -148,6 +155,7 @@ public class BlockPlanks extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockPlanks.EnumType[] types = BlockPlanks.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -155,4 +163,4 @@ public class BlockPlanks extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPortal.java b/src/game/java/net/minecraft/block/BlockPortal.java index e68125e7..bc61556d 100644 --- a/src/game/java/net/minecraft/block/BlockPortal.java +++ b/src/game/java/net/minecraft/block/BlockPortal.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPortal extends BlockBreakable { public static class Size { @@ -190,6 +190,7 @@ public class BlockPortal extends BlockBreakable { this.setTickRandomly(true); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AXIS }); } @@ -264,14 +265,17 @@ public class BlockPortal extends BlockBreakable { } } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World var1, BlockPos var2) { return null; } @@ -279,6 +283,7 @@ public class BlockPortal extends BlockBreakable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return getMetaForAxis((EnumFacing.Axis) iblockstate.getValue(AXIS)); } @@ -286,10 +291,12 @@ public class BlockPortal extends BlockBreakable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AXIS, (i & 3) == 2 ? EnumFacing.Axis.Z : EnumFacing.Axis.X); } + @Override public boolean isFullCube() { return false; } @@ -297,6 +304,7 @@ public class BlockPortal extends BlockBreakable { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World var1, BlockPos blockpos, IBlockState var3, Entity entity) { if (entity.ridingEntity == null && entity.riddenByEntity == null) { entity.func_181015_d(blockpos); @@ -307,6 +315,7 @@ public class BlockPortal extends BlockBreakable { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis) iblockstate.getValue(AXIS); if (enumfacing$axis == EnumFacing.Axis.X) { @@ -329,10 +338,12 @@ public class BlockPortal extends BlockBreakable { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (random.nextInt(100) == 0) { world.playSound((double) blockpos.getX() + 0.5D, (double) blockpos.getY() + 0.5D, @@ -361,6 +372,7 @@ public class BlockPortal extends BlockBreakable { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis) iblockaccess.getBlockState(blockpos).getValue(AXIS); float f = 0.125F; @@ -376,6 +388,7 @@ public class BlockPortal extends BlockBreakable { this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { EnumFacing.Axis enumfacing$axis = null; IBlockState iblockstate = iblockaccess.getBlockState(blockpos); @@ -411,6 +424,7 @@ public class BlockPortal extends BlockBreakable { : (flag5 && enumfacing == EnumFacing.NORTH ? true : flag5 && enumfacing == EnumFacing.SOUTH)); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { super.updateTick(world, blockpos, iblockstate, random); if (world.provider.isSurfaceWorld() && world.getGameRules().getBoolean("doMobSpawning") @@ -433,4 +447,4 @@ public class BlockPortal extends BlockBreakable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPotato.java b/src/game/java/net/minecraft/block/BlockPotato.java index df721a53..b463700b 100644 --- a/src/game/java/net/minecraft/block/BlockPotato.java +++ b/src/game/java/net/minecraft/block/BlockPotato.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,12 +28,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPotato extends BlockCrops { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, i); if (!world.isRemote) { @@ -43,11 +44,13 @@ public class BlockPotato extends BlockCrops { } } + @Override protected Item getCrop() { return Items.potato; } + @Override protected Item getSeed() { return Items.potato; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPressurePlate.java b/src/game/java/net/minecraft/block/BlockPressurePlate.java index 61aad083..3c27fa0a 100644 --- a/src/game/java/net/minecraft/block/BlockPressurePlate.java +++ b/src/game/java/net/minecraft/block/BlockPressurePlate.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPressurePlate extends BlockBasePressurePlate { public static enum Sensitivity { @@ -51,6 +51,7 @@ public class BlockPressurePlate extends BlockBasePressurePlate { this.sensitivity = sensitivityIn; } + @Override protected int computeRedstoneStrength(World world, BlockPos blockpos) { AxisAlignedBB axisalignedbb = this.getSensitiveAABB(blockpos); List list; @@ -77,6 +78,7 @@ public class BlockPressurePlate extends BlockBasePressurePlate { return 0; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { POWERED }); } @@ -84,10 +86,12 @@ public class BlockPressurePlate extends BlockBasePressurePlate { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 1 : 0; } + @Override protected int getRedstoneStrength(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 15 : 0; } @@ -95,11 +99,13 @@ public class BlockPressurePlate extends BlockBasePressurePlate { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWERED, Boolean.valueOf(i == 1)); } + @Override protected IBlockState setRedstoneStrength(IBlockState iblockstate, int i) { return iblockstate.withProperty(POWERED, Boolean.valueOf(i > 0)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPressurePlateWeighted.java b/src/game/java/net/minecraft/block/BlockPressurePlateWeighted.java index bf30205a..f340fcd7 100644 --- a/src/game/java/net/minecraft/block/BlockPressurePlateWeighted.java +++ b/src/game/java/net/minecraft/block/BlockPressurePlateWeighted.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); @@ -48,6 +48,7 @@ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { this.field_150068_a = parInt1; } + @Override protected int computeRedstoneStrength(World world, BlockPos blockpos) { int i = Math.min(world.getEntitiesWithinAABB(Entity.class, this.getSensitiveAABB(blockpos)).size(), this.field_150068_a); @@ -59,6 +60,7 @@ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { POWER }); } @@ -66,10 +68,12 @@ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(POWER)).intValue(); } + @Override protected int getRedstoneStrength(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(POWER)).intValue(); } @@ -77,10 +81,12 @@ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWER, Integer.valueOf(i)); } + @Override protected IBlockState setRedstoneStrength(IBlockState iblockstate, int i) { return iblockstate.withProperty(POWER, Integer.valueOf(i)); } @@ -88,7 +94,8 @@ public class BlockPressurePlateWeighted extends BlockBasePressurePlate { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 10; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPrismarine.java b/src/game/java/net/minecraft/block/BlockPrismarine.java index 047b587c..9ffed490 100644 --- a/src/game/java/net/minecraft/block/BlockPrismarine.java +++ b/src/game/java/net/minecraft/block/BlockPrismarine.java @@ -17,13 +17,13 @@ import net.minecraft.util.StatCollector; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.StatCollector; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPrismarine extends Block { public static enum EnumType implements IStringSerializable { @@ -74,6 +74,7 @@ public class BlockPrismarine extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -82,6 +83,7 @@ public class BlockPrismarine extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -103,6 +105,7 @@ public class BlockPrismarine extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } @@ -112,6 +115,7 @@ public class BlockPrismarine extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPrismarine.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -119,6 +123,7 @@ public class BlockPrismarine extends Block { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal( this.getUnlocalizedName() + "." + BlockPrismarine.EnumType.ROUGH.getUnlocalizedName() + ".name"); @@ -127,6 +132,7 @@ public class BlockPrismarine extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return iblockstate.getValue(VARIANT) == BlockPrismarine.EnumType.ROUGH ? MapColor.cyanColor : MapColor.diamondColor; @@ -135,6 +141,7 @@ public class BlockPrismarine extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockPrismarine.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -142,6 +149,7 @@ public class BlockPrismarine extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockPrismarine.EnumType.byMetadata(i)); } @@ -150,9 +158,10 @@ public class BlockPrismarine extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, ROUGH_META)); list.add(new ItemStack(item, 1, BRICKS_META)); list.add(new ItemStack(item, 1, DARK_META)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockPumpkin.java b/src/game/java/net/minecraft/block/BlockPumpkin.java index 8471a5a0..077aca2a 100644 --- a/src/game/java/net/minecraft/block/BlockPumpkin.java +++ b/src/game/java/net/minecraft/block/BlockPumpkin.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,10 +42,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPumpkin extends BlockDirectional { private static final Predicate field_181085_Q = new Predicate() { + @Override public boolean apply(IBlockState iblockstate) { return iblockstate != null && (iblockstate.getBlock() == Blocks.pumpkin || iblockstate.getBlock() == Blocks.lit_pumpkin); @@ -68,11 +69,13 @@ public class BlockPumpkin extends BlockDirectional { || this.getGolemBasePattern().match(worldIn, pos) != null; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return world.getBlockState(blockpos).getBlock().blockMaterial.isReplaceable() && World.doesBlockHaveSolidTopSurface(world, blockpos.down()); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } @@ -101,6 +104,7 @@ public class BlockPumpkin extends BlockDirectional { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); } @@ -127,10 +131,12 @@ public class BlockPumpkin extends BlockDirectional { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i)); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { super.onBlockAdded(world, blockpos, iblockstate); this.trySpawnGolem(world, blockpos); @@ -140,6 +146,7 @@ public class BlockPumpkin extends BlockDirectional { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()); @@ -200,4 +207,4 @@ public class BlockPumpkin extends BlockDirectional { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockQuartz.java b/src/game/java/net/minecraft/block/BlockQuartz.java index 053fcca1..54877999 100644 --- a/src/game/java/net/minecraft/block/BlockQuartz.java +++ b/src/game/java/net/minecraft/block/BlockQuartz.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockQuartz extends Block { public static enum EnumType implements IStringSerializable { @@ -78,10 +78,12 @@ public class BlockQuartz extends Block { return this.meta; } + @Override public String getName() { return this.field_176805_h; } + @Override public String toString() { return this.unlocalizedName; } @@ -99,10 +101,12 @@ public class BlockQuartz extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType) iblockstate.getValue(VARIANT); return blockquartz$enumtype != BlockQuartz.EnumType.LINES_X @@ -115,6 +119,7 @@ public class BlockQuartz extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType) iblockstate.getValue(VARIANT); return blockquartz$enumtype != BlockQuartz.EnumType.LINES_X @@ -125,6 +130,7 @@ public class BlockQuartz extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.quartzColor; } @@ -132,6 +138,7 @@ public class BlockQuartz extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockQuartz.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -139,6 +146,7 @@ public class BlockQuartz extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.byMetadata(i)); } @@ -147,6 +155,7 @@ public class BlockQuartz extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, BlockQuartz.EnumType.DEFAULT.getMetadata())); list.add(new ItemStack(item, 1, BlockQuartz.EnumType.CHISELED.getMetadata())); @@ -157,6 +166,7 @@ public class BlockQuartz extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float var5, float var6, int i, EntityLivingBase var8) { if (i == BlockQuartz.EnumType.LINES_Y.getMetadata()) { @@ -175,4 +185,4 @@ public class BlockQuartz extends Block { : this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.DEFAULT); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRail.java b/src/game/java/net/minecraft/block/BlockRail.java index 1e50b0df..d703b9b2 100644 --- a/src/game/java/net/minecraft/block/BlockRail.java +++ b/src/game/java/net/minecraft/block/BlockRail.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRail extends BlockRailBase { public static PropertyEnum SHAPE; @@ -43,6 +43,7 @@ public class BlockRail extends BlockRailBase { this.blockState.getBaseState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { SHAPE }); } @@ -50,10 +51,12 @@ public class BlockRail extends BlockRailBase { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockRailBase.EnumRailDirection) iblockstate.getValue(SHAPE)).getMetadata(); } + @Override public IProperty getShapeProperty() { return SHAPE; } @@ -61,10 +64,12 @@ public class BlockRail extends BlockRailBase { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(i)); } + @Override protected void onNeighborChangedInternal(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (block.canProvidePower() && (new BlockRailBase.Rail(world, blockpos, iblockstate)).countAdjacentRails() == 3) { @@ -72,4 +77,4 @@ public class BlockRail extends BlockRailBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRailBase.java b/src/game/java/net/minecraft/block/BlockRailBase.java index d9af850a..12a8997b 100644 --- a/src/game/java/net/minecraft/block/BlockRailBase.java +++ b/src/game/java/net/minecraft/block/BlockRailBase.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockRailBase extends Block { public static enum EnumRailDirection implements IStringSerializable { @@ -79,6 +79,7 @@ public abstract class BlockRailBase extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -88,6 +89,7 @@ public abstract class BlockRailBase extends Block { || this == ASCENDING_WEST; } + @Override public String toString() { return this.name; } @@ -451,6 +453,7 @@ public abstract class BlockRailBase extends Block { this.setCreativeTab(CreativeTabs.tabTransport); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { super.breakBlock(world, blockpos, iblockstate); if (((BlockRailBase.EnumRailDirection) iblockstate.getValue(this.getShapeProperty())).isAscending()) { @@ -464,6 +467,7 @@ public abstract class BlockRailBase extends Block { } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return World.doesBlockHaveSolidTopSurface(world, blockpos.down()); } @@ -472,6 +476,7 @@ public abstract class BlockRailBase extends Block { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World worldIn, BlockPos pos, Vec3 start, Vec3 end) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.collisionRayTrace(worldIn, pos, start, end); @@ -484,20 +489,24 @@ public abstract class BlockRailBase extends Block { .func_180364_a(worldIn.isBlockPowered(parBlockPos), parFlag).getBlockState(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public int getMobilityFlag() { return 0; } public abstract IProperty getShapeProperty(); + @Override public boolean isFullCube() { return false; } @@ -506,10 +515,12 @@ public abstract class BlockRailBase extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) { if (!worldIn.isRemote) { state = this.func_176564_a(worldIn, pos, state, true); @@ -522,6 +533,7 @@ public abstract class BlockRailBase extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (!world.isRemote) { BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection) iblockstate @@ -557,6 +569,7 @@ public abstract class BlockRailBase extends Block { protected void onNeighborChangedInternal(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = iblockstate.getBlock() == this @@ -569,4 +582,4 @@ public abstract class BlockRailBase extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRailDetector.java b/src/game/java/net/minecraft/block/BlockRailDetector.java index 9dcc6131..820a7adb 100644 --- a/src/game/java/net/minecraft/block/BlockRailDetector.java +++ b/src/game/java/net/minecraft/block/BlockRailDetector.java @@ -25,13 +25,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRailDetector extends BlockRailBase { public static PropertyEnum SHAPE; @@ -52,6 +52,7 @@ public class BlockRailDetector extends BlockRailBase { public static void bootstrapStates() { SHAPE = PropertyEnum.create("shape", BlockRailBase.EnumRailDirection.class, new Predicate() { + @Override public boolean apply(BlockRailBase.EnumRailDirection blockrailbase$enumraildirection) { return blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.NORTH_EAST && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.NORTH_WEST @@ -72,10 +73,12 @@ public class BlockRailDetector extends BlockRailBase { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { SHAPE, POWERED }); } @@ -87,6 +90,7 @@ public class BlockRailDetector extends BlockRailBase { : worldIn.getEntitiesWithinAABB(clazz, axisalignedbb, filter[0]); } + @Override public int getComparatorInputOverride(World world, BlockPos blockpos) { if (((Boolean) world.getBlockState(blockpos).getValue(POWERED)).booleanValue()) { List list = this.findMinecarts(world, blockpos, EntityMinecartCommandBlock.class, new Predicate[0]); @@ -114,6 +118,7 @@ public class BlockRailDetector extends BlockRailBase { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockRailBase.EnumRailDirection) iblockstate.getValue(SHAPE)).getMetadata(); @@ -124,6 +129,7 @@ public class BlockRailDetector extends BlockRailBase { return i; } + @Override public IProperty getShapeProperty() { return SHAPE; } @@ -131,23 +137,28 @@ public class BlockRailDetector extends BlockRailBase { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(i & 7)) .withProperty(POWERED, Boolean.valueOf((i & 8) > 0)); } + @Override public int getStrongPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing enumfacing) { return !((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 0 : (enumfacing == EnumFacing.UP ? 15 : 0); } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 15 : 0; } + @Override public boolean hasComparatorInputOverride() { return true; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { super.onBlockAdded(world, blockpos, iblockstate); this.updatePoweredState(world, blockpos, iblockstate); @@ -156,6 +167,7 @@ public class BlockRailDetector extends BlockRailBase { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, IBlockState iblockstate, Entity var4) { if (!world.isRemote) { if (!((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { @@ -168,12 +180,14 @@ public class BlockRailDetector extends BlockRailBase { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 20; } @@ -207,9 +221,10 @@ public class BlockRailDetector extends BlockRailBase { worldIn.updateComparatorOutputLevel(pos, this); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (!world.isRemote && ((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { this.updatePoweredState(world, blockpos, iblockstate); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRailPowered.java b/src/game/java/net/minecraft/block/BlockRailPowered.java index aad5fe40..a3f267b9 100644 --- a/src/game/java/net/minecraft/block/BlockRailPowered.java +++ b/src/game/java/net/minecraft/block/BlockRailPowered.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRailPowered extends BlockRailBase { public static PropertyEnum SHAPE; @@ -40,6 +40,7 @@ public class BlockRailPowered extends BlockRailBase { public static void bootstrapStates() { SHAPE = PropertyEnum.create("shape", BlockRailBase.EnumRailDirection.class, new Predicate() { + @Override public boolean apply(BlockRailBase.EnumRailDirection blockrailbase$enumraildirection) { return blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.NORTH_EAST && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.NORTH_WEST @@ -56,6 +57,7 @@ public class BlockRailPowered extends BlockRailBase { .withProperty(POWERED, Boolean.valueOf(false))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { SHAPE, POWERED }); } @@ -166,6 +168,7 @@ public class BlockRailPowered extends BlockRailBase { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockRailBase.EnumRailDirection) iblockstate.getValue(SHAPE)).getMetadata(); @@ -176,6 +179,7 @@ public class BlockRailPowered extends BlockRailBase { return i; } + @Override public IProperty getShapeProperty() { return SHAPE; } @@ -183,11 +187,13 @@ public class BlockRailPowered extends BlockRailBase { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(i & 7)) .withProperty(POWERED, Boolean.valueOf((i & 8) > 0)); } + @Override protected void onNeighborChangedInternal(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { boolean flag = ((Boolean) iblockstate.getValue(POWERED)).booleanValue(); boolean flag1 = world.isBlockPowered(blockpos) || this.func_176566_a(world, blockpos, iblockstate, true, 0) @@ -201,4 +207,4 @@ public class BlockRailPowered extends BlockRailBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedFlower.java b/src/game/java/net/minecraft/block/BlockRedFlower.java index a51a67c6..93088092 100644 --- a/src/game/java/net/minecraft/block/BlockRedFlower.java +++ b/src/game/java/net/minecraft/block/BlockRedFlower.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,13 +21,14 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedFlower extends BlockFlower { /** * + Get the Type of this flower (Yellow/Red) */ + @Override public BlockFlower.EnumFlowerColor getBlockType() { return BlockFlower.EnumFlowerColor.RED; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedSandstone.java b/src/game/java/net/minecraft/block/BlockRedSandstone.java index 5505d02d..55fffa63 100644 --- a/src/game/java/net/minecraft/block/BlockRedSandstone.java +++ b/src/game/java/net/minecraft/block/BlockRedSandstone.java @@ -15,13 +15,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedSandstone extends Block { public static enum EnumType implements IStringSerializable { @@ -73,6 +73,7 @@ public class BlockRedSandstone extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -81,6 +82,7 @@ public class BlockRedSandstone extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -98,6 +100,7 @@ public class BlockRedSandstone extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { TYPE }); } @@ -107,6 +110,7 @@ public class BlockRedSandstone extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockRedSandstone.EnumType) iblockstate.getValue(TYPE)).getMetadata(); } @@ -114,6 +118,7 @@ public class BlockRedSandstone extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockRedSandstone.EnumType) iblockstate.getValue(TYPE)).getMetadata(); } @@ -121,6 +126,7 @@ public class BlockRedSandstone extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(TYPE, BlockRedSandstone.EnumType.byMetadata(i)); } @@ -129,6 +135,7 @@ public class BlockRedSandstone extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockRedSandstone.EnumType[] types = BlockRedSandstone.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -136,4 +143,4 @@ public class BlockRedSandstone extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneComparator.java b/src/game/java/net/minecraft/block/BlockRedstoneComparator.java index 1d40a335..e21cfe73 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneComparator.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneComparator.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITileEntityProvider { public static enum Mode implements IStringSerializable { @@ -61,10 +61,12 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -86,12 +88,14 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile this.isBlockContainer = true; } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { super.breakBlock(world, blockpos, iblockstate); world.removeTileEntity(blockpos); this.notifyNeighbors(world, blockpos, iblockstate); } + @Override protected int calculateInputStrength(World worldIn, BlockPos pos, IBlockState state) { int i = super.calculateInputStrength(worldIn, pos, state); EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); @@ -122,6 +126,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile : this.calculateInputStrength(worldIn, pos, state); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, MODE, POWERED }); } @@ -130,6 +135,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityComparator(); } @@ -139,6 +145,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile new AxisAlignedBB((double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), (double) (pos.getX() + 1), (double) (pos.getY() + 1), (double) (pos.getZ() + 1)), new Predicate() { + @Override public boolean apply(Entity entity) { return entity != null && entity.getHorizontalFacing() == facing; } @@ -146,15 +153,18 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile return list.size() == 1 ? (EntityItemFrame) list.get(0) : null; } + @Override protected int getActiveSignal(IBlockAccess worldIn, BlockPos pos, IBlockState state) { TileEntity tileentity = worldIn.getTileEntity(pos); return tileentity instanceof TileEntityComparator ? ((TileEntityComparator) tileentity).getOutputSignal() : 0; } + @Override protected int getDelay(IBlockState state) { return 2; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.comparator; } @@ -162,6 +172,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.comparator; } @@ -169,6 +180,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("item.comparator.name"); } @@ -176,6 +188,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -190,6 +203,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile return i; } + @Override protected IBlockState getPoweredState(IBlockState unpoweredState) { Boolean obool = (Boolean) unpoweredState.getValue(POWERED); BlockRedstoneComparator.Mode blockredstonecomparator$mode = (BlockRedstoneComparator.Mode) unpoweredState @@ -202,12 +216,14 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i)) .withProperty(POWERED, Boolean.valueOf((i & 8) > 0)).withProperty(MODE, (i & 4) > 0 ? BlockRedstoneComparator.Mode.SUBTRACT : BlockRedstoneComparator.Mode.COMPARE); } + @Override protected IBlockState getUnpoweredState(IBlockState poweredState) { Boolean obool = (Boolean) poweredState.getValue(POWERED); BlockRedstoneComparator.Mode blockredstonecomparator$mode = (BlockRedstoneComparator.Mode) poweredState @@ -217,10 +233,12 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile .withProperty(POWERED, obool).withProperty(MODE, blockredstonecomparator$mode); } + @Override protected boolean isPowered(IBlockState state) { return this.isRepeaterPowered || ((Boolean) state.getValue(POWERED)).booleanValue(); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!entityplayer.capabilities.allowEdit) { @@ -236,6 +254,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { super.onBlockAdded(world, blockpos, iblockstate); world.setTileEntity(blockpos, this.createNewTileEntity(world, 0)); @@ -244,6 +263,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile /** * + Called on both Client and Server when World#addBlockEvent is called */ + @Override public boolean onBlockEventReceived(World world, BlockPos blockpos, IBlockState iblockstate, int i, int j) { super.onBlockEventReceived(world, blockpos, iblockstate, i, j); TileEntity tileentity = world.getTileEntity(blockpos); @@ -254,6 +274,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()) @@ -284,6 +305,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile } + @Override protected boolean shouldBePowered(World worldIn, BlockPos pos, IBlockState state) { int i = this.calculateInputStrength(worldIn, pos, state); if (i >= 15) { @@ -296,6 +318,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile } } + @Override protected void updateState(World worldIn, BlockPos pos, IBlockState state) { if (!worldIn.isBlockTickPending(pos, this)) { int i = this.calculateOutput(worldIn, pos, state); @@ -313,6 +336,7 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile } } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (this.isRepeaterPowered) { world.setBlockState(blockpos, @@ -321,4 +345,4 @@ public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITile this.onStateChange(world, blockpos, iblockstate); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneDiode.java b/src/game/java/net/minecraft/block/BlockRedstoneDiode.java index 6818054b..463bb0b0 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneDiode.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneDiode.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockRedstoneDiode extends BlockDirectional { public static boolean isRedstoneRepeaterBlockID(Block blockIn) { @@ -67,6 +67,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { return World.doesBlockHaveSolidTopSurface(worldIn, pos.down()); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return World.doesBlockHaveSolidTopSurface(world, blockpos.down()) ? super.canPlaceBlockAt(world, blockpos) : false; @@ -80,6 +81,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } @@ -88,6 +90,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { return 15; } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } @@ -113,6 +116,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { this.getPowerOnSide(worldIn, pos.offset(enumfacing2), enumfacing2)); } + @Override public int getStrongPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { return this.getWeakPower(iblockaccess, blockpos, iblockstate, enumfacing); @@ -124,6 +128,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { protected abstract IBlockState getUnpoweredState(IBlockState var1); + @Override public int getWeakPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { return !this.isPowered(iblockstate) ? 0 @@ -137,6 +142,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { || other == this.getUnpoweredState(this.getDefaultState()).getBlock(); } + @Override public boolean isAssociatedBlock(Block block) { return this.isAssociated(block); } @@ -149,6 +155,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { : false; } + @Override public boolean isFullCube() { return false; } @@ -161,6 +168,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -176,6 +184,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { worldIn.notifyNeighborsOfStateExcept(blockpos, this, enumfacing); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.notifyNeighbors(world, blockpos, iblockstate); } @@ -183,6 +192,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { /** * + Called when a player destroys this Block */ + @Override public void onBlockDestroyedByPlayer(World world, BlockPos blockpos, IBlockState iblockstate) { if (this.isRepeaterPowered) { EnumFacing[] facings = EnumFacing._VALUES; @@ -199,6 +209,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing().getOpposite()); @@ -208,6 +219,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase var4, ItemStack var5) { if (this.shouldBePowered(world, blockpos, iblockstate)) { @@ -219,6 +231,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (this.canBlockStay(world, blockpos)) { this.updateState(world, blockpos, iblockstate); @@ -239,6 +252,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } @@ -246,6 +260,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { return this.calculateInputStrength(world, blockpos, iblockstate) > 0; } + @Override public boolean shouldSideBeRendered(IBlockAccess var1, BlockPos var2, EnumFacing enumfacing) { return enumfacing.getAxis() != EnumFacing.Axis.Y; } @@ -268,6 +283,7 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { } } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { if (!this.isLocked(world, blockpos, iblockstate)) { boolean flag = this.shouldBePowered(world, blockpos, iblockstate); @@ -283,4 +299,4 @@ public abstract class BlockRedstoneDiode extends BlockDirectional { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneLight.java b/src/game/java/net/minecraft/block/BlockRedstoneLight.java index 15f8e04a..fe39a645 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneLight.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneLight.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneLight extends Block { private final boolean isOn; @@ -44,10 +44,12 @@ public class BlockRedstoneLight extends Block { } + @Override protected ItemStack createStackedBlock(IBlockState var1) { return new ItemStack(Blocks.redstone_lamp); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.redstone_lamp); } @@ -55,10 +57,12 @@ public class BlockRedstoneLight extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.redstone_lamp); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { if (!world.isRemote) { if (this.isOn && !world.isBlockPowered(blockpos)) { @@ -72,6 +76,7 @@ public class BlockRedstoneLight extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState var3, Block var4) { if (!world.isRemote) { if (this.isOn && !world.isBlockPowered(blockpos)) { @@ -82,6 +87,7 @@ public class BlockRedstoneLight extends Block { } } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (!world.isRemote) { if (this.isOn && !world.isBlockPowered(blockpos)) { @@ -89,4 +95,4 @@ public class BlockRedstoneLight extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneOre.java b/src/game/java/net/minecraft/block/BlockRedstoneOre.java index a7c8edc3..2e2c1ff8 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneOre.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneOre.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneOre extends Block { private final boolean isOn; @@ -57,6 +57,7 @@ public class BlockRedstoneOre extends Block { } + @Override protected ItemStack createStackedBlock(IBlockState var1) { return new ItemStack(Blocks.redstone_ore); } @@ -64,6 +65,7 @@ public class BlockRedstoneOre extends Block { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, i); if (this.getItemDropped(iblockstate, world.rand, i) != Item.getItemFromBlock(this)) { @@ -76,16 +78,19 @@ public class BlockRedstoneOre extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.redstone; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing enumfacing, float f, float f1, float f2) { this.activate(world, blockpos); return super.onBlockActivated(world, blockpos, iblockstate, entityplayer, enumfacing, f, f1, f2); } + @Override public void onBlockClicked(World world, BlockPos blockpos, EntityPlayer entityplayer) { this.activate(world, blockpos); super.onBlockClicked(world, blockpos, entityplayer); @@ -95,6 +100,7 @@ public class BlockRedstoneOre extends Block { * + Triggered whenever an entity collides with this block (enters into the * block) */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, Entity entity) { this.activate(world, blockpos); super.onEntityCollidedWithBlock(world, blockpos, entity); @@ -103,6 +109,7 @@ public class BlockRedstoneOre extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return 4 + random.nextInt(2); } @@ -110,10 +117,12 @@ public class BlockRedstoneOre extends Block { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { return this.quantityDropped(random) + random.nextInt(i + 1); } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (this.isOn) { this.spawnParticles(world, blockpos); @@ -164,14 +173,16 @@ public class BlockRedstoneOre extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 30; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (this == Blocks.lit_redstone_ore) { world.setBlockState(blockpos, Blocks.redstone_ore.getDefaultState()); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneRepeater.java b/src/game/java/net/minecraft/block/BlockRedstoneRepeater.java index 239d1347..3b75ef3d 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneRepeater.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneRepeater.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneRepeater extends BlockRedstoneDiode { public static final PropertyBool LOCKED = PropertyBool.create("locked"); @@ -50,15 +50,18 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { .withProperty(DELAY, Integer.valueOf(1)).withProperty(LOCKED, Boolean.valueOf(false))); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { super.breakBlock(world, blockpos, iblockstate); this.notifyNeighbors(world, blockpos, iblockstate); } + @Override protected boolean canPowerSide(Block block) { return isRedstoneRepeaterBlockID(block); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, DELAY, LOCKED }); } @@ -67,14 +70,17 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate.withProperty(LOCKED, Boolean.valueOf(this.isLocked(iblockaccess, blockpos, iblockstate))); } + @Override protected int getDelay(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(DELAY)).intValue() * 2; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.repeater; } @@ -82,6 +88,7 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.repeater; } @@ -89,6 +96,7 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("item.diode.name"); } @@ -96,6 +104,7 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -103,6 +112,7 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { return i; } + @Override protected IBlockState getPoweredState(IBlockState iblockstate) { Integer integer = (Integer) iblockstate.getValue(DELAY); Boolean obool = (Boolean) iblockstate.getValue(LOCKED); @@ -114,11 +124,13 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i)) .withProperty(LOCKED, Boolean.valueOf(false)).withProperty(DELAY, Integer.valueOf(1 + (i >> 2))); } + @Override protected IBlockState getUnpoweredState(IBlockState iblockstate) { Integer integer = (Integer) iblockstate.getValue(DELAY); Boolean obool = (Boolean) iblockstate.getValue(LOCKED); @@ -127,10 +139,12 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { .withProperty(LOCKED, obool); } + @Override public boolean isLocked(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate) { return this.getPowerOnSides(iblockaccess, blockpos, iblockstate) > 0; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!entityplayer.capabilities.allowEdit) { @@ -141,6 +155,7 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { } } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (this.isRepeaterPowered) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); @@ -158,4 +173,4 @@ public class BlockRedstoneRepeater extends BlockRedstoneDiode { world.spawnParticle(EnumParticleTypes.REDSTONE, d0 + d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D, new int[0]); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneTorch.java b/src/game/java/net/minecraft/block/BlockRedstoneTorch.java index ae32070b..88487a51 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneTorch.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneTorch.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneTorch extends BlockTorch { static class Toggle { @@ -61,6 +61,7 @@ public class BlockRedstoneTorch extends BlockTorch { this.setCreativeTab((CreativeTabs) null); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { if (this.isOn) { EnumFacing[] facings = EnumFacing._VALUES; @@ -76,10 +77,12 @@ public class BlockRedstoneTorch extends BlockTorch { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.redstone_torch); } @@ -87,19 +90,23 @@ public class BlockRedstoneTorch extends BlockTorch { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.redstone_torch); } + @Override public int getStrongPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { return enumfacing == EnumFacing.DOWN ? this.getWeakPower(iblockaccess, blockpos, iblockstate, enumfacing) : 0; } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing enumfacing) { return this.isOn && iblockstate.getValue(FACING) != enumfacing ? 15 : 0; } + @Override public boolean isAssociatedBlock(Block block) { return block == Blocks.unlit_redstone_torch || block == Blocks.redstone_torch; } @@ -129,6 +136,7 @@ public class BlockRedstoneTorch extends BlockTorch { return false; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { if (this.isOn) { EnumFacing[] facings = EnumFacing._VALUES; @@ -143,6 +151,7 @@ public class BlockRedstoneTorch extends BlockTorch { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!this.onNeighborChangeInternal(world, blockpos, iblockstate)) { if (this.isOn == this.shouldBeOff(world, blockpos, iblockstate)) { @@ -152,6 +161,7 @@ public class BlockRedstoneTorch extends BlockTorch { } } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (this.isOn) { double d0 = (double) blockpos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.2D; @@ -174,6 +184,7 @@ public class BlockRedstoneTorch extends BlockTorch { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } @@ -185,10 +196,12 @@ public class BlockRedstoneTorch extends BlockTorch { /** * + How many world ticks before ticking */ + @Override public int tickRate(World var1) { return 2; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { boolean flag = this.shouldBeOff(world, blockpos, iblockstate); List list = (List) toggles.get(world); @@ -223,4 +236,4 @@ public class BlockRedstoneTorch extends BlockTorch { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRedstoneWire.java b/src/game/java/net/minecraft/block/BlockRedstoneWire.java index 35981a32..ae67abb6 100644 --- a/src/game/java/net/minecraft/block/BlockRedstoneWire.java +++ b/src/game/java/net/minecraft/block/BlockRedstoneWire.java @@ -30,13 +30,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRedstoneWire extends Block { static enum EnumAttachPosition implements IStringSerializable { @@ -60,10 +60,12 @@ public class BlockRedstoneWire extends Block { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.getName(); } @@ -123,6 +125,7 @@ public class BlockRedstoneWire extends Block { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { super.breakBlock(world, blockpos, iblockstate); if (!world.isRemote) { @@ -219,6 +222,7 @@ public class BlockRedstoneWire extends Block { return state; } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { BlockPos fuckOff = blockpos.down(); return World.doesBlockHaveSolidTopSurface(world, fuckOff) @@ -229,10 +233,12 @@ public class BlockRedstoneWire extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return this.canProvidePower; } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int i) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); return iblockstate.getBlock() != this ? super.colorMultiplier(iblockaccess, blockpos, i) @@ -262,6 +268,7 @@ public class BlockRedstoneWire extends Block { return -16777216 | i << 16 | j << 8 | k; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { NORTH, EAST, SOUTH, WEST, POWER }); } @@ -283,6 +290,7 @@ public class BlockRedstoneWire extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { iblockstate = iblockstate.withProperty(WEST, this.getAttachPosition(iblockaccess, blockpos, EnumFacing.WEST)); iblockstate = iblockstate.withProperty(EAST, this.getAttachPosition(iblockaccess, blockpos, EnumFacing.EAST)); @@ -308,14 +316,17 @@ public class BlockRedstoneWire extends Block { } } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.redstone; } @@ -323,6 +334,7 @@ public class BlockRedstoneWire extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.redstone; } @@ -339,6 +351,7 @@ public class BlockRedstoneWire extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(POWER)).intValue(); } @@ -346,15 +359,18 @@ public class BlockRedstoneWire extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWER, Integer.valueOf(i)); } + @Override public int getStrongPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { return !this.canProvidePower ? 0 : this.getWeakPower(iblockaccess, blockpos, iblockstate, enumfacing); } + @Override public int getWeakPower(IBlockAccess iblockaccess, BlockPos blockpos, IBlockState iblockstate, EnumFacing enumfacing) { if (!this.canProvidePower) { @@ -388,6 +404,7 @@ public class BlockRedstoneWire extends Block { } } + @Override public boolean isFullCube() { return false; } @@ -396,6 +413,7 @@ public class BlockRedstoneWire extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -417,6 +435,7 @@ public class BlockRedstoneWire extends Block { } } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { if (!world.isRemote) { this.updateSurroundingRedstone(world, blockpos, iblockstate); @@ -448,6 +467,7 @@ public class BlockRedstoneWire extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!world.isRemote) { if (this.canPlaceBlockAt(world, blockpos)) { @@ -459,6 +479,7 @@ public class BlockRedstoneWire extends Block { } } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { int i = ((Integer) iblockstate.getValue(POWER)).intValue(); if (i != 0) { @@ -485,4 +506,4 @@ public class BlockRedstoneWire extends Block { return state; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockReed.java b/src/game/java/net/minecraft/block/BlockReed.java index 54e81da5..e641617d 100644 --- a/src/game/java/net/minecraft/block/BlockReed.java +++ b/src/game/java/net/minecraft/block/BlockReed.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockReed extends Block { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); @@ -54,6 +54,7 @@ public class BlockReed extends Block { return this.canPlaceBlockAt(worldIn, pos); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { BlockPos down = blockpos.down(); Block block = world.getBlockState(down).getBlock(); @@ -86,22 +87,27 @@ public class BlockReed extends Block { } } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return iblockaccess.getBiomeGenForCoords(blockpos).getGrassColorAtPos(blockpos); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE }); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.reeds; } @@ -109,6 +115,7 @@ public class BlockReed extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.reeds; } @@ -116,6 +123,7 @@ public class BlockReed extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } @@ -123,10 +131,12 @@ public class BlockReed extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } + @Override public boolean isFullCube() { return false; } @@ -135,6 +145,7 @@ public class BlockReed extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -142,10 +153,12 @@ public class BlockReed extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.checkForDrop(world, blockpos, iblockstate); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { BlockPos tmp = new BlockPos(0, 0, 0); if (world.getBlockState(blockpos.offsetEvenFaster(EnumFacing.DOWN, tmp)).getBlock() == Blocks.reeds @@ -170,4 +183,4 @@ public class BlockReed extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockRotatedPillar.java b/src/game/java/net/minecraft/block/BlockRotatedPillar.java index 7f0fdb72..07d80e75 100644 --- a/src/game/java/net/minecraft/block/BlockRotatedPillar.java +++ b/src/game/java/net/minecraft/block/BlockRotatedPillar.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockRotatedPillar extends Block { public static final PropertyEnum AXIS = PropertyEnum.create("axis", @@ -39,4 +39,4 @@ public abstract class BlockRotatedPillar extends Block { protected BlockRotatedPillar(Material parMaterial, MapColor parMapColor) { super(parMaterial, parMapColor); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSand.java b/src/game/java/net/minecraft/block/BlockSand.java index 2757a311..900803a8 100644 --- a/src/game/java/net/minecraft/block/BlockSand.java +++ b/src/game/java/net/minecraft/block/BlockSand.java @@ -15,13 +15,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSand extends BlockFalling { public static enum EnumType implements IStringSerializable { @@ -81,6 +81,7 @@ public class BlockSand extends BlockFalling { return this.meta; } + @Override public String getName() { return this.name; } @@ -89,6 +90,7 @@ public class BlockSand extends BlockFalling { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -104,6 +106,7 @@ public class BlockSand extends BlockFalling { this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockSand.EnumType.SAND)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } @@ -113,6 +116,7 @@ public class BlockSand extends BlockFalling { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockSand.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -120,6 +124,7 @@ public class BlockSand extends BlockFalling { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockSand.EnumType) iblockstate.getValue(VARIANT)).getMapColor(); } @@ -127,6 +132,7 @@ public class BlockSand extends BlockFalling { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockSand.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -134,6 +140,7 @@ public class BlockSand extends BlockFalling { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockSand.EnumType.byMetadata(i)); } @@ -142,6 +149,7 @@ public class BlockSand extends BlockFalling { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockSand.EnumType[] blocks = BlockSand.EnumType.META_LOOKUP; for (int i = 0; i < blocks.length; ++i) { @@ -149,4 +157,4 @@ public class BlockSand extends BlockFalling { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSandStone.java b/src/game/java/net/minecraft/block/BlockSandStone.java index 82aa10d8..e8e93a78 100644 --- a/src/game/java/net/minecraft/block/BlockSandStone.java +++ b/src/game/java/net/minecraft/block/BlockSandStone.java @@ -16,13 +16,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSandStone extends Block { public static enum EnumType implements IStringSerializable { @@ -74,6 +74,7 @@ public class BlockSandStone extends Block { return this.metadata; } + @Override public String getName() { return this.name; } @@ -82,6 +83,7 @@ public class BlockSandStone extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -99,6 +101,7 @@ public class BlockSandStone extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { TYPE }); } @@ -108,6 +111,7 @@ public class BlockSandStone extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockSandStone.EnumType) iblockstate.getValue(TYPE)).getMetadata(); } @@ -115,6 +119,7 @@ public class BlockSandStone extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.sandColor; } @@ -122,6 +127,7 @@ public class BlockSandStone extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockSandStone.EnumType) iblockstate.getValue(TYPE)).getMetadata(); } @@ -129,6 +135,7 @@ public class BlockSandStone extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(TYPE, BlockSandStone.EnumType.byMetadata(i)); } @@ -137,6 +144,7 @@ public class BlockSandStone extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockSandStone.EnumType[] types = BlockSandStone.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -144,4 +152,4 @@ public class BlockSandStone extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSapling.java b/src/game/java/net/minecraft/block/BlockSapling.java index 0b6325ae..b0102cd9 100644 --- a/src/game/java/net/minecraft/block/BlockSapling.java +++ b/src/game/java/net/minecraft/block/BlockSapling.java @@ -28,13 +28,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSapling extends BlockBush implements IGrowable { public static PropertyEnum TYPE; @@ -67,14 +67,17 @@ public class BlockSapling extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState var3, boolean var4) { return true; } + @Override public boolean canUseBonemeal(World world, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return (double) world.rand.nextFloat() < 0.45D; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { TYPE, STAGE }); } @@ -84,6 +87,7 @@ public class BlockSapling extends BlockBush implements IGrowable { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(TYPE)).getMetadata(); } @@ -191,6 +195,7 @@ public class BlockSapling extends BlockBush implements IGrowable { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal( this.getUnlocalizedName() + "." + BlockPlanks.EnumType.OAK.getUnlocalizedName() + ".name"); @@ -199,6 +204,7 @@ public class BlockSapling extends BlockBush implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(TYPE)).getMetadata(); @@ -209,6 +215,7 @@ public class BlockSapling extends BlockBush implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(TYPE, BlockPlanks.EnumType.byMetadata(i & 7)).withProperty(STAGE, Integer.valueOf((i & 8) >> 3)); @@ -218,6 +225,7 @@ public class BlockSapling extends BlockBush implements IGrowable { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockPlanks.EnumType[] types = BlockPlanks.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -235,6 +243,7 @@ public class BlockSapling extends BlockBush implements IGrowable { } + @Override public void grow(World world, EaglercraftRandom random, BlockPos blockpos, IBlockState iblockstate) { this.grow(world, blockpos, iblockstate, random); } @@ -247,6 +256,7 @@ public class BlockSapling extends BlockBush implements IGrowable { return iblockstate.getBlock() == this && iblockstate.getValue(TYPE) == type; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (!world.isRemote) { super.updateTick(world, blockpos, iblockstate, random); @@ -255,4 +265,4 @@ public class BlockSapling extends BlockBush implements IGrowable { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSeaLantern.java b/src/game/java/net/minecraft/block/BlockSeaLantern.java index 4d819028..0f8e35ee 100644 --- a/src/game/java/net/minecraft/block/BlockSeaLantern.java +++ b/src/game/java/net/minecraft/block/BlockSeaLantern.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSeaLantern extends Block { public BlockSeaLantern(Material materialIn) { @@ -38,6 +38,7 @@ public class BlockSeaLantern extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected boolean canSilkHarvest() { return true; } @@ -45,6 +46,7 @@ public class BlockSeaLantern extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.prismarine_crystals; } @@ -52,6 +54,7 @@ public class BlockSeaLantern extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return MapColor.quartzColor; } @@ -59,6 +62,7 @@ public class BlockSeaLantern extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom random) { return 2 + random.nextInt(2); } @@ -66,7 +70,8 @@ public class BlockSeaLantern extends Block { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { return MathHelper.clamp_int(this.quantityDropped(random) + random.nextInt(i + 1), 1, 5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSign.java b/src/game/java/net/minecraft/block/BlockSign.java index 2bc644de..b2ecd903 100644 --- a/src/game/java/net/minecraft/block/BlockSign.java +++ b/src/game/java/net/minecraft/block/BlockSign.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSign extends BlockContainer { protected BlockSign() { @@ -45,6 +45,7 @@ public class BlockSign extends BlockContainer { this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return !this.func_181087_e(world, blockpos) && super.canPlaceBlockAt(world, blockpos); } @@ -53,18 +54,22 @@ public class BlockSign extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntitySign(); } + @Override public boolean func_181623_g() { return true; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.sign; } @@ -72,15 +77,18 @@ public class BlockSign extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.sign; } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getSelectedBoundingBox(world, blockpos); } + @Override public boolean isFullCube() { return false; } @@ -89,14 +97,17 @@ public class BlockSign extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess var1, BlockPos var2) { return true; } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -107,4 +118,4 @@ public class BlockSign extends BlockContainer { : false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSilverfish.java b/src/game/java/net/minecraft/block/BlockSilverfish.java index ad2b4fc8..b5672fa1 100644 --- a/src/game/java/net/minecraft/block/BlockSilverfish.java +++ b/src/game/java/net/minecraft/block/BlockSilverfish.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,39 +38,45 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSilverfish extends Block { public static enum EnumType implements IStringSerializable { STONE(0, "stone") { + @Override public IBlockState getModelBlock() { return Blocks.stone.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.STONE); } }, COBBLESTONE(1, "cobblestone", "cobble") { + @Override public IBlockState getModelBlock() { return Blocks.cobblestone.getDefaultState(); } }, STONEBRICK(2, "stone_brick", "brick") { + @Override public IBlockState getModelBlock() { return Blocks.stonebrick.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.DEFAULT); } }, MOSSY_STONEBRICK(3, "mossy_brick", "mossybrick") { + @Override public IBlockState getModelBlock() { return Blocks.stonebrick.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.MOSSY); } }, CRACKED_STONEBRICK(4, "cracked_brick", "crackedbrick") { + @Override public IBlockState getModelBlock() { return Blocks.stonebrick.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.CRACKED); } }, CHISELED_STONEBRICK(5, "chiseled_brick", "chiseledbrick") { + @Override public IBlockState getModelBlock() { return Blocks.stonebrick.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.CHISELED); @@ -128,6 +134,7 @@ public class BlockSilverfish extends Block { public abstract IBlockState getModelBlock(); + @Override public String getName() { return this.name; } @@ -136,6 +143,7 @@ public class BlockSilverfish extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -160,10 +168,12 @@ public class BlockSilverfish extends Block { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } + @Override protected ItemStack createStackedBlock(IBlockState iblockstate) { switch ((BlockSilverfish.EnumType) iblockstate.getValue(VARIANT)) { case COBBLESTONE: @@ -184,6 +194,7 @@ public class BlockSilverfish extends Block { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState var3, float var4, int var5) { if (!world.isRemote && world.getGameRules().getBoolean("doTileDrops")) { EntitySilverfish entitysilverfish = new EntitySilverfish(world); @@ -195,6 +206,7 @@ public class BlockSilverfish extends Block { } + @Override public int getDamageValue(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos); return iblockstate.getBlock().getMetaFromState(iblockstate); @@ -203,6 +215,7 @@ public class BlockSilverfish extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockSilverfish.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -210,6 +223,7 @@ public class BlockSilverfish extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockSilverfish.EnumType.byMetadata(i)); } @@ -218,6 +232,7 @@ public class BlockSilverfish extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockSilverfish.EnumType[] types = BlockSilverfish.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -229,7 +244,8 @@ public class BlockSilverfish extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSkull.java b/src/game/java/net/minecraft/block/BlockSkull.java index 8f5d0481..7c131bd7 100644 --- a/src/game/java/net/minecraft/block/BlockSkull.java +++ b/src/game/java/net/minecraft/block/BlockSkull.java @@ -39,13 +39,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -57,12 +57,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSkull extends BlockContainer { public static final PropertyDirection FACING = PropertyDirection.create("facing"); public static final PropertyBool NODROP = PropertyBool.create("nodrop"); private static final Predicate IS_WITHER_SKELETON = new Predicate() { + @Override public boolean apply(BlockWorldState blockworldstate) { return blockworldstate.getBlockState() != null && blockworldstate.getBlockState().getBlock() == Blocks.skull && blockworldstate.getTileEntity() instanceof TileEntitySkull @@ -79,6 +80,7 @@ public class BlockSkull extends BlockContainer { this.setBlockBounds(0.25F, 0.0F, 0.25F, 0.75F, 0.5F, 0.75F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { if (!world.isRemote) { if (!((Boolean) iblockstate.getValue(NODROP)).booleanValue()) { @@ -162,6 +164,7 @@ public class BlockSkull extends BlockContainer { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, NODROP }); } @@ -170,6 +173,7 @@ public class BlockSkull extends BlockContainer { * + Returns a new instance of a block's tile entity class. Called on placing * the block. */ + @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntitySkull(); } @@ -177,20 +181,24 @@ public class BlockSkull extends BlockContainer { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World var1, BlockPos var2, IBlockState var3, float var4, int var5) { } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); } + @Override public int getDamageValue(World world, BlockPos blockpos) { TileEntity tileentity = world.getTileEntity(blockpos); return tileentity instanceof TileEntitySkull ? ((TileEntitySkull) tileentity).getSkullType() : super.getDamageValue(world, blockpos); } + @Override public Item getItem(World var1, BlockPos var2) { return Items.skull; } @@ -198,6 +206,7 @@ public class BlockSkull extends BlockContainer { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.skull; } @@ -205,6 +214,7 @@ public class BlockSkull extends BlockContainer { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal("tile.skull.skeleton.name"); } @@ -212,6 +222,7 @@ public class BlockSkull extends BlockContainer { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); @@ -225,6 +236,7 @@ public class BlockSkull extends BlockContainer { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(i & 7)).withProperty(NODROP, Boolean.valueOf((i & 8) > 0)); @@ -251,6 +263,7 @@ public class BlockSkull extends BlockContainer { return this.witherPattern; } + @Override public boolean isFullCube() { return false; } @@ -259,10 +272,12 @@ public class BlockSkull extends BlockContainer { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { if (entityplayer.capabilities.isCreativeMode) { iblockstate = iblockstate.withProperty(NODROP, Boolean.valueOf(true)); @@ -276,12 +291,14 @@ public class BlockSkull extends BlockContainer { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing var3, float var4, float var5, float var6, int var7, EntityLivingBase entitylivingbase) { return this.getDefaultState().withProperty(FACING, entitylivingbase.getHorizontalFacing()).withProperty(NODROP, Boolean.valueOf(false)); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { switch ((EnumFacing) iblockaccess.getBlockState(blockpos).getValue(FACING)) { case UP: @@ -302,4 +319,4 @@ public class BlockSkull extends BlockContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSlab.java b/src/game/java/net/minecraft/block/BlockSlab.java index 3666936c..dd94754e 100644 --- a/src/game/java/net/minecraft/block/BlockSlab.java +++ b/src/game/java/net/minecraft/block/BlockSlab.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockSlab extends Block { public static enum EnumBlockHalf implements IStringSerializable { @@ -54,10 +54,12 @@ public abstract class BlockSlab extends Block { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -88,16 +90,19 @@ public abstract class BlockSlab extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBlockBoundsBasedOnState(world, blockpos); super.addCollisionBoxesToList(world, blockpos, iblockstate, axisalignedbb, list, entity); } + @Override protected boolean canSilkHarvest() { return false; } + @Override public int getDamageValue(World world, BlockPos blockpos) { return super.getDamageValue(world, blockpos) & 7; } @@ -110,6 +115,7 @@ public abstract class BlockSlab extends Block { public abstract boolean isDouble(); + @Override public boolean isFullCube() { return this.isDouble(); } @@ -118,10 +124,12 @@ public abstract class BlockSlab extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return this.isDouble(); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote && MinecraftServer.getServer().worldServers[0].getWorldInfo().getGameRulesInstance() @@ -139,6 +147,7 @@ public abstract class BlockSlab extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2, int i, EntityLivingBase entitylivingbase) { IBlockState iblockstate = super.onBlockPlaced(world, blockpos, enumfacing, f, f1, f2, i, entitylivingbase) @@ -151,10 +160,12 @@ public abstract class BlockSlab extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return this.isDouble() ? 2 : 1; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { if (this.isDouble()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); @@ -174,6 +185,7 @@ public abstract class BlockSlab extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { if (this.isDouble()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); @@ -183,6 +195,7 @@ public abstract class BlockSlab extends Block { } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { if (this.isDouble()) { return super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); @@ -207,4 +220,4 @@ public abstract class BlockSlab extends Block { : !isSlab(iblockstate.getBlock()) || flag)); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSlime.java b/src/game/java/net/minecraft/block/BlockSlime.java index 9a151e90..bdcf6597 100644 --- a/src/game/java/net/minecraft/block/BlockSlime.java +++ b/src/game/java/net/minecraft/block/BlockSlime.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSlime extends BlockBreakable { public BlockSlime() { @@ -38,6 +38,7 @@ public class BlockSlime extends BlockBreakable { this.slipperiness = 0.8F; } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } @@ -46,6 +47,7 @@ public class BlockSlime extends BlockBreakable { * + Triggered whenever an entity collides with this block (enters into the * block) */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, Entity entity) { if (Math.abs(entity.motionY) < 0.1D && !entity.isSneaking()) { double d0 = 0.4D + Math.abs(entity.motionY) * 0.2D; @@ -59,6 +61,7 @@ public class BlockSlime extends BlockBreakable { /** * + Block's chance to react to a living entity falling on it. */ + @Override public void onFallenUpon(World world, BlockPos blockpos, Entity entity, float f) { if (entity.isSneaking()) { super.onFallenUpon(world, blockpos, entity, f); @@ -72,6 +75,7 @@ public class BlockSlime extends BlockBreakable { * + Called when an Entity lands on this Block. This method *must* update * motionY because the entity will not do that on its own */ + @Override public void onLanded(World world, Entity entity) { if (entity.isSneaking()) { super.onLanded(world, entity); @@ -80,4 +84,4 @@ public class BlockSlime extends BlockBreakable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSnow.java b/src/game/java/net/minecraft/block/BlockSnow.java index 6cd34e13..18aff6dc 100644 --- a/src/game/java/net/minecraft/block/BlockSnow.java +++ b/src/game/java/net/minecraft/block/BlockSnow.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSnow extends Block { public static final PropertyInteger LAYERS = PropertyInteger.create("layers", 1, 8); @@ -56,6 +56,7 @@ public class BlockSnow extends Block { this.setBlockBoundsForItemRender(); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos.down()); Block block = iblockstate.getBlock(); @@ -75,6 +76,7 @@ public class BlockSnow extends Block { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { LAYERS }); } @@ -83,6 +85,7 @@ public class BlockSnow extends Block { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, (float) parInt1 / 8.0F, 1.0F); } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState iblockstate) { int i = ((Integer) iblockstate.getValue(LAYERS)).intValue() - 1; float f = 0.125F; @@ -94,6 +97,7 @@ public class BlockSnow extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.snowball; } @@ -101,6 +105,7 @@ public class BlockSnow extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(LAYERS)).intValue() - 1; } @@ -108,10 +113,12 @@ public class BlockSnow extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(LAYERS, Integer.valueOf((i & 7) + 1)); } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity var5) { spawnAsEntity(world, blockpos, @@ -120,6 +127,7 @@ public class BlockSnow extends Block { entityplayer.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); } + @Override public boolean isFullCube() { return false; } @@ -128,10 +136,12 @@ public class BlockSnow extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess iblockaccess, BlockPos blockpos) { return ((Integer) iblockaccess.getBlockState(blockpos).getValue(LAYERS)).intValue() < 5; } @@ -140,6 +150,7 @@ public class BlockSnow extends Block { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World world, BlockPos blockpos) { return ((Integer) world.getBlockState(blockpos).getValue(LAYERS)).intValue() == 1; } @@ -147,6 +158,7 @@ public class BlockSnow extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.checkAndDropBlock(world, blockpos, iblockstate); } @@ -154,10 +166,12 @@ public class BlockSnow extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); this.getBoundsForLayers(((Integer) iblockstate.getValue(LAYERS)).intValue()); @@ -166,14 +180,17 @@ public class BlockSnow extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.getBoundsForLayers(0); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return enumfacing == EnumFacing.UP ? true : super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (world.getLightFor(EnumSkyBlock.BLOCK, blockpos) > 11) { this.dropBlockAsItem(world, blockpos, world.getBlockState(blockpos), 0); @@ -181,4 +198,4 @@ public class BlockSnow extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSnowBlock.java b/src/game/java/net/minecraft/block/BlockSnowBlock.java index eb264115..7aaf042e 100644 --- a/src/game/java/net/minecraft/block/BlockSnowBlock.java +++ b/src/game/java/net/minecraft/block/BlockSnowBlock.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSnowBlock extends Block { protected BlockSnowBlock() { @@ -43,6 +43,7 @@ public class BlockSnowBlock extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.snowball; } @@ -50,10 +51,12 @@ public class BlockSnowBlock extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 4; } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (world.getLightFor(EnumSkyBlock.BLOCK, blockpos) > 11) { this.dropBlockAsItem(world, blockpos, world.getBlockState(blockpos), 0); @@ -61,4 +64,4 @@ public class BlockSnowBlock extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSoulSand.java b/src/game/java/net/minecraft/block/BlockSoulSand.java index 6d5e2437..239868f4 100644 --- a/src/game/java/net/minecraft/block/BlockSoulSand.java +++ b/src/game/java/net/minecraft/block/BlockSoulSand.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSoulSand extends Block { public BlockSoulSand() { @@ -38,6 +38,7 @@ public class BlockSoulSand extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos blockpos, IBlockState var3) { float f = 0.125F; return new AxisAlignedBB((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ(), @@ -48,8 +49,9 @@ public class BlockSoulSand extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World var1, BlockPos var2, IBlockState var3, Entity entity) { entity.motionX *= 0.4D; entity.motionZ *= 0.4D; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSourceImpl.java b/src/game/java/net/minecraft/block/BlockSourceImpl.java index fbea7fb5..c94f9951 100644 --- a/src/game/java/net/minecraft/block/BlockSourceImpl.java +++ b/src/game/java/net/minecraft/block/BlockSourceImpl.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSourceImpl implements IBlockSource { private final World worldObj; @@ -38,32 +38,39 @@ public class BlockSourceImpl implements IBlockSource { this.pos = posIn; } + @Override public int getBlockMetadata() { IBlockState iblockstate = this.worldObj.getBlockState(this.pos); return iblockstate.getBlock().getMetaFromState(iblockstate); } + @Override public BlockPos getBlockPos() { return this.pos; } + @Override public T getBlockTileEntity() { return (T) this.worldObj.getTileEntity(this.pos); } + @Override public World getWorld() { return this.worldObj; } + @Override public double getX() { return (double) this.pos.getX() + 0.5D; } + @Override public double getY() { return (double) this.pos.getY() + 0.5D; } + @Override public double getZ() { return (double) this.pos.getZ() + 0.5D; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockSponge.java b/src/game/java/net/minecraft/block/BlockSponge.java index dc248859..d14cf9c6 100644 --- a/src/game/java/net/minecraft/block/BlockSponge.java +++ b/src/game/java/net/minecraft/block/BlockSponge.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockSponge extends Block { public static final PropertyBool WET = PropertyBool.create("wet"); @@ -92,6 +92,7 @@ public class BlockSponge extends Block { return i > 0; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { WET }); } @@ -101,6 +102,7 @@ public class BlockSponge extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(WET)).booleanValue() ? 1 : 0; } @@ -108,6 +110,7 @@ public class BlockSponge extends Block { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal(this.getUnlocalizedName() + ".dry.name"); } @@ -115,6 +118,7 @@ public class BlockSponge extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(WET)).booleanValue() ? 1 : 0; } @@ -122,6 +126,7 @@ public class BlockSponge extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(WET, Boolean.valueOf((i & 1) == 1)); } @@ -130,11 +135,13 @@ public class BlockSponge extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, 0)); list.add(new ItemStack(item, 1, 1)); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.tryAbsorb(world, blockpos, iblockstate); } @@ -142,11 +149,13 @@ public class BlockSponge extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { this.tryAbsorb(world, blockpos, iblockstate); super.onNeighborBlockChange(world, blockpos, iblockstate, block); } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (((Boolean) iblockstate.getValue(WET)).booleanValue()) { EnumFacing enumfacing = EnumFacing.random(random); @@ -190,4 +199,4 @@ public class BlockSponge extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStainedGlass.java b/src/game/java/net/minecraft/block/BlockStainedGlass.java index 6e3c8fcd..164b26d1 100644 --- a/src/game/java/net/minecraft/block/BlockStainedGlass.java +++ b/src/game/java/net/minecraft/block/BlockStainedGlass.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStainedGlass extends BlockBreakable { public static final PropertyEnum COLOR = PropertyEnum.create("color", @@ -50,16 +50,19 @@ public class BlockStainedGlass extends BlockBreakable { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { if (!world.isRemote) { BlockBeacon.updateColorAsync(world, blockpos); } } + @Override protected boolean canSilkHarvest() { return true; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { COLOR }); } @@ -69,10 +72,12 @@ public class BlockStainedGlass extends BlockBreakable { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } @@ -80,6 +85,7 @@ public class BlockStainedGlass extends BlockBreakable { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMapColor(); } @@ -87,6 +93,7 @@ public class BlockStainedGlass extends BlockBreakable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -94,6 +101,7 @@ public class BlockStainedGlass extends BlockBreakable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(i)); } @@ -102,6 +110,7 @@ public class BlockStainedGlass extends BlockBreakable { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { EnumDyeColor[] colors = EnumDyeColor.META_LOOKUP; for (int i = 0; i < colors.length; ++i) { @@ -110,10 +119,12 @@ public class BlockStainedGlass extends BlockBreakable { } + @Override public boolean isFullCube() { return false; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { if (!world.isRemote) { BlockBeacon.updateColorAsync(world, blockpos); @@ -123,7 +134,8 @@ public class BlockStainedGlass extends BlockBreakable { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStainedGlassPane.java b/src/game/java/net/minecraft/block/BlockStainedGlassPane.java index bc6db752..e1eaf385 100644 --- a/src/game/java/net/minecraft/block/BlockStainedGlassPane.java +++ b/src/game/java/net/minecraft/block/BlockStainedGlassPane.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStainedGlassPane extends BlockPane { public static final PropertyEnum COLOR = PropertyEnum.create("color", @@ -51,12 +51,14 @@ public class BlockStainedGlassPane extends BlockPane { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { if (!world.isRemote) { BlockBeacon.updateColorAsync(world, blockpos); } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { NORTH, EAST, WEST, SOUTH, COLOR }); } @@ -66,10 +68,12 @@ public class BlockStainedGlassPane extends BlockPane { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } @@ -77,6 +81,7 @@ public class BlockStainedGlassPane extends BlockPane { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMapColor(); } @@ -84,6 +89,7 @@ public class BlockStainedGlassPane extends BlockPane { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumDyeColor) iblockstate.getValue(COLOR)).getMetadata(); } @@ -91,6 +97,7 @@ public class BlockStainedGlassPane extends BlockPane { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(i)); } @@ -99,6 +106,7 @@ public class BlockStainedGlassPane extends BlockPane { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { for (int i = 0; i < EnumDyeColor.META_LOOKUP.length; ++i) { list.add(new ItemStack(item, 1, i)); @@ -106,9 +114,10 @@ public class BlockStainedGlassPane extends BlockPane { } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { if (!world.isRemote) { BlockBeacon.updateColorAsync(world, blockpos); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStairs.java b/src/game/java/net/minecraft/block/BlockStairs.java index 8db9953c..33396077 100644 --- a/src/game/java/net/minecraft/block/BlockStairs.java +++ b/src/game/java/net/minecraft/block/BlockStairs.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStairs extends Block { public static enum EnumHalf implements IStringSerializable { @@ -61,10 +61,12 @@ public class BlockStairs extends Block { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -80,10 +82,12 @@ public class BlockStairs extends Block { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -146,6 +150,7 @@ public class BlockStairs extends Block { * + Add all collision boxes of this Block to the list that intersect with the * given mask. */ + @Override public void addCollisionBoxesToList(World world, BlockPos blockpos, IBlockState iblockstate, AxisAlignedBB axisalignedbb, List list, Entity entity) { this.setBaseCollisionBounds(world, blockpos); @@ -159,14 +164,17 @@ public class BlockStairs extends Block { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState var3) { this.modelBlock.breakBlock(world, blockpos, this.modelState); } + @Override public boolean canCollideCheck(IBlockState iblockstate, boolean flag) { return this.modelBlock.canCollideCheck(iblockstate, flag); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { return this.modelBlock.canPlaceBlockAt(world, blockpos); } @@ -175,6 +183,7 @@ public class BlockStairs extends Block { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World world, BlockPos blockpos, Vec3 vec3, Vec3 vec31) { MovingObjectPosition[] amovingobjectposition = new MovingObjectPosition[8]; IBlockState iblockstate = world.getBlockState(blockpos); @@ -211,6 +220,7 @@ public class BlockStairs extends Block { return movingobjectposition1; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, HALF, SHAPE }); } @@ -510,6 +520,7 @@ public class BlockStairs extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { if (this.func_176306_h(iblockaccess, blockpos)) { switch (this.func_176305_g(iblockaccess, blockpos)) { @@ -538,6 +549,7 @@ public class BlockStairs extends Block { return iblockstate; } + @Override public EnumWorldBlockLayer getBlockLayer() { return this.modelBlock.getBlockLayer(); } @@ -546,6 +558,7 @@ public class BlockStairs extends Block { * + Returns how much this block can resist explosions from the passed in * entity. */ + @Override public float getExplosionResistance(Entity entity) { return this.modelBlock.getExplosionResistance(entity); } @@ -553,6 +566,7 @@ public class BlockStairs extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState var1) { return this.modelBlock.getMapColor(this.modelState); } @@ -560,6 +574,7 @@ public class BlockStairs extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; if (iblockstate.getValue(HALF) == BlockStairs.EnumHalf.TOP) { @@ -570,10 +585,12 @@ public class BlockStairs extends Block { return i; } + @Override public int getMixedBrightnessForBlock(IBlockAccess iblockaccess, BlockPos blockpos) { return this.modelBlock.getMixedBrightnessForBlock(iblockaccess, blockpos); } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { return this.modelBlock.getSelectedBoundingBox(world, blockpos); } @@ -581,6 +598,7 @@ public class BlockStairs extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(HALF, (i & 4) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM); @@ -591,10 +609,12 @@ public class BlockStairs extends Block { /** * + Returns if this block is collidable (only used by Fire). Args: x, y, z */ + @Override public boolean isCollidable() { return this.modelBlock.isCollidable(); } + @Override public boolean isFullCube() { return false; } @@ -603,14 +623,17 @@ public class BlockStairs extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public Vec3 modifyAcceleration(World world, BlockPos blockpos, Entity entity, Vec3 vec3) { return this.modelBlock.modifyAcceleration(world, blockpos, entity, vec3); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (!world.isRemote && MinecraftServer.getServer().worldServers[0].getWorldInfo().getGameRulesInstance() @@ -625,11 +648,13 @@ public class BlockStairs extends Block { 0.0F, 0.0F); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState var3) { this.onNeighborBlockChange(world, blockpos, this.modelState, Blocks.air); this.modelBlock.onBlockAdded(world, blockpos, this.modelState); } + @Override public void onBlockClicked(World world, BlockPos blockpos, EntityPlayer entityplayer) { this.modelBlock.onBlockClicked(world, blockpos, entityplayer); } @@ -637,6 +662,7 @@ public class BlockStairs extends Block { /** * + Called when this Block is destroyed by an Explosion */ + @Override public void onBlockDestroyedByExplosion(World world, BlockPos blockpos, Explosion explosion) { this.modelBlock.onBlockDestroyedByExplosion(world, blockpos, explosion); } @@ -644,6 +670,7 @@ public class BlockStairs extends Block { /** * + Called when a player destroys this Block */ + @Override public void onBlockDestroyedByPlayer(World world, BlockPos blockpos, IBlockState iblockstate) { this.modelBlock.onBlockDestroyedByPlayer(world, blockpos, iblockstate); } @@ -652,6 +679,7 @@ public class BlockStairs extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2, int i, EntityLivingBase entitylivingbase) { IBlockState iblockstate = super.onBlockPlaced(world, blockpos, enumfacing, f, f1, f2, i, entitylivingbase); @@ -666,10 +694,12 @@ public class BlockStairs extends Block { * + Triggered whenever an entity collides with this block (enters into the * block) */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, Entity entity) { this.modelBlock.onEntityCollidedWithBlock(world, blockpos, entity); } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { this.modelBlock.randomDisplayTick(world, blockpos, iblockstate, random); } @@ -687,6 +717,7 @@ public class BlockStairs extends Block { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { if (this.hasRaytraced) { this.setBlockBounds(0.5F * (float) (this.rayTracePass % 2), 0.5F * (float) (this.rayTracePass / 4 % 2), @@ -702,11 +733,13 @@ public class BlockStairs extends Block { /** * + How many world ticks before ticking */ + @Override public int tickRate(World world) { return this.modelBlock.tickRate(world); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { this.modelBlock.updateTick(world, blockpos, iblockstate, random); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStandingSign.java b/src/game/java/net/minecraft/block/BlockStandingSign.java index c46b0b5d..8bbd43ca 100644 --- a/src/game/java/net/minecraft/block/BlockStandingSign.java +++ b/src/game/java/net/minecraft/block/BlockStandingSign.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStandingSign extends BlockSign { public static final PropertyInteger ROTATION = PropertyInteger.create("rotation", 0, 15); @@ -37,6 +37,7 @@ public class BlockStandingSign extends BlockSign { this.setDefaultState(this.blockState.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { ROTATION }); } @@ -44,6 +45,7 @@ public class BlockStandingSign extends BlockSign { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(ROTATION)).intValue(); } @@ -51,6 +53,7 @@ public class BlockStandingSign extends BlockSign { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(i)); } @@ -58,6 +61,7 @@ public class BlockStandingSign extends BlockSign { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (!world.getBlockState(blockpos.down()).getBlock().getMaterial().isSolid()) { this.dropBlockAsItem(world, blockpos, iblockstate, 0); @@ -66,4 +70,4 @@ public class BlockStandingSign extends BlockSign { super.onNeighborBlockChange(world, blockpos, iblockstate, block); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStaticLiquid.java b/src/game/java/net/minecraft/block/BlockStaticLiquid.java index 825639b8..cbeaec73 100644 --- a/src/game/java/net/minecraft/block/BlockStaticLiquid.java +++ b/src/game/java/net/minecraft/block/BlockStaticLiquid.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStaticLiquid extends BlockLiquid { protected BlockStaticLiquid(Material materialIn) { @@ -60,6 +60,7 @@ public class BlockStaticLiquid extends BlockLiquid { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!this.checkForMixing(world, blockpos, iblockstate)) { this.updateLiquid(world, blockpos, iblockstate); @@ -73,6 +74,7 @@ public class BlockStaticLiquid extends BlockLiquid { worldIn.scheduleUpdate(pos, blockdynamicliquid, this.tickRate(worldIn)); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom random) { if (this.blockMaterial == Material.lava) { if (world.getGameRules().getBoolean("doFireTick")) { @@ -104,4 +106,4 @@ public class BlockStaticLiquid extends BlockLiquid { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStem.java b/src/game/java/net/minecraft/block/BlockStem.java index e41ee210..400e3829 100644 --- a/src/game/java/net/minecraft/block/BlockStem.java +++ b/src/game/java/net/minecraft/block/BlockStem.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,11 +41,12 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStem extends BlockBush implements IGrowable { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7); public static final PropertyDirection FACING = PropertyDirection.create("facing", new Predicate() { + @Override public boolean apply(EnumFacing enumfacing) { return enumfacing != EnumFacing.DOWN; } @@ -65,6 +66,7 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState iblockstate, boolean var4) { return ((Integer) iblockstate.getValue(AGE)).intValue() != 7; } @@ -72,18 +74,22 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + is the block grass, dirt or farmland */ + @Override protected boolean canPlaceBlockOn(Block block) { return block == Blocks.farmland; } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return this.getRenderColor(iblockaccess.getBlockState(blockpos)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { AGE, FACING }); } @@ -91,6 +97,7 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Spawns this Block's drops into the World as EntityItems. */ + @Override public void dropBlockAsItemWithChance(World world, BlockPos blockpos, IBlockState iblockstate, float f, int i) { super.dropBlockAsItemWithChance(world, blockpos, iblockstate, f, i); if (!world.isRemote) { @@ -112,6 +119,7 @@ public class BlockStem extends BlockBush implements IGrowable { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { iblockstate = iblockstate.withProperty(FACING, EnumFacing.UP); @@ -128,6 +136,7 @@ public class BlockStem extends BlockBush implements IGrowable { return iblockstate; } + @Override public Item getItem(World var1, BlockPos var2) { Item item = this.getSeedItem(); return item != null ? item : null; @@ -136,6 +145,7 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -143,10 +153,12 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Integer) iblockstate.getValue(AGE)).intValue(); } + @Override public int getRenderColor(IBlockState iblockstate) { if (iblockstate.getBlock() != this) { return super.getRenderColor(iblockstate); @@ -167,10 +179,12 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(AGE, Integer.valueOf(i)); } + @Override public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState iblockstate) { this.growStem(world, blockpos, iblockstate); } @@ -180,6 +194,7 @@ public class BlockStem extends BlockBush implements IGrowable { worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(Math.min(7, i))), 2); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.maxY = (double) ((float) (((Integer) iblockaccess.getBlockState(blockpos).getValue(AGE)).intValue() * 2 + 2) / 16.0F); @@ -190,11 +205,13 @@ public class BlockStem extends BlockBush implements IGrowable { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.125F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.25F, 0.5F + f); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { super.updateTick(world, blockpos, iblockstate, random); if (world.getLightFromNeighbors(blockpos.up()) >= 9) { @@ -223,4 +240,4 @@ public class BlockStem extends BlockBush implements IGrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStone.java b/src/game/java/net/minecraft/block/BlockStone.java index ce357db9..a82b10b1 100644 --- a/src/game/java/net/minecraft/block/BlockStone.java +++ b/src/game/java/net/minecraft/block/BlockStone.java @@ -19,13 +19,13 @@ import net.minecraft.util.StatCollector; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.StatCollector; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStone extends Block { public static enum EnumType implements IStringSerializable { @@ -91,6 +91,7 @@ public class BlockStone extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -99,6 +100,7 @@ public class BlockStone extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -116,6 +118,7 @@ public class BlockStone extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } @@ -125,6 +128,7 @@ public class BlockStone extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockStone.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -132,6 +136,7 @@ public class BlockStone extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return iblockstate.getValue(VARIANT) == BlockStone.EnumType.STONE ? Item.getItemFromBlock(Blocks.cobblestone) : Item.getItemFromBlock(Blocks.stone); @@ -140,6 +145,7 @@ public class BlockStone extends Block { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal( this.getUnlocalizedName() + "." + BlockStone.EnumType.STONE.getUnlocalizedName() + ".name"); @@ -148,6 +154,7 @@ public class BlockStone extends Block { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockStone.EnumType) iblockstate.getValue(VARIANT)).func_181072_c(); } @@ -155,6 +162,7 @@ public class BlockStone extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockStone.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -162,6 +170,7 @@ public class BlockStone extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockStone.EnumType.byMetadata(i)); } @@ -170,6 +179,7 @@ public class BlockStone extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockStone.EnumType[] types = BlockStone.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -177,4 +187,4 @@ public class BlockStone extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStoneBrick.java b/src/game/java/net/minecraft/block/BlockStoneBrick.java index 36584068..ac701754 100644 --- a/src/game/java/net/minecraft/block/BlockStoneBrick.java +++ b/src/game/java/net/minecraft/block/BlockStoneBrick.java @@ -15,13 +15,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStoneBrick extends Block { public static enum EnumType implements IStringSerializable { @@ -73,6 +73,7 @@ public class BlockStoneBrick extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -81,6 +82,7 @@ public class BlockStoneBrick extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -103,6 +105,7 @@ public class BlockStoneBrick extends Block { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { VARIANT }); } @@ -112,6 +115,7 @@ public class BlockStoneBrick extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockStoneBrick.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -119,6 +123,7 @@ public class BlockStoneBrick extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockStoneBrick.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -126,6 +131,7 @@ public class BlockStoneBrick extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockStoneBrick.EnumType.byMetadata(i)); } @@ -134,6 +140,7 @@ public class BlockStoneBrick extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockStoneBrick.EnumType[] types = BlockStoneBrick.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -141,4 +148,4 @@ public class BlockStoneBrick extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStoneSlab.java b/src/game/java/net/minecraft/block/BlockStoneSlab.java index bca27b17..49736a71 100644 --- a/src/game/java/net/minecraft/block/BlockStoneSlab.java +++ b/src/game/java/net/minecraft/block/BlockStoneSlab.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockStoneSlab extends BlockSlab { public static enum EnumType implements IStringSerializable { @@ -92,6 +92,7 @@ public abstract class BlockStoneSlab extends BlockSlab { return this.meta; } + @Override public String getName() { return this.name; } @@ -103,6 +104,7 @@ public abstract class BlockStoneSlab extends BlockSlab { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -129,6 +131,7 @@ public abstract class BlockStoneSlab extends BlockSlab { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return this.isDouble() ? new BlockState(this, new IProperty[] { SEAMLESS, VARIANT }) : new BlockState(this, new IProperty[] { HALF, VARIANT }); @@ -139,10 +142,12 @@ public abstract class BlockStoneSlab extends BlockSlab { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockStoneSlab.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.stone_slab); } @@ -150,6 +155,7 @@ public abstract class BlockStoneSlab extends BlockSlab { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.stone_slab); } @@ -157,6 +163,7 @@ public abstract class BlockStoneSlab extends BlockSlab { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockStoneSlab.EnumType) iblockstate.getValue(VARIANT)).func_181074_c(); } @@ -164,6 +171,7 @@ public abstract class BlockStoneSlab extends BlockSlab { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockStoneSlab.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -181,6 +189,7 @@ public abstract class BlockStoneSlab extends BlockSlab { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockStoneSlab.EnumType.byMetadata(i & 7)); @@ -198,6 +207,7 @@ public abstract class BlockStoneSlab extends BlockSlab { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { if (item != Item.getItemFromBlock(Blocks.double_stone_slab)) { BlockStoneSlab.EnumType[] types = BlockStoneSlab.EnumType.META_LOOKUP; @@ -214,15 +224,18 @@ public abstract class BlockStoneSlab extends BlockSlab { /** * + Returns the slab block name with the type associated with it */ + @Override public String getUnlocalizedName(int i) { return super.getUnlocalizedName() + "." + BlockStoneSlab.EnumType.byMetadata(i).getUnlocalizedName(); } + @Override public Object getVariant(ItemStack itemstack) { return BlockStoneSlab.EnumType.byMetadata(itemstack.getMetadata() & 7); } + @Override public IProperty getVariantProperty() { return VARIANT; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockStoneSlabNew.java b/src/game/java/net/minecraft/block/BlockStoneSlabNew.java index 998faa38..124c7cc9 100644 --- a/src/game/java/net/minecraft/block/BlockStoneSlabNew.java +++ b/src/game/java/net/minecraft/block/BlockStoneSlabNew.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockStoneSlabNew extends BlockSlab { public static enum EnumType implements IStringSerializable { @@ -83,6 +83,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { return this.meta; } + @Override public String getName() { return this.name; } @@ -94,6 +95,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { return this.name; } + @Override public String toString() { return this.name; } @@ -120,6 +122,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return this.isDouble() ? new BlockState(this, new IProperty[] { SEAMLESS, VARIANT }) : new BlockState(this, new IProperty[] { HALF, VARIANT }); @@ -130,10 +133,12 @@ public abstract class BlockStoneSlabNew extends BlockSlab { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockStoneSlabNew.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.stone_slab2); } @@ -141,6 +146,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.stone_slab2); } @@ -148,6 +154,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal(this.getUnlocalizedName() + ".red_sandstone.name"); } @@ -155,6 +162,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockStoneSlabNew.EnumType) iblockstate.getValue(VARIANT)).func_181068_c(); } @@ -162,6 +170,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockStoneSlabNew.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -179,6 +188,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockStoneSlabNew.EnumType.byMetadata(i & 7)); @@ -196,6 +206,7 @@ public abstract class BlockStoneSlabNew extends BlockSlab { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { if (item != Item.getItemFromBlock(Blocks.double_stone_slab2)) { BlockStoneSlabNew.EnumType[] types = BlockStoneSlabNew.EnumType.META_LOOKUP; @@ -209,15 +220,18 @@ public abstract class BlockStoneSlabNew extends BlockSlab { /** * + Returns the slab block name with the type associated with it */ + @Override public String getUnlocalizedName(int i) { return super.getUnlocalizedName() + "." + BlockStoneSlabNew.EnumType.byMetadata(i).getUnlocalizedName(); } + @Override public Object getVariant(ItemStack itemstack) { return BlockStoneSlabNew.EnumType.byMetadata(itemstack.getMetadata() & 7); } + @Override public IProperty getVariantProperty() { return VARIANT; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTNT.java b/src/game/java/net/minecraft/block/BlockTNT.java index f1dcc0a7..7681eef0 100644 --- a/src/game/java/net/minecraft/block/BlockTNT.java +++ b/src/game/java/net/minecraft/block/BlockTNT.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTNT extends Block { public static final PropertyBool EXPLODE = PropertyBool.create("explode"); @@ -53,10 +53,12 @@ public class BlockTNT extends Block { /** * + Return whether this block can drop from an explosion. */ + @Override public boolean canDropFromExplosion(Explosion var1) { return false; } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { EXPLODE }); } @@ -75,6 +77,7 @@ public class BlockTNT extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((Boolean) iblockstate.getValue(EXPLODE)).booleanValue() ? 1 : 0; } @@ -82,10 +85,12 @@ public class BlockTNT extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(EXPLODE, Boolean.valueOf((i & 1) > 0)); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing enumfacing, float f, float f1, float f2) { if (entityplayer.getCurrentEquippedItem() != null) { @@ -106,6 +111,7 @@ public class BlockTNT extends Block { return super.onBlockActivated(world, blockpos, iblockstate, entityplayer, enumfacing, f, f1, f2); } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { super.onBlockAdded(world, blockpos, iblockstate); if (world.isBlockPowered(blockpos)) { @@ -118,6 +124,7 @@ public class BlockTNT extends Block { /** * + Called when this Block is destroyed by an Explosion */ + @Override public void onBlockDestroyedByExplosion(World world, BlockPos blockpos, Explosion explosion) { if (!world.isRemote) { EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockpos.getX() + 0.5F), @@ -131,6 +138,7 @@ public class BlockTNT extends Block { /** * + Called when a player destroys this Block */ + @Override public void onBlockDestroyedByPlayer(World world, BlockPos blockpos, IBlockState iblockstate) { this.explode(world, blockpos, iblockstate, (EntityLivingBase) null); } @@ -138,6 +146,7 @@ public class BlockTNT extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, IBlockState var3, Entity entity) { if (!world.isRemote && entity instanceof EntityArrow) { EntityArrow entityarrow = (EntityArrow) entity; @@ -156,6 +165,7 @@ public class BlockTNT extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (world.isBlockPowered(blockpos)) { this.onBlockDestroyedByPlayer(world, blockpos, iblockstate.withProperty(EXPLODE, Boolean.valueOf(true))); @@ -163,4 +173,4 @@ public class BlockTNT extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTallGrass.java b/src/game/java/net/minecraft/block/BlockTallGrass.java index d802adfb..c9168824 100644 --- a/src/game/java/net/minecraft/block/BlockTallGrass.java +++ b/src/game/java/net/minecraft/block/BlockTallGrass.java @@ -25,13 +25,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTallGrass extends BlockBush implements IGrowable { public static enum EnumType implements IStringSerializable { @@ -79,10 +79,12 @@ public class BlockTallGrass extends BlockBush implements IGrowable { return this.meta; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -101,6 +103,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f); } + @Override public boolean canBlockStay(World world, BlockPos blockpos, IBlockState var3) { return this.canPlaceBlockOn(world.getBlockState(blockpos.down()).getBlock()); } @@ -108,26 +111,32 @@ public class BlockTallGrass extends BlockBush implements IGrowable { /** * + Whether this IGrowable can grow */ + @Override public boolean canGrow(World var1, BlockPos var2, IBlockState iblockstate, boolean var4) { return iblockstate.getValue(TYPE) != BlockTallGrass.EnumType.DEAD_BUSH; } + @Override public boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4) { return true; } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return iblockaccess.getBiomeGenForCoords(blockpos).getGrassColorAtPos(blockpos); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { TYPE }); } + @Override public int getBlockColor() { return ColorizerGrass.getGrassColor(0.5D, 1.0D); } + @Override public int getDamageValue(World world, BlockPos blockpos) { IBlockState iblockstate = world.getBlockState(blockpos); return iblockstate.getBlock().getMetaFromState(iblockstate); @@ -136,6 +145,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom random, int var3) { return random.nextInt(8) == 0 ? Items.wheat_seeds : null; } @@ -143,6 +153,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockTallGrass.EnumType) iblockstate.getValue(TYPE)).getMeta(); } @@ -151,10 +162,12 @@ public class BlockTallGrass extends BlockBush implements IGrowable { * + Get the OffsetType for this Block. Determines if the model is rendered * slightly offset. */ + @Override public Block.EnumOffsetType getOffsetType() { return Block.EnumOffsetType.XYZ; } + @Override public int getRenderColor(IBlockState iblockstate) { if (iblockstate.getBlock() != this) { return super.getRenderColor(iblockstate); @@ -168,6 +181,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(TYPE, BlockTallGrass.EnumType.byMetadata(i)); } @@ -176,6 +190,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { for (int i = 1; i < 3; ++i) { list.add(new ItemStack(item, 1, i)); @@ -183,6 +198,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { } + @Override public void grow(World world, EaglercraftRandom var2, BlockPos blockpos, IBlockState iblockstate) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.GRASS; if (iblockstate.getValue(TYPE) == BlockTallGrass.EnumType.FERN) { @@ -195,6 +211,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (!world.isRemote && entityplayer.getCurrentEquippedItem() != null @@ -212,6 +229,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World var1, BlockPos var2) { return true; } @@ -219,7 +237,8 @@ public class BlockTallGrass extends BlockBush implements IGrowable { /** * + Get the quantity dropped based on the given fortune level */ + @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { return 1 + random.nextInt(i * 2 + 1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTorch.java b/src/game/java/net/minecraft/block/BlockTorch.java index df16b46c..fe4a3a91 100644 --- a/src/game/java/net/minecraft/block/BlockTorch.java +++ b/src/game/java/net/minecraft/block/BlockTorch.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,10 +41,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTorch extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing", new Predicate() { + @Override public boolean apply(EnumFacing enumfacing) { return enumfacing != EnumFacing.DOWN; } @@ -64,6 +65,7 @@ public class BlockTorch extends Block { || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { for (EnumFacing enumfacing : FACING.getAllowedValues()) { if (this.canPlaceAt(world, blockpos, enumfacing)) { @@ -101,6 +103,7 @@ public class BlockTorch extends Block { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World world, BlockPos blockpos, Vec3 vec3, Vec3 vec31) { EnumFacing enumfacing = (EnumFacing) world.getBlockState(blockpos).getValue(FACING); float f = 0.15F; @@ -120,14 +123,17 @@ public class BlockTorch extends Block { return super.collisionRayTrace(world, blockpos, vec3, vec31); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -135,6 +141,7 @@ public class BlockTorch extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; switch ((EnumFacing) iblockstate.getValue(FACING)) { @@ -162,6 +169,7 @@ public class BlockTorch extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState(); switch (i) { @@ -185,6 +193,7 @@ public class BlockTorch extends Block { return iblockstate; } + @Override public boolean isFullCube() { return false; } @@ -193,10 +202,12 @@ public class BlockTorch extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { this.checkForDrop(world, blockpos, iblockstate); } @@ -205,6 +216,7 @@ public class BlockTorch extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World world, BlockPos blockpos, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { if (this.canPlaceAt(world, blockpos, enumfacing)) { @@ -225,6 +237,7 @@ public class BlockTorch extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { this.onNeighborChangeInternal(world, blockpos, iblockstate); } @@ -253,6 +266,7 @@ public class BlockTorch extends Block { } } + @Override public void randomDisplayTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); double d0 = (double) blockpos.getX() + 0.5D; @@ -272,4 +286,4 @@ public class BlockTorch extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTrapDoor.java b/src/game/java/net/minecraft/block/BlockTrapDoor.java index a467c40d..cba155d9 100644 --- a/src/game/java/net/minecraft/block/BlockTrapDoor.java +++ b/src/game/java/net/minecraft/block/BlockTrapDoor.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTrapDoor extends Block { public static enum DoorHalf implements IStringSerializable { @@ -54,10 +54,12 @@ public class BlockTrapDoor extends Block { this.name = name; } + @Override public String getName() { return this.name; } + @Override public String toString() { return this.name; } @@ -118,6 +120,7 @@ public class BlockTrapDoor extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World world, BlockPos blockpos, EnumFacing enumfacing) { return !enumfacing.getAxis().isVertical() && isValidSupportBlock(world.getBlockState(blockpos.offset(enumfacing.getOpposite())).getBlock()); @@ -127,19 +130,23 @@ public class BlockTrapDoor extends Block { * + Ray traces through the blocks collision from start vector to end vector * returning a ray trace hit. */ + @Override public MovingObjectPosition collisionRayTrace(World world, BlockPos blockpos, Vec3 vec3, Vec3 vec31) { this.setBlockBoundsBasedOnState(world, blockpos); return super.collisionRayTrace(world, blockpos, vec3, vec31); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, OPEN, HALF }); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getCollisionBoundingBox(world, blockpos, iblockstate); @@ -148,6 +155,7 @@ public class BlockTrapDoor extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | getMetaForFacing((EnumFacing) iblockstate.getValue(FACING)); @@ -162,6 +170,7 @@ public class BlockTrapDoor extends Block { return i; } + @Override public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { this.setBlockBoundsBasedOnState(world, blockpos); return super.getSelectedBoundingBox(world, blockpos); @@ -170,12 +179,14 @@ public class BlockTrapDoor extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, getFacing(i)) .withProperty(OPEN, Boolean.valueOf((i & 4) != 0)) .withProperty(HALF, (i & 8) == 0 ? BlockTrapDoor.DoorHalf.BOTTOM : BlockTrapDoor.DoorHalf.TOP); } + @Override public boolean isFullCube() { return false; } @@ -184,14 +195,17 @@ public class BlockTrapDoor extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess iblockaccess, BlockPos blockpos) { return !((Boolean) iblockaccess.getBlockState(blockpos).getValue(OPEN)).booleanValue(); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (this.blockMaterial == Material.iron) { @@ -209,6 +223,7 @@ public class BlockTrapDoor extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float f, float var6, int var7, EntityLivingBase var8) { IBlockState iblockstate = this.getDefaultState(); @@ -224,6 +239,7 @@ public class BlockTrapDoor extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (!world.isRemote) { BlockPos blockpos1 = blockpos.offset(((EnumFacing) iblockstate.getValue(FACING)).getOpposite()); @@ -243,6 +259,7 @@ public class BlockTrapDoor extends Block { } } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { this.setBounds(iblockaccess.getBlockState(blockpos)); } @@ -250,6 +267,7 @@ public class BlockTrapDoor extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { float f = 0.1875F; this.setBlockBounds(0.0F, 0.40625F, 0.0F, 1.0F, 0.59375F, 1.0F); @@ -287,4 +305,4 @@ public class BlockTrapDoor extends Block { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTripWire.java b/src/game/java/net/minecraft/block/BlockTripWire.java index cbdf0c11..ad4cea2c 100644 --- a/src/game/java/net/minecraft/block/BlockTripWire.java +++ b/src/game/java/net/minecraft/block/BlockTripWire.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTripWire extends Block { public static final PropertyBool POWERED = PropertyBool.create("powered"); @@ -80,10 +80,12 @@ public class BlockTripWire extends Block { this.setTickRandomly(true); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { this.notifyHook(world, blockpos, iblockstate.withProperty(POWERED, Boolean.valueOf(true))); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { POWERED, SUSPENDED, ATTACHED, DISARMED, NORTH, EAST, WEST, SOUTH }); @@ -93,6 +95,7 @@ public class BlockTripWire extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate .withProperty(NORTH, @@ -105,14 +108,17 @@ public class BlockTripWire extends Block { Boolean.valueOf(isConnectedTo(iblockaccess, blockpos, iblockstate, EnumFacing.WEST))); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.TRANSLUCENT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } + @Override public Item getItem(World var1, BlockPos var2) { return Items.string; } @@ -120,6 +126,7 @@ public class BlockTripWire extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.string; } @@ -127,6 +134,7 @@ public class BlockTripWire extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; if (((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { @@ -151,6 +159,7 @@ public class BlockTripWire extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWERED, Boolean.valueOf((i & 1) > 0)) .withProperty(SUSPENDED, Boolean.valueOf((i & 2) > 0)) @@ -158,6 +167,7 @@ public class BlockTripWire extends Block { .withProperty(DISARMED, Boolean.valueOf((i & 8) > 0)); } + @Override public boolean isFullCube() { return false; } @@ -166,6 +176,7 @@ public class BlockTripWire extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -190,6 +201,7 @@ public class BlockTripWire extends Block { } + @Override public void onBlockAdded(World world, BlockPos blockpos, IBlockState iblockstate) { iblockstate = iblockstate.withProperty(SUSPENDED, Boolean.valueOf(!World.doesBlockHaveSolidTopSurface(world, blockpos.down()))); @@ -197,6 +209,7 @@ public class BlockTripWire extends Block { this.notifyHook(world, blockpos, iblockstate); } + @Override public void onBlockHarvested(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer) { if (!world.isRemote) { if (entityplayer.getCurrentEquippedItem() != null @@ -209,6 +222,7 @@ public class BlockTripWire extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World world, BlockPos blockpos, IBlockState iblockstate, Entity var4) { if (!world.isRemote) { if (!((Boolean) iblockstate.getValue(POWERED)).booleanValue()) { @@ -220,6 +234,7 @@ public class BlockTripWire extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { boolean flag = ((Boolean) iblockstate.getValue(SUSPENDED)).booleanValue(); boolean flag1 = !World.doesBlockHaveSolidTopSurface(world, blockpos.down()); @@ -234,9 +249,11 @@ public class BlockTripWire extends Block { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { IBlockState iblockstate = iblockaccess.getBlockState(blockpos); boolean flag = ((Boolean) iblockstate.getValue(ATTACHED)).booleanValue(); @@ -280,6 +297,7 @@ public class BlockTripWire extends Block { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState var3, EaglercraftRandom var4) { if (!world.isRemote) { if (((Boolean) world.getBlockState(blockpos).getValue(POWERED)).booleanValue()) { @@ -287,4 +305,4 @@ public class BlockTripWire extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockTripWireHook.java b/src/game/java/net/minecraft/block/BlockTripWireHook.java index 99b60631..cf029556 100644 --- a/src/game/java/net/minecraft/block/BlockTripWireHook.java +++ b/src/game/java/net/minecraft/block/BlockTripWireHook.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockTripWireHook extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -58,6 +58,7 @@ public class BlockTripWireHook extends Block { this.setTickRandomly(true); } + @Override public void breakBlock(World world, BlockPos blockpos, IBlockState iblockstate) { boolean flag = ((Boolean) iblockstate.getValue(ATTACHED)).booleanValue(); boolean flag1 = ((Boolean) iblockstate.getValue(POWERED)).booleanValue(); @@ -74,6 +75,7 @@ public class BlockTripWireHook extends Block { super.breakBlock(world, blockpos, iblockstate); } + @Override public boolean canPlaceBlockAt(World world, BlockPos blockpos) { EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray; BlockPos tmp = new BlockPos(0, 0, 0); @@ -89,6 +91,7 @@ public class BlockTripWireHook extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World world, BlockPos blockpos, EnumFacing enumfacing) { return enumfacing.getAxis().isHorizontal() && world.getBlockState(blockpos.offset(enumfacing.getOpposite())).getBlock().isNormalCube(); @@ -98,6 +101,7 @@ public class BlockTripWireHook extends Block { * + Can this block provide power. Only wire currently seems to have this change * based on its state. */ + @Override public boolean canProvidePower() { return true; } @@ -112,6 +116,7 @@ public class BlockTripWireHook extends Block { } } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING, POWERED, ATTACHED, SUSPENDED }); } @@ -217,15 +222,18 @@ public class BlockTripWireHook extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate.withProperty(SUSPENDED, Boolean.valueOf(!World.doesBlockHaveSolidTopSurface(iblockaccess, blockpos.down()))); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -233,6 +241,7 @@ public class BlockTripWireHook extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((EnumFacing) iblockstate.getValue(FACING)).getHorizontalIndex(); @@ -250,21 +259,25 @@ public class BlockTripWireHook extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(i & 3)) .withProperty(POWERED, Boolean.valueOf((i & 8) > 0)) .withProperty(ATTACHED, Boolean.valueOf((i & 4) > 0)); } + @Override public int getStrongPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing enumfacing) { return !((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 0 : (iblockstate.getValue(FACING) == enumfacing ? 15 : 0); } + @Override public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return ((Boolean) iblockstate.getValue(POWERED)).booleanValue() ? 15 : 0; } + @Override public boolean isFullCube() { return false; } @@ -273,6 +286,7 @@ public class BlockTripWireHook extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -281,6 +295,7 @@ public class BlockTripWireHook extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { IBlockState iblockstate = this.getDefaultState().withProperty(POWERED, Boolean.valueOf(false)) @@ -296,6 +311,7 @@ public class BlockTripWireHook extends Block { * + Called by ItemBlocks after a block is set in the world, to allow post-place * logic */ + @Override public void onBlockPlacedBy(World world, BlockPos blockpos, IBlockState iblockstate, EntityLivingBase var4, ItemStack var5) { this.func_176260_a(world, blockpos, iblockstate, false, false, -1, (IBlockState) null); @@ -304,6 +320,7 @@ public class BlockTripWireHook extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { if (block != this) { if (this.checkForDrop(world, blockpos, iblockstate)) { @@ -321,9 +338,11 @@ public class BlockTripWireHook extends Block { * + Called randomly when setTickRandomly is set to true (used by e.g. crops to * grow, etc.) */ + @Override public void randomTick(World var1, BlockPos var2, IBlockState var3, EaglercraftRandom var4) { } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { float f = 0.1875F; switch ((EnumFacing) iblockaccess.getBlockState(blockpos).getValue(FACING)) { @@ -342,7 +361,8 @@ public class BlockTripWireHook extends Block { } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom var4) { this.func_176260_a(world, blockpos, iblockstate, false, true, -1, (IBlockState) null); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockVine.java b/src/game/java/net/minecraft/block/BlockVine.java index 338ae0ce..c42588b1 100644 --- a/src/game/java/net/minecraft/block/BlockVine.java +++ b/src/game/java/net/minecraft/block/BlockVine.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockVine extends Block { public static final PropertyBool UP = PropertyBool.create("up"); @@ -95,6 +95,7 @@ public class BlockVine extends Block { /** * + Check whether this Block can be placed on the given side */ + @Override public boolean canPlaceBlockOnSide(World world, BlockPos blockpos, EnumFacing enumfacing) { switch (enumfacing) { case UP: @@ -113,10 +114,12 @@ public class BlockVine extends Block { return blockIn.isFullCube() && blockIn.blockMaterial.blocksMovement(); } + @Override public int colorMultiplier(IBlockAccess iblockaccess, BlockPos blockpos, int var3) { return iblockaccess.getBiomeGenForCoords(blockpos).getFoliageColorAtPos(blockpos); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { UP, NORTH, EAST, SOUTH, WEST }); } @@ -125,19 +128,23 @@ public class BlockVine extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate.withProperty(UP, Boolean.valueOf(iblockaccess.getBlockState(blockpos.up()).getBlock().isBlockNormalCube())); } + @Override public int getBlockColor() { return ColorizerFoliage.getFoliageColorBasic(); } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -145,6 +152,7 @@ public class BlockVine extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return null; } @@ -152,6 +160,7 @@ public class BlockVine extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; if (((Boolean) iblockstate.getValue(SOUTH)).booleanValue()) { @@ -173,6 +182,7 @@ public class BlockVine extends Block { return i; } + @Override public int getRenderColor(IBlockState var1) { return ColorizerFoliage.getFoliageColorBasic(); } @@ -180,12 +190,14 @@ public class BlockVine extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(SOUTH, Boolean.valueOf((i & 1) > 0)) .withProperty(WEST, Boolean.valueOf((i & 2) > 0)).withProperty(NORTH, Boolean.valueOf((i & 4) > 0)) .withProperty(EAST, Boolean.valueOf((i & 8) > 0)); } + @Override public void harvestBlock(World world, EntityPlayer entityplayer, BlockPos blockpos, IBlockState iblockstate, TileEntity tileentity) { if (!world.isRemote && entityplayer.getCurrentEquippedItem() != null @@ -198,6 +210,7 @@ public class BlockVine extends Block { } + @Override public boolean isFullCube() { return false; } @@ -206,6 +219,7 @@ public class BlockVine extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -214,6 +228,7 @@ public class BlockVine extends Block { * + Whether this Block can be replaced directly by other blocks (true for e.g. * tall grass) */ + @Override public boolean isReplaceable(World var1, BlockPos var2) { return true; } @@ -222,6 +237,7 @@ public class BlockVine extends Block { * + Called by ItemBlocks just before a block is actually set in the world, to * allow for adjustments to the IBlockstate */ + @Override public IBlockState onBlockPlaced(World var1, BlockPos var2, EnumFacing enumfacing, float var4, float var5, float var6, int var7, EntityLivingBase var8) { IBlockState iblockstate = this.getDefaultState().withProperty(UP, Boolean.valueOf(false)) @@ -235,6 +251,7 @@ public class BlockVine extends Block { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block var4) { if (!world.isRemote && !this.recheckGrownSides(world, blockpos, iblockstate)) { this.dropBlockAsItem(world, blockpos, iblockstate, 0); @@ -246,6 +263,7 @@ public class BlockVine extends Block { /** * + Returns the quantity of items to drop on block destruction. */ + @Override public int quantityDropped(EaglercraftRandom var1) { return 0; } @@ -279,6 +297,7 @@ public class BlockVine extends Block { } } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { float f = 0.0625F; float f1 = 1.0F; @@ -343,10 +362,12 @@ public class BlockVine extends Block { /** * + Sets the block's bounds for rendering it as an item */ + @Override public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } + @Override public void updateTick(World world, BlockPos blockpos, IBlockState iblockstate, EaglercraftRandom random) { if (!world.isRemote) { if (world.rand.nextInt(4) == 0) { @@ -354,10 +375,11 @@ public class BlockVine extends Block { int i = 5; boolean flag = false; + BlockPos tmp = new BlockPos(0, 0, 0); label62: for (int j = -b0; j <= b0; ++j) { for (int k = -b0; k <= b0; ++k) { for (int l = -1; l <= 1; ++l) { - if (world.getBlockState(blockpos.add(j, l, k)).getBlock() == this) { + if (world.getBlockState(blockpos.add(j, l, k, tmp)).getBlock() == this) { --i; if (i <= 0) { flag = true; @@ -370,7 +392,6 @@ public class BlockVine extends Block { EnumFacing enumfacing1 = EnumFacing.random(random); BlockPos blockpos2 = blockpos.up(); - BlockPos tmp = new BlockPos(0, 0, 0); if (enumfacing1 == EnumFacing.UP && blockpos.getY() < 255 && world.isAirBlock(blockpos2)) { if (!flag) { IBlockState iblockstate3 = iblockstate; @@ -396,7 +417,7 @@ public class BlockVine extends Block { } else if (enumfacing1.getAxis().isHorizontal() && !((Boolean) iblockstate.getValue(getPropertyFor(enumfacing1))).booleanValue()) { if (!flag) { - BlockPos blockpos4 = blockpos.offset(enumfacing1); + BlockPos blockpos4 = blockpos.offsetEvenFaster(enumfacing1, blockpos2); Block block1 = world.getBlockState(blockpos4).getBlock(); if (block1.blockMaterial == Material.air) { EnumFacing enumfacing2 = enumfacing1.rotateY(); @@ -421,7 +442,7 @@ public class BlockVine extends Block { world.getBlockState(blockpos.offsetEvenFaster(enumfacing4, tmp)).getBlock())) { world.setBlockState(blockpos1, this.getDefaultState().withProperty( getPropertyFor(enumfacing1.getOpposite()), Boolean.valueOf(true)), 2); - } else if (this.canPlaceOn(world.getBlockState(blockpos4.up()).getBlock())) { + } else if (this.canPlaceOn(world.getBlockState(blockpos4.up(tmp)).getBlock())) { world.setBlockState(blockpos4, this.getDefaultState(), 2); } } else if (block1.blockMaterial.isOpaque() && block1.isFullCube()) { @@ -432,7 +453,7 @@ public class BlockVine extends Block { } } else { if (blockpos.getY() > 1) { - BlockPos blockpos3 = blockpos.down(); + BlockPos blockpos3 = blockpos.down(blockpos2); IBlockState iblockstate1 = world.getBlockState(blockpos3); Block block = iblockstate1.getBlock(); EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray; @@ -475,4 +496,4 @@ public class BlockVine extends Block { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockWall.java b/src/game/java/net/minecraft/block/BlockWall.java index 230d9963..2d171bde 100644 --- a/src/game/java/net/minecraft/block/BlockWall.java +++ b/src/game/java/net/minecraft/block/BlockWall.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockWall extends Block { public static enum EnumType implements IStringSerializable { @@ -80,6 +80,7 @@ public class BlockWall extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -88,6 +89,7 @@ public class BlockWall extends Block { return this.unlocalizedName; } + @Override public String toString() { return this.name; } @@ -126,6 +128,7 @@ public class BlockWall extends Block { : true); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { UP, NORTH, EAST, WEST, SOUTH, VARIANT }); } @@ -135,6 +138,7 @@ public class BlockWall extends Block { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockWall.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -143,6 +147,7 @@ public class BlockWall extends Block { * + Get the actual Block state of this Block at the given position. This * applies properties not visible in the metadata, such as fence connections. */ + @Override public IBlockState getActualState(IBlockState iblockstate, IBlockAccess iblockaccess, BlockPos blockpos) { return iblockstate.withProperty(UP, Boolean.valueOf(!iblockaccess.isAirBlock(blockpos.up()))) .withProperty(NORTH, Boolean.valueOf(this.canConnectTo(iblockaccess, blockpos.north()))) @@ -151,6 +156,7 @@ public class BlockWall extends Block { .withProperty(WEST, Boolean.valueOf(this.canConnectTo(iblockaccess, blockpos.west()))); } + @Override public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { this.setBlockBoundsBasedOnState(world, blockpos); this.maxY = 1.5D; @@ -160,6 +166,7 @@ public class BlockWall extends Block { /** * + Gets the localized name of this block. Used for the statistics page. */ + @Override public String getLocalizedName() { return StatCollector.translateToLocal( this.getUnlocalizedName() + "." + BlockWall.EnumType.NORMAL.getUnlocalizedName() + ".name"); @@ -168,6 +175,7 @@ public class BlockWall extends Block { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((BlockWall.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } @@ -175,6 +183,7 @@ public class BlockWall extends Block { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(VARIANT, BlockWall.EnumType.byMetadata(i)); } @@ -183,6 +192,7 @@ public class BlockWall extends Block { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockWall.EnumType[] types = BlockWall.EnumType.META_LOOKUP; for (int i = 0; i < types.length; ++i) { @@ -191,6 +201,7 @@ public class BlockWall extends Block { } + @Override public boolean isFullCube() { return false; } @@ -199,14 +210,17 @@ public class BlockWall extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean isPassable(IBlockAccess var1, BlockPos var2) { return false; } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { boolean flag = this.canConnectTo(iblockaccess, blockpos.north()); boolean flag1 = this.canConnectTo(iblockaccess, blockpos.south()); @@ -246,7 +260,8 @@ public class BlockWall extends Block { this.setBlockBounds(f, 0.0F, f2, f1, f4, f3); } + @Override public boolean shouldSideBeRendered(IBlockAccess iblockaccess, BlockPos blockpos, EnumFacing enumfacing) { return enumfacing == EnumFacing.DOWN ? super.shouldSideBeRendered(iblockaccess, blockpos, enumfacing) : true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockWallSign.java b/src/game/java/net/minecraft/block/BlockWallSign.java index bd82bbef..4da3e6fc 100644 --- a/src/game/java/net/minecraft/block/BlockWallSign.java +++ b/src/game/java/net/minecraft/block/BlockWallSign.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockWallSign extends BlockSign { public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); @@ -39,6 +39,7 @@ public class BlockWallSign extends BlockSign { this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); } + @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] { FACING }); } @@ -46,6 +47,7 @@ public class BlockWallSign extends BlockSign { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { return ((EnumFacing) iblockstate.getValue(FACING)).getIndex(); } @@ -53,6 +55,7 @@ public class BlockWallSign extends BlockSign { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { EnumFacing enumfacing = EnumFacing.getFront(i); if (enumfacing.getAxis() == EnumFacing.Axis.Y) { @@ -65,6 +68,7 @@ public class BlockWallSign extends BlockSign { /** * + Called when a neighboring block changes. */ + @Override public void onNeighborBlockChange(World world, BlockPos blockpos, IBlockState iblockstate, Block block) { EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); if (!world.getBlockState(blockpos.offset(enumfacing.getOpposite())).getBlock().getMaterial().isSolid()) { @@ -75,6 +79,7 @@ public class BlockWallSign extends BlockSign { super.onNeighborBlockChange(world, blockpos, iblockstate, block); } + @Override public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { EnumFacing enumfacing = (EnumFacing) iblockaccess.getBlockState(blockpos).getValue(FACING); float f = 0.28125F; @@ -98,4 +103,4 @@ public class BlockWallSign extends BlockSign { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockWeb.java b/src/game/java/net/minecraft/block/BlockWeb.java index d5a0a769..f1a87af0 100644 --- a/src/game/java/net/minecraft/block/BlockWeb.java +++ b/src/game/java/net/minecraft/block/BlockWeb.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockWeb extends Block { public BlockWeb() { @@ -41,14 +41,17 @@ public class BlockWeb extends Block { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override protected boolean canSilkHarvest() { return true; } + @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } + @Override public AxisAlignedBB getCollisionBoundingBox(World var1, BlockPos var2, IBlockState var3) { return null; } @@ -56,10 +59,12 @@ public class BlockWeb extends Block { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Items.string; } + @Override public boolean isFullCube() { return false; } @@ -68,6 +73,7 @@ public class BlockWeb extends Block { * + Used to determine ambient occlusion and culling when rebuilding chunks for * render */ + @Override public boolean isOpaqueCube() { return false; } @@ -75,7 +81,8 @@ public class BlockWeb extends Block { /** * + Called When an Entity Collided with the Block */ + @Override public void onEntityCollidedWithBlock(World var1, BlockPos var2, IBlockState var3, Entity entity) { entity.setInWeb(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockWoodSlab.java b/src/game/java/net/minecraft/block/BlockWoodSlab.java index 2d210a3a..3918338c 100644 --- a/src/game/java/net/minecraft/block/BlockWoodSlab.java +++ b/src/game/java/net/minecraft/block/BlockWoodSlab.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockWoodSlab extends BlockSlab { public static PropertyEnum VARIANT; @@ -57,6 +57,7 @@ public abstract class BlockWoodSlab extends BlockSlab { this.setCreativeTab(CreativeTabs.tabBlock); } + @Override protected BlockState createBlockState() { return this.isDouble() ? new BlockState(this, new IProperty[] { VARIANT }) : new BlockState(this, new IProperty[] { HALF, VARIANT }); @@ -67,10 +68,12 @@ public abstract class BlockWoodSlab extends BlockSlab { * when the block gets destroyed. It returns the metadata of the dropped item * based on the old metadata of the block. */ + @Override public int damageDropped(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); } + @Override public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.wooden_slab); } @@ -78,6 +81,7 @@ public abstract class BlockWoodSlab extends BlockSlab { /** * + Get the Item that this Block should drop when harvested. */ + @Override public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.wooden_slab); } @@ -85,6 +89,7 @@ public abstract class BlockWoodSlab extends BlockSlab { /** * + Get the MapColor for this Block and the given BlockState */ + @Override public MapColor getMapColor(IBlockState iblockstate) { return ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).func_181070_c(); } @@ -92,6 +97,7 @@ public abstract class BlockWoodSlab extends BlockSlab { /** * + Convert the BlockState into the correct metadata value */ + @Override public int getMetaFromState(IBlockState iblockstate) { int i = 0; i = i | ((BlockPlanks.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); @@ -105,6 +111,7 @@ public abstract class BlockWoodSlab extends BlockSlab { /** * + Convert the given metadata into a BlockState for this Block */ + @Override public IBlockState getStateFromMeta(int i) { IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata(i & 7)); if (!this.isDouble()) { @@ -119,6 +126,7 @@ public abstract class BlockWoodSlab extends BlockSlab { * + returns a list of blocks with the same ID, but different meta (eg: wood * returns 4 blocks) */ + @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { if (item != Item.getItemFromBlock(Blocks.double_wooden_slab)) { BlockPlanks.EnumType[] types = BlockPlanks.EnumType.META_LOOKUP; @@ -132,15 +140,18 @@ public abstract class BlockWoodSlab extends BlockSlab { /** * + Returns the slab block name with the type associated with it */ + @Override public String getUnlocalizedName(int i) { return super.getUnlocalizedName() + "." + BlockPlanks.EnumType.byMetadata(i).getUnlocalizedName(); } + @Override public Object getVariant(ItemStack itemstack) { return BlockPlanks.EnumType.byMetadata(itemstack.getMetadata() & 7); } + @Override public IProperty getVariantProperty() { return VARIANT; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockWorkbench.java b/src/game/java/net/minecraft/block/BlockWorkbench.java index d528783b..1adc29c3 100644 --- a/src/game/java/net/minecraft/block/BlockWorkbench.java +++ b/src/game/java/net/minecraft/block/BlockWorkbench.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockWorkbench extends Block { public static class InterfaceCraftingTable implements IInteractionObject { @@ -49,22 +49,27 @@ public class BlockWorkbench extends Block { this.position = pos; } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerWorkbench(inventoryplayer, this.world, this.position); } + @Override public IChatComponent getDisplayName() { return new ChatComponentTranslation(Blocks.crafting_table.getUnlocalizedName() + ".name", new Object[0]); } + @Override public String getGuiID() { return "minecraft:crafting_table"; } + @Override public String getName() { return null; } + @Override public boolean hasCustomName() { return false; } @@ -75,6 +80,7 @@ public class BlockWorkbench extends Block { this.setCreativeTab(CreativeTabs.tabDecorations); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -85,4 +91,4 @@ public class BlockWorkbench extends Block { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/BlockYellowFlower.java b/src/game/java/net/minecraft/block/BlockYellowFlower.java index a22772f1..66bfdb06 100644 --- a/src/game/java/net/minecraft/block/BlockYellowFlower.java +++ b/src/game/java/net/minecraft/block/BlockYellowFlower.java @@ -3,13 +3,13 @@ package net.minecraft.block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,13 +21,14 @@ package net.minecraft.block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockYellowFlower extends BlockFlower { /** * + Get the Type of this flower (Yellow/Red) */ + @Override public BlockFlower.EnumFlowerColor getBlockType() { return BlockFlower.EnumFlowerColor.YELLOW; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/IGrowable.java b/src/game/java/net/minecraft/block/IGrowable.java index 42e5eb21..3f21c550 100644 --- a/src/game/java/net/minecraft/block/IGrowable.java +++ b/src/game/java/net/minecraft/block/IGrowable.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IGrowable { /** @@ -37,4 +37,4 @@ public interface IGrowable { boolean canUseBonemeal(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4); void grow(World var1, EaglercraftRandom var2, BlockPos var3, IBlockState var4); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/ITileEntityProvider.java b/src/game/java/net/minecraft/block/ITileEntityProvider.java index 1d4754ed..2a3e7307 100644 --- a/src/game/java/net/minecraft/block/ITileEntityProvider.java +++ b/src/game/java/net/minecraft/block/ITileEntityProvider.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITileEntityProvider { /** @@ -32,4 +32,4 @@ public interface ITileEntityProvider { * the block. */ TileEntity createNewTileEntity(World var1, int var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/MapColor.java b/src/game/java/net/minecraft/block/material/MapColor.java index 1668ce97..04402190 100644 --- a/src/game/java/net/minecraft/block/material/MapColor.java +++ b/src/game/java/net/minecraft/block/material/MapColor.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapColor { /** @@ -100,4 +100,4 @@ public class MapColor { int k = (this.colorValue & 255) * short1 / 255; return -16777216 | i << 16 | j << 8 | k; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/Material.java b/src/game/java/net/minecraft/block/material/Material.java index abef34ad..f56a3070 100644 --- a/src/game/java/net/minecraft/block/material/Material.java +++ b/src/game/java/net/minecraft/block/material/Material.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Material { public static final Material air = new MaterialTransparent(MapColor.airColor); @@ -66,6 +66,7 @@ public class Material { /** * + Returns if this material is considered solid or not */ + @Override public boolean blocksMovement() { return false; } @@ -168,7 +169,7 @@ public class Material { /** * + - * + * * @see #isAdventureModeExempt() */ protected Material setAdventureModeExempt() { @@ -223,4 +224,4 @@ public class Material { this.isTranslucent = true; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/MaterialLiquid.java b/src/game/java/net/minecraft/block/material/MaterialLiquid.java index d972aec9..3bc95fe8 100644 --- a/src/game/java/net/minecraft/block/material/MaterialLiquid.java +++ b/src/game/java/net/minecraft/block/material/MaterialLiquid.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MaterialLiquid extends Material { public MaterialLiquid(MapColor color) { @@ -33,6 +33,7 @@ public class MaterialLiquid extends Material { /** * + Returns if this material is considered solid or not */ + @Override public boolean blocksMovement() { return false; } @@ -40,6 +41,7 @@ public class MaterialLiquid extends Material { /** * + Returns if blocks of these materials are liquids. */ + @Override public boolean isLiquid() { return true; } @@ -47,7 +49,8 @@ public class MaterialLiquid extends Material { /** * + Returns true if the block is a considered solid. This is true by default. */ + @Override public boolean isSolid() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/MaterialLogic.java b/src/game/java/net/minecraft/block/material/MaterialLogic.java index 2bdc3033..4bd1bd83 100644 --- a/src/game/java/net/minecraft/block/material/MaterialLogic.java +++ b/src/game/java/net/minecraft/block/material/MaterialLogic.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MaterialLogic extends Material { public MaterialLogic(MapColor color) { @@ -33,6 +33,7 @@ public class MaterialLogic extends Material { * + Will prevent grass from growing on dirt underneath and kill any grass below * it if it returns true */ + @Override public boolean blocksLight() { return false; } @@ -40,6 +41,7 @@ public class MaterialLogic extends Material { /** * + Returns if this material is considered solid or not */ + @Override public boolean blocksMovement() { return false; } @@ -47,7 +49,8 @@ public class MaterialLogic extends Material { /** * + Returns true if the block is a considered solid. This is true by default. */ + @Override public boolean isSolid() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/MaterialPortal.java b/src/game/java/net/minecraft/block/material/MaterialPortal.java index f406a8c7..c069dbdd 100644 --- a/src/game/java/net/minecraft/block/material/MaterialPortal.java +++ b/src/game/java/net/minecraft/block/material/MaterialPortal.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MaterialPortal extends Material { public MaterialPortal(MapColor color) { @@ -32,6 +32,7 @@ public class MaterialPortal extends Material { * + Will prevent grass from growing on dirt underneath and kill any grass below * it if it returns true */ + @Override public boolean blocksLight() { return false; } @@ -39,6 +40,7 @@ public class MaterialPortal extends Material { /** * + Returns if this material is considered solid or not */ + @Override public boolean blocksMovement() { return false; } @@ -46,7 +48,8 @@ public class MaterialPortal extends Material { /** * + Returns true if the block is a considered solid. This is true by default. */ + @Override public boolean isSolid() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/material/MaterialTransparent.java b/src/game/java/net/minecraft/block/material/MaterialTransparent.java index 5e38e7cd..48afb26e 100644 --- a/src/game/java/net/minecraft/block/material/MaterialTransparent.java +++ b/src/game/java/net/minecraft/block/material/MaterialTransparent.java @@ -3,13 +3,13 @@ package net.minecraft.block.material; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.block.material; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MaterialTransparent extends Material { public MaterialTransparent(MapColor color) { @@ -33,6 +33,7 @@ public class MaterialTransparent extends Material { * + Will prevent grass from growing on dirt underneath and kill any grass below * it if it returns true */ + @Override public boolean blocksLight() { return false; } @@ -40,6 +41,7 @@ public class MaterialTransparent extends Material { /** * + Returns if this material is considered solid or not */ + @Override public boolean blocksMovement() { return false; } @@ -47,7 +49,8 @@ public class MaterialTransparent extends Material { /** * + Returns true if the block is a considered solid. This is true by default. */ + @Override public boolean isSolid() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/IProperty.java b/src/game/java/net/minecraft/block/properties/IProperty.java index 9d4cffa3..be28a593 100644 --- a/src/game/java/net/minecraft/block/properties/IProperty.java +++ b/src/game/java/net/minecraft/block/properties/IProperty.java @@ -5,13 +5,13 @@ import java.util.Collection; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import java.util.Collection; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProperty> { Collection getAllowedValues(); @@ -42,4 +42,4 @@ public interface IProperty> { * + The class of the values of this property */ Class getValueClass(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/PropertyBool.java b/src/game/java/net/minecraft/block/properties/PropertyBool.java index 13aa3bc9..9eff135c 100644 --- a/src/game/java/net/minecraft/block/properties/PropertyBool.java +++ b/src/game/java/net/minecraft/block/properties/PropertyBool.java @@ -7,13 +7,13 @@ import com.google.common.collect.ImmutableSet; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import com.google.common.collect.ImmutableSet; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PropertyBool extends PropertyHelper { public static PropertyBool create(String name) { @@ -38,6 +38,7 @@ public class PropertyBool extends PropertyHelper { super(name, Boolean.class); } + @Override public Collection getAllowedValues() { return this.allowedValues; } @@ -45,7 +46,8 @@ public class PropertyBool extends PropertyHelper { /** * + Get the name for the given value. */ + @Override public String getName(Object value) { return ((Boolean) value).toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/PropertyDirection.java b/src/game/java/net/minecraft/block/properties/PropertyDirection.java index 5d5b0c16..14a39c6b 100644 --- a/src/game/java/net/minecraft/block/properties/PropertyDirection.java +++ b/src/game/java/net/minecraft/block/properties/PropertyDirection.java @@ -12,13 +12,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PropertyDirection extends PropertyEnum { /** @@ -63,4 +63,4 @@ public class PropertyDirection extends PropertyEnum { protected PropertyDirection(String name, Collection values) { super(name, EnumFacing.class, values); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/PropertyEnum.java b/src/game/java/net/minecraft/block/properties/PropertyEnum.java index 8e431d3c..13b2dfc9 100644 --- a/src/game/java/net/minecraft/block/properties/PropertyEnum.java +++ b/src/game/java/net/minecraft/block/properties/PropertyEnum.java @@ -15,13 +15,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PropertyEnum & IStringSerializable> extends PropertyHelper { public static & IStringSerializable> PropertyEnum create(String name, Class clazz) { @@ -83,6 +83,7 @@ public class PropertyEnum & IStringSerializable> extends Prope } + @Override public Collection getAllowedValues() { return this.allowedValues; } @@ -90,7 +91,8 @@ public class PropertyEnum & IStringSerializable> extends Prope /** * + Get the name for the given value. */ + @Override public String getName(Object oenum) { return ((IStringSerializable) oenum).getName(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/PropertyHelper.java b/src/game/java/net/minecraft/block/properties/PropertyHelper.java index 25e40c6f..2699ec2b 100644 --- a/src/game/java/net/minecraft/block/properties/PropertyHelper.java +++ b/src/game/java/net/minecraft/block/properties/PropertyHelper.java @@ -5,13 +5,13 @@ import com.google.common.base.Objects; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import com.google.common.base.Objects; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class PropertyHelper> implements IProperty { private final Class valueClass; @@ -34,6 +34,7 @@ public abstract class PropertyHelper> implements IProper this.name = name; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -45,6 +46,7 @@ public abstract class PropertyHelper> implements IProper } } + @Override public String getName() { return this.name; } @@ -52,16 +54,19 @@ public abstract class PropertyHelper> implements IProper /** * + The class of the values of this property */ + @Override public Class getValueClass() { return this.valueClass; } + @Override public int hashCode() { return 31 * this.valueClass.hashCode() + this.name.hashCode(); } + @Override public String toString() { return Objects.toStringHelper(this).add("name", this.name).add("clazz", this.valueClass) .add("values", this.getAllowedValues()).toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/properties/PropertyInteger.java b/src/game/java/net/minecraft/block/properties/PropertyInteger.java index 50b3f754..9ae6e662 100644 --- a/src/game/java/net/minecraft/block/properties/PropertyInteger.java +++ b/src/game/java/net/minecraft/block/properties/PropertyInteger.java @@ -9,13 +9,13 @@ import com.google.common.collect.Sets; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import com.google.common.collect.Sets; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PropertyInteger extends PropertyHelper { public static PropertyInteger create(String name, int min, int max) { @@ -53,6 +53,7 @@ public class PropertyInteger extends PropertyHelper { } } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -68,6 +69,7 @@ public class PropertyInteger extends PropertyHelper { } } + @Override public Collection getAllowedValues() { return this.allowedValues; } @@ -75,13 +77,15 @@ public class PropertyInteger extends PropertyHelper { /** * + Get the name for the given value. */ + @Override public String getName(Object integer) { return integer.toString(); } + @Override public int hashCode() { int i = super.hashCode(); i = 31 * i + this.allowedValues.hashCode(); return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/BlockPistonStructureHelper.java b/src/game/java/net/minecraft/block/state/BlockPistonStructureHelper.java index a0939578..8b636bbd 100644 --- a/src/game/java/net/minecraft/block/state/BlockPistonStructureHelper.java +++ b/src/game/java/net/minecraft/block/state/BlockPistonStructureHelper.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPistonStructureHelper { private final World world; @@ -214,4 +214,4 @@ public class BlockPistonStructureHelper { public List getBlocksToMove() { return this.toMove; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/BlockState.java b/src/game/java/net/minecraft/block/state/BlockState.java index 35f12e6f..fe68df7f 100644 --- a/src/game/java/net/minecraft/block/state/BlockState.java +++ b/src/game/java/net/minecraft/block/state/BlockState.java @@ -29,13 +29,13 @@ import net.minecraft.util.MapPopulator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.util.MapPopulator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockState { static class StateImplementation extends BlockStateBase { @@ -79,14 +79,17 @@ public class BlockState { } } + @Override public boolean equals(Object object) { return this == object; } + @Override public Block getBlock() { return this.block; } + @Override public ImmutableMap getProperties() { return this.properties; } @@ -97,10 +100,12 @@ public class BlockState { return hashmap; } + @Override public Collection getPropertyNames() { return Collections.unmodifiableCollection(this.properties.keySet()); } + @Override public > T getValue(IProperty iproperty) { if (!this.properties.containsKey(iproperty)) { throw new IllegalArgumentException( @@ -110,10 +115,12 @@ public class BlockState { } } + @Override public int hashCode() { return this.properties.hashCode(); } + @Override public , V extends T> IBlockState withProperty(IProperty iproperty, V comparable) { if (!this.properties.containsKey(iproperty)) { throw new IllegalArgumentException( @@ -131,6 +138,7 @@ public class BlockState { private static final Joiner COMMA_JOINER = Joiner.on(", "); private static final Function GET_NAME_FUNC = new Function() { + @Override public String apply(IProperty iproperty) { return iproperty == null ? "" : iproperty.getName(); } @@ -143,6 +151,7 @@ public class BlockState { public BlockState(Block blockIn, IProperty... properties) { this.block = blockIn; Arrays.sort(properties, new Comparator() { + @Override public int compare(IProperty iproperty, IProperty iproperty1) { return iproperty.getName().compareTo(iproperty1.getName()); } @@ -192,8 +201,9 @@ public class BlockState { return this.validStates; } + @Override public String toString() { return Objects.toStringHelper(this).add("block", Block.blockRegistry.getNameForObject(this.block)) .add("properties", Iterables.transform(this.properties, GET_NAME_FUNC)).toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/BlockStateBase.java b/src/game/java/net/minecraft/block/state/BlockStateBase.java index 1e50d2d7..198a1392 100644 --- a/src/game/java/net/minecraft/block/state/BlockStateBase.java +++ b/src/game/java/net/minecraft/block/state/BlockStateBase.java @@ -14,13 +14,13 @@ import net.minecraft.block.properties.IProperty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,11 +32,12 @@ import net.minecraft.block.properties.IProperty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BlockStateBase implements IBlockState { private static final Joiner COMMA_JOINER = Joiner.on(','); private static final Function, String> MAP_ENTRY_TO_STRING = new Function, String>() { + @Override public String apply(Entry entry) { if (entry == null) { return ""; @@ -63,11 +64,13 @@ public abstract class BlockStateBase implements IBlockState { return (T) iterator.next(); } + @Override public > IBlockState cycleProperty(IProperty property) { return this.withProperty(property, (T) cyclePropertyValue(property.getAllowedValues(), this.getValue(property))); } + @Override public String toString() { StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append(Block.blockRegistry.getNameForObject(this.getBlock())); @@ -80,4 +83,4 @@ public abstract class BlockStateBase implements IBlockState { return stringbuilder.toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/BlockWorldState.java b/src/game/java/net/minecraft/block/state/BlockWorldState.java index afbfaea8..4b63d9c5 100644 --- a/src/game/java/net/minecraft/block/state/BlockWorldState.java +++ b/src/game/java/net/minecraft/block/state/BlockWorldState.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,11 +27,12 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockWorldState { public static Predicate hasState(final Predicate parPredicate) { return new Predicate() { + @Override public boolean apply(BlockWorldState blockworldstate) { return blockworldstate != null && parPredicate.apply(blockworldstate.getBlockState()); } @@ -72,4 +73,4 @@ public class BlockWorldState { return this.tileEntity; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/IBlockState.java b/src/game/java/net/minecraft/block/state/IBlockState.java index e063df43..c23f258b 100644 --- a/src/game/java/net/minecraft/block/state/IBlockState.java +++ b/src/game/java/net/minecraft/block/state/IBlockState.java @@ -10,13 +10,13 @@ import net.minecraft.block.properties.IProperty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.block.properties.IProperty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBlockState { > IBlockState cycleProperty(IProperty var1); @@ -45,4 +45,4 @@ public interface IBlockState { > T getValue(IProperty var1); , V extends T> IBlockState withProperty(IProperty var1, V var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/pattern/BlockHelper.java b/src/game/java/net/minecraft/block/state/pattern/BlockHelper.java index fa419219..67db0c2b 100644 --- a/src/game/java/net/minecraft/block/state/pattern/BlockHelper.java +++ b/src/game/java/net/minecraft/block/state/pattern/BlockHelper.java @@ -8,13 +8,13 @@ import net.minecraft.block.state.IBlockState; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.block.state.IBlockState; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockHelper implements Predicate { public static BlockHelper forBlock(Block blockType) { @@ -39,7 +39,8 @@ public class BlockHelper implements Predicate { this.block = blockType; } + @Override public boolean apply(IBlockState iblockstate) { return iblockstate != null && iblockstate.getBlock() == this.block; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/pattern/BlockPattern.java b/src/game/java/net/minecraft/block/state/pattern/BlockPattern.java index 6632bd45..ad547706 100644 --- a/src/game/java/net/minecraft/block/state/pattern/BlockPattern.java +++ b/src/game/java/net/minecraft/block/state/pattern/BlockPattern.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPattern { static class CacheLoader implements EaglerCacheProvider { @@ -44,6 +44,7 @@ public class BlockPattern { this.field_181626_b = parFlag; } + @Override public BlockWorldState create(BlockPos parBlockPos) { return new BlockWorldState(this.world, parBlockPos, this.field_181626_b); } @@ -89,6 +90,7 @@ public class BlockPattern { return this.thumb; } + @Override public String toString() { return Objects.toStringHelper(this).add("up", this.thumb).add("forwards", this.finger) .add("frontTopLeft", this.pos).toString(); @@ -208,4 +210,4 @@ public class BlockPattern { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/pattern/BlockStateHelper.java b/src/game/java/net/minecraft/block/state/pattern/BlockStateHelper.java index 5cb28d38..8a219f26 100644 --- a/src/game/java/net/minecraft/block/state/pattern/BlockStateHelper.java +++ b/src/game/java/net/minecraft/block/state/pattern/BlockStateHelper.java @@ -14,13 +14,13 @@ import net.minecraft.block.state.IBlockState; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.block.state.IBlockState; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStateHelper implements Predicate { public static BlockStateHelper forBlock(Block blockIn) { @@ -47,6 +47,7 @@ public class BlockStateHelper implements Predicate { this.blockstate = blockStateIn; } + @Override public boolean apply(IBlockState iblockstate) { if (iblockstate != null && iblockstate.getBlock().equals(this.blockstate.getBlock())) { for (Entry entry : this.propertyPredicates.entrySet()) { @@ -70,4 +71,4 @@ public class BlockStateHelper implements Predicate { return this; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/block/state/pattern/FactoryBlockPattern.java b/src/game/java/net/minecraft/block/state/pattern/FactoryBlockPattern.java index b2ae4fc9..8ec9c410 100644 --- a/src/game/java/net/minecraft/block/state/pattern/FactoryBlockPattern.java +++ b/src/game/java/net/minecraft/block/state/pattern/FactoryBlockPattern.java @@ -18,13 +18,13 @@ import net.minecraft.block.state.BlockWorldState; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.block.state.BlockWorldState; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FactoryBlockPattern { private static final Joiner COMMA_JOIN = Joiner.on(","); @@ -130,4 +130,4 @@ public class FactoryBlockPattern { this.symbolMap.put(Character.valueOf(symbol), blockMatcher); return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/ClientBrandRetriever.java b/src/game/java/net/minecraft/client/ClientBrandRetriever.java index f9408aa1..a487e54d 100644 --- a/src/game/java/net/minecraft/client/ClientBrandRetriever.java +++ b/src/game/java/net/minecraft/client/ClientBrandRetriever.java @@ -3,13 +3,13 @@ package net.minecraft.client; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.client; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientBrandRetriever { public static String getClientModName() { return "starlike"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/LoadingScreenRenderer.java b/src/game/java/net/minecraft/client/LoadingScreenRenderer.java index 85db9306..6b9548f2 100644 --- a/src/game/java/net/minecraft/client/LoadingScreenRenderer.java +++ b/src/game/java/net/minecraft/client/LoadingScreenRenderer.java @@ -20,13 +20,13 @@ import net.minecraft.util.MinecraftError; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.util.MinecraftError; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LoadingScreenRenderer implements IProgressUpdate { private String message = ""; @@ -62,6 +62,7 @@ public class LoadingScreenRenderer implements IProgressUpdate { * + Displays a string on the loading screen supposed to indicate what is being * done currently. */ + @Override public void displayLoadingString(String message) { if (!this.mc.running) { if (!this.field_73724_e) { @@ -78,6 +79,7 @@ public class LoadingScreenRenderer implements IProgressUpdate { /** * + Shows the 'Saving level' string. */ + @Override public void displaySavingString(String message) { this.field_73724_e = true; this.displayString(message); @@ -124,11 +126,13 @@ public class LoadingScreenRenderer implements IProgressUpdate { * lines shown. This resets progress to 0, and the WorkingString to * "working...". */ + @Override public void resetProgressAndMessage(String message) { this.field_73724_e = false; this.displayString(message); } + @Override public void setDoneWorking() { } @@ -136,6 +140,7 @@ public class LoadingScreenRenderer implements IProgressUpdate { * + Updates the progress bar on the loading screen to the specified amount. * Args: loadProgress */ + @Override public void setLoadingProgress(int progress) { if (!this.mc.running) { if (!this.field_73724_e) { @@ -209,4 +214,4 @@ public class LoadingScreenRenderer implements IProgressUpdate { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/Minecraft.java b/src/game/java/net/minecraft/client/Minecraft.java index 19220ef0..a142e431 100644 --- a/src/game/java/net/minecraft/client/Minecraft.java +++ b/src/game/java/net/minecraft/client/Minecraft.java @@ -49,6 +49,8 @@ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFolderResourcePack; import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFontRenderer; import net.lax1dude.eaglercraft.v1_8.minecraft.EnumInputEvent; import net.lax1dude.eaglercraft.v1_8.minecraft.GuiScreenGenericErrorMessage; +import net.lax1dude.eaglercraft.v1_8.minecraft.GuiScreenVSyncReEnabled; +import net.lax1dude.eaglercraft.v1_8.minecraft.GuiScreenVideoSettingsWarning; import net.lax1dude.eaglercraft.v1_8.notifications.ServerNotificationRenderer; import net.lax1dude.eaglercraft.v1_8.opengl.EaglerMeshLoader; import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; @@ -64,7 +66,6 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture.EmissiveItems; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture.MetalsLUT; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture.PBRTextureMapUtils; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.texture.TemperaturesLUT; -import net.lax1dude.eaglercraft.v1_8.profanity_filter.GuiScreenContentWarning; import net.lax1dude.eaglercraft.v1_8.profile.EaglerProfile; import net.lax1dude.eaglercraft.v1_8.profile.GuiScreenEditProfile; import net.lax1dude.eaglercraft.v1_8.profile.SkinPreviewRenderer; @@ -203,17 +204,18 @@ import net.minecraft.world.WorldProviderEnd; import net.minecraft.world.WorldProviderHell; import net.minecraft.world.WorldSettings; import net.minecraft.world.storage.ISaveFormat; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -225,7 +227,7 @@ import net.minecraft.world.storage.ISaveFormat; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Minecraft implements IThreadListener { private static final Logger logger = LogManager.getLogger(); @@ -439,88 +441,105 @@ public class Minecraft implements IThreadListener { */ public CrashReport addGraphicsAndWorldToCrashReport(CrashReport theCrash) { theCrash.getCategory().addCrashSectionCallable("Launched Version", new Callable() { + @Override public String call() throws Exception { return Minecraft.this.launchedVersion; } }); theCrash.getCategory().addCrashSectionCallable("LWJGL", new Callable() { + @Override public String call() { return EagRuntime.getVersion(); } }); theCrash.getCategory().addCrashSectionCallable("OpenGL", new Callable() { + @Override public String call() { return EaglercraftGPU.glGetString(7937) + " GL version " + EaglercraftGPU.glGetString(7938) + ", " + EaglercraftGPU.glGetString(7936); } }); theCrash.getCategory().addCrashSectionCallable("Is Eagler Shaders", new Callable() { + @Override public String call() throws Exception { return Minecraft.this.gameSettings.shaders ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("Is Dynamic Lights", new Callable() { + @Override public String call() throws Exception { return !Minecraft.this.gameSettings.shaders && Minecraft.this.gameSettings.enableDynamicLights ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("In Ext. Pipeline", new Callable() { + @Override public String call() throws Exception { return GlStateManager.isExtensionPipeline() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU Shader5 Capable", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkShader5Capable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU TexStorage Capable", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkTexStorageCapable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU TextureLOD Capable", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkTextureLODCapable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU Instancing Capable", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkInstancingCapable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU VAO Capable", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkVAOCapable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("Is Software VAOs", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.areVAOsEmulated() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("GPU Render-to-MipMap", new Callable() { + @Override public String call() throws Exception { return EaglercraftGPU.checkFBORenderMipmapCapable() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("Touch Mode", new Callable() { + @Override public String call() throws Exception { return PointerInputAbstraction.isTouchMode() ? "Yes" : "No"; } }); theCrash.getCategory().addCrashSectionCallable("Is Modded", new Callable() { + @Override public String call() throws Exception { return "Definitely Not; You're an eagler"; } }); theCrash.getCategory().addCrashSectionCallable("Type", new Callable() { + @Override public String call() throws Exception { return "Client (map_client.txt)"; } }); theCrash.getCategory().addCrashSectionCallable("Resource Packs", new Callable() { + @Override public String call() throws Exception { StringBuilder stringbuilder = new StringBuilder(); @@ -539,11 +558,13 @@ public class Minecraft implements IThreadListener { } }); theCrash.getCategory().addCrashSectionCallable("Current Language", new Callable() { + @Override public String call() throws Exception { return Minecraft.this.mcLanguageManager.getCurrentLanguage().toString(); } }); theCrash.getCategory().addCrashSectionCallable("Profiler Position", new Callable() { + @Override public String call() throws Exception { return "N/A (disabled)"; } @@ -555,6 +576,7 @@ public class Minecraft implements IThreadListener { return theCrash; } + @Override public void addScheduledTask(Runnable runnableToSchedule) { this.addScheduledTaskFuture(Executors.callable(runnableToSchedule)); } @@ -1379,7 +1401,6 @@ public class Minecraft implements IThreadListener { public void run() { this.running = true; - try { this.startGame(); } catch (Throwable throwable) { @@ -1389,6 +1410,8 @@ public class Minecraft implements IThreadListener { return; } + StarlikeClient.init(); + try { while (true) { if (!this.running) { @@ -1513,6 +1536,8 @@ public class Minecraft implements IThreadListener { * + Runs the current tick. */ public void runTick() throws IOException { + StarlikeClient.runTick(); + if (this.rightClickDelayTimer > 0) { --this.rightClickDelayTimer; } @@ -1530,6 +1555,11 @@ public class Minecraft implements IThreadListener { if (wasPaused != isGamePaused) { SingleplayerServerController.setPaused(this.isGamePaused); + if (isGamePaused) { + mcSoundHandler.pauseSounds(); + } else { + mcSoundHandler.resumeSounds(); + } wasPaused = isGamePaused; } @@ -1617,6 +1647,7 @@ public class Minecraft implements IThreadListener { CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Updating screen events"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Affected screen"); crashreportcategory.addCrashSectionCallable("Screen name", new Callable() { + @Override public String call() throws Exception { return Minecraft.this.currentScreen.getClass().getName(); } @@ -1631,6 +1662,7 @@ public class Minecraft implements IThreadListener { CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Ticking screen"); CrashReportCategory crashreportcategory1 = crashreport1.makeCategory("Affected screen"); crashreportcategory1.addCrashSectionCallable("Screen name", new Callable() { + @Override public String call() throws Exception { return Minecraft.this.currentScreen.getClass().getName(); } @@ -1912,8 +1944,9 @@ public class Minecraft implements IThreadListener { this.displayGuiScreen(new GuiChat("/")); } - boolean miningTouch = isMiningTouch(); - boolean useTouch = thePlayer.getItemShouldUseOnTouchEagler(); + boolean touchMode = PointerInputAbstraction.isTouchMode(); + boolean miningTouch = touchMode && isMiningTouch(); + boolean useTouch = touchMode && thePlayer.getItemShouldUseOnTouchEagler(); if (this.thePlayer.isUsingItem()) { if (!this.gameSettings.keyBindUseItem.isKeyDown() && !miningTouch) { this.playerController.onStoppedUsingItem(this.thePlayer); @@ -2112,6 +2145,7 @@ public class Minecraft implements IThreadListener { public ListenableFuture scheduleResourcesRefresh() { return this.addScheduledTaskFuture(new Runnable() { + @Override public void run() { Minecraft.this.loadingScreen.eaglerShow(I18n.format("resourcePack.load.refreshing"), I18n.format("resourcePack.load.pleaseWait")); @@ -2320,6 +2354,7 @@ public class Minecraft implements IThreadListener { this.mcResourceManager.registerReloadListener(new BlockVertexIDs()); this.mcResourceManager.registerReloadListener(new EaglerMeshLoader()); AchievementList.openInventory.setStatStringFormatter(new IStatStringFormat() { + @Override public String formatString(String parString1) { try { return HString.format(parString1, new Object[] { GameSettings @@ -2399,7 +2434,23 @@ public class Minecraft implements IThreadListener { } if (!EagRuntime.getConfiguration().isForceProfanityFilter() && !gameSettings.hasShownProfanityFilter) { - mainMenu = new GuiScreenContentWarning(mainMenu); + // mainMenu = new GuiScreenContentWarning(mainMenu); + } + + boolean vsyncScreen = false; + if (EagRuntime.getConfiguration().isEnforceVSync() && Display.isVSyncSupported() && !gameSettings.enableVsync) { + gameSettings.enableVsync = true; + gameSettings.saveOptions(); + vsyncScreen = true; + } + + int vidIssues = gameSettings.checkBadVideoSettings(); + if (vidIssues != 0) { + mainMenu = new GuiScreenVideoSettingsWarning(mainMenu, vidIssues); + } + + if (vsyncScreen) { + mainMenu = new GuiScreenVSyncReEnabled(mainMenu); } this.displayGuiScreen(mainMenu); @@ -2459,4 +2510,4 @@ public class Minecraft implements IThreadListener { this.scaledResolution = new ScaledResolution(this); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/GuardianSound.java b/src/game/java/net/minecraft/client/audio/GuardianSound.java index 8403a7a9..863446c3 100644 --- a/src/game/java/net/minecraft/client/audio/GuardianSound.java +++ b/src/game/java/net/minecraft/client/audio/GuardianSound.java @@ -6,13 +6,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuardianSound extends MovingSound { private final EntityGuardian guardian; @@ -34,12 +34,12 @@ public class GuardianSound extends MovingSound { this.guardian = guardian; this.attenuationType = ISound.AttenuationType.NONE; this.repeat = true; - this.repeatDelay = 0; } /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (!this.guardian.isDead && this.guardian.hasTargetedEntity()) { this.xPosF = (float) this.guardian.posX; @@ -52,4 +52,4 @@ public class GuardianSound extends MovingSound { this.donePlaying = true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/ISound.java b/src/game/java/net/minecraft/client/audio/ISound.java index 618a21f7..375b4ce7 100644 --- a/src/game/java/net/minecraft/client/audio/ISound.java +++ b/src/game/java/net/minecraft/client/audio/ISound.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISound { public static enum AttenuationType { @@ -46,8 +46,6 @@ public interface ISound { float getPitch(); - int getRepeatDelay(); - ResourceLocation getSoundLocation(); float getVolume(); @@ -57,4 +55,4 @@ public interface ISound { float getYPosF(); float getZPosF(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/ISoundEventAccessor.java b/src/game/java/net/minecraft/client/audio/ISoundEventAccessor.java index 6f11eb71..3f97c7a1 100644 --- a/src/game/java/net/minecraft/client/audio/ISoundEventAccessor.java +++ b/src/game/java/net/minecraft/client/audio/ISoundEventAccessor.java @@ -3,13 +3,13 @@ package net.minecraft.client.audio; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.client.audio; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISoundEventAccessor { T cloneEntry(); int getWeight(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/ITickableSound.java b/src/game/java/net/minecraft/client/audio/ITickableSound.java index 12217041..c1db6638 100644 --- a/src/game/java/net/minecraft/client/audio/ITickableSound.java +++ b/src/game/java/net/minecraft/client/audio/ITickableSound.java @@ -5,13 +5,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,8 +23,8 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITickableSound extends ISound, ITickable { boolean isDonePlaying(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/MovingSound.java b/src/game/java/net/minecraft/client/audio/MovingSound.java index afca9184..928203c3 100644 --- a/src/game/java/net/minecraft/client/audio/MovingSound.java +++ b/src/game/java/net/minecraft/client/audio/MovingSound.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MovingSound extends PositionedSound implements ITickableSound { protected boolean donePlaying = false; @@ -32,7 +32,8 @@ public abstract class MovingSound extends PositionedSound implements ITickableSo super(location); } + @Override public boolean isDonePlaying() { return this.donePlaying; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/MovingSoundMinecart.java b/src/game/java/net/minecraft/client/audio/MovingSoundMinecart.java index 7e4df41c..726ef727 100644 --- a/src/game/java/net/minecraft/client/audio/MovingSoundMinecart.java +++ b/src/game/java/net/minecraft/client/audio/MovingSoundMinecart.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MovingSoundMinecart extends MovingSound { private final EntityMinecart minecart; @@ -35,12 +35,12 @@ public class MovingSoundMinecart extends MovingSound { super(new ResourceLocation("minecraft:minecart.base")); this.minecart = minecartIn; this.repeat = true; - this.repeatDelay = 0; } /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.minecart.isDead) { this.donePlaying = true; @@ -57,7 +57,6 @@ public class MovingSoundMinecart extends MovingSound { this.distance = 0.0F; this.volume = 0.0F; } - } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/MovingSoundMinecartRiding.java b/src/game/java/net/minecraft/client/audio/MovingSoundMinecartRiding.java index 0fa8050e..972bc0ca 100644 --- a/src/game/java/net/minecraft/client/audio/MovingSoundMinecartRiding.java +++ b/src/game/java/net/minecraft/client/audio/MovingSoundMinecartRiding.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MovingSoundMinecartRiding extends MovingSound { private final EntityPlayer player; @@ -38,12 +38,12 @@ public class MovingSoundMinecartRiding extends MovingSound { this.minecart = minecart; this.attenuationType = ISound.AttenuationType.NONE; this.repeat = true; - this.repeatDelay = 0; } /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (!this.minecart.isDead && this.player.isRiding() && this.player.ridingEntity == this.minecart) { float f = MathHelper.sqrt_double( @@ -58,4 +58,4 @@ public class MovingSoundMinecartRiding extends MovingSound { this.donePlaying = true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/MusicTicker.java b/src/game/java/net/minecraft/client/audio/MusicTicker.java index f8457789..66db5119 100644 --- a/src/game/java/net/minecraft/client/audio/MusicTicker.java +++ b/src/game/java/net/minecraft/client/audio/MusicTicker.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MusicTicker implements ITickable { public static enum MusicType { @@ -90,6 +90,7 @@ public class MusicTicker implements ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { MusicTicker.MusicType musicticker$musictype = this.mc.getAmbientMusicType(); if (this.currentMusic != null) { @@ -112,4 +113,4 @@ public class MusicTicker implements ITickable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/PositionedSound.java b/src/game/java/net/minecraft/client/audio/PositionedSound.java index 6a681ae3..2c28e42a 100644 --- a/src/game/java/net/minecraft/client/audio/PositionedSound.java +++ b/src/game/java/net/minecraft/client/audio/PositionedSound.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class PositionedSound implements ISound { protected final ResourceLocation positionedSoundLocation; @@ -33,49 +33,49 @@ public abstract class PositionedSound implements ISound { protected float yPosF; protected float zPosF; protected boolean repeat = false; - /** - * + The number of ticks between repeating the sound - */ - protected int repeatDelay = 0; protected ISound.AttenuationType attenuationType = ISound.AttenuationType.LINEAR; protected PositionedSound(ResourceLocation soundResource) { this.positionedSoundLocation = soundResource; } + @Override public boolean canRepeat() { return this.repeat; } + @Override public ISound.AttenuationType getAttenuationType() { return this.attenuationType; } + @Override public float getPitch() { return this.pitch; } - public int getRepeatDelay() { - return this.repeatDelay; - } - + @Override public ResourceLocation getSoundLocation() { return this.positionedSoundLocation; } + @Override public float getVolume() { return this.volume; } + @Override public float getXPosF() { return this.xPosF; } + @Override public float getYPosF() { return this.yPosF; } + @Override public float getZPosF() { return this.zPosF; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/PositionedSoundRecord.java b/src/game/java/net/minecraft/client/audio/PositionedSoundRecord.java index 008852c5..9fe661e8 100644 --- a/src/game/java/net/minecraft/client/audio/PositionedSoundRecord.java +++ b/src/game/java/net/minecraft/client/audio/PositionedSoundRecord.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,28 +23,27 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PositionedSoundRecord extends PositionedSound { public static PositionedSoundRecord create(ResourceLocation soundResource) { - return new PositionedSoundRecord(soundResource, 1.0F, 1.0F, false, 0, ISound.AttenuationType.NONE, 0.0F, 0.0F, + return new PositionedSoundRecord(soundResource, 1.0F, 1.0F, false, ISound.AttenuationType.NONE, 0.0F, 0.0F, 0.0F); } public static PositionedSoundRecord create(ResourceLocation soundResource, float pitch) { - return new PositionedSoundRecord(soundResource, 0.25F, pitch, false, 0, ISound.AttenuationType.NONE, 0.0F, 0.0F, + return new PositionedSoundRecord(soundResource, 0.25F, pitch, false, ISound.AttenuationType.NONE, 0.0F, 0.0F, 0.0F); } public static PositionedSoundRecord create(ResourceLocation soundResource, float xPosition, float yPosition, float zPosition) { - return new PositionedSoundRecord(soundResource, 4.0F, 1.0F, false, 0, ISound.AttenuationType.LINEAR, xPosition, + return new PositionedSoundRecord(soundResource, 4.0F, 1.0F, false, ISound.AttenuationType.LINEAR, xPosition, yPosition, zPosition); } private PositionedSoundRecord(ResourceLocation soundResource, float volume, float pitch, boolean repeat, - int repeatDelay, ISound.AttenuationType attenuationType, float xPosition, float yPosition, - float zPosition) { + ISound.AttenuationType attenuationType, float xPosition, float yPosition, float zPosition) { super(soundResource); this.volume = volume; this.pitch = pitch; @@ -52,12 +51,11 @@ public class PositionedSoundRecord extends PositionedSound { this.yPosF = yPosition; this.zPosF = zPosition; this.repeat = repeat; - this.repeatDelay = repeatDelay; this.attenuationType = attenuationType; } public PositionedSoundRecord(ResourceLocation soundResource, float volume, float pitch, float xPosition, float yPosition, float zPosition) { - this(soundResource, volume, pitch, false, 0, ISound.AttenuationType.LINEAR, xPosition, yPosition, zPosition); + this(soundResource, volume, pitch, false, ISound.AttenuationType.LINEAR, xPosition, yPosition, zPosition); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/SoundCategory.java b/src/game/java/net/minecraft/client/audio/SoundCategory.java index 6fba43f6..8ec6d1e4 100644 --- a/src/game/java/net/minecraft/client/audio/SoundCategory.java +++ b/src/game/java/net/minecraft/client/audio/SoundCategory.java @@ -7,13 +7,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum SoundCategory { MASTER("master", 0), MUSIC("music", 1), RECORDS("record", 2), WEATHER("weather", 3), BLOCKS("block", 4), @@ -70,4 +70,4 @@ public enum SoundCategory { public String getCategoryName() { return this.categoryName; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/SoundEventAccessor.java b/src/game/java/net/minecraft/client/audio/SoundEventAccessor.java index 850d276e..0b19d597 100644 --- a/src/game/java/net/minecraft/client/audio/SoundEventAccessor.java +++ b/src/game/java/net/minecraft/client/audio/SoundEventAccessor.java @@ -3,13 +3,13 @@ package net.minecraft.client.audio; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.audio; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SoundEventAccessor implements ISoundEventAccessor { private final SoundPoolEntry entry; @@ -32,11 +32,13 @@ public class SoundEventAccessor implements ISoundEventAccessor { this.weight = weight; } + @Override public SoundPoolEntry cloneEntry() { return new SoundPoolEntry(this.entry); } + @Override public int getWeight() { return this.weight; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/audio/SoundEventAccessorComposite.java b/src/game/java/net/minecraft/client/audio/SoundEventAccessorComposite.java index 5e820535..25912475 100644 --- a/src/game/java/net/minecraft/client/audio/SoundEventAccessorComposite.java +++ b/src/game/java/net/minecraft/client/audio/SoundEventAccessorComposite.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SoundEventAccessorComposite implements ISoundEventAccessor { /** @@ -53,6 +53,7 @@ public class SoundEventAccessorComposite implements ISoundEventAccessor { + @Override public SoundList deserialize(JSONObject jsonobject) throws JSONException { SoundList soundlist = new SoundList(); soundlist.setReplaceExisting(jsonobject.optBoolean("replace", false)); @@ -85,4 +86,4 @@ public class SoundListSerializer implements JSONTypeDeserializer { private Map soundRegistry; @@ -40,6 +40,7 @@ public class SoundRegistry extends RegistrySimple createUnderlyingMap() { this.soundRegistry = Maps.newHashMap(); return this.soundRegistry; @@ -48,4 +49,4 @@ public class SoundRegistry extends RegistrySimple{@code null} is not allowed! If you * are not an entity in the world, return the coordinates 0, 0, 0 */ + @Override public BlockPos getPosition() { return new BlockPos(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D); } @@ -84,6 +88,7 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.otherPlayerMPPosRotationIncrements > 0) { double d0 = this.posX @@ -135,6 +140,7 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.renderOffsetY = 0.0F; super.onUpdate(); @@ -164,6 +170,7 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { * + Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ + @Override public void setCurrentItemOrArmor(int slotIn, ItemStack stack) { if (slotIn == 0) { this.inventory.mainInventory[this.inventory.currentItem] = stack; @@ -173,6 +180,7 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { } + @Override public void setPositionAndRotation2(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean parFlag) { this.otherPlayerMPX = x; @@ -182,4 +190,4 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { this.otherPlayerMPPitch = (double) pitch; this.otherPlayerMPPosRotationIncrements = posRotationIncrements; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/entity/EntityPlayerSP.java b/src/game/java/net/minecraft/client/entity/EntityPlayerSP.java index 4a81eec8..2026b318 100644 --- a/src/game/java/net/minecraft/client/entity/EntityPlayerSP.java +++ b/src/game/java/net/minecraft/client/entity/EntityPlayerSP.java @@ -54,17 +54,18 @@ import net.minecraft.util.MovementInput; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IInteractionObject; import net.minecraft.world.World; +import net.starlikeclient.minecraft.guis.GuisStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -76,7 +77,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPlayerSP extends AbstractClientPlayer { public final NetHandlerPlayClient sendQueue; @@ -113,6 +114,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { this.statWriter = statWriter; } + @Override public void addChatComponentMessage(IChatComponent chatComponent) { this.mc.ingameGUI.getChatGUI().printChatMessage(chatComponent); } @@ -120,6 +122,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Send a chat message to the CommandSender */ + @Override public void addChatMessage(IChatComponent ichatcomponent) { this.mc.ingameGUI.getChatGUI().printChatMessage(ichatcomponent); } @@ -127,6 +130,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Adds a value to a statistic field. */ + @Override public void addStat(StatBase stat, int amount) { if (stat != null) { if (stat.isIndependent) { @@ -139,6 +143,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource source, float amount) { return false; } @@ -147,6 +152,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { * + Returns {@code true} if the CommandSender is allowed to execute the * command, {@code false} if not */ + @Override public boolean canCommandSenderUseCommand(int i, String var2) { return i <= 0; } @@ -154,6 +160,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + set current crafting inventory back to the 2x2 square */ + @Override public void closeScreen() { this.sendQueue.addToSendQueue(new C0DPacketCloseWindow(this.openContainer.windowId)); this.closeScreenAndDropStack(); @@ -170,12 +177,14 @@ public class EntityPlayerSP extends AbstractClientPlayer { * from the armor first and then health second with the reduced value. Args: * damageAmount */ + @Override protected void damageEntity(DamageSource damageSrc, float damageAmount) { if (!this.isEntityInvulnerable(damageSrc)) { this.setHealth(this.getHealth() - damageAmount); } } + @Override public void displayGui(IInteractionObject guiOwner) { String s = guiOwner.getGuiID(); if ("minecraft:crafting_table".equals(s)) { @@ -184,13 +193,15 @@ public class EntityPlayerSP extends AbstractClientPlayer { this.mc.displayGuiScreen(new GuiEnchantment(this.inventory, this.worldObj, guiOwner)); } else if ("minecraft:anvil".equals(s)) { this.mc.displayGuiScreen(new GuiRepair(this.inventory, this.worldObj)); + } else { + GuisStarlike.displayGui(guiOwner, this); } - } /** * + Displays the GUI for interacting with a book. */ + @Override public void displayGUIBook(ItemStack bookStack) { Item item = bookStack.getItem(); if (item == Items.writable_book) { @@ -203,6 +214,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { * + Displays the GUI for interacting with a chest inventory. Args: * chestInventory */ + @Override public void displayGUIChest(IInventory chestInventory) { String s = chestInventory instanceof IInteractionObject ? ((IInteractionObject) chestInventory).getGuiID() : "minecraft:container"; @@ -216,18 +228,19 @@ public class EntityPlayerSP extends AbstractClientPlayer { this.mc.displayGuiScreen(new GuiBrewingStand(this.inventory, chestInventory)); } else if ("minecraft:beacon".equals(s)) { this.mc.displayGuiScreen(new GuiBeacon(this.inventory, chestInventory)); - } else if (!"minecraft:dispenser".equals(s) && !"minecraft:dropper".equals(s)) { - this.mc.displayGuiScreen(new GuiChest(this.inventory, chestInventory)); - } else { + } else if ("minecraft:dispenser".equals(s) || "minecraft:dropper".equals(s)) { this.mc.displayGuiScreen(new GuiDispenser(this.inventory, chestInventory)); + } else { + this.mc.displayGuiScreen(new GuiChest(this.inventory, chestInventory)); } - } + @Override public void displayGUIHorse(EntityHorse horse, IInventory horseInventory) { this.mc.displayGuiScreen(new GuiScreenHorseInventory(this.inventory, horseInventory, horse)); } + @Override public void displayVillagerTradeGui(IMerchant villager) { this.mc.displayGuiScreen(new GuiMerchant(this.inventory, villager, this.worldObj)); } @@ -235,6 +248,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Called when player presses the drop item key */ + @Override public EntityItem dropOneItem(boolean dropAll) { C07PacketPlayerDigging.Action c07packetplayerdigging$action = dropAll ? C07PacketPlayerDigging.Action.DROP_ALL_ITEMS @@ -256,6 +270,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { * + Get the position in the world. {@code null} is not allowed! If you * are not an entity in the world, return the coordinates 0, 0, 0 */ + @Override public BlockPos getPosition() { return new BlockPos(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D); } @@ -267,6 +282,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Heal living entity (param: amount of half-hearts) */ + @Override public void heal(float healAmount) { } @@ -291,6 +307,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Returns whether the entity is in a server world */ + @Override public boolean isServerWorld() { return true; } @@ -298,6 +315,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Returns if this entity is sneaking. */ + @Override public boolean isSneaking() { boolean flag = this.movementInput != null ? this.movementInput.sneak : false; return flag && !this.sleeping; @@ -306,6 +324,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + returns true if this is an EntityPlayerSP, or the logged in player. */ + @Override public boolean isUser() { return true; } @@ -313,12 +332,14 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Joins the passed in entity item with the world. Args: entityItem */ + @Override protected void joinEntityItemWithWorld(EntityItem itemIn) { } /** * + Called when a player mounts an entity. e.g. mounts a pig, mounts a boat. */ + @Override public void mountEntity(Entity entityIn) { super.mountEntity(entityIn); if (entityIn instanceof EntityMinecart) { @@ -331,10 +352,12 @@ public class EntityPlayerSP extends AbstractClientPlayer { * + Called when the player performs a critical hit on the Entity. Args: entity * that was hit critically */ + @Override public void onCriticalHit(Entity entityHit) { this.mc.effectRenderer.emitParticleAtEntity(entityHit, EnumParticleTypes.CRIT); } + @Override public void onEnchantmentCritical(Entity entityHit) { this.mc.effectRenderer.emitParticleAtEntity(entityHit, EnumParticleTypes.CRIT_MAGIC); } @@ -344,6 +367,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.sprintingTicksLeft > 0) { --this.sprintingTicksLeft; @@ -495,6 +519,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (this.worldObj.isBlockLoaded(new BlockPos(this.posX, 0.0D, this.posZ))) { super.onUpdate(); @@ -585,18 +610,22 @@ public class EntityPlayerSP extends AbstractClientPlayer { } + @Override public void openEditCommandBlock(CommandBlockLogic cmdBlockLogic) { this.mc.displayGuiScreen(new GuiCommandBlock(cmdBlockLogic)); } + @Override public void openEditSign(TileEntitySign signTile) { this.mc.displayGuiScreen(new GuiEditSign(signTile)); } + @Override public void playSound(String name, float volume, float pitch) { this.worldObj.playSound(this.posX, this.posY, this.posZ, name, volume, pitch, false); } + @Override protected boolean pushOutOfBlocks(double x, double y, double z) { if (this.noClip) { return false; @@ -649,6 +678,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { } } + @Override public void respawnPlayer() { this.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN)); } @@ -678,6 +708,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Sends the player's abilities to the server (if there is one). */ + @Override public void sendPlayerAbilities() { this.sendQueue.addToSendQueue(new C13PacketPlayerAbilities(this.capabilities)); } @@ -714,6 +745,7 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Set sprinting switch for Entity. */ + @Override public void setSprinting(boolean sprinting) { super.setSprinting(sprinting); this.sprintingTicksLeft = sprinting ? 600 : 0; @@ -731,11 +763,13 @@ public class EntityPlayerSP extends AbstractClientPlayer { /** * + Swings the item the player is holding. */ + @Override public void swingItem() { super.swingItem(); this.sendQueue.addToSendQueue(new C0APacketAnimation()); } + @Override public void updateEntityActionState() { super.updateEntityActionState(); if (this.isCurrentViewEntity()) { @@ -751,4 +785,4 @@ public class EntityPlayerSP extends AbstractClientPlayer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/ChatLine.java b/src/game/java/net/minecraft/client/gui/ChatLine.java index b2649cba..2d4db377 100644 --- a/src/game/java/net/minecraft/client/gui/ChatLine.java +++ b/src/game/java/net/minecraft/client/gui/ChatLine.java @@ -7,13 +7,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatLine { private final int updateCounterCreated; @@ -57,4 +57,4 @@ public class ChatLine { public int getUpdatedCounter() { return this.updateCounterCreated; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/FontRenderer.java b/src/game/java/net/minecraft/client/gui/FontRenderer.java index d8f44c8f..257dd83a 100644 --- a/src/game/java/net/minecraft/client/gui/FontRenderer.java +++ b/src/game/java/net/minecraft/client/gui/FontRenderer.java @@ -25,13 +25,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FontRenderer implements IResourceManagerReloadListener { protected static final ResourceLocation[] unicodePageLocations = new ResourceLocation[256]; @@ -356,6 +356,7 @@ public class FontRenderer implements IResourceManagerReloadListener { this.renderEngine.bindTexture(this.getUnicodePageLocation(parInt1)); } + @Override public void onResourceManagerReload(IResourceManager resourceManager) { this.readFontTexture(); } @@ -861,4 +862,4 @@ public class FontRenderer implements IResourceManagerReloadListener { return s + "\n" + this.wrapFormattedStringToWidth(s1, wrapWidth, ++depthCheck); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/Gui.java b/src/game/java/net/minecraft/client/gui/Gui.java index f1e7fa85..edc35b38 100644 --- a/src/game/java/net/minecraft/client/gui/Gui.java +++ b/src/game/java/net/minecraft/client/gui/Gui.java @@ -15,13 +15,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Gui { public static final ResourceLocation optionsBackground = new ResourceLocation( @@ -259,4 +259,4 @@ public class Gui { drawRect(x, startY + 1, x + 1, endY, color); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiButton.java b/src/game/java/net/minecraft/client/gui/GuiButton.java index 769a5364..794cfd7a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiButton.java +++ b/src/game/java/net/minecraft/client/gui/GuiButton.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiButton extends Gui { protected static final ResourceLocation buttonTextures = new ResourceLocation("textures/gui/widgets.png"); @@ -174,4 +174,4 @@ public class GuiButton extends Gui { this.width = width; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiButtonLanguage.java b/src/game/java/net/minecraft/client/gui/GuiButtonLanguage.java index ebc56b10..fa7a391d 100644 --- a/src/game/java/net/minecraft/client/gui/GuiButtonLanguage.java +++ b/src/game/java/net/minecraft/client/gui/GuiButtonLanguage.java @@ -8,13 +8,13 @@ import net.minecraft.client.Minecraft; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiButtonLanguage extends GuiButton { public GuiButtonLanguage(int buttonID, int xPos, int yPos) { @@ -36,6 +36,7 @@ public class GuiButtonLanguage extends GuiButton { /** * + Draws this button to the screen. */ + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { minecraft.getTextureManager().bindTexture(GuiButton.buttonTextures); @@ -51,4 +52,4 @@ public class GuiButtonLanguage extends GuiButton { this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, k, this.width, this.height); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiChat.java b/src/game/java/net/minecraft/client/gui/GuiChat.java index 10b22467..fd4e4e43 100644 --- a/src/game/java/net/minecraft/client/gui/GuiChat.java +++ b/src/game/java/net/minecraft/client/gui/GuiChat.java @@ -28,13 +28,13 @@ import net.minecraft.util.MovingObjectPosition; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.util.MovingObjectPosition; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiChat extends GuiScreenVisualViewport { private static final Logger logger = LogManager.getLogger(); @@ -77,6 +77,7 @@ public class GuiChat extends GuiScreenVisualViewport { this.defaultInputFieldText = defaultText; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 69) { this.mc.displayGuiScreen(null); @@ -127,6 +128,7 @@ public class GuiChat extends GuiScreenVisualViewport { this.inputField.writeText((String) this.foundPlayerNames.get(this.autocompleteIndex++)); } + @Override public boolean blockPTTKey() { return true; } @@ -135,10 +137,12 @@ public class GuiChat extends GuiScreenVisualViewport { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return false; } + @Override public void drawScreen0(int i, int j, float f) { drawRect(2, this.height - 14, this.width - 2, this.height - 2, Integer.MIN_VALUE); this.inputField.drawTextBox(); @@ -156,6 +160,7 @@ public class GuiChat extends GuiScreenVisualViewport { super.drawScreen0(i, j, f); } + @Override public void fireInputEvent(EnumInputEvent event, String str) { inputField.fireInputEvent(event, str); } @@ -186,6 +191,7 @@ public class GuiChat extends GuiScreenVisualViewport { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); int i = Mouse.getEventDWheel(); @@ -212,6 +218,7 @@ public class GuiChat extends GuiScreenVisualViewport { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); if (!(this instanceof GuiSleepMP)) { @@ -236,6 +243,7 @@ public class GuiChat extends GuiScreenVisualViewport { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (parInt1 == 1 && (this.mc.gameSettings.keyBindClose.getKeyCode() == 0 || Keyboard.areKeysLocked())) { this.mc.displayGuiScreen((GuiScreen) null); @@ -271,6 +279,7 @@ public class GuiChat extends GuiScreenVisualViewport { } + @Override protected void mouseClicked0(int parInt1, int parInt2, int parInt3) { if (parInt3 == 0) { IChatComponent ichatcomponent = this.mc.ingameGUI.getChatGUI() @@ -318,6 +327,7 @@ public class GuiChat extends GuiScreenVisualViewport { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); this.mc.ingameGUI.getChatGUI().resetScroll(); @@ -339,6 +349,7 @@ public class GuiChat extends GuiScreenVisualViewport { /** * + Sets the text of the chat */ + @Override protected void setText(String newChatText, boolean shouldOverwrite) { if (shouldOverwrite) { this.inputField.setText(newChatText); @@ -348,10 +359,12 @@ public class GuiChat extends GuiScreenVisualViewport { } + @Override public boolean showCopyPasteButtons() { return true; } + @Override public void updateScreen0() { this.inputField.updateCursorCounter(); if (notifBellButton != null && mc.thePlayer != null) { @@ -359,4 +372,4 @@ public class GuiChat extends GuiScreenVisualViewport { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiCommandBlock.java b/src/game/java/net/minecraft/client/gui/GuiCommandBlock.java index e6920ec1..bdbfd43e 100644 --- a/src/game/java/net/minecraft/client/gui/GuiCommandBlock.java +++ b/src/game/java/net/minecraft/client/gui/GuiCommandBlock.java @@ -14,13 +14,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCommandBlock extends GuiScreen { private static final Logger field_146488_a = LogManager.getLogger(); @@ -52,6 +52,7 @@ public class GuiCommandBlock extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 1) { @@ -77,6 +78,7 @@ public class GuiCommandBlock extends GuiScreen { } } + @Override public boolean blockPTTKey() { return commandTextField.isFocused() || previousOutputTextField.isFocused(); } @@ -85,6 +87,7 @@ public class GuiCommandBlock extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("advMode.setCommand", new Object[0]), this.width / 2, @@ -138,6 +141,7 @@ public class GuiCommandBlock extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -164,6 +168,7 @@ public class GuiCommandBlock extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { this.commandTextField.textboxKeyTyped(parChar1, parInt1); this.previousOutputTextField.textboxKeyTyped(parChar1, parInt1); @@ -181,6 +186,7 @@ public class GuiCommandBlock extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.commandTextField.mouseClicked(parInt1, parInt2, parInt3); @@ -190,6 +196,7 @@ public class GuiCommandBlock extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -202,8 +209,9 @@ public class GuiCommandBlock extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.commandTextField.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiConfirmOpenLink.java b/src/game/java/net/minecraft/client/gui/GuiConfirmOpenLink.java index 378d4598..b0c53e90 100644 --- a/src/game/java/net/minecraft/client/gui/GuiConfirmOpenLink.java +++ b/src/game/java/net/minecraft/client/gui/GuiConfirmOpenLink.java @@ -5,13 +5,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiConfirmOpenLink extends GuiYesNo { private final String openLinkWarning; @@ -46,6 +46,7 @@ public class GuiConfirmOpenLink extends GuiYesNo { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 2) { this.copyLinkToClipboard(); @@ -69,6 +70,7 @@ public class GuiConfirmOpenLink extends GuiYesNo { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); if (this.showSecurityWarning) { @@ -82,6 +84,7 @@ public class GuiConfirmOpenLink extends GuiYesNo { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); this.buttonList.clear(); @@ -92,4 +95,4 @@ public class GuiConfirmOpenLink extends GuiYesNo { this.buttonList .add(new GuiButton(1, this.width / 2 - 50 + 105, this.height / 6 + 96, 100, 20, this.cancelButtonText)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiControls.java b/src/game/java/net/minecraft/client/gui/GuiControls.java index 36a83036..503f676a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiControls.java +++ b/src/game/java/net/minecraft/client/gui/GuiControls.java @@ -10,13 +10,13 @@ import net.minecraft.client.settings.KeyBinding; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.client.settings.KeyBinding; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiControls extends GuiScreen { private static final GameSettings.Options[] optionsArr = new GameSettings.Options[] { @@ -54,6 +54,7 @@ public class GuiControls extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 200) { this.mc.displayGuiScreen(this.parentScreen); @@ -76,6 +77,7 @@ public class GuiControls extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.keyBindingList.drawScreen(i, j, f); @@ -97,11 +99,13 @@ public class GuiControls extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.keyBindingList.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.keyBindingList.handleTouchInput(); @@ -112,6 +116,7 @@ public class GuiControls extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.keyBindingList = new GuiKeyBindingList(this, this.mc); this.buttonList.add(new GuiButton(200, this.width / 2 - 155, this.height - 29, 150, 20, @@ -141,6 +146,7 @@ public class GuiControls extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (this.buttonId != null) { if (parInt1 == 1) { @@ -163,6 +169,7 @@ public class GuiControls extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { if (this.buttonId != null) { this.options.setOptionKeyBinding(this.buttonId, -100 + parInt3); @@ -178,10 +185,11 @@ public class GuiControls extends GuiScreen { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { if (k != 0 || !this.keyBindingList.mouseReleased(i, j, k)) { super.mouseReleased(i, j, k); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiCreateFlatWorld.java b/src/game/java/net/minecraft/client/gui/GuiCreateFlatWorld.java index ebe541a5..4017d406 100644 --- a/src/game/java/net/minecraft/client/gui/GuiCreateFlatWorld.java +++ b/src/game/java/net/minecraft/client/gui/GuiCreateFlatWorld.java @@ -20,13 +20,13 @@ import net.minecraft.world.gen.FlatLayerInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.gen.FlatLayerInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCreateFlatWorld extends GuiScreen { class Details extends GuiSlot { @@ -49,9 +49,11 @@ public class GuiCreateFlatWorld extends GuiScreen { GuiCreateFlatWorld.this.height - 60, 24); } + @Override protected void drawBackground() { } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { FlatLayerInfo flatlayerinfo = (FlatLayerInfo) GuiCreateFlatWorld.this.theFlatGeneratorInfo.getFlatLayers() .get(GuiCreateFlatWorld.this.theFlatGeneratorInfo.getFlatLayers().size() - i - 1); @@ -95,6 +97,7 @@ public class GuiCreateFlatWorld extends GuiScreen { j + 2 + 213 - GuiCreateFlatWorld.this.fontRendererObj.getStringWidth(s1), k + 3, 16777215); } + @Override protected void elementClicked(int i, boolean var2, int var3, int var4) { this.field_148228_k = i; GuiCreateFlatWorld.this.func_146375_g(); @@ -141,14 +144,17 @@ public class GuiCreateFlatWorld extends GuiScreen { this.func_148224_c(parInt1, parInt2, 0, 0); } + @Override protected int getScrollBarX() { return this.width - 70; } + @Override protected int getSize() { return GuiCreateFlatWorld.this.theFlatGeneratorInfo.getFlatLayers().size(); } + @Override protected boolean isSelected(int i) { return i == this.field_148228_k; } @@ -174,6 +180,7 @@ public class GuiCreateFlatWorld extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { int i = this.theFlatGeneratorInfo.getFlatLayers().size() - this.createFlatWorldListSlotGui.field_148228_k - 1; if (parGuiButton.id == 1) { @@ -197,6 +204,7 @@ public class GuiCreateFlatWorld extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.createFlatWorldListSlotGui.drawScreen(i, j, f); @@ -232,11 +240,13 @@ public class GuiCreateFlatWorld extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.createFlatWorldListSlotGui.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.createFlatWorldListSlotGui.handleTouchInput(); @@ -247,6 +257,7 @@ public class GuiCreateFlatWorld extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); this.flatWorldTitle = I18n.format("createWorld.customize.flat.title", new Object[0]); @@ -269,4 +280,4 @@ public class GuiCreateFlatWorld extends GuiScreen { this.theFlatGeneratorInfo.func_82645_d(); this.func_146375_g(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiCreateWorld.java b/src/game/java/net/minecraft/client/gui/GuiCreateWorld.java index db4333cd..f2241a31 100644 --- a/src/game/java/net/minecraft/client/gui/GuiCreateWorld.java +++ b/src/game/java/net/minecraft/client/gui/GuiCreateWorld.java @@ -16,13 +16,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCreateWorld extends GuiScreen { /** @@ -98,6 +98,7 @@ public class GuiCreateWorld extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 1) { @@ -215,6 +216,7 @@ public class GuiCreateWorld extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("selectWorld.create", new Object[0]), this.width / 2, @@ -387,6 +389,7 @@ public class GuiCreateWorld extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -428,6 +431,7 @@ public class GuiCreateWorld extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (this.field_146333_g.isFocused() && !this.field_146344_y) { this.field_146333_g.textboxKeyTyped(parChar1, parInt1); @@ -448,6 +452,7 @@ public class GuiCreateWorld extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); if (this.field_146344_y) { @@ -461,6 +466,7 @@ public class GuiCreateWorld extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -473,9 +479,10 @@ public class GuiCreateWorld extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.field_146333_g.updateCursorCounter(); this.field_146335_h.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiCustomizeSkin.java b/src/game/java/net/minecraft/client/gui/GuiCustomizeSkin.java index 199d9610..66a7ee12 100644 --- a/src/game/java/net/minecraft/client/gui/GuiCustomizeSkin.java +++ b/src/game/java/net/minecraft/client/gui/GuiCustomizeSkin.java @@ -6,13 +6,13 @@ import net.minecraft.entity.player.EnumPlayerModelParts; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.player.EnumPlayerModelParts; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCustomizeSkin extends GuiScreen { class ButtonPart extends GuiButton { @@ -51,6 +51,7 @@ public class GuiCustomizeSkin extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 200) { @@ -74,6 +75,7 @@ public class GuiCustomizeSkin extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, this.title, this.width / 2, 20, 16777215); @@ -100,6 +102,7 @@ public class GuiCustomizeSkin extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { int i = 0; this.title = I18n.format("options.skinCustomisation.title", new Object[0]); @@ -123,4 +126,4 @@ public class GuiCustomizeSkin extends GuiScreen { this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 40 + 24 * (i >> 1), I18n.format("gui.done", new Object[0]))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiCustomizeWorldScreen.java b/src/game/java/net/minecraft/client/gui/GuiCustomizeWorldScreen.java index 942514d9..d3158ab5 100644 --- a/src/game/java/net/minecraft/client/gui/GuiCustomizeWorldScreen.java +++ b/src/game/java/net/minecraft/client/gui/GuiCustomizeWorldScreen.java @@ -20,13 +20,13 @@ import net.minecraft.world.gen.ChunkProviderSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.gen.ChunkProviderSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCustomizeWorldScreen extends GuiScreen implements GuiSlider.FormatHelper, GuiPageButtonList.GuiResponder { @@ -60,6 +60,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen private int field_175339_B = 0; private boolean field_175340_C = false; private Predicate field_175332_D = new Predicate() { + @Override public boolean apply(String s) { Float f = Floats.tryParse(s); return s.length() == 0 || f != null && Floats.isFinite(f.floatValue()) && f.floatValue() >= 0.0F; @@ -81,6 +82,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { switch (parGuiButton.id) { @@ -149,6 +151,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.field_175349_r.drawScreen(i, j, f); @@ -199,6 +202,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen field_175349_r.fireInputEvent(event, param); } + @Override public void func_175319_a(int i, String s) { float f = 0.0F; @@ -270,6 +274,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen } + @Override public void func_175321_a(int i, boolean flag) { switch (i) { case 148: @@ -835,6 +840,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen this.field_175346_u.enabled = parFlag; } + @Override public String getText(int i, String s, float f) { return s + ": " + this.func_175330_b(i, f); } @@ -842,11 +848,13 @@ public class GuiCustomizeWorldScreen extends GuiScreen /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.field_175349_r.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.field_175349_r.handleTouchInput(); @@ -857,6 +865,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { int i = 0; int j = 0; @@ -906,6 +915,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { super.keyTyped(parChar1, parInt1); if (this.field_175339_B == 0) { @@ -926,6 +936,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); if (this.field_175339_B == 0 && !this.field_175340_C) { @@ -937,6 +948,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { super.mouseReleased(i, j, k); if (this.field_175340_C) { @@ -946,6 +958,7 @@ public class GuiCustomizeWorldScreen extends GuiScreen } } + @Override public void onTick(int i, float f) { switch (i) { case 100: @@ -1212,4 +1225,4 @@ public class GuiCustomizeWorldScreen extends GuiScreen return field_175349_r.isTextFieldFocused(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiDisconnected.java b/src/game/java/net/minecraft/client/gui/GuiDisconnected.java index 1a4f782b..b30cbef9 100644 --- a/src/game/java/net/minecraft/client/gui/GuiDisconnected.java +++ b/src/game/java/net/minecraft/client/gui/GuiDisconnected.java @@ -12,13 +12,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiDisconnected extends GuiScreen { public static GuiScreen createRateLimitKick(GuiScreen prev) { @@ -54,6 +54,7 @@ public class GuiDisconnected extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.mc.displayGuiScreen(this.parentScreen); @@ -65,6 +66,7 @@ public class GuiDisconnected extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, this.reason, this.width / 2, @@ -86,6 +88,7 @@ public class GuiDisconnected extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); this.multilineMessage = this.fontRendererObj.listFormattedStringToWidth(this.message.getFormattedText(), @@ -101,9 +104,11 @@ public class GuiDisconnected extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } + @Override public void updateScreen() { IPCPacket15Crashed[] pkt = SingleplayerServerController.worldStatusErrors(); if (pkt != null && pkt.length > 0) { @@ -111,4 +116,4 @@ public class GuiDisconnected extends GuiScreen { GuiScreenIntegratedServerBusy.createException(this, "singleplayer.failed.serverCrash", pkt)); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiDownloadTerrain.java b/src/game/java/net/minecraft/client/gui/GuiDownloadTerrain.java index 8f24797c..b10387d5 100644 --- a/src/game/java/net/minecraft/client/gui/GuiDownloadTerrain.java +++ b/src/game/java/net/minecraft/client/gui/GuiDownloadTerrain.java @@ -7,13 +7,13 @@ import net.minecraft.network.play.client.C00PacketKeepAlive; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.network.play.client.C00PacketKeepAlive; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiDownloadTerrain extends GuiScreen { private NetHandlerPlayClient netHandlerPlayClient; @@ -35,6 +35,7 @@ public class GuiDownloadTerrain extends GuiScreen { this.netHandlerPlayClient = netHandler; } + @Override public boolean canCloseGui() { return false; } @@ -43,6 +44,7 @@ public class GuiDownloadTerrain extends GuiScreen { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return false; } @@ -51,6 +53,7 @@ public class GuiDownloadTerrain extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawBackground(0); this.drawCenteredString(this.fontRendererObj, I18n.format("multiplayer.downloadingTerrain", new Object[0]), @@ -63,6 +66,7 @@ public class GuiDownloadTerrain extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); } @@ -72,9 +76,11 @@ public class GuiDownloadTerrain extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } + @Override public boolean shouldHangupIntegratedServer() { return false; } @@ -82,6 +88,7 @@ public class GuiDownloadTerrain extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { ++this.progress; if (this.progress % 20 == 0) { @@ -90,4 +97,4 @@ public class GuiDownloadTerrain extends GuiScreen { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiEnchantment.java b/src/game/java/net/minecraft/client/gui/GuiEnchantment.java index 2ae1ba2f..6c3bd9f3 100644 --- a/src/game/java/net/minecraft/client/gui/GuiEnchantment.java +++ b/src/game/java/net/minecraft/client/gui/GuiEnchantment.java @@ -30,13 +30,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiEnchantment extends GuiContainer { /** @@ -92,6 +92,7 @@ public class GuiEnchantment extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(ENCHANTMENT_TABLE_GUI_TEXTURE); @@ -207,6 +208,7 @@ public class GuiEnchantment extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(this.field_175380_I.getDisplayName().getUnformattedText(), 12, 5, 4210752); this.fontRendererObj.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, @@ -217,6 +219,7 @@ public class GuiEnchantment extends GuiContainer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); boolean flag = this.mc.thePlayer.capabilities.isCreativeMode; @@ -316,6 +319,7 @@ public class GuiEnchantment extends GuiContainer { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); int i = (this.width - this.xSize) / 2; @@ -334,8 +338,9 @@ public class GuiEnchantment extends GuiContainer { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); this.func_147068_g(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiErrorScreen.java b/src/game/java/net/minecraft/client/gui/GuiErrorScreen.java index b07d5349..2ae900c5 100644 --- a/src/game/java/net/minecraft/client/gui/GuiErrorScreen.java +++ b/src/game/java/net/minecraft/client/gui/GuiErrorScreen.java @@ -5,13 +5,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiErrorScreen extends GuiScreen { private String field_146313_a; @@ -38,6 +38,7 @@ public class GuiErrorScreen extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { this.mc.displayGuiScreen((GuiScreen) null); } @@ -46,6 +47,7 @@ public class GuiErrorScreen extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawGradientRect(0, 0, this.width, this.height, -12574688, -11530224); this.drawCenteredString(this.fontRendererObj, this.field_146313_a, this.width / 2, 90, 16777215); @@ -58,6 +60,7 @@ public class GuiErrorScreen extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, 140, I18n.format("gui.cancel", new Object[0]))); @@ -68,6 +71,7 @@ public class GuiErrorScreen extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiFlatPresets.java b/src/game/java/net/minecraft/client/gui/GuiFlatPresets.java index b7e6ffeb..e7f1efc4 100644 --- a/src/game/java/net/minecraft/client/gui/GuiFlatPresets.java +++ b/src/game/java/net/minecraft/client/gui/GuiFlatPresets.java @@ -27,13 +27,13 @@ import net.minecraft.world.gen.FlatLayerInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.gen.FlatLayerInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiFlatPresets extends GuiScreen { static class LayerItem { @@ -70,9 +70,11 @@ public class GuiFlatPresets extends GuiScreen { GuiFlatPresets.this.height - 37, 24); } + @Override protected void drawBackground() { } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { GuiFlatPresets.LayerItem guiflatpresets$layeritem = (GuiFlatPresets.LayerItem) GuiFlatPresets.FLAT_WORLD_PRESETS .get(i); @@ -81,6 +83,7 @@ public class GuiFlatPresets extends GuiScreen { 16777215); } + @Override protected void elementClicked(int i, boolean var2, int var3, int var4) { this.field_148175_k = i; GuiFlatPresets.this.func_146426_g(); @@ -127,10 +130,12 @@ public class GuiFlatPresets extends GuiScreen { GlStateManager.disableRescaleNormal(); } + @Override protected int getSize() { return GuiFlatPresets.FLAT_WORLD_PRESETS.size(); } + @Override protected boolean isSelected(int i) { return i == this.field_148175_k; } @@ -227,6 +232,7 @@ public class GuiFlatPresets extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0 && this.func_146430_p()) { this.parentScreen.func_146383_a(this.field_146433_u.getText()); @@ -241,6 +247,7 @@ public class GuiFlatPresets extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.field_146435_s.drawScreen(i, j, f); @@ -269,11 +276,13 @@ public class GuiFlatPresets extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.field_146435_s.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.field_146435_s.handleTouchInput(); @@ -284,6 +293,7 @@ public class GuiFlatPresets extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); Keyboard.enableRepeatEvents(true); @@ -306,6 +316,7 @@ public class GuiFlatPresets extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (!this.field_146433_u.textboxKeyTyped(parChar1, parInt1)) { super.keyTyped(parChar1, parInt1); @@ -316,6 +327,7 @@ public class GuiFlatPresets extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { this.field_146433_u.mouseClicked(parInt1, parInt2, parInt3); super.mouseClicked(parInt1, parInt2, parInt3); @@ -324,6 +336,7 @@ public class GuiFlatPresets extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -336,9 +349,10 @@ public class GuiFlatPresets extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.field_146433_u.updateCursorCounter(); super.updateScreen(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiGameOver.java b/src/game/java/net/minecraft/client/gui/GuiGameOver.java index 52ce44b8..ad1697aa 100644 --- a/src/game/java/net/minecraft/client/gui/GuiGameOver.java +++ b/src/game/java/net/minecraft/client/gui/GuiGameOver.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { private int enableButtonsTimer; @@ -36,6 +36,7 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { switch (parGuiButton.id) { case 0: @@ -63,6 +64,7 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { } + @Override public void confirmClicked(boolean flag, int var2) { if (flag) { this.mc.theWorld.sendQuittingDisconnectingPacket(); @@ -79,6 +81,7 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return false; } @@ -87,6 +90,7 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawGradientRect(0, 0, this.width, this.height, 1615855616, -1602211792); GlStateManager.pushMatrix(); @@ -111,6 +115,7 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); if (this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { @@ -142,12 +147,14 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); ++this.enableButtonsTimer; @@ -158,4 +165,4 @@ public class GuiGameOver extends GuiScreen implements GuiYesNoCallback { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiHopper.java b/src/game/java/net/minecraft/client/gui/GuiHopper.java index fc41ee13..542866d8 100644 --- a/src/game/java/net/minecraft/client/gui/GuiHopper.java +++ b/src/game/java/net/minecraft/client/gui/GuiHopper.java @@ -11,13 +11,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiHopper extends GuiContainer { /** @@ -51,6 +51,7 @@ public class GuiHopper extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(HOPPER_GUI_TEXTURE); @@ -63,9 +64,10 @@ public class GuiHopper extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(this.hopperInventory.getDisplayName().getUnformattedText(), 8, 6, 4210752); this.fontRendererObj.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiIngame.java b/src/game/java/net/minecraft/client/gui/GuiIngame.java index d5d48f0a..bde0fb85 100644 --- a/src/game/java/net/minecraft/client/gui/GuiIngame.java +++ b/src/game/java/net/minecraft/client/gui/GuiIngame.java @@ -59,17 +59,18 @@ import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StringUtils; import net.minecraft.world.border.WorldBorder; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -81,7 +82,7 @@ import net.minecraft.world.border.WorldBorder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiIngame extends Gui { private static final ResourceLocation vignetteTexPath = new ResourceLocation("textures/misc/vignette.png"); @@ -223,12 +224,16 @@ public class GuiIngame extends Gui { && touchVPosX < interactButtonX + interactButtonW && touchVPosY < interactButtonY + interactButtonH; float f = MathHelper.clamp_float(mc.gameSettings.touchControlOpacity, 0.0f, 1.0f); if (f > 0.0f) { + if (f < 1.0f) + GlStateManager.enableBlend(); GlStateManager.color(1.0f, 1.0f, 1.0f, f); drawTexturedModalRect(xx, yy, 0, hover ? 216 : 236, 118, 20); GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); drawCenteredString(mc.fontRendererObj, I18n.format("touch.interact.entity"), parScaledResolution.getScaledWidth() / 2, yy + 6, (hover ? 16777120 : 14737632) | ((int) (f * 255.0f) << 24)); + if (f < 1.0f) + GlStateManager.disableBlend(); } } else { interactButtonX = -1; @@ -571,6 +576,13 @@ public class GuiIngame extends Gui { GlStateManager.enableDepth(); GlStateManager.disableLighting(); + if (StarlikeClient.Config.General.isDevBuild) { + drawRect(0, 0, i, 12, 0xAAFFFF00); + mc.fontRendererObj.drawStringWithShadow(StarlikeClient.Config.General.devBuildWarning, + (i - mc.fontRendererObj.getStringWidth(StarlikeClient.Config.General.devBuildWarning)) / 2, 2, + 0xFFFFFF); + } + ItemStack itemstack = this.mc.thePlayer.inventory.armorItemInSlot(3); if (this.mc.gameSettings.thirdPersonView == 0 && itemstack != null && itemstack.getItem() == Item.getItemFromBlock(Blocks.pumpkin)) { @@ -1038,6 +1050,7 @@ public class GuiIngame extends Gui { Scoreboard scoreboard = parScoreObjective.getScoreboard(); Collection collection = scoreboard.getSortedScores(parScoreObjective); ArrayList arraylist = Lists.newArrayList(Iterables.filter(collection, new Predicate() { + @Override public boolean apply(Score score2) { return score2.getPlayerName() != null && !score2.getPlayerName().startsWith("#"); } @@ -1303,4 +1316,4 @@ public class GuiIngame extends Gui { hotbarSlotTouchAlreadySelected = false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiIngameMenu.java b/src/game/java/net/minecraft/client/gui/GuiIngameMenu.java index 6d5f8479..a54fb865 100644 --- a/src/game/java/net/minecraft/client/gui/GuiIngameMenu.java +++ b/src/game/java/net/minecraft/client/gui/GuiIngameMenu.java @@ -30,13 +30,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiIngameMenu extends GuiScreen { @@ -71,6 +71,7 @@ public class GuiIngameMenu extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { switch (parGuiButton.id) { case 0: @@ -158,6 +159,7 @@ public class GuiIngameMenu extends GuiScreen { } + @Override public void confirmClicked(boolean par1, int par2) { mc.displayGuiScreen(this); LANServerController.closeLANNoKick(); @@ -173,6 +175,7 @@ public class GuiIngameMenu extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); String titleStr = I18n.format("menu.game", new Object[0]); @@ -258,6 +261,7 @@ public class GuiIngameMenu extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); this.updateCheckerOverlay.setResolution(mc, width, height); @@ -315,10 +319,12 @@ public class GuiIngameMenu extends GuiScreen { } } + @Override protected boolean isPartOfPauseMenu() { return true; } + @Override protected void keyTyped(char par1, int par2) { try { if (EagRuntime.getConfiguration().isAllowVoiceClient() @@ -330,6 +336,7 @@ public class GuiIngameMenu extends GuiScreen { } } + @Override protected void mouseClicked(int par1, int par2, int par3) { try { if (EagRuntime.getConfiguration().isAllowVoiceClient() @@ -369,6 +376,7 @@ public class GuiIngameMenu extends GuiScreen { super.mouseClicked(par1, par2, par3); } + @Override protected void mouseReleased(int par1, int par2, int par3) { try { if (EagRuntime.getConfiguration().isAllowVoiceClient() @@ -380,6 +388,7 @@ public class GuiIngameMenu extends GuiScreen { } } + @Override public void setWorldAndResolution(Minecraft par1Minecraft, int par2, int par3) { super.setWorldAndResolution(par1Minecraft, par2, par3); if (EagRuntime.getConfiguration().isAllowVoiceClient()) { @@ -390,6 +399,7 @@ public class GuiIngameMenu extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); if (EagRuntime.getConfiguration().isAllowVoiceClient() @@ -403,4 +413,4 @@ public class GuiIngameMenu extends GuiScreen { notifBellButton.setUnread(mc.thePlayer.sendQueue.getNotifManager().getUnread()); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiKeyBindingList.java b/src/game/java/net/minecraft/client/gui/GuiKeyBindingList.java index b73daca9..1173688f 100644 --- a/src/game/java/net/minecraft/client/gui/GuiKeyBindingList.java +++ b/src/game/java/net/minecraft/client/gui/GuiKeyBindingList.java @@ -13,13 +13,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiKeyBindingList extends GuiListExtended { public class CategoryEntry implements GuiListExtended.IGuiListEntry { @@ -43,19 +43,23 @@ public class GuiKeyBindingList extends GuiListExtended { this.labelWidth = GuiKeyBindingList.this.mc.fontRendererObj.getStringWidth(this.labelText); } + @Override public void drawEntry(int var1, int var2, int i, int var4, int j, int var6, int var7, boolean var8) { GuiKeyBindingList.this.mc.fontRendererObj.drawString(this.labelText, GuiKeyBindingList.this.mc.currentScreen.width / 2 - this.labelWidth / 2, i + j - GuiKeyBindingList.this.mc.fontRendererObj.FONT_HEIGHT - 1, 16777215); } + @Override public boolean mousePressed(int var1, int var2, int var3, int var4, int var5, int var6) { return false; } + @Override public void mouseReleased(int var1, int var2, int var3, int var4, int var5, int var6) { } + @Override public void setSelected(int var1, int var2, int var3) { } } @@ -74,6 +78,7 @@ public class GuiKeyBindingList extends GuiListExtended { this.btnReset = new GuiButton(0, 0, 0, 50, 20, I18n.format("controls.reset", new Object[0])); } + @Override public void drawEntry(int var1, int i, int j, int var4, int k, int l, int i1, boolean var8) { boolean flag = GuiKeyBindingList.this.field_148191_k.buttonId == this.keybinding; GuiKeyBindingList.this.mc.fontRendererObj.drawString(this.keyDesc, @@ -109,6 +114,7 @@ public class GuiKeyBindingList extends GuiListExtended { this.btnChangeKeyBinding.drawButton(GuiKeyBindingList.this.mc, l, i1); } + @Override public boolean mousePressed(int var1, int i, int j, int var4, int var5, int var6) { if (var4 != 0 && var4 != 12345) return false; @@ -128,6 +134,7 @@ public class GuiKeyBindingList extends GuiListExtended { } } + @Override public void mouseReleased(int var1, int i, int j, int var4, int var5, int var6) { if (var4 != 0 && var4 != 12345) return; @@ -138,6 +145,7 @@ public class GuiKeyBindingList extends GuiListExtended { this.btnReset.mouseReleased(i, j); } + @Override public void setSelected(int var1, int var2, int var3) { } } @@ -180,6 +188,7 @@ public class GuiKeyBindingList extends GuiListExtended { /** * + Gets the IGuiListEntry object for the given index */ + @Override public GuiListExtended.IGuiListEntry getListEntry(int i) { return this.listEntries[i]; } @@ -187,15 +196,18 @@ public class GuiKeyBindingList extends GuiListExtended { /** * + Gets the width of the list */ + @Override public int getListWidth() { return super.getListWidth() + 32; } + @Override protected int getScrollBarX() { return super.getScrollBarX() + 15; } + @Override protected int getSize() { return this.listEntries.length; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiLabel.java b/src/game/java/net/minecraft/client/gui/GuiLabel.java index 137c1c9d..ebe25f2d 100644 --- a/src/game/java/net/minecraft/client/gui/GuiLabel.java +++ b/src/game/java/net/minecraft/client/gui/GuiLabel.java @@ -14,13 +14,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiLabel extends Gui { protected int field_146167_a = 200; @@ -116,4 +116,4 @@ public class GuiLabel extends Gui { this.centered = true; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiLanguage.java b/src/game/java/net/minecraft/client/gui/GuiLanguage.java index 057e2031..f60ac235 100644 --- a/src/game/java/net/minecraft/client/gui/GuiLanguage.java +++ b/src/game/java/net/minecraft/client/gui/GuiLanguage.java @@ -15,13 +15,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiLanguage extends GuiScreen { class List extends GuiSlot { @@ -50,10 +50,12 @@ public class GuiLanguage extends GuiScreen { } + @Override protected void drawBackground() { GuiLanguage.this.drawDefaultBackground(); } + @Override protected void drawSlot(int i, int var2, int j, int var4, int var5, int var6) { GuiLanguage.this.fontRendererObj.setBidiFlag(true); GuiLanguage.this.drawCenteredString(GuiLanguage.this.fontRendererObj, @@ -63,6 +65,7 @@ public class GuiLanguage extends GuiScreen { .setBidiFlag(GuiLanguage.this.languageManager.getCurrentLanguage().isBidirectional()); } + @Override protected void elementClicked(int i, boolean var2, int var3, int var4) { Language language = (Language) this.languageMap.get(this.langCodeList.get(i)); GuiLanguage.this.languageManager.setCurrentLanguage(language); @@ -80,14 +83,17 @@ public class GuiLanguage extends GuiScreen { GuiLanguage.this.mc.displayGuiScreen(GuiLanguage.this); } + @Override protected int getContentHeight() { return this.getSize() * 18; } + @Override protected int getSize() { return this.langCodeList.size(); } + @Override protected boolean isSelected(int i) { return ((String) this.langCodeList.get(i)) .equals(GuiLanguage.this.languageManager.getCurrentLanguage().getLanguageCode()); @@ -112,6 +118,7 @@ public class GuiLanguage extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { switch (parGuiButton.id) { @@ -142,6 +149,7 @@ public class GuiLanguage extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.list.drawScreen(i, j, f); this.drawCenteredString(this.fontRendererObj, I18n.format("options.language", new Object[0]), this.width / 2, @@ -154,11 +162,13 @@ public class GuiLanguage extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.list.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.list.handleTouchInput(); @@ -169,6 +179,7 @@ public class GuiLanguage extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.add(this.forceUnicodeFontBtn = new GuiOptionButton(100, this.width / 2 - 155, this.height - 38, GameSettings.Options.FORCE_UNICODE_FONT, @@ -178,4 +189,4 @@ public class GuiLanguage extends GuiScreen { this.list = new GuiLanguage.List(this.mc); this.list.registerScrollButtons(7, 8); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiListButton.java b/src/game/java/net/minecraft/client/gui/GuiListButton.java index 52be55c6..acddac36 100644 --- a/src/game/java/net/minecraft/client/gui/GuiListButton.java +++ b/src/game/java/net/minecraft/client/gui/GuiListButton.java @@ -6,13 +6,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiListButton extends GuiButton { private boolean field_175216_o; @@ -58,6 +58,7 @@ public class GuiListButton extends GuiButton { * + Returns true if the mouse has been pressed on this control. Equivalent of * MouseListener.mousePressed(MouseEvent e). */ + @Override public boolean mousePressed(Minecraft minecraft, int i, int j) { if (super.mousePressed(minecraft, i, j)) { this.field_175216_o = !this.field_175216_o; @@ -68,4 +69,4 @@ public class GuiListButton extends GuiButton { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiListExtended.java b/src/game/java/net/minecraft/client/gui/GuiListExtended.java index 54fda8d3..3711e630 100644 --- a/src/game/java/net/minecraft/client/gui/GuiListExtended.java +++ b/src/game/java/net/minecraft/client/gui/GuiListExtended.java @@ -5,13 +5,13 @@ import net.minecraft.client.Minecraft; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GuiListExtended extends GuiSlot { public interface IGuiListEntry { @@ -40,9 +40,11 @@ public abstract class GuiListExtended extends GuiSlot { super(mcIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn); } + @Override protected void drawBackground() { } + @Override protected void drawSlot(int entryID, int mouseXIn, int mouseYIn, int parInt4, int parInt5, int parInt6) { this.getListEntry(entryID).drawEntry(entryID, mouseXIn, mouseYIn, this.getListWidth(), parInt4, parInt5, parInt6, this.getSlotIndexFromScreenCoords(parInt5, parInt6) == entryID); @@ -52,9 +54,11 @@ public abstract class GuiListExtended extends GuiSlot { * + The element in the slot that was clicked, boolean for whether it was double * clicked or not */ + @Override protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) { } + @Override protected void func_178040_a(int parInt1, int parInt2, int parInt3) { this.getListEntry(parInt1).setSelected(parInt1, parInt2, parInt3); } @@ -64,6 +68,7 @@ public abstract class GuiListExtended extends GuiSlot { /** * + Returns true if the element passed in is currently selected */ + @Override protected boolean isSelected(int slotIndex) { return false; } @@ -98,4 +103,4 @@ public abstract class GuiListExtended extends GuiSlot { this.setEnabled(true); return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiLockIconButton.java b/src/game/java/net/minecraft/client/gui/GuiLockIconButton.java index d9b25bc9..2b865093 100644 --- a/src/game/java/net/minecraft/client/gui/GuiLockIconButton.java +++ b/src/game/java/net/minecraft/client/gui/GuiLockIconButton.java @@ -6,13 +6,13 @@ import net.minecraft.client.Minecraft; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiLockIconButton extends GuiButton { static enum Icon { @@ -57,6 +57,7 @@ public class GuiLockIconButton extends GuiButton { /** * + Draws this button to the screen. */ + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { minecraft.getTextureManager().bindTexture(GuiButton.buttonTextures); @@ -92,4 +93,4 @@ public class GuiLockIconButton extends GuiButton { public boolean func_175230_c() { return this.field_175231_o; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiMainMenu.java b/src/game/java/net/minecraft/client/gui/GuiMainMenu.java index ee0f7595..df49bd47 100644 --- a/src/game/java/net/minecraft/client/gui/GuiMainMenu.java +++ b/src/game/java/net/minecraft/client/gui/GuiMainMenu.java @@ -56,13 +56,13 @@ import net.minecraft.world.storage.ISaveFormat; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -74,7 +74,7 @@ import net.minecraft.world.storage.ISaveFormat; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { private static final Logger logger = LogManager.getLogger(); @@ -183,6 +183,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); @@ -264,6 +265,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { } } + @Override public void confirmClicked(boolean flag, int i) { if (flag && i == 12) { this.mc.gameSettings.hasCreatedDemoWorld = false; @@ -281,6 +283,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return false; } @@ -377,6 +380,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { GlStateManager.disableAlpha(); if (enableBlur) { @@ -435,30 +439,24 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256); GlStateManager.popMatrix(); - String s = EaglercraftVersion.mainMenuStringA; - if (this.mc.isDemo()) { - s += " Demo"; + for (int i1 = 0; i1 < EaglercraftVersion.mainMenuStringLeft.length; ++i1) { + String s = EaglercraftVersion.mainMenuStringLeft[i1]; + this.drawString(this.fontRendererObj, s, 2, + this.height - (EaglercraftVersion.mainMenuStringLeft.length - i1) * 10, -1); } - this.drawString(this.fontRendererObj, s, 2, this.height - 20, -1); - s = EaglercraftVersion.mainMenuStringB; - this.drawString(this.fontRendererObj, s, 2, this.height - 10, -1); - String s1 = EaglercraftVersion.mainMenuStringC; - this.drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, - this.height - 20, -1); - s1 = EaglercraftVersion.mainMenuStringD; - if (this.mc.isDemo()) { - s1 = "Copyright Mojang AB. Do not distribute!"; + for (int i1 = 0; i1 < EaglercraftVersion.mainMenuStringRight.length; ++i1) { + String s = EaglercraftVersion.mainMenuStringRight[i1]; + this.drawString(this.fontRendererObj, s, this.width - this.fontRendererObj.getStringWidth(s) - 2, + this.height - (EaglercraftVersion.mainMenuStringRight.length - i1) * 10, -1); } - this.drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, - this.height - 10, -1); if (!this.mc.isDemo()) { GlStateManager.pushMatrix(); GlStateManager.scale(0.75f, 0.75f, 0.75f); int www = 0; int hhh = 0; - s1 = EaglercraftVersion.mainMenuStringG; + String s1 = EaglercraftVersion.mainMenuStringG; if (s1 != null) { www = this.fontRendererObj.getStringWidth(s1); hhh += 10; @@ -528,6 +526,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { if (viewportTexture == null) { viewportTexture = new DynamicTexture(256, 256); @@ -586,12 +585,14 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int par1, int par2, int par3) { if (par3 == 0) { String lbl = "CREDITS.txt"; @@ -729,6 +730,7 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { ++this.panoramaTimer; if (downloadOfflineButton != null) { @@ -739,4 +741,4 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { shouldReload = false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiMemoryErrorScreen.java b/src/game/java/net/minecraft/client/gui/GuiMemoryErrorScreen.java index 561fa578..dd458793 100644 --- a/src/game/java/net/minecraft/client/gui/GuiMemoryErrorScreen.java +++ b/src/game/java/net/minecraft/client/gui/GuiMemoryErrorScreen.java @@ -5,13 +5,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,13 +23,14 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiMemoryErrorScreen extends GuiScreen { /** * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.mc.displayGuiScreen(new GuiMainMenu()); @@ -43,6 +44,7 @@ public class GuiMemoryErrorScreen extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, "Out of memory!", this.width / 2, this.height / 4 - 60 + 20, @@ -71,6 +73,7 @@ public class GuiMemoryErrorScreen extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiOptionButton(0, this.width / 2 - 155, this.height / 4 + 120 + 12, @@ -84,6 +87,7 @@ public class GuiMemoryErrorScreen extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiMerchant.java b/src/game/java/net/minecraft/client/gui/GuiMerchant.java index 48dad073..d5a25f5a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiMerchant.java +++ b/src/game/java/net/minecraft/client/gui/GuiMerchant.java @@ -25,13 +25,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiMerchant extends GuiContainer { static class MerchantButton extends GuiButton { @@ -54,6 +54,7 @@ public class GuiMerchant extends GuiContainer { this.field_146157_o = parFlag; } + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { minecraft.getTextureManager().bindTexture(GuiMerchant.MERCHANT_GUI_TEXTURE); @@ -103,6 +104,7 @@ public class GuiMerchant extends GuiContainer { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { boolean flag = false; if (parGuiButton == this.nextButton) { @@ -134,6 +136,7 @@ public class GuiMerchant extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(MERCHANT_GUI_TEXTURE); @@ -163,6 +166,7 @@ public class GuiMerchant extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { String s = this.chatComponent.getUnformattedText(); this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 4210752); @@ -174,6 +178,7 @@ public class GuiMerchant extends GuiContainer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.thePlayer); @@ -231,6 +236,7 @@ public class GuiMerchant extends GuiContainer { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); int i = (this.width - this.xSize) / 2; @@ -244,6 +250,7 @@ public class GuiMerchant extends GuiContainer { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.thePlayer); @@ -253,4 +260,4 @@ public class GuiMerchant extends GuiContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiMultiplayer.java b/src/game/java/net/minecraft/client/gui/GuiMultiplayer.java index 0caebe6c..cf19a5b9 100644 --- a/src/game/java/net/minecraft/client/gui/GuiMultiplayer.java +++ b/src/game/java/net/minecraft/client/gui/GuiMultiplayer.java @@ -26,17 +26,18 @@ import net.minecraft.client.multiplayer.ServerList; import net.minecraft.client.resources.I18n; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +49,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { private static final Logger logger = LogManager.getLogger(); @@ -92,6 +93,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { GuiListExtended.IGuiListEntry guilistextended$iguilistentry = this.serverListSelector.func_148193_k() < 0 @@ -144,6 +146,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { this.directConnect = false; } + @Override public void confirmClicked(boolean flag, int var2) { GuiListExtended.IGuiListEntry guilistextended$iguilistentry = this.serverListSelector.func_148193_k() < 0 ? null : this.serverListSelector.getListEntry(this.serverListSelector.func_148193_k()); @@ -236,13 +239,13 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { this.buttonList.add(this.btnEditServer = new GuiButton(7, this.width / 2 - 154, this.height - 28, 70, 20, I18n.format("selectServer.edit", new Object[0])) { { - enabled = false; + enabled = StarlikeClient.Config.Features.enableMultiplayer; } }); this.buttonList.add(this.btnDeleteServer = new GuiButton(2, this.width / 2 - 74, this.height - 28, 70, 20, I18n.format("selectServer.delete", new Object[0])) { { - enabled = false; + enabled = StarlikeClient.Config.Features.enableMultiplayer; } }); this.buttonList.add(this.btnSelectServer = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, @@ -252,7 +255,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, I18n.format("selectServer.add", new Object[0])) { { - enabled = false; + enabled = StarlikeClient.Config.Features.enableMultiplayer; } }); this.buttonList.add(new GuiButton(8, this.width / 2 + 4, this.height - 28, 70, 20, @@ -284,6 +287,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.hoveringText = null; this.drawDefaultBackground(); @@ -338,11 +342,13 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.serverListSelector.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.serverListSelector.handleTouchInput(); @@ -353,6 +359,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -365,9 +372,8 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { this.serverListSelector.func_148195_a(this.savedServerList); if (lanServerList == null) { lanServerList = new LANServerList(); - } else { - lanServerList.forceRefresh(); } + lanServerList.forceRefresh(); } else { this.serverListSelector.setDimensions(this.width, this.height, 32, this.height - 64); } @@ -380,6 +386,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { int i = this.serverListSelector.func_148193_k(); GuiListExtended.IGuiListEntry guilistextended$iguilistentry = i < 0 ? null @@ -431,6 +438,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { relaysButton.mouseClicked(parInt1, parInt2, parInt3); super.mouseClicked(parInt1, parInt2, parInt3); @@ -448,6 +456,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { super.mouseReleased(i, j, k); this.serverListSelector.mouseReleased(i, j, k); @@ -456,6 +465,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -488,6 +498,7 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); this.savedServerList.updateServerPing(); @@ -496,4 +507,4 @@ public class GuiMultiplayer extends GuiScreen implements GuiYesNoCallback { } ++ticksOpened; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiNewChat.java b/src/game/java/net/minecraft/client/gui/GuiNewChat.java index f71e6a06..d9773444 100644 --- a/src/game/java/net/minecraft/client/gui/GuiNewChat.java +++ b/src/game/java/net/minecraft/client/gui/GuiNewChat.java @@ -17,13 +17,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiNewChat extends Gui { private static final Logger logger = LogManager.getLogger(); @@ -345,4 +345,4 @@ public class GuiNewChat extends Gui { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiOptionButton.java b/src/game/java/net/minecraft/client/gui/GuiOptionButton.java index cab10e8a..19247fba 100644 --- a/src/game/java/net/minecraft/client/gui/GuiOptionButton.java +++ b/src/game/java/net/minecraft/client/gui/GuiOptionButton.java @@ -5,13 +5,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiOptionButton extends GuiButton { private final GameSettings.Options enumOptions; @@ -45,4 +45,4 @@ public class GuiOptionButton extends GuiButton { public GameSettings.Options returnEnumOptions() { return this.enumOptions; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiOptionSlider.java b/src/game/java/net/minecraft/client/gui/GuiOptionSlider.java index aa565402..60c77bd9 100644 --- a/src/game/java/net/minecraft/client/gui/GuiOptionSlider.java +++ b/src/game/java/net/minecraft/client/gui/GuiOptionSlider.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiOptionSlider extends GuiButton { public float sliderValue; @@ -59,10 +59,12 @@ public class GuiOptionSlider extends GuiButton { * + Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over * this button and 2 if it IS hovering over this button. */ + @Override protected int getHoverState(boolean var1) { return 0; } + @Override public boolean isSliderTouchEvents() { return true; } @@ -71,6 +73,7 @@ public class GuiOptionSlider extends GuiButton { * + Fired when the mouse button is dragged. Equivalent of * MouseListener.mouseDragged(MouseEvent e). */ + @Override protected void mouseDragged(Minecraft minecraft, int i, int var3) { if (this.visible) { if (this.dragging) { @@ -95,6 +98,7 @@ public class GuiOptionSlider extends GuiButton { * + Returns true if the mouse has been pressed on this control. Equivalent of * MouseListener.mousePressed(MouseEvent e). */ + @Override public boolean mousePressed(Minecraft minecraft, int i, int j) { if (super.mousePressed(minecraft, i, j)) { this.sliderValue = (float) (i - (this.xPosition + 4)) / (float) (this.width - 8); @@ -112,7 +116,8 @@ public class GuiOptionSlider extends GuiButton { * + Fired when the mouse button is released. Equivalent of * MouseListener.mouseReleased(MouseEvent e). */ + @Override public void mouseReleased(int var1, int var2) { this.dragging = false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiOptions.java b/src/game/java/net/minecraft/client/gui/GuiOptions.java index 90758d7c..1d92a3a2 100644 --- a/src/game/java/net/minecraft/client/gui/GuiOptions.java +++ b/src/game/java/net/minecraft/client/gui/GuiOptions.java @@ -31,13 +31,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { private static final GameSettings.Options[] field_146440_f = new GameSettings.Options[] { @@ -70,6 +70,7 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id < 100 && parGuiButton instanceof GuiOptionButton) { @@ -164,6 +165,7 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { } } + @Override public void confirmClicked(boolean flag, int i) { this.mc.displayGuiScreen(this); if (i == 109 && flag && this.mc.theWorld != null) { @@ -180,6 +182,7 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, this.field_146442_a, this.width / 2, 15, 16777215); @@ -243,6 +246,7 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { int i = 0; this.field_146442_a = I18n.format("options.title", new Object[0]); @@ -321,6 +325,7 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { } } + @Override protected void mouseClicked(int mx, int my, int button) { super.mouseClicked(mx, my, button); if (mc.theWorld == null && !EagRuntime.getConfiguration().isDemo()) { @@ -343,4 +348,4 @@ public class GuiOptions extends GuiScreen implements GuiYesNoCallback { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiOptionsRowList.java b/src/game/java/net/minecraft/client/gui/GuiOptionsRowList.java index d7ff128b..6be2e2e3 100644 --- a/src/game/java/net/minecraft/client/gui/GuiOptionsRowList.java +++ b/src/game/java/net/minecraft/client/gui/GuiOptionsRowList.java @@ -11,13 +11,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiOptionsRowList extends GuiListExtended { public static class Row implements GuiListExtended.IGuiListEntry { @@ -42,6 +42,7 @@ public class GuiOptionsRowList extends GuiListExtended { this.field_148324_c = parGuiButton2; } + @Override public void drawEntry(int var1, int var2, int i, int var4, int var5, int j, int k, boolean var8) { if (this.field_148323_b != null) { this.field_148323_b.yPosition = i; @@ -55,6 +56,7 @@ public class GuiOptionsRowList extends GuiListExtended { } + @Override public boolean mousePressed(int var1, int i, int j, int var4, int var5, int var6) { if (var4 != 0 && var4 != 12345) return false; @@ -85,6 +87,7 @@ public class GuiOptionsRowList extends GuiListExtended { } } + @Override public void mouseReleased(int var1, int i, int j, int var4, int var5, int var6) { if (var4 != 0 && var4 != 12345) return; @@ -101,6 +104,7 @@ public class GuiOptionsRowList extends GuiListExtended { } + @Override public void setSelected(int var1, int var2, int var3) { } } @@ -159,6 +163,7 @@ public class GuiOptionsRowList extends GuiListExtended { /** * + Gets the IGuiListEntry object for the given index */ + @Override public GuiOptionsRowList.Row getListEntry(int i) { return (GuiOptionsRowList.Row) this.field_148184_k.get(i); } @@ -166,14 +171,17 @@ public class GuiOptionsRowList extends GuiListExtended { /** * + Gets the width of the list */ + @Override public int getListWidth() { return 400; } + @Override protected int getScrollBarX() { return super.getScrollBarX() + 32; } + @Override protected int getSize() { return this.field_148184_k.size(); } @@ -200,4 +208,4 @@ public class GuiOptionsRowList extends GuiListExtended { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiOverlayDebug.java b/src/game/java/net/minecraft/client/gui/GuiOverlayDebug.java index 0d8b5ae8..150a391c 100644 --- a/src/game/java/net/minecraft/client/gui/GuiOverlayDebug.java +++ b/src/game/java/net/minecraft/client/gui/GuiOverlayDebug.java @@ -43,17 +43,19 @@ import net.minecraft.world.DifficultyInstance; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; +import net.starlikeclient.Culling; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -65,7 +67,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiOverlayDebug extends Gui { public static final int ticksAtMidnight = 18000; @@ -175,6 +177,16 @@ public class GuiOverlayDebug extends Gui { Integer.valueOf(blockpos1.getY()), Integer.valueOf(blockpos1.getZ()) })); } + if (StarlikeClient.Config.Culling.enableCulling && !this.mc.thePlayer.isSpectator()) { + Culling culling = Culling.getInstance(); + arraylist.add(""); + arraylist.add("[Culling] Last pass: " + culling.lastPass + "ms"); + arraylist.add("[Culling] Rendered Entities: " + culling.renderedEntities + " Skipped: " + + culling.culledEntities); + arraylist.add("[Culling] Rendered Block Entities: " + culling.renderedBlockEntities + " Skipped: " + + culling.culledBlockEntities); + } + return arraylist; } } @@ -410,7 +422,7 @@ public class GuiOverlayDebug extends Gui { protected List getDebugInfoRight() { ArrayList arraylist; - if (EagRuntime.getPlatformType() != EnumPlatformType.JAVASCRIPT) { + if (EagRuntime.getPlatformType() == EnumPlatformType.DESKTOP) { long i = EagRuntime.maxMemory(); long j = EagRuntime.totalMemory(); long k = EagRuntime.freeMemory(); @@ -553,4 +565,4 @@ public class GuiOverlayDebug extends Gui { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiPageButtonList.java b/src/game/java/net/minecraft/client/gui/GuiPageButtonList.java index 204625db..c9b7de8b 100644 --- a/src/game/java/net/minecraft/client/gui/GuiPageButtonList.java +++ b/src/game/java/net/minecraft/client/gui/GuiPageButtonList.java @@ -15,13 +15,13 @@ import net.minecraft.util.IntHashMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.IntHashMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiPageButtonList extends GuiListExtended { public static class EditBoxEntry extends GuiPageButtonList.GuiListEntry { @@ -82,6 +82,7 @@ public class GuiPageButtonList extends GuiListExtended { this.field_178030_c = parGui2; } + @Override public void drawEntry(int var1, int var2, int i, int var4, int var5, int j, int k, boolean var8) { this.func_178017_a(this.field_178029_b, i, j, k, false); this.func_178017_a(this.field_178030_c, i, j, k, false); @@ -176,6 +177,7 @@ public class GuiPageButtonList extends GuiListExtended { } + @Override public boolean mousePressed(int var1, int i, int j, int k, int var5, int var6) { if (k != 0 && k != 12345) return false; @@ -187,6 +189,7 @@ public class GuiPageButtonList extends GuiListExtended { return flag || flag1; } + @Override public void mouseReleased(int var1, int i, int j, int k, int var5, int var6) { if (k != 0 && k != 12345) return; @@ -197,6 +200,7 @@ public class GuiPageButtonList extends GuiListExtended { this.func_178016_b(this.field_178030_c, i, j, k); } + @Override public void setSelected(int var1, int var2, int i) { this.func_178017_a(this.field_178029_b, i, 0, 0, true); this.func_178017_a(this.field_178030_c, i, 0, 0, true); @@ -551,6 +555,7 @@ public class GuiPageButtonList extends GuiListExtended { /** * + Gets the IGuiListEntry object for the given index */ + @Override public GuiPageButtonList.GuiEntry getListEntry(int i) { return (GuiPageButtonList.GuiEntry) this.field_178074_u.get(i); } @@ -558,14 +563,17 @@ public class GuiPageButtonList extends GuiListExtended { /** * + Gets the width of the list */ + @Override public int getListWidth() { return 400; } + @Override protected int getScrollBarX() { return super.getScrollBarX() + 32; } + @Override public int getSize() { return this.field_178074_u.size(); } @@ -579,6 +587,7 @@ public class GuiPageButtonList extends GuiListExtended { return false; } + @Override public boolean mouseClicked(int i, int j, int k) { boolean flag = super.mouseClicked(i, j, k); int l = this.getSlotIndexFromScreenCoords(i, j); @@ -594,4 +603,4 @@ public class GuiPageButtonList extends GuiListExtended { return flag; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiPlayerTabOverlay.java b/src/game/java/net/minecraft/client/gui/GuiPlayerTabOverlay.java index becb8bdd..93eeb550 100644 --- a/src/game/java/net/minecraft/client/gui/GuiPlayerTabOverlay.java +++ b/src/game/java/net/minecraft/client/gui/GuiPlayerTabOverlay.java @@ -28,13 +28,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,13 +46,14 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiPlayerTabOverlay extends Gui { static class PlayerComparator implements Comparator { private PlayerComparator() { } + @Override public int compare(NetworkPlayerInfo networkplayerinfo, NetworkPlayerInfo networkplayerinfo1) { ScorePlayerTeam scoreplayerteam = networkplayerinfo.getPlayerTeam(); ScorePlayerTeam scoreplayerteam1 = networkplayerinfo1.getPlayerTeam(); @@ -371,4 +372,4 @@ public class GuiPlayerTabOverlay extends Gui { this.isBeingRendered = willBeRendered; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiRenameWorld.java b/src/game/java/net/minecraft/client/gui/GuiRenameWorld.java index 54d6c157..61bee31c 100644 --- a/src/game/java/net/minecraft/client/gui/GuiRenameWorld.java +++ b/src/game/java/net/minecraft/client/gui/GuiRenameWorld.java @@ -11,13 +11,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiRenameWorld extends GuiScreen { private GuiScreen parentScreen; @@ -53,6 +53,7 @@ public class GuiRenameWorld extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 1) { @@ -78,6 +79,7 @@ public class GuiRenameWorld extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, @@ -99,6 +101,7 @@ public class GuiRenameWorld extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -122,6 +125,7 @@ public class GuiRenameWorld extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { this.field_146583_f.textboxKeyTyped(parChar1, parInt1); ((GuiButton) this.buttonList.get(0)).enabled = this.field_146583_f.getText().trim().length() > 0; @@ -134,6 +138,7 @@ public class GuiRenameWorld extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.field_146583_f.mouseClicked(parInt1, parInt2, parInt3); @@ -142,6 +147,7 @@ public class GuiRenameWorld extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -154,8 +160,9 @@ public class GuiRenameWorld extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.field_146583_f.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiRepair.java b/src/game/java/net/minecraft/client/gui/GuiRepair.java index 446c46bc..bbfd6744 100644 --- a/src/game/java/net/minecraft/client/gui/GuiRepair.java +++ b/src/game/java/net/minecraft/client/gui/GuiRepair.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiRepair extends GuiContainer implements ICrafting { private static final ResourceLocation anvilResource = new ResourceLocation("textures/gui/container/anvil.png"); @@ -56,6 +56,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { this.anvil = (ContainerRepair) this.inventorySlots; } + @Override public boolean blockPTTKey() { return nameField.isFocused(); } @@ -63,6 +64,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(anvilResource); @@ -82,6 +84,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { GlStateManager.disableLighting(); GlStateManager.disableBlend(); @@ -123,6 +126,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); GlStateManager.disableLighting(); @@ -135,6 +139,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { nameField.fireInputEvent(event, param); } + @Override public void func_175173_a(Container parContainer, IInventory parIInventory) { } @@ -143,6 +148,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); Keyboard.enableRepeatEvents(true); @@ -162,6 +168,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (this.nameField.textboxKeyTyped(parChar1, parInt1)) { this.renameItem(); @@ -174,6 +181,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.nameField.mouseClicked(parInt1, parInt2, parInt3); @@ -182,6 +190,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { super.onGuiClosed(); Keyboard.enableRepeatEvents(false); @@ -207,6 +216,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * int identifies which variable to update, and the second contains the new * value. Both are truncated to shorts in non-local SMP. */ + @Override public void sendProgressBarUpdate(Container containerIn, int varToUpdate, int newValue) { } @@ -215,6 +225,7 @@ public class GuiRepair extends GuiContainer implements ICrafting { * doesn't have to match the actual contents of that slot. Args: Container, slot * number, slot contents */ + @Override public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) { if (slotInd == 0) { this.nameField.setText(stack == null ? "" : stack.getDisplayName()); @@ -234,8 +245,9 @@ public class GuiRepair extends GuiContainer implements ICrafting { /** * + update the crafting window inventory with the items in the list */ + @Override public void updateCraftingInventory(Container containerToSend, List itemsList) { this.sendSlotContents(containerToSend, 0, containerToSend.getSlot(0).getStack()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiResourcePackAvailable.java b/src/game/java/net/minecraft/client/gui/GuiResourcePackAvailable.java index c9f71b94..e888df46 100644 --- a/src/game/java/net/minecraft/client/gui/GuiResourcePackAvailable.java +++ b/src/game/java/net/minecraft/client/gui/GuiResourcePackAvailable.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.ResourcePackListEntry; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,14 +27,15 @@ import net.minecraft.client.resources.ResourcePackListEntry; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiResourcePackAvailable extends GuiResourcePackList { public GuiResourcePackAvailable(Minecraft mcIn, int parInt1, int parInt2, List parList) { super(mcIn, parInt1, parInt2, parList); } + @Override protected String getListHeader() { return I18n.format("resourcePack.available.title", new Object[0]); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiResourcePackList.java b/src/game/java/net/minecraft/client/gui/GuiResourcePackList.java index 8f5b6535..9579b34e 100644 --- a/src/game/java/net/minecraft/client/gui/GuiResourcePackList.java +++ b/src/game/java/net/minecraft/client/gui/GuiResourcePackList.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GuiResourcePackList extends GuiListExtended { protected final Minecraft mc; @@ -45,6 +45,7 @@ public abstract class GuiResourcePackList extends GuiListExtended { /** * + Handles drawing a list's header row. */ + @Override protected void drawListHeader(int i, int j, Tessellator var3) { String s = EnumChatFormatting.UNDERLINE + "" + EnumChatFormatting.BOLD + this.getListHeader(); this.mc.fontRendererObj.drawString(s, i + this.width / 2 - this.mc.fontRendererObj.getStringWidth(s) / 2, @@ -58,6 +59,7 @@ public abstract class GuiResourcePackList extends GuiListExtended { /** * + Gets the IGuiListEntry object for the given index */ + @Override public ResourcePackListEntry getListEntry(int i) { return (ResourcePackListEntry) this.getList().get(i); } @@ -67,15 +69,18 @@ public abstract class GuiResourcePackList extends GuiListExtended { /** * + Gets the width of the list */ + @Override public int getListWidth() { return this.width; } + @Override protected int getScrollBarX() { return this.right - 6; } + @Override protected int getSize() { return this.getList().size(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiResourcePackSelected.java b/src/game/java/net/minecraft/client/gui/GuiResourcePackSelected.java index 93917873..9292dd16 100644 --- a/src/game/java/net/minecraft/client/gui/GuiResourcePackSelected.java +++ b/src/game/java/net/minecraft/client/gui/GuiResourcePackSelected.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.ResourcePackListEntry; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,14 +27,15 @@ import net.minecraft.client.resources.ResourcePackListEntry; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiResourcePackSelected extends GuiResourcePackList { public GuiResourcePackSelected(Minecraft mcIn, int parInt1, int parInt2, List parList) { super(mcIn, parInt1, parInt2, parList); } + @Override protected String getListHeader() { return I18n.format("resourcePack.selected.title", new Object[0]); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreen.java b/src/game/java/net/minecraft/client/gui/GuiScreen.java index 95d0bfeb..b3a88dc4 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreen.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreen.java @@ -54,17 +54,18 @@ import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import net.minecraft.util.ResourceLocation; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -76,7 +77,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { private static final Logger LOGGER = LogManager.getLogger(); @@ -194,6 +195,7 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { return true; } + @Override public void confirmClicked(boolean flag, int i) { if (i == 31102009) { if (flag) { @@ -219,6 +221,7 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { */ public void drawBackground(int tint) { GlStateManager.disableLighting(); + GlStateManager.disableFog(); Tessellator tessellator = Tessellator.getInstance(); WorldRenderer worldrenderer = tessellator.getWorldRenderer(); @@ -340,6 +343,13 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { * renderPartialTicks */ public void drawScreen(int i, int j, float var3) { + if (StarlikeClient.Config.General.isDevBuild) { + drawRect(0, 0, this.width, 12, 0xAAFFFF00); + fontRendererObj.drawStringWithShadow(StarlikeClient.Config.General.devBuildWarning, + (this.width - fontRendererObj.getStringWidth(StarlikeClient.Config.General.devBuildWarning)) / 2, 2, + 0xFFFFFF); + } + for (int k = 0, l = this.buttonList.size(); k < l; ++k) { ((GuiButton) this.buttonList.get(k)).drawButton(this.mc, i, j); } @@ -350,7 +360,7 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { long millis = EagRuntime.steadyTimeMillis(); long closeKeyTimeout = millis - showingCloseKey; - if (closeKeyTimeout < 3000l) { + if (closeKeyTimeout < 3000l && showingCloseKey != 0l) { int alpha1 = 0xC0000000; int alpha2 = 0xFF000000; if (closeKeyTimeout > 2500l) { @@ -687,10 +697,11 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { } i = applyEaglerScale(scaleFac, i * this.width / this.mc.displayWidth, this.width); j = applyEaglerScale(scaleFac, this.height - j * this.height / this.mc.displayHeight - 1, this.height); - float si = Touch.getEventTouchRadiusX(t) * this.width / this.mc.displayWidth / scaleFac; + float rad = Touch.getEventTouchRadiusMixed(t); + float si = rad * this.width / this.mc.displayWidth / scaleFac; if (si < 1.0f) si = 1.0f; - float sj = Touch.getEventTouchRadiusY(t) * this.height / this.mc.displayHeight / scaleFac; + float sj = rad * this.height / this.mc.displayHeight / scaleFac; if (sj < 1.0f) sj = 1.0f; int[] ck = touchStarts.remove(u); @@ -929,4 +940,4 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { public void updateScreen() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenAddServer.java b/src/game/java/net/minecraft/client/gui/GuiScreenAddServer.java index 2f107689..0d9dcc87 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenAddServer.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenAddServer.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenAddServer extends GuiScreen { private final GuiScreen parentScreen; @@ -47,6 +47,7 @@ public class GuiScreenAddServer extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 3) { @@ -81,6 +82,7 @@ public class GuiScreenAddServer extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("addServer.title", new Object[0]), this.width / 2, 17, @@ -111,6 +113,7 @@ public class GuiScreenAddServer extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); int i = 80; @@ -157,6 +160,7 @@ public class GuiScreenAddServer extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { this.serverNameField.textboxKeyTyped(parChar1, parInt1); this.serverIPField.textboxKeyTyped(parChar1, parInt1); @@ -175,6 +179,7 @@ public class GuiScreenAddServer extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.serverIPField.mouseClicked(parInt1, parInt2, parInt3); @@ -184,6 +189,7 @@ public class GuiScreenAddServer extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -196,9 +202,10 @@ public class GuiScreenAddServer extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.serverNameField.updateCursorCounter(); this.serverIPField.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenBook.java b/src/game/java/net/minecraft/client/gui/GuiScreenBook.java index be9a9a38..1376eb35 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenBook.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenBook.java @@ -33,13 +33,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +51,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenBook extends GuiScreenVisualViewport { static class NextPageButton extends GuiButton { @@ -62,6 +62,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { this.field_146151_o = parFlag; } + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { boolean flag = i >= this.xPosition && j >= this.yPosition && i < this.xPosition + this.width @@ -135,6 +136,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 0) { @@ -174,10 +176,12 @@ public class GuiScreenBook extends GuiScreenVisualViewport { } } + @Override public boolean blockPTTKey() { return this.bookIsUnsigned; } + @Override public void drawScreen0(int i, int j, float f) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(bookGuiTextures); @@ -302,6 +306,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { /** * + Executes the click event specified by the given chat component */ + @Override public boolean handleComponentClick(IChatComponent ichatcomponent) { ClickEvent clickevent = ichatcomponent == null ? null : ichatcomponent.getChatStyle().getChatClickEvent(); if (clickevent == null) { @@ -336,6 +341,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); Keyboard.enableRepeatEvents(true); @@ -365,6 +371,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (this.bookIsUnsigned) { if (this.bookGettingSigned) { @@ -432,6 +439,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { } } + @Override protected void mouseClicked0(int parInt1, int parInt2, int parInt3) { if (parInt3 == 0) { IChatComponent ichatcomponent = this.func_175385_b(parInt1, parInt2); @@ -446,6 +454,7 @@ public class GuiScreenBook extends GuiScreenVisualViewport { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -541,8 +550,9 @@ public class GuiScreenBook extends GuiScreenVisualViewport { } + @Override public void updateScreen0() { super.updateScreen0(); ++this.updateCount; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenCustomizePresets.java b/src/game/java/net/minecraft/client/gui/GuiScreenCustomizePresets.java index a0dee05c..0f0d4f1a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenCustomizePresets.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenCustomizePresets.java @@ -18,13 +18,13 @@ import net.minecraft.world.gen.ChunkProviderSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.gen.ChunkProviderSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenCustomizePresets extends GuiScreen { static class Info { @@ -59,9 +59,11 @@ public class GuiScreenCustomizePresets extends GuiScreen { GuiScreenCustomizePresets.this.height, 80, GuiScreenCustomizePresets.this.height - 32, 38); } + @Override protected void drawBackground() { } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { GuiScreenCustomizePresets.Info guiscreencustomizepresets$info = (GuiScreenCustomizePresets.Info) GuiScreenCustomizePresets.field_175310_f .get(i); @@ -70,6 +72,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { j + 32 + 10, k + 14, 16777215); } + @Override protected void elementClicked(int i, boolean var2, int var3, int var4) { this.field_178053_u = i; GuiScreenCustomizePresets.this.func_175304_a(); @@ -99,10 +102,12 @@ public class GuiScreenCustomizePresets extends GuiScreen { tessellator.draw(); } + @Override protected int getSize() { return GuiScreenCustomizePresets.field_175310_f.size(); } + @Override protected boolean isSelected(int i) { return i == this.field_178053_u; } @@ -172,6 +177,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { switch (parGuiButton.id) { case 0: @@ -188,6 +194,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.field_175311_g.drawScreen(i, j, f); @@ -215,11 +222,13 @@ public class GuiScreenCustomizePresets extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.field_175311_g.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.field_175311_g.handleTouchInput(); @@ -230,6 +239,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); Keyboard.enableRepeatEvents(true); @@ -252,6 +262,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (!this.field_175317_i.textboxKeyTyped(parChar1, parInt1)) { super.keyTyped(parChar1, parInt1); @@ -262,6 +273,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { this.field_175317_i.mouseClicked(parInt1, parInt2, parInt3); super.mouseClicked(parInt1, parInt2, parInt3); @@ -270,6 +282,7 @@ public class GuiScreenCustomizePresets extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -282,8 +295,9 @@ public class GuiScreenCustomizePresets extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.field_175317_i.updateCursorCounter(); super.updateScreen(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenOptionsSounds.java b/src/game/java/net/minecraft/client/gui/GuiScreenOptionsSounds.java index efbefc32..9885e78a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenOptionsSounds.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenOptionsSounds.java @@ -13,13 +13,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenOptionsSounds extends GuiScreen { class Button extends GuiButton { @@ -49,14 +49,17 @@ public class GuiScreenOptionsSounds extends GuiScreen { this.field_146156_o = GuiScreenOptionsSounds.this.game_settings_4.getSoundLevel(parSoundCategory); } + @Override protected int getHoverState(boolean var1) { return 0; } + @Override public boolean isSliderTouchEvents() { return true; } + @Override protected void mouseDragged(Minecraft minecraft, int i, int var3) { if (this.visible) { if (this.field_146155_p) { @@ -76,6 +79,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { } } + @Override public boolean mousePressed(Minecraft minecraft, int i, int j) { if (super.mousePressed(minecraft, i, j)) { this.field_146156_o = (float) (i - (this.xPosition + 4)) / (float) (this.width - 8); @@ -91,6 +95,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { } } + @Override public void mouseReleased(int var1, int var2) { if (this.field_146155_p) { if (this.field_146153_r == SoundCategory.MASTER) { @@ -106,6 +111,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { this.field_146155_p = false; } + @Override public void playPressSound(SoundHandler var1) { } } @@ -125,6 +131,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 200) { @@ -139,6 +146,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, this.field_146507_a, this.width / 2, 15, 16777215); @@ -155,6 +163,7 @@ public class GuiScreenOptionsSounds extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { int i = 0; this.field_146507_a = I18n.format("options.sounds.title", new Object[0]); @@ -177,4 +186,4 @@ public class GuiScreenOptionsSounds extends GuiScreen { this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, I18n.format("gui.done", new Object[0]))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenResourcePacks.java b/src/game/java/net/minecraft/client/gui/GuiScreenResourcePacks.java index cbd551b9..b0178460 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenResourcePacks.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenResourcePacks.java @@ -22,13 +22,13 @@ import net.minecraft.client.resources.ResourcePackRepository; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.client.resources.ResourcePackRepository; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenResourcePacks extends GuiScreen { private static final Logger logger = LogManager.getLogger(); @@ -59,6 +59,7 @@ public class GuiScreenResourcePacks extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 2) { @@ -102,6 +103,7 @@ public class GuiScreenResourcePacks extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawBackground(0); this.availableResourcePacksList.drawScreen(i, j, f); @@ -139,12 +141,14 @@ public class GuiScreenResourcePacks extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.selectedResourcePacksList.handleMouseInput(); this.availableResourcePacksList.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.selectedResourcePacksList.handleTouchInput(); @@ -160,6 +164,7 @@ public class GuiScreenResourcePacks extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.add(new GuiOptionButton(2, this.width / 2 - 154, this.height - 48, I18n.format("resourcePack.openFolder", new Object[0]))); @@ -208,6 +213,7 @@ public class GuiScreenResourcePacks extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.availableResourcePacksList.mouseClicked(parInt1, parInt2, parInt3); @@ -218,10 +224,12 @@ public class GuiScreenResourcePacks extends GuiScreen { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { super.mouseReleased(i, j, k); } + @Override public void updateScreen() { FileChooserResult packFile = null; if (EagRuntime.fileChooserHasResult()) { @@ -271,4 +279,4 @@ public class GuiScreenResourcePacks extends GuiScreen { this.initGui(); this.changed = wasChanged; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenServerList.java b/src/game/java/net/minecraft/client/gui/GuiScreenServerList.java index a39e8d6b..d2035af4 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenServerList.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenServerList.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenServerList extends GuiScreen { private final GuiScreen field_146303_a; @@ -43,6 +43,7 @@ public class GuiScreenServerList extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 1) { @@ -59,6 +60,7 @@ public class GuiScreenServerList extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("selectServer.direct", new Object[0]), this.width / 2, @@ -88,6 +90,7 @@ public class GuiScreenServerList extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -112,6 +115,7 @@ public class GuiScreenServerList extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (this.field_146302_g.textboxKeyTyped(parChar1, parInt1)) { ((GuiButton) this.buttonList.get(0)).enabled = this.field_146302_g.getText().trim().length() > 0; @@ -124,6 +128,7 @@ public class GuiScreenServerList extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.field_146302_g.mouseClicked(parInt1, parInt2, parInt3); @@ -132,6 +137,7 @@ public class GuiScreenServerList extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); this.mc.gameSettings.lastServer = this.field_146302_g.getText(); @@ -146,8 +152,9 @@ public class GuiScreenServerList extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.field_146302_g.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiScreenWorking.java b/src/game/java/net/minecraft/client/gui/GuiScreenWorking.java index bf00884e..4efeb4f0 100644 --- a/src/game/java/net/minecraft/client/gui/GuiScreenWorking.java +++ b/src/game/java/net/minecraft/client/gui/GuiScreenWorking.java @@ -5,13 +5,13 @@ import net.minecraft.util.IProgressUpdate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IProgressUpdate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { private String field_146591_a = ""; @@ -35,6 +35,7 @@ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { * + Displays a string on the loading screen supposed to indicate what is being * done currently. */ + @Override public void displayLoadingString(String s) { this.field_146589_f = s; this.setLoadingProgress(0); @@ -43,6 +44,7 @@ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { /** * + Shows the 'Saving level' string. */ + @Override public void displaySavingString(String s) { this.resetProgressAndMessage(s); } @@ -51,6 +53,7 @@ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { if (this.doneWorking) { if (!this.mc.func_181540_al()) { @@ -71,11 +74,13 @@ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { * lines shown. This resets progress to 0, and the WorkingString to * "working...". */ + @Override public void resetProgressAndMessage(String s) { this.field_146591_a = s; this.displayLoadingString("Working..."); } + @Override public void setDoneWorking() { this.doneWorking = true; } @@ -84,7 +89,8 @@ public class GuiScreenWorking extends GuiScreen implements IProgressUpdate { * + Updates the progress bar on the loading screen to the specified amount. * Args: loadProgress */ + @Override public void setLoadingProgress(int i) { this.progress = i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiSelectWorld.java b/src/game/java/net/minecraft/client/gui/GuiSelectWorld.java index 07812a20..fca6090c 100644 --- a/src/game/java/net/minecraft/client/gui/GuiSelectWorld.java +++ b/src/game/java/net/minecraft/client/gui/GuiSelectWorld.java @@ -35,13 +35,13 @@ import net.minecraft.world.storage.SaveFormatComparator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -53,7 +53,7 @@ import net.minecraft.world.storage.SaveFormatComparator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { class List extends GuiSlot { @@ -62,10 +62,12 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { 36); } + @Override protected void drawBackground() { GuiSelectWorld.this.drawDefaultBackground(); } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { SaveFormatComparator saveformatcomparator = (SaveFormatComparator) GuiSelectWorld.this.field_146639_s .get(i); @@ -98,6 +100,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { GuiSelectWorld.this.drawString(GuiSelectWorld.this.fontRendererObj, s2, j + 2, k + 12 + 10, 8421504); } + @Override protected void elementClicked(int i, boolean flag, int var3, int var4) { GuiSelectWorld.this.field_146640_r = i; boolean flag1 = GuiSelectWorld.this.field_146640_r >= 0 @@ -112,14 +115,17 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { } + @Override protected int getContentHeight() { return GuiSelectWorld.this.field_146639_s.size() * 36; } + @Override protected int getSize() { return GuiSelectWorld.this.field_146639_s.size(); } + @Override protected boolean isSelected(int i) { return i == GuiSelectWorld.this.field_146640_r; } @@ -166,6 +172,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 2) { @@ -197,6 +204,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { } } + @Override public void confirmClicked(boolean flag, int i) { if (this.field_146643_x) { this.field_146643_x = false; @@ -217,6 +225,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.field_146638_t.drawScreen(i, j, f); this.drawCenteredString(this.fontRendererObj, this.field_146628_f, this.width / 2, 20, 16777215); @@ -306,11 +315,13 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.field_146638_t.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.field_146638_t.handleTouchInput(); @@ -321,6 +332,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.ramdiskMode = SingleplayerServerController.isIssueDetected(IPCPacket1CIssueDetected.ISSUE_RAMDISK_MODE); this.field_146628_f = I18n.format("selectWorld.title", new Object[0]); @@ -353,6 +365,7 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { super.mouseClicked(xx, yy, btn); } + @Override public void updateScreen() { if (!hasRequestedWorlds && SingleplayerServerController.isReady()) { hasRequestedWorlds = true; @@ -369,4 +382,4 @@ public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback { this.func_146627_h(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiSleepMP.java b/src/game/java/net/minecraft/client/gui/GuiSleepMP.java index e32005f8..230f1d52 100644 --- a/src/game/java/net/minecraft/client/gui/GuiSleepMP.java +++ b/src/game/java/net/minecraft/client/gui/GuiSleepMP.java @@ -7,13 +7,13 @@ import net.minecraft.network.play.client.C0BPacketEntityAction; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,13 +25,14 @@ import net.minecraft.network.play.client.C0BPacketEntityAction; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSleepMP extends GuiChat { /** * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 1) { this.wakeFromSleep(); @@ -46,6 +47,7 @@ public class GuiSleepMP extends GuiChat { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height - 40, @@ -57,6 +59,7 @@ public class GuiSleepMP extends GuiChat { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (parInt1 == 1) { this.wakeFromSleep(); @@ -79,4 +82,4 @@ public class GuiSleepMP extends GuiChat { nethandlerplayclient.addToSendQueue( new C0BPacketEntityAction(this.mc.thePlayer, C0BPacketEntityAction.Action.STOP_SLEEPING)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiSlider.java b/src/game/java/net/minecraft/client/gui/GuiSlider.java index 3c44f9b5..d74644ed 100644 --- a/src/game/java/net/minecraft/client/gui/GuiSlider.java +++ b/src/game/java/net/minecraft/client/gui/GuiSlider.java @@ -7,13 +7,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSlider extends GuiButton { public interface FormatHelper { @@ -85,10 +85,12 @@ public class GuiSlider extends GuiButton { * + Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over * this button and 2 if it IS hovering over this button. */ + @Override protected int getHoverState(boolean var1) { return 0; } + @Override public boolean isSliderTouchEvents() { return true; } @@ -97,6 +99,7 @@ public class GuiSlider extends GuiButton { * + Fired when the mouse button is dragged. Equivalent of * MouseListener.mouseDragged(MouseEvent e). */ + @Override protected void mouseDragged(Minecraft var1, int i, int var3) { if (this.visible) { if (this.isMouseDown) { @@ -125,6 +128,7 @@ public class GuiSlider extends GuiButton { * + Returns true if the mouse has been pressed on this control. Equivalent of * MouseListener.mousePressed(MouseEvent e). */ + @Override public boolean mousePressed(Minecraft minecraft, int i, int j) { if (super.mousePressed(minecraft, i, j)) { this.sliderPosition = (float) (i - (this.xPosition + 4)) / (float) (this.width - 8); @@ -149,7 +153,8 @@ public class GuiSlider extends GuiButton { * + Fired when the mouse button is released. Equivalent of * MouseListener.mouseReleased(MouseEvent e). */ + @Override public void mouseReleased(int var1, int var2) { this.isMouseDown = false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiSlot.java b/src/game/java/net/minecraft/client/gui/GuiSlot.java index 9c85231b..3e8166d2 100644 --- a/src/game/java/net/minecraft/client/gui/GuiSlot.java +++ b/src/game/java/net/minecraft/client/gui/GuiSlot.java @@ -22,13 +22,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GuiSlot { @@ -525,4 +525,4 @@ public abstract class GuiSlot { this.left = leftIn; this.right = leftIn + this.width; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiSpectator.java b/src/game/java/net/minecraft/client/gui/GuiSpectator.java index caca2121..d77c1a73 100644 --- a/src/game/java/net/minecraft/client/gui/GuiSpectator.java +++ b/src/game/java/net/minecraft/client/gui/GuiSpectator.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSpectator extends Gui implements ISpectatorMenuRecipient { private static final ResourceLocation field_175267_f = new ResourceLocation("textures/gui/widgets.png"); @@ -48,6 +48,7 @@ public class GuiSpectator extends Gui implements ISpectatorMenuRecipient { this.field_175268_g = mcIn; } + @Override public void func_175257_a(SpectatorMenu parSpectatorMenu) { this.field_175271_i = null; this.field_175270_h = 0L; @@ -185,4 +186,4 @@ public class GuiSpectator extends Gui implements ISpectatorMenuRecipient { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiTextField.java b/src/game/java/net/minecraft/client/gui/GuiTextField.java index 2d28186e..e3beb79d 100644 --- a/src/game/java/net/minecraft/client/gui/GuiTextField.java +++ b/src/game/java/net/minecraft/client/gui/GuiTextField.java @@ -17,13 +17,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiTextField extends Gui { private final int id; @@ -698,4 +698,4 @@ public class GuiTextField extends Gui { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiUtilRenderComponents.java b/src/game/java/net/minecraft/client/gui/GuiUtilRenderComponents.java index b3d1ff87..58f6b87a 100644 --- a/src/game/java/net/minecraft/client/gui/GuiUtilRenderComponents.java +++ b/src/game/java/net/minecraft/client/gui/GuiUtilRenderComponents.java @@ -13,13 +13,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUtilRenderComponents { /** @@ -115,4 +115,4 @@ public class GuiUtilRenderComponents { ? EnumChatFormatting.getTextWithoutFormattingCodes(parString1) : parString1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiVideoSettings.java b/src/game/java/net/minecraft/client/gui/GuiVideoSettings.java index 567df1a2..0345d76e 100644 --- a/src/game/java/net/minecraft/client/gui/GuiVideoSettings.java +++ b/src/game/java/net/minecraft/client/gui/GuiVideoSettings.java @@ -3,6 +3,7 @@ package net.minecraft.client.gui; import java.io.IOException; import net.lax1dude.eaglercraft.v1_8.Display; +import net.lax1dude.eaglercraft.v1_8.minecraft.GuiScreenVideoSettingsWarning; import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; import net.lax1dude.eaglercraft.v1_8.recording.ScreenRecordingController; @@ -12,13 +13,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +31,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiVideoSettings extends GuiScreen { /** @@ -64,13 +65,18 @@ public class GuiVideoSettings extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 200) { this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(this.parentGuiScreen); + GuiScreen contScreen = parentGuiScreen; + int vidIssues = mc.gameSettings.checkBadVideoSettings(); + if (vidIssues != 0) { + contScreen = new GuiScreenVideoSettingsWarning(contScreen, vidIssues); + } + this.mc.displayGuiScreen(contScreen); } - } } @@ -78,6 +84,7 @@ public class GuiVideoSettings extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.optionsRowList.drawScreen(i, j, f); @@ -88,11 +95,13 @@ public class GuiVideoSettings extends GuiScreen { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.optionsRowList.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.optionsRowList.handleTouchInput(); @@ -103,6 +112,7 @@ public class GuiVideoSettings extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.screenTitle = I18n.format("options.videoTitle", new Object[0]); this.buttonList.clear(); @@ -138,6 +148,7 @@ public class GuiVideoSettings extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { int i = this.guiGameSettings.guiScale; super.mouseClicked(parInt1, parInt2, parInt3); @@ -157,6 +168,7 @@ public class GuiVideoSettings extends GuiScreen { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { int l = this.guiGameSettings.guiScale; super.mouseReleased(i, j, k); @@ -182,4 +194,4 @@ public class GuiVideoSettings extends GuiScreen { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiWinGame.java b/src/game/java/net/minecraft/client/gui/GuiWinGame.java index babb944b..df06b3d3 100644 --- a/src/game/java/net/minecraft/client/gui/GuiWinGame.java +++ b/src/game/java/net/minecraft/client/gui/GuiWinGame.java @@ -28,13 +28,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiWinGame extends GuiScreen { private static final Logger logger = LogManager.getLogger(); @@ -61,6 +61,7 @@ public class GuiWinGame extends GuiScreen { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return true; } @@ -69,6 +70,7 @@ public class GuiWinGame extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawWinGameScreen(i, j, f); Tessellator tessellator = Tessellator.getInstance(); @@ -165,6 +167,7 @@ public class GuiWinGame extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { if (this.field_146582_i == null) { this.field_146582_i = Lists.newArrayList(); @@ -225,6 +228,7 @@ public class GuiWinGame extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (parInt1 == 1) { this.sendRespawnPacket(); @@ -241,6 +245,7 @@ public class GuiWinGame extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { MusicTicker musicticker = this.mc.func_181535_r(); SoundHandler soundhandler = this.mc.getSoundHandler(); @@ -258,4 +263,4 @@ public class GuiWinGame extends GuiScreen { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiYesNo.java b/src/game/java/net/minecraft/client/gui/GuiYesNo.java index 7565de81..a7277800 100644 --- a/src/game/java/net/minecraft/client/gui/GuiYesNo.java +++ b/src/game/java/net/minecraft/client/gui/GuiYesNo.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiYesNo extends GuiScreen { protected GuiYesNoCallback parentScreen; @@ -63,6 +63,7 @@ public class GuiYesNo extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { this.parentScreen.confirmClicked(parGuiButton.id == 0, this.parentButtonClickedId); } @@ -71,6 +72,7 @@ public class GuiYesNo extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { if (opaqueBackground) { this.drawBackground(0); @@ -93,6 +95,7 @@ public class GuiYesNo extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.add(new GuiOptionButton(0, this.width / 2 - 155, this.height / 6 + 96, this.confirmButtonText)); this.buttonList @@ -116,6 +119,7 @@ public class GuiYesNo extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); if (--this.ticksUntilEnable == 0) { @@ -130,4 +134,4 @@ public class GuiYesNo extends GuiScreen { opaqueBackground = true; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/GuiYesNoCallback.java b/src/game/java/net/minecraft/client/gui/GuiYesNoCallback.java index e238b2ce..b28cc689 100644 --- a/src/game/java/net/minecraft/client/gui/GuiYesNoCallback.java +++ b/src/game/java/net/minecraft/client/gui/GuiYesNoCallback.java @@ -3,13 +3,13 @@ package net.minecraft.client.gui; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface GuiYesNoCallback { void confirmClicked(boolean var1, int var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/IProgressMeter.java b/src/game/java/net/minecraft/client/gui/IProgressMeter.java index 3c06103d..d470ac72 100644 --- a/src/game/java/net/minecraft/client/gui/IProgressMeter.java +++ b/src/game/java/net/minecraft/client/gui/IProgressMeter.java @@ -3,13 +3,13 @@ package net.minecraft.client.gui; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.client.gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProgressMeter { String[] lanSearchStates = new String[] { "oooooo", "Oooooo", "oOoooo", "ooOooo", "oooOoo", "ooooOo", "oooooO" }; void doneLoading(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/MapItemRenderer.java b/src/game/java/net/minecraft/client/gui/MapItemRenderer.java index 47964a40..e7c608c4 100644 --- a/src/game/java/net/minecraft/client/gui/MapItemRenderer.java +++ b/src/game/java/net/minecraft/client/gui/MapItemRenderer.java @@ -20,13 +20,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapItemRenderer { class Instance { @@ -187,4 +187,4 @@ public class MapItemRenderer { public void updateMapTexture(MapData mapdataIn) { this.getMapRendererInstance(mapdataIn).updateMapTexture(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/ScaledResolution.java b/src/game/java/net/minecraft/client/gui/ScaledResolution.java index 8116544b..599b7cae 100644 --- a/src/game/java/net/minecraft/client/gui/ScaledResolution.java +++ b/src/game/java/net/minecraft/client/gui/ScaledResolution.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScaledResolution { private final double scaledWidthD; @@ -83,4 +83,4 @@ public class ScaledResolution { public int getScaleFactor() { return this.scaleFactor; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/ScreenChatOptions.java b/src/game/java/net/minecraft/client/gui/ScreenChatOptions.java index 59205ce3..9571f72e 100644 --- a/src/game/java/net/minecraft/client/gui/ScreenChatOptions.java +++ b/src/game/java/net/minecraft/client/gui/ScreenChatOptions.java @@ -7,13 +7,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScreenChatOptions extends GuiScreen { private static final GameSettings.Options[] field_146399_a = new GameSettings.Options[] { @@ -52,6 +52,7 @@ public class ScreenChatOptions extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id < 100 && parGuiButton instanceof GuiOptionButton) { @@ -72,6 +73,7 @@ public class ScreenChatOptions extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, this.field_146401_i, this.width / 2, 20, 16777215); @@ -83,6 +85,7 @@ public class ScreenChatOptions extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { int i = 0; this.field_146401_i = I18n.format("options.chat.title", new Object[0]); @@ -106,4 +109,4 @@ public class ScreenChatOptions extends GuiScreen { this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + (profanityFilterForce ? 130 : 154), I18n.format("gui.done", new Object[0]))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/ServerListEntryNormal.java b/src/game/java/net/minecraft/client/gui/ServerListEntryNormal.java index e2816979..33ef97fd 100644 --- a/src/game/java/net/minecraft/client/gui/ServerListEntryNormal.java +++ b/src/game/java/net/minecraft/client/gui/ServerListEntryNormal.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry { private static final Logger logger = LogManager.getLogger(); @@ -54,6 +54,7 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry { this.mc = Minecraft.getMinecraft(); } + @Override public void drawEntry(int i, int j, int k, int l, int var5, int i1, int j1, boolean flag) { if (!this.field_148301_e.field_78841_f) { this.field_148301_e.field_78841_f = true; @@ -201,6 +202,7 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry { /** * + Returns true if the mouse has been pressed on this control. */ + @Override public boolean mousePressed(int i, int var2, int var3, int var4, int j, int k) { if (j <= 32) { if (j < 32 && j > 16 && this.func_178013_b()) { @@ -233,9 +235,11 @@ public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry { * + Fired when the mouse button is released. Arguments: index, x, y, * mouseEvent, relativeX, relativeY */ + @Override public void mouseReleased(int var1, int var2, int var3, int var4, int var5, int var6) { } + @Override public void setSelected(int var1, int var2, int var3) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/ServerSelectionList.java b/src/game/java/net/minecraft/client/gui/ServerSelectionList.java index d3e2529c..9fe3dbe3 100644 --- a/src/game/java/net/minecraft/client/gui/ServerSelectionList.java +++ b/src/game/java/net/minecraft/client/gui/ServerSelectionList.java @@ -14,13 +14,13 @@ import net.minecraft.client.resources.I18n; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerSelectionList extends GuiListExtended { private final GuiMultiplayer owner; @@ -139,6 +139,7 @@ public class ServerSelectionList extends GuiListExtended { /** * + Gets the IGuiListEntry object for the given index */ + @Override public GuiListExtended.IGuiListEntry getListEntry(int i) { if (i < getOrigSize()) { return (GuiListExtended.IGuiListEntry) this.field_148198_l.get(i); @@ -149,6 +150,7 @@ public class ServerSelectionList extends GuiListExtended { /** * + Gets the width of the list */ + @Override public int getListWidth() { return super.getListWidth() + 85; } @@ -157,10 +159,12 @@ public class ServerSelectionList extends GuiListExtended { return this.field_148198_l.size(); } + @Override protected int getScrollBarX() { return super.getScrollBarX() + 30; } + @Override protected int getSize() { return this.field_148198_l.size() + GuiMultiplayer.getLanServerList().countServers(); } @@ -168,6 +172,7 @@ public class ServerSelectionList extends GuiListExtended { /** * + Returns true if the element passed in is currently selected */ + @Override protected boolean isSelected(int i) { return i == this.selectedSlotIndex; } @@ -175,4 +180,4 @@ public class ServerSelectionList extends GuiListExtended { public void setSelectedSlotIndex(int selectedSlotIndexIn) { this.selectedSlotIndex = selectedSlotIndexIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/achievement/GuiAchievement.java b/src/game/java/net/minecraft/client/gui/achievement/GuiAchievement.java index af7d7865..1f078759 100644 --- a/src/game/java/net/minecraft/client/gui/achievement/GuiAchievement.java +++ b/src/game/java/net/minecraft/client/gui/achievement/GuiAchievement.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiAchievement extends Gui { private static final ResourceLocation achievementBg = new ResourceLocation( @@ -181,4 +181,4 @@ public class GuiAchievement extends Gui { GlStateManager.loadIdentity(); GlStateManager.translate(0.0F, 0.0F, -2000.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/achievement/GuiAchievements.java b/src/game/java/net/minecraft/client/gui/achievement/GuiAchievements.java index 0fe1d502..9de196f4 100644 --- a/src/game/java/net/minecraft/client/gui/achievement/GuiAchievements.java +++ b/src/game/java/net/minecraft/client/gui/achievement/GuiAchievements.java @@ -32,13 +32,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiAchievements extends GuiScreen implements IProgressMeter { private static final int field_146572_y = AchievementList.minDisplayColumn * 24 - 112; @@ -90,6 +90,7 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (!this.loadingAchievements) { if (parGuiButton.id == 1) { @@ -103,10 +104,12 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return !this.loadingAchievements; } + @Override public void doneLoading() { if (this.loadingAchievements) { this.loadingAchievements = false; @@ -366,6 +369,7 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { if (this.loadingAchievements) { this.drawDefaultBackground(); @@ -457,6 +461,7 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { .getTexture(parBlock.getDefaultState()); } + @Override protected int getCloseKey() { return this.mc.gameSettings.keyBindInventory.getKeyCode(); } @@ -466,6 +471,7 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.mc.getNetHandler() .addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS)); @@ -477,6 +483,7 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { if (!this.loadingAchievements) { this.field_146569_s = this.field_146567_u; @@ -493,4 +500,4 @@ public class GuiAchievements extends GuiScreen implements IProgressMeter { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/achievement/GuiStats.java b/src/game/java/net/minecraft/client/gui/achievement/GuiStats.java index 8dac2556..2ee0721f 100644 --- a/src/game/java/net/minecraft/client/gui/achievement/GuiStats.java +++ b/src/game/java/net/minecraft/client/gui/achievement/GuiStats.java @@ -33,13 +33,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +51,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiStats extends GuiScreen implements IProgressMeter { abstract class Stats extends GuiSlot { @@ -67,10 +67,12 @@ public class GuiStats extends GuiScreen implements IProgressMeter { this.setHasListHeader(true, 20); } + @Override protected void drawBackground() { GuiStats.this.drawDefaultBackground(); } + @Override protected void drawListHeader(int i, int j, Tessellator var3) { if (!PointerInputAbstraction.getVCursorButtonDown(0)) { this.field_148218_l = -1; @@ -112,9 +114,11 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override protected void elementClicked(int var1, boolean var2, int var3, int var4) { } + @Override protected void func_148132_a(int i, int var2) { this.field_148218_l = -1; if (i >= 79 && i < 115) { @@ -133,6 +137,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override protected void func_148142_b(int i, int j) { if (j >= this.top && j <= this.bottom) { int k = this.getSlotIndexFromScreenCoords(i, j); @@ -224,10 +229,12 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } } + @Override protected final int getSize() { return this.statsHolder.size(); } + @Override protected boolean isSelected(int var1) { return false; } @@ -258,6 +265,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } this.statSorter = new Comparator() { + @Override public int compare(StatCrafting statcrafting1, StatCrafting statcrafting2) { int j = Item.getIdFromItem(statcrafting1.func_150959_a()); int k = Item.getIdFromItem(statcrafting2.func_150959_a()); @@ -295,6 +303,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { }; } + @Override protected void drawListHeader(int i, int j, Tessellator tessellator) { super.drawListHeader(i, j, tessellator); if (this.field_148218_l == 0) { @@ -317,6 +326,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { StatCrafting statcrafting = this.func_148211_c(i); Item item = statcrafting.func_150959_a(); @@ -327,6 +337,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { this.func_148209_a(statcrafting, j + 215, k, i % 2 == 0); } + @Override protected String func_148210_b(int parInt1) { return parInt1 == 0 ? "stat.crafted" : (parInt1 == 1 ? "stat.used" : "stat.mined"); } @@ -338,10 +349,12 @@ public class GuiStats extends GuiScreen implements IProgressMeter { this.setShowSelectionBox(false); } + @Override protected void drawBackground() { GuiStats.this.drawDefaultBackground(); } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { StatBase statbase = (StatBase) StatList.generalStats.get(i); GuiStats.this.drawString(GuiStats.this.fontRendererObj, statbase.getStatName().getUnformattedText(), j + 2, @@ -352,17 +365,21 @@ public class GuiStats extends GuiScreen implements IProgressMeter { i % 2 == 0 ? 16777215 : 9474192); } + @Override protected void elementClicked(int var1, boolean var2, int var3, int var4) { } + @Override protected int getContentHeight() { return this.getSize() * 10; } + @Override protected int getSize() { return StatList.generalStats.size(); } + @Override protected boolean isSelected(int var1) { return false; } @@ -393,6 +410,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } this.statSorter = new Comparator() { + @Override public int compare(StatCrafting statcrafting1, StatCrafting statcrafting2) { int j = Item.getIdFromItem(statcrafting1.func_150959_a()); int k = Item.getIdFromItem(statcrafting2.func_150959_a()); @@ -430,6 +448,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { }; } + @Override protected void drawListHeader(int i, int j, Tessellator tessellator) { super.drawListHeader(i, j, tessellator); if (this.field_148218_l == 0) { @@ -452,6 +471,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { StatCrafting statcrafting = this.func_148211_c(i); Item item = statcrafting.func_150959_a(); @@ -462,6 +482,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { this.func_148209_a(statcrafting, j + 215, k, i % 2 == 0); } + @Override protected String func_148210_b(int i) { return i == 1 ? "stat.crafted" : (i == 2 ? "stat.used" : "stat.depleted"); } @@ -484,10 +505,12 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override protected void drawBackground() { GuiStats.this.drawDefaultBackground(); } + @Override protected void drawSlot(int i, int j, int k, int var4, int var5, int var6) { EntityList.EntityEggInfo entitylist$entityegginfo = (EntityList.EntityEggInfo) this.field_148222_l.get(i); String s = I18n.format("entity." + EntityList.getStringFromID(entitylist$entityegginfo.spawnedID) + ".name", @@ -511,17 +534,21 @@ public class GuiStats extends GuiScreen implements IProgressMeter { k + 1 + GuiStats.this.fontRendererObj.FONT_HEIGHT * 2, i1 == 0 ? 6316128 : 9474192); } + @Override protected void elementClicked(int var1, boolean var2, int var3, int var4) { } + @Override protected int getContentHeight() { return this.getSize() * GuiStats.this.fontRendererObj.FONT_HEIGHT * 4; } + @Override protected int getSize() { return this.field_148222_l.size(); } + @Override protected boolean isSelected(int var1) { return false; } @@ -554,6 +581,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 0) { @@ -605,10 +633,12 @@ public class GuiStats extends GuiScreen implements IProgressMeter { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return !this.doesGuiPauseGame; } + @Override public void doneLoading() { if (this.doesGuiPauseGame) { this.func_175366_f(); @@ -630,6 +660,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { if (this.doesGuiPauseGame) { this.drawDefaultBackground(); @@ -697,6 +728,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); if (this.displaySlot != null) { @@ -705,6 +737,7 @@ public class GuiStats extends GuiScreen implements IProgressMeter { } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); if (this.displaySlot != null) { @@ -717,10 +750,11 @@ public class GuiStats extends GuiScreen implements IProgressMeter { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.screenTitle = I18n.format("gui.stats", new Object[0]); this.doesGuiPauseGame = true; this.mc.getNetHandler() .addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/CreativeCrafting.java b/src/game/java/net/minecraft/client/gui/inventory/CreativeCrafting.java index f8055c43..7926be99 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/CreativeCrafting.java +++ b/src/game/java/net/minecraft/client/gui/inventory/CreativeCrafting.java @@ -11,13 +11,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CreativeCrafting implements ICrafting { private final Minecraft mc; @@ -38,6 +38,7 @@ public class CreativeCrafting implements ICrafting { this.mc = mc; } + @Override public void func_175173_a(Container var1, IInventory var2) { } @@ -47,6 +48,7 @@ public class CreativeCrafting implements ICrafting { * int identifies which variable to update, and the second contains the new * value. Both are truncated to shorts in non-local SMP. */ + @Override public void sendProgressBarUpdate(Container var1, int var2, int var3) { } @@ -55,6 +57,7 @@ public class CreativeCrafting implements ICrafting { * doesn't have to match the actual contents of that slot. Args: Container, slot * number, slot contents */ + @Override public void sendSlotContents(Container var1, int i, ItemStack itemstack) { this.mc.playerController.sendSlotPacket(itemstack, i); } @@ -62,6 +65,7 @@ public class CreativeCrafting implements ICrafting { /** * + update the crafting window inventory with the items in the list */ + @Override public void updateCraftingInventory(Container var1, List var2) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiBeacon.java b/src/game/java/net/minecraft/client/gui/inventory/GuiBeacon.java index a303f016..b9f0e9e6 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiBeacon.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiBeacon.java @@ -25,13 +25,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiBeacon extends GuiContainer { static class Button extends GuiButton { @@ -60,6 +60,7 @@ public class GuiBeacon extends GuiContainer { this.field_146143_q = parInt5; } + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { minecraft.getTextureManager().bindTexture(GuiBeacon.beaconGuiTextures); @@ -100,6 +101,7 @@ public class GuiBeacon extends GuiContainer { super(parInt1, parInt2, parInt3, GuiBeacon.beaconGuiTextures, 112, 220); } + @Override public void drawButtonForegroundLayer(int i, int j) { if (this.enabled) Mouse.showCursor(EnumCursorType.HAND); @@ -112,6 +114,7 @@ public class GuiBeacon extends GuiContainer { super(parInt1, parInt2, parInt3, GuiBeacon.beaconGuiTextures, 90, 220); } + @Override public void drawButtonForegroundLayer(int i, int j) { if (this.enabled) Mouse.showCursor(EnumCursorType.HAND); @@ -131,6 +134,7 @@ public class GuiBeacon extends GuiContainer { this.field_146148_q = parInt5; } + @Override public void drawButtonForegroundLayer(int i, int j) { if (this.enabled) Mouse.showCursor(EnumCursorType.HAND); @@ -164,6 +168,7 @@ public class GuiBeacon extends GuiContainer { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == -2) { this.mc.displayGuiScreen((GuiScreen) null); @@ -198,6 +203,7 @@ public class GuiBeacon extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(beaconGuiTextures); @@ -217,6 +223,7 @@ public class GuiBeacon extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { RenderHelper.disableStandardItemLighting(); this.drawCenteredString(this.fontRendererObj, I18n.format("tile.beacon.primary", new Object[0]), 62, 10, @@ -240,6 +247,7 @@ public class GuiBeacon extends GuiContainer { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); this.buttonList @@ -252,6 +260,7 @@ public class GuiBeacon extends GuiContainer { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); int i = this.tileBeacon.getField(0); @@ -307,4 +316,4 @@ public class GuiBeacon extends GuiContainer { this.beaconConfirmButton.enabled = this.tileBeacon.getStackInSlot(0) != null && j > 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiBrewingStand.java b/src/game/java/net/minecraft/client/gui/inventory/GuiBrewingStand.java index e9bce5c1..ee5fff8c 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiBrewingStand.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiBrewingStand.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiBrewingStand extends GuiContainer { private static final ResourceLocation brewingStandGuiTextures = new ResourceLocation( @@ -44,6 +44,7 @@ public class GuiBrewingStand extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(brewingStandGuiTextures); @@ -92,6 +93,7 @@ public class GuiBrewingStand extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { String s = this.tileBrewingStand.getDisplayName().getUnformattedText(); this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 0xFFFFFF); diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiChest.java b/src/game/java/net/minecraft/client/gui/inventory/GuiChest.java index d3670d51..300dd37a 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiChest.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiChest.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiChest extends GuiContainer { /** @@ -53,6 +53,7 @@ public class GuiChest extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); @@ -66,10 +67,11 @@ public class GuiChest extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(this.lowerChestInventory.getDisplayName().getUnformattedText(), 8, 6, 0xFFFFFF); this.fontRendererObj.drawString(this.upperChestInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 0xFFFFFF); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiContainer.java b/src/game/java/net/minecraft/client/gui/inventory/GuiContainer.java index a9beeca4..c001d3d5 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiContainer.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiContainer.java @@ -26,13 +26,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GuiContainer extends GuiScreen { /** @@ -119,6 +119,7 @@ public abstract class GuiContainer extends GuiScreen { * + Returns true if this GUI should pause the game when it is displayed in * single-player */ + @Override public boolean doesGuiPauseGame() { return false; } @@ -150,6 +151,7 @@ public abstract class GuiContainer extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); int k = this.guiLeft; @@ -316,6 +318,7 @@ public abstract class GuiContainer extends GuiScreen { return null; } + @Override protected float getTouchModeScale() { return 1.25f; } @@ -337,6 +340,7 @@ public abstract class GuiContainer extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); if (primaryTouchPoint != -1 && Touch.fetchPointIdx(primaryTouchPoint) == -1) { @@ -373,6 +377,7 @@ public abstract class GuiContainer extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (parInt1 == this.mc.gameSettings.keyBindClose.getKeyCode() || parInt1 == this.mc.gameSettings.keyBindInventory.getKeyCode() || (parInt1 == 1 @@ -398,6 +403,7 @@ public abstract class GuiContainer extends GuiScreen { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); boolean flag = parInt3 == this.mc.gameSettings.keyBindPickBlock.getKeyCode() + 100; @@ -476,6 +482,7 @@ public abstract class GuiContainer extends GuiScreen { * + Called when a mouse button is pressed and the mouse is moved around. * Parameters are : mouseX, mouseY, lastButtonClicked & timeSinceMouseClick. */ + @Override protected void mouseClickMove(int i, int j, int k, long var4) { Slot slot = this.getSlotAtPosition(i, j); ItemStack itemstack = this.mc.thePlayer.inventory.getItemStack(); @@ -516,6 +523,7 @@ public abstract class GuiContainer extends GuiScreen { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { Slot slot = this.getSlotAtPosition(i, j); int l = this.guiLeft; @@ -626,16 +634,19 @@ public abstract class GuiContainer extends GuiScreen { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { if (this.mc.thePlayer != null) { this.inventorySlots.onContainerClosed(this.mc.thePlayer); } } + @Override protected boolean shouldTouchGenerateMouseEvents() { return false; } + @Override protected void touchEndMove(int touchX, int touchY, int uid) { if (primaryTouchPoint == uid) { primaryTouchPoint = -1; @@ -645,6 +656,7 @@ public abstract class GuiContainer extends GuiScreen { } } + @Override protected void touchMoved(int touchX, int touchY, int uid) { if (primaryTouchPoint == uid) { lastTouchX = touchX; @@ -653,6 +665,7 @@ public abstract class GuiContainer extends GuiScreen { } } + @Override protected void touchStarted(int touchX, int touchY, int uid) { if (primaryTouchPoint == -1) { primaryTouchPoint = uid; @@ -662,6 +675,7 @@ public abstract class GuiContainer extends GuiScreen { } } + @Override protected void touchTapped(int touchX, int touchY, int uid) { if (primaryTouchPoint == uid) { primaryTouchPoint = -1; @@ -697,6 +711,7 @@ public abstract class GuiContainer extends GuiScreen { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { super.updateScreen(); if (!this.mc.thePlayer.isEntityAlive() || this.mc.thePlayer.isDead) { @@ -708,4 +723,4 @@ public abstract class GuiContainer extends GuiScreen { mouseReleased(lastTouchX, lastTouchY, 0); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java b/src/game/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java index 4e4f13ca..7d9b17c1 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java @@ -40,13 +40,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -58,7 +58,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiContainerCreative extends InventoryEffectRenderer { static class ContainerCreative extends Container { @@ -81,15 +81,18 @@ public class GuiContainerCreative extends InventoryEffectRenderer { this.scrollTo(0.0F); } + @Override public boolean canDragIntoSlot(Slot parSlot) { return parSlot.inventory instanceof InventoryPlayer || parSlot.yDisplayPosition > 90 && parSlot.xDisplayPosition <= 162; } + @Override public boolean canInteractWith(EntityPlayer playerIn) { return true; } + @Override public boolean canMergeSlot(ItemStack stack, Slot parSlot) { return parSlot.yDisplayPosition > 90; } @@ -98,6 +101,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { return this.itemList.size() > 45; } + @Override protected void retrySlotClick(int slotId, int clickedButton, boolean mode, EntityPlayer playerIn) { } @@ -122,6 +126,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { } + @Override public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { if (index >= this.inventorySlots.size() - 9 && index < this.inventorySlots.size()) { Slot slot = (Slot) this.inventorySlots.get(index); @@ -142,46 +147,57 @@ public class GuiContainerCreative extends InventoryEffectRenderer { this.slot = parSlot; } + @Override public ItemStack decrStackSize(int amount) { return this.slot.decrStackSize(amount); } + @Override public boolean getHasStack() { return this.slot.getHasStack(); } + @Override public int getItemStackLimit(ItemStack stack) { return this.slot.getItemStackLimit(stack); } + @Override public int getSlotStackLimit() { return this.slot.getSlotStackLimit(); } + @Override public String getSlotTexture() { return this.slot.getSlotTexture(); } + @Override public ItemStack getStack() { return this.slot.getStack(); } + @Override public boolean isHere(IInventory inv, int slotIn) { return this.slot.isHere(inv, slotIn); } + @Override public boolean isItemValid(ItemStack stack) { return this.slot.isItemValid(stack); } + @Override public void onPickupFromSlot(EntityPlayer playerIn, ItemStack stack) { this.slot.onPickupFromSlot(playerIn, stack); } + @Override public void onSlotChanged() { this.slot.onSlotChanged(); } + @Override public void putStack(ItemStack stack) { this.slot.putStack(stack); } @@ -220,6 +236,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.mc.displayGuiScreen(new GuiAchievements(this, this.mc.thePlayer.getStatFileWriter())); @@ -231,6 +248,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { } + @Override public boolean blockPTTKey() { return searchField.isFocused(); } @@ -238,6 +256,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int i, int j) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); RenderHelper.enableGUIStandardItemLighting(); @@ -277,6 +296,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { CreativeTabs creativetabs = CreativeTabs.creativeTabArray[selectedTabIndex]; if (creativetabs.drawInForegroundOfTab()) { @@ -290,6 +310,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { boolean flag = PointerInputAbstraction.getVCursorButtonDown(0); int k = this.guiLeft; @@ -398,6 +419,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { this.zLevel = 0.0F; } + @Override protected int getCloseKey() { return selectedTabIndex != CreativeTabs.tabAllSearch.getTabIndex() ? super.getCloseKey() : mc.gameSettings.keyBindClose.getKeyCode(); @@ -410,6 +432,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Called when the mouse is clicked over a slot or outside the gui. */ + @Override protected void handleMouseClick(Slot slot, int i, int j, int k) { this.field_147057_D = true; boolean flag = k == 1; @@ -528,6 +551,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Handles mouse input. */ + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); int i = Mouse.getEventDWheel(); @@ -553,6 +577,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { if (this.mc.playerController.isInCreativeMode()) { super.initGui(); @@ -580,6 +605,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (selectedTabIndex != CreativeTabs.tabAllSearch.getTabIndex()) { if (GameSettings.isKeyDown(this.mc.gameSettings.keyBindChat)) { @@ -610,6 +636,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { if (parInt3 == 0) { int i = parInt1 - this.guiLeft; @@ -629,6 +656,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { * + Called when a mouse button is released. Args : mouseX, mouseY, * releaseButton */ + @Override protected void mouseReleased(int i, int j, int k) { if (k == 0) { int l = i - this.guiLeft; @@ -659,6 +687,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { super.onGuiClosed(); if (this.mc.thePlayer != null && this.mc.thePlayer.inventory != null) { @@ -698,6 +727,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { } } + @Override protected void renderToolTip(ItemStack itemstack, int i, int j) { if (selectedTabIndex == CreativeTabs.tabAllSearch.getTabIndex()) { List list = itemstack.getTooltipProfanityFilter(this.mc.thePlayer, @@ -826,6 +856,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { super.touchTapped(touchX, touchY, uid); } + @Override protected void updateActivePotionEffects() { int i = this.guiLeft; super.updateActivePotionEffects(); @@ -879,6 +910,7 @@ public class GuiContainerCreative extends InventoryEffectRenderer { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { if (!this.mc.playerController.isInCreativeMode()) { this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer)); @@ -887,4 +919,4 @@ public class GuiContainerCreative extends InventoryEffectRenderer { this.updateActivePotionEffects(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiCrafting.java b/src/game/java/net/minecraft/client/gui/inventory/GuiCrafting.java index 5c7a2ed7..3cc645cb 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiCrafting.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiCrafting.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiCrafting extends GuiContainer { private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( @@ -46,6 +46,7 @@ public class GuiCrafting extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(craftingTableGuiTextures); @@ -58,10 +59,11 @@ public class GuiCrafting extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 28, 6, 0xFFFFFF); this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 0xFFFFFF); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiDispenser.java b/src/game/java/net/minecraft/client/gui/inventory/GuiDispenser.java index 39940aae..22badeb2 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiDispenser.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiDispenser.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiDispenser extends GuiContainer { private static final ResourceLocation dispenserGuiTextures = new ResourceLocation( @@ -44,6 +44,7 @@ public class GuiDispenser extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(dispenserGuiTextures); @@ -56,6 +57,7 @@ public class GuiDispenser extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { String s = this.dispenserInventory.getDisplayName().getUnformattedText(); this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 0xFFFFFF); @@ -63,4 +65,4 @@ public class GuiDispenser extends GuiContainer { this.ySize - 96 + 2, 0xFFFFFF); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiEditSign.java b/src/game/java/net/minecraft/client/gui/inventory/GuiEditSign.java index b47e831f..8a061120 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiEditSign.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiEditSign.java @@ -21,13 +21,13 @@ import net.minecraft.util.ChatComponentText; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.ChatComponentText; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiEditSign extends GuiScreenVisualViewport { private TileEntitySign tileSign; @@ -55,6 +55,7 @@ public class GuiEditSign extends GuiScreenVisualViewport { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { if (parGuiButton.id == 0) { @@ -65,10 +66,12 @@ public class GuiEditSign extends GuiScreenVisualViewport { } } + @Override public boolean blockPTTKey() { return true; } + @Override public void drawScreen0(int i, int j, float f) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("sign.edit", new Object[0]), this.width / 2, 40, @@ -127,6 +130,7 @@ public class GuiEditSign extends GuiScreenVisualViewport { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); Keyboard.enableRepeatEvents(true); @@ -140,6 +144,7 @@ public class GuiEditSign extends GuiScreenVisualViewport { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { if (parInt1 == 200) { this.editLine = this.editLine - 1 & 3; @@ -169,6 +174,7 @@ public class GuiEditSign extends GuiScreenVisualViewport { /** * + Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); NetHandlerPlayClient nethandlerplayclient = this.mc.getNetHandler(); @@ -180,8 +186,9 @@ public class GuiEditSign extends GuiScreenVisualViewport { this.tileSign.setEditable(true); } + @Override public void updateScreen0() { ++this.updateCounter; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiFurnace.java b/src/game/java/net/minecraft/client/gui/inventory/GuiFurnace.java index 450813ef..f8532f2b 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiFurnace.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiFurnace.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiFurnace extends GuiContainer { private static final ResourceLocation furnaceGuiTextures = new ResourceLocation( @@ -45,6 +45,7 @@ public class GuiFurnace extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(furnaceGuiTextures); @@ -64,6 +65,7 @@ public class GuiFurnace extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { String s = this.tileFurnace.getDisplayName().getUnformattedText(); this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 0xFFFFFF); @@ -85,4 +87,4 @@ public class GuiFurnace extends GuiContainer { int j = this.tileFurnace.getField(3); return j != 0 && i != 0 ? i * pixels / j : 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiInventory.java b/src/game/java/net/minecraft/client/gui/inventory/GuiInventory.java index 52525a38..0bc146fa 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiInventory.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiInventory.java @@ -16,13 +16,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiInventory extends InventoryEffectRenderer { /** @@ -94,6 +94,7 @@ public class GuiInventory extends InventoryEffectRenderer { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.mc.displayGuiScreen(new GuiAchievements(this, this.mc.thePlayer.getStatFileWriter())); @@ -108,6 +109,7 @@ public class GuiInventory extends InventoryEffectRenderer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(inventoryBackground); @@ -124,6 +126,7 @@ public class GuiInventory extends InventoryEffectRenderer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 86, 16, 0xFFFFFF); } @@ -132,6 +135,7 @@ public class GuiInventory extends InventoryEffectRenderer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); this.oldMouseX = (float) i; @@ -143,6 +147,7 @@ public class GuiInventory extends InventoryEffectRenderer { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); if (this.mc.playerController.isInCreativeMode()) { @@ -156,6 +161,7 @@ public class GuiInventory extends InventoryEffectRenderer { /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { if (this.mc.playerController.isInCreativeMode()) { this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.thePlayer)); @@ -163,4 +169,4 @@ public class GuiInventory extends InventoryEffectRenderer { this.updateActivePotionEffects(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java b/src/game/java/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java index 75a189c5..8cd049cc 100644 --- a/src/game/java/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java +++ b/src/game/java/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenHorseInventory extends GuiContainer { private static final ResourceLocation horseGuiTextures = new ResourceLocation("textures/gui/container/horse.png"); @@ -49,6 +49,7 @@ public class GuiScreenHorseInventory extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(horseGuiTextures); @@ -71,6 +72,7 @@ public class GuiScreenHorseInventory extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(this.horseInventory.getDisplayName().getUnformattedText(), 8, 6, 0xFFFFFF); this.fontRendererObj.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, @@ -81,9 +83,10 @@ public class GuiScreenHorseInventory extends GuiContainer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.mousePosx = (float) i; this.mousePosY = (float) j; super.drawScreen(i, j, f); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java b/src/game/java/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java index 465fc7d1..3c9e1ba9 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java +++ b/src/game/java/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java @@ -12,13 +12,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BaseSpectatorGroup implements ISpectatorMenuView { private final List field_178671_a = Lists.newArrayList(); @@ -40,11 +40,13 @@ public class BaseSpectatorGroup implements ISpectatorMenuView { this.field_178671_a.add(new TeleportToTeam()); } + @Override public List func_178669_a() { return this.field_178671_a; } + @Override public IChatComponent func_178670_b() { return new ChatComponentText("Press a key to select a command, and again to use it."); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java index 1f6ad22e..b6ea8cf4 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java +++ b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISpectatorMenuObject { void func_178661_a(SpectatorMenu var1); @@ -33,4 +33,4 @@ public interface ISpectatorMenuObject { void func_178663_a(float var1, int var2); IChatComponent getSpectatorName(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java index 4a3cb9b5..dccb76fa 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java +++ b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java @@ -3,13 +3,13 @@ package net.minecraft.client.gui.spectator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.gui.spectator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISpectatorMenuRecipient { void func_175257_a(SpectatorMenu var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuView.java b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuView.java index 3aabd6cd..33a44a9e 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuView.java +++ b/src/game/java/net/minecraft/client/gui/spectator/ISpectatorMenuView.java @@ -7,13 +7,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,10 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISpectatorMenuView { List func_178669_a(); IChatComponent func_178670_b(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/PlayerMenuObject.java b/src/game/java/net/minecraft/client/gui/spectator/PlayerMenuObject.java index 0715cc10..96e69f65 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/PlayerMenuObject.java +++ b/src/game/java/net/minecraft/client/gui/spectator/PlayerMenuObject.java @@ -11,13 +11,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerMenuObject implements ISpectatorMenuObject { private final GameProfile profile; @@ -38,14 +38,17 @@ public class PlayerMenuObject implements ISpectatorMenuObject { this.profile = profileIn; } + @Override public void func_178661_a(SpectatorMenu menu) { Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C18PacketSpectate(this.profile.getId())); } + @Override public boolean func_178662_A_() { return true; } + @Override public void func_178663_a(float alpha, int parInt1) { Minecraft.getMinecraft().getTextureManager().bindTexture( Minecraft.getMinecraft().getNetHandler().getSkinCache().getSkin(profile).getResourceLocation()); @@ -54,7 +57,8 @@ public class PlayerMenuObject implements ISpectatorMenuObject { Gui.drawScaledCustomSizeModalRect(2, 2, 40.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText(this.profile.getName()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/SpectatorMenu.java b/src/game/java/net/minecraft/client/gui/spectator/SpectatorMenu.java index 1a5c1313..91cdba6b 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/SpectatorMenu.java +++ b/src/game/java/net/minecraft/client/gui/spectator/SpectatorMenu.java @@ -16,13 +16,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,26 +34,30 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SpectatorMenu { static class EndSpectatorObject implements ISpectatorMenuObject { private EndSpectatorObject() { } + @Override public void func_178661_a(SpectatorMenu spectatormenu) { spectatormenu.func_178641_d(); } + @Override public boolean func_178662_A_() { return true; } + @Override public void func_178663_a(float var1, int var2) { Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.field_175269_a); Gui.drawModalRectWithCustomSizedTexture(0, 0, 128.0F, 0.0F, 16, 16, 256.0F, 256.0F); } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText("Close menu"); } @@ -68,14 +72,17 @@ public class SpectatorMenu { this.field_178665_b = parFlag; } + @Override public void func_178661_a(SpectatorMenu spectatormenu) { spectatormenu.field_178658_j = this.field_178666_a; } + @Override public boolean func_178662_A_() { return this.field_178665_b; } + @Override public void func_178663_a(float var1, int var2) { Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.field_175269_a); if (this.field_178666_a < 0) { @@ -86,6 +93,7 @@ public class SpectatorMenu { } + @Override public IChatComponent getSpectatorName() { return this.field_178666_a < 0 ? new ChatComponentText("Previous Page") : new ChatComponentText("Next Page"); @@ -97,16 +105,20 @@ public class SpectatorMenu { private static final ISpectatorMenuObject field_178653_d = new SpectatorMenu.MoveMenuObject(1, true); private static final ISpectatorMenuObject field_178654_e = new SpectatorMenu.MoveMenuObject(1, false); public static final ISpectatorMenuObject field_178657_a = new ISpectatorMenuObject() { + @Override public void func_178661_a(SpectatorMenu var1) { } + @Override public boolean func_178662_A_() { return false; } + @Override public void func_178663_a(float var1, int var2) { } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText(""); } @@ -182,4 +194,4 @@ public class SpectatorMenu { public ISpectatorMenuView func_178650_c() { return this.field_178659_h; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java b/src/game/java/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java index f1115591..346c2ec3 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java +++ b/src/game/java/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java @@ -11,13 +11,13 @@ import net.minecraft.client.gui.spectator.SpectatorMenu; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.client.gui.spectator.SpectatorMenu; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SpectatorDetails { private final ISpectatorMenuView field_178684_a; @@ -51,4 +51,4 @@ public class SpectatorDetails { public int func_178681_b() { return this.field_178683_c; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java b/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java index 61c35d77..575af22d 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java +++ b/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java @@ -23,13 +23,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,11 +41,12 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeleportToPlayer implements ISpectatorMenuView, ISpectatorMenuObject { private static final Ordering field_178674_a = Ordering .from(new Comparator() { + @Override public int compare(NetworkPlayerInfo networkplayerinfo, NetworkPlayerInfo networkplayerinfo1) { return ComparisonChain.start().compare(networkplayerinfo.getGameProfile().getId(), networkplayerinfo1.getGameProfile().getId()).result(); @@ -70,28 +71,34 @@ public class TeleportToPlayer implements ISpectatorMenuView, ISpectatorMenuObjec } + @Override public void func_178661_a(SpectatorMenu spectatormenu) { spectatormenu.func_178647_a(this); } + @Override public boolean func_178662_A_() { return !this.field_178673_b.isEmpty(); } + @Override public void func_178663_a(float var1, int var2) { Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.field_175269_a); Gui.drawModalRectWithCustomSizedTexture(0, 0, 0.0F, 0.0F, 16, 16, 256.0F, 256.0F); } + @Override public List func_178669_a() { return this.field_178673_b; } + @Override public IChatComponent func_178670_b() { return new ChatComponentText("Select a player to teleport to"); } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText("Teleport to player"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java b/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java index 28bc68d1..b02c497f 100644 --- a/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java +++ b/src/game/java/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java @@ -23,13 +23,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject { class TeamSelectionObject implements ISpectatorMenuObject { @@ -76,14 +76,17 @@ public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject } + @Override public void func_178661_a(SpectatorMenu spectatormenu) { spectatormenu.func_178647_a(new TeleportToPlayer(this.field_178675_d)); } + @Override public boolean func_178662_A_() { return !this.field_178675_d.isEmpty(); } + @Override public void func_178663_a(float f, int i) { int j = -1; String s = FontRenderer.getFormatFromString(this.field_178676_b.getColorPrefix()); @@ -104,6 +107,7 @@ public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject Gui.drawScaledCustomSizeModalRect(2, 2, 40.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText(this.field_178676_b.getTeamName()); } @@ -120,10 +124,12 @@ public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject } + @Override public void func_178661_a(SpectatorMenu spectatormenu) { spectatormenu.func_178647_a(this); } + @Override public boolean func_178662_A_() { for (int i = 0, l = this.field_178672_a.size(); i < l; ++i) { if (this.field_178672_a.get(i).func_178662_A_()) { @@ -134,20 +140,24 @@ public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject return false; } + @Override public void func_178663_a(float var1, int var2) { Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.field_175269_a); Gui.drawModalRectWithCustomSizedTexture(0, 0, 16.0F, 0.0F, 16, 16, 256.0F, 256.0F); } + @Override public List func_178669_a() { return this.field_178672_a; } + @Override public IChatComponent func_178670_b() { return new ChatComponentText("Select a team to teleport to"); } + @Override public IChatComponent getSpectatorName() { return new ChatComponentText("Teleport to team member"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/main/GameConfiguration.java b/src/game/java/net/minecraft/client/main/GameConfiguration.java index fd0a4956..71e07659 100644 --- a/src/game/java/net/minecraft/client/main/GameConfiguration.java +++ b/src/game/java/net/minecraft/client/main/GameConfiguration.java @@ -5,13 +5,13 @@ import net.minecraft.util.Session; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.Session; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameConfiguration { public static class DisplayInformation { @@ -70,4 +70,4 @@ public class GameConfiguration { this.displayInfo = displayInfoIn; this.gameInfo = gameInfoIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/main/Main.java b/src/game/java/net/minecraft/client/main/Main.java index 7437c1c2..d7bede20 100644 --- a/src/game/java/net/minecraft/client/main/Main.java +++ b/src/game/java/net/minecraft/client/main/Main.java @@ -7,13 +7,13 @@ import net.minecraft.util.Session; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.Session; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Main { public static void appMain() { @@ -37,4 +37,4 @@ public class Main { PlatformRuntime.setThreadName("Client thread"); (new Minecraft(gameconfiguration)).run(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelArmorStand.java b/src/game/java/net/minecraft/client/model/ModelArmorStand.java index dc3a01a1..38ae59a6 100644 --- a/src/game/java/net/minecraft/client/model/ModelArmorStand.java +++ b/src/game/java/net/minecraft/client/model/ModelArmorStand.java @@ -7,13 +7,13 @@ import net.minecraft.entity.item.EntityArmorStand; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.item.EntityArmorStand; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelArmorStand extends ModelArmorStandArmor { public ModelRenderer standRightSide; @@ -74,6 +74,7 @@ public class ModelArmorStand extends ModelArmorStandArmor { this.standBase.setRotationPoint(0.0F, 12.0F, 0.0F); } + @Override public void postRenderArm(float scale) { boolean flag = this.bipedRightArm.showModel; this.bipedRightArm.showModel = true; @@ -84,6 +85,7 @@ public class ModelArmorStand extends ModelArmorStandArmor { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entityIn, float scale, float parFloat2, float parFloat3, float parFloat4, float parFloat5, float parFloat6) { super.render(entityIn, scale, parFloat2, parFloat3, parFloat4, parFloat5, parFloat6); @@ -116,6 +118,7 @@ public class ModelArmorStand extends ModelArmorStandArmor { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); if (entity instanceof EntityArmorStand) { @@ -145,4 +148,4 @@ public class ModelArmorStand extends ModelArmorStandArmor { this.standBase.rotateAngleZ = 0.0F; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelArmorStandArmor.java b/src/game/java/net/minecraft/client/model/ModelArmorStandArmor.java index 3707b9bc..5fe02b02 100644 --- a/src/game/java/net/minecraft/client/model/ModelArmorStandArmor.java +++ b/src/game/java/net/minecraft/client/model/ModelArmorStandArmor.java @@ -6,13 +6,13 @@ import net.minecraft.entity.item.EntityArmorStand; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.item.EntityArmorStand; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelArmorStandArmor extends ModelBiped { public ModelArmorStandArmor() { @@ -45,6 +45,7 @@ public class ModelArmorStandArmor extends ModelBiped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float entityIn, float parFloat2, float parFloat3, float parFloat4, float parFloat5, float parFloat6, Entity parEntity) { if (parEntity instanceof EntityArmorStand) { @@ -73,4 +74,4 @@ public class ModelArmorStandArmor extends ModelBiped { copyModelAngles(this.bipedHead, this.bipedHeadwear); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBanner.java b/src/game/java/net/minecraft/client/model/ModelBanner.java index 15219f65..fa49de48 100644 --- a/src/game/java/net/minecraft/client/model/ModelBanner.java +++ b/src/game/java/net/minecraft/client/model/ModelBanner.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBanner extends ModelBase { public ModelRenderer bannerSlate; @@ -48,4 +48,4 @@ public class ModelBanner extends ModelBase { this.bannerStand.render(0.0625F); this.bannerTop.render(0.0625F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBase.java b/src/game/java/net/minecraft/client/model/ModelBase.java index 7f3cb4d7..d9afd22a 100644 --- a/src/game/java/net/minecraft/client/model/ModelBase.java +++ b/src/game/java/net/minecraft/client/model/ModelBase.java @@ -13,13 +13,13 @@ import net.minecraft.entity.EntityLivingBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.entity.EntityLivingBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ModelBase { /** @@ -99,4 +99,4 @@ public abstract class ModelBase { protected void setTextureOffset(String partName, int x, int y) { this.modelTextureMap.put(partName, new TextureOffset(x, y)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBat.java b/src/game/java/net/minecraft/client/model/ModelBat.java index e3720c7c..f8753874 100644 --- a/src/game/java/net/minecraft/client/model/ModelBat.java +++ b/src/game/java/net/minecraft/client/model/ModelBat.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBat extends ModelBase { private ModelRenderer batHead; @@ -71,6 +71,7 @@ public class ModelBat extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.batHead.render(f5); @@ -83,6 +84,7 @@ public class ModelBat extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float f1, float f2, float var6, Entity entity) { if (((EntityBat) entity).getIsBatHanging()) { float f3 = 57.295776F; @@ -116,4 +118,4 @@ public class ModelBat extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBiped.java b/src/game/java/net/minecraft/client/model/ModelBiped.java index 06b417da..0836930a 100644 --- a/src/game/java/net/minecraft/client/model/ModelBiped.java +++ b/src/game/java/net/minecraft/client/model/ModelBiped.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBiped extends ModelBase { public ModelRenderer bipedHead; @@ -83,6 +83,7 @@ public class ModelBiped extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); GlStateManager.pushMatrix(); @@ -128,6 +129,7 @@ public class ModelBiped extends ModelBase { this.bipedLeftLeg.showModel = invisible; } + @Override public void setModelAttributes(ModelBase model) { super.setModelAttributes(model); if (model instanceof ModelBiped) { @@ -146,6 +148,7 @@ public class ModelBiped extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float var6, Entity var7) { this.bipedHead.rotateAngleY = f3 / 57.295776F; this.bipedHead.rotateAngleX = f4 / 57.295776F; @@ -252,4 +255,4 @@ public class ModelBiped extends ModelBase { copyModelAngles(this.bipedHead, this.bipedHeadwear); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBlaze.java b/src/game/java/net/minecraft/client/model/ModelBlaze.java index ae1fb852..723fe26f 100644 --- a/src/game/java/net/minecraft/client/model/ModelBlaze.java +++ b/src/game/java/net/minecraft/client/model/ModelBlaze.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBlaze extends ModelBase { /** @@ -46,6 +46,7 @@ public class ModelBlaze extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.blazeHead.render(f5); @@ -62,6 +63,7 @@ public class ModelBlaze extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float f1, float f2, float var6, Entity var7) { float f3 = f * 3.1415927F * -0.1F; @@ -93,4 +95,4 @@ public class ModelBlaze extends ModelBase { this.blazeHead.rotateAngleY = f1 / 57.295776F; this.blazeHead.rotateAngleX = f2 / 57.295776F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBoat.java b/src/game/java/net/minecraft/client/model/ModelBoat.java index cd47df2d..9da329b0 100644 --- a/src/game/java/net/minecraft/client/model/ModelBoat.java +++ b/src/game/java/net/minecraft/client/model/ModelBoat.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBoat extends ModelBase { public ModelRenderer[] boatSides = new ModelRenderer[5]; @@ -57,10 +57,11 @@ public class ModelBoat extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float f) { for (int i = 0; i < 5; ++i) { this.boatSides[i].render(f); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBook.java b/src/game/java/net/minecraft/client/model/ModelBook.java index b14ee43f..f5ef1859 100644 --- a/src/game/java/net/minecraft/client/model/ModelBook.java +++ b/src/game/java/net/minecraft/client/model/ModelBook.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBook extends ModelBase { /** @@ -72,6 +72,7 @@ public class ModelBook extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.coverRight.render(f5); @@ -89,6 +90,7 @@ public class ModelBook extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float var5, float var6, Entity var7) { float f4 = (MathHelper.sin(f * 0.02F) * 0.1F + 1.25F) * f3; this.coverRight.rotateAngleY = 3.1415927F + f4; @@ -102,4 +104,4 @@ public class ModelBook extends ModelBase { this.flippingPageRight.rotationPointX = MathHelper.sin(f4); this.flippingPageLeft.rotationPointX = MathHelper.sin(f4); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelBox.java b/src/game/java/net/minecraft/client/model/ModelBox.java index 520e4397..11a66ec1 100644 --- a/src/game/java/net/minecraft/client/model/ModelBox.java +++ b/src/game/java/net/minecraft/client/model/ModelBox.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBox { private PositionTextureVertex[] vertexPositions; @@ -134,4 +134,4 @@ public class ModelBox { this.boxName = name; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelChest.java b/src/game/java/net/minecraft/client/model/ModelChest.java index 8bffe7bb..87eb53a7 100644 --- a/src/game/java/net/minecraft/client/model/ModelChest.java +++ b/src/game/java/net/minecraft/client/model/ModelChest.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelChest extends ModelBase { /** @@ -57,4 +57,4 @@ public class ModelChest extends ModelBase { this.chestKnob.render(0.0625F); this.chestBelow.render(0.0625F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelChicken.java b/src/game/java/net/minecraft/client/model/ModelChicken.java index a17592f6..ae3e3675 100644 --- a/src/game/java/net/minecraft/client/model/ModelChicken.java +++ b/src/game/java/net/minecraft/client/model/ModelChicken.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelChicken extends ModelBase { public ModelRenderer head; @@ -68,6 +68,7 @@ public class ModelChicken extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); if (this.isChild) { @@ -106,6 +107,7 @@ public class ModelChicken extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float var6, Entity var7) { this.head.rotateAngleX = f4 / 57.295776F; this.head.rotateAngleY = f3 / 57.295776F; @@ -119,4 +121,4 @@ public class ModelChicken extends ModelBase { this.rightWing.rotateAngleZ = f2; this.leftWing.rotateAngleZ = -f2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelCow.java b/src/game/java/net/minecraft/client/model/ModelCow.java index 7487aec7..476a54d6 100644 --- a/src/game/java/net/minecraft/client/model/ModelCow.java +++ b/src/game/java/net/minecraft/client/model/ModelCow.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelCow extends ModelQuadruped { public ModelCow() { @@ -45,4 +45,4 @@ public class ModelCow extends ModelQuadruped { --this.leg4.rotationPointZ; this.childZOffset += 2.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelCreeper.java b/src/game/java/net/minecraft/client/model/ModelCreeper.java index ab5b8012..8773a209 100644 --- a/src/game/java/net/minecraft/client/model/ModelCreeper.java +++ b/src/game/java/net/minecraft/client/model/ModelCreeper.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelCreeper extends ModelBase { public ModelRenderer head; @@ -67,6 +67,7 @@ public class ModelCreeper extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.head.render(f5); @@ -83,6 +84,7 @@ public class ModelCreeper extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { this.head.rotateAngleY = f2 / 57.295776F; this.head.rotateAngleX = f3 / 57.295776F; @@ -91,4 +93,4 @@ public class ModelCreeper extends ModelBase { this.leg3.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.1415927F) * 1.4F * f1; this.leg4.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelDragon.java b/src/game/java/net/minecraft/client/model/ModelDragon.java index 19ea9cda..1cf67f05 100644 --- a/src/game/java/net/minecraft/client/model/ModelDragon.java +++ b/src/game/java/net/minecraft/client/model/ModelDragon.java @@ -12,13 +12,13 @@ import net.minecraft.entity.boss.EntityDragon; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.entity.boss.EntityDragon; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelDragon extends ModelBase { private ModelRenderer head; @@ -128,6 +128,7 @@ public class ModelDragon extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float var2, float var3, float var4, float var5, float var6, float f) { GlStateManager.pushMatrix(); EntityDragon entitydragon = (EntityDragon) entity; @@ -240,6 +241,7 @@ public class ModelDragon extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase var1, float var2, float var3, float f) { this.partialTicks = f; } @@ -261,4 +263,4 @@ public class ModelDragon extends ModelBase { return (float) parDouble1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelEnderCrystal.java b/src/game/java/net/minecraft/client/model/ModelEnderCrystal.java index f9c5817c..5074878b 100644 --- a/src/game/java/net/minecraft/client/model/ModelEnderCrystal.java +++ b/src/game/java/net/minecraft/client/model/ModelEnderCrystal.java @@ -6,13 +6,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelEnderCrystal extends ModelBase { private ModelRenderer cube; @@ -48,6 +48,7 @@ public class ModelEnderCrystal extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity var1, float var2, float f, float f1, float var5, float var6, float f2) { GlStateManager.pushMatrix(); GlStateManager.scale(2.0F, 2.0F, 2.0F); @@ -71,4 +72,4 @@ public class ModelEnderCrystal extends ModelBase { this.cube.render(f2); GlStateManager.popMatrix(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelEnderMite.java b/src/game/java/net/minecraft/client/model/ModelEnderMite.java index 643f48df..1faccb00 100644 --- a/src/game/java/net/minecraft/client/model/ModelEnderMite.java +++ b/src/game/java/net/minecraft/client/model/ModelEnderMite.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelEnderMite extends ModelBase { private static final int[][] field_178716_a = new int[][] { { 4, 3, 2 }, { 6, 4, 5 }, { 3, 3, 1 }, { 1, 2, 1 } }; @@ -52,6 +52,7 @@ public class ModelEnderMite extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); @@ -67,6 +68,7 @@ public class ModelEnderMite extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float var4, float var5, float var6, Entity var7) { for (int i = 0; i < this.field_178713_d.length; ++i) { this.field_178713_d[i].rotateAngleY = MathHelper.cos(f * 0.9F + (float) i * 0.15F * 3.1415927F) * 3.1415927F @@ -76,4 +78,4 @@ public class ModelEnderMite extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelEnderman.java b/src/game/java/net/minecraft/client/model/ModelEnderman.java index 3107c087..b1288ff1 100644 --- a/src/game/java/net/minecraft/client/model/ModelEnderman.java +++ b/src/game/java/net/minecraft/client/model/ModelEnderman.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelEnderman extends ModelBiped { public boolean isCarrying; @@ -60,6 +60,7 @@ public class ModelEnderman extends ModelBiped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.bipedHead.showModel = true; @@ -133,4 +134,4 @@ public class ModelEnderman extends ModelBiped { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelGhast.java b/src/game/java/net/minecraft/client/model/ModelGhast.java index 1f6343b7..fd908074 100644 --- a/src/game/java/net/minecraft/client/model/ModelGhast.java +++ b/src/game/java/net/minecraft/client/model/ModelGhast.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelGhast extends ModelBase { ModelRenderer body; @@ -55,6 +55,7 @@ public class ModelGhast extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); GlStateManager.pushMatrix(); @@ -74,10 +75,11 @@ public class ModelGhast extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float var4, float var5, float var6, Entity var7) { for (int i = 0; i < this.tentacles.length; ++i) { this.tentacles[i].rotateAngleX = 0.2F * MathHelper.sin(f * 0.3F + (float) i) + 0.4F; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelGuardian.java b/src/game/java/net/minecraft/client/model/ModelGuardian.java index cf5b97a3..9606909f 100644 --- a/src/game/java/net/minecraft/client/model/ModelGuardian.java +++ b/src/game/java/net/minecraft/client/model/ModelGuardian.java @@ -9,13 +9,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelGuardian extends ModelBase { private ModelRenderer guardianBody; @@ -75,6 +75,7 @@ public class ModelGuardian extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.guardianBody.render(f5); @@ -86,6 +87,7 @@ public class ModelGuardian extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float f1, float f2, float var6, Entity entity) { EntityGuardian entityguardian = (EntityGuardian) entity; float f3 = f - (float) entityguardian.ticksExisted; @@ -148,4 +150,4 @@ public class ModelGuardian extends ModelBase { this.guardianTail[2].rotationPointY = 0.5F; this.guardianTail[2].rotationPointZ = 6.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelHorse.java b/src/game/java/net/minecraft/client/model/ModelHorse.java index 261363e4..56a9e397 100644 --- a/src/game/java/net/minecraft/client/model/ModelHorse.java +++ b/src/game/java/net/minecraft/client/model/ModelHorse.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelHorse extends ModelBase { private ModelRenderer head; @@ -214,6 +214,7 @@ public class ModelHorse extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float var2, float var3, float var4, float var5, float var6, float f) { EntityHorse entityhorse = (EntityHorse) entity; int i = entityhorse.getHorseType(); @@ -319,6 +320,7 @@ public class ModelHorse extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float partialTickTime, float parFloat2, float parFloat3) { super.setLivingAnimations(entitylivingbaseIn, partialTickTime, parFloat2, parFloat3); @@ -555,4 +557,4 @@ public class ModelHorse extends ModelBase { return parFloat1 + parFloat3 * f; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelHumanoidHead.java b/src/game/java/net/minecraft/client/model/ModelHumanoidHead.java index 3a4e08b4..60ac2f7e 100644 --- a/src/game/java/net/minecraft/client/model/ModelHumanoidHead.java +++ b/src/game/java/net/minecraft/client/model/ModelHumanoidHead.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelHumanoidHead extends ModelSkeletonHead { private final ModelRenderer head = new ModelRenderer(this, 32, 0); @@ -37,6 +37,7 @@ public class ModelHumanoidHead extends ModelSkeletonHead { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); this.head.render(f5); @@ -48,9 +49,10 @@ public class ModelHumanoidHead extends ModelSkeletonHead { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.head.rotateAngleY = this.skeletonHead.rotateAngleY; this.head.rotateAngleX = this.skeletonHead.rotateAngleX; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelIronGolem.java b/src/game/java/net/minecraft/client/model/ModelIronGolem.java index f8390676..916819a7 100644 --- a/src/game/java/net/minecraft/client/model/ModelIronGolem.java +++ b/src/game/java/net/minecraft/client/model/ModelIronGolem.java @@ -7,13 +7,13 @@ import net.minecraft.entity.monster.EntityIronGolem; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.monster.EntityIronGolem; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelIronGolem extends ModelBase { public ModelRenderer ironGolemHead; @@ -76,6 +76,7 @@ public class ModelIronGolem extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.ironGolemHead.render(f5); @@ -91,6 +92,7 @@ public class ModelIronGolem extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { EntityIronGolem entityirongolem = (EntityIronGolem) entitylivingbase; int i = entityirongolem.getAttackTimer(); @@ -116,6 +118,7 @@ public class ModelIronGolem extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { this.ironGolemHead.rotateAngleY = f2 / 57.295776F; this.ironGolemHead.rotateAngleX = f3 / 57.295776F; @@ -124,4 +127,4 @@ public class ModelIronGolem extends ModelBase { this.ironGolemLeftLeg.rotateAngleY = 0.0F; this.ironGolemRightLeg.rotateAngleY = 0.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelLargeChest.java b/src/game/java/net/minecraft/client/model/ModelLargeChest.java index 1ccd207c..3903d62e 100644 --- a/src/game/java/net/minecraft/client/model/ModelLargeChest.java +++ b/src/game/java/net/minecraft/client/model/ModelLargeChest.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelLargeChest extends ModelChest { public ModelLargeChest() { @@ -41,4 +41,4 @@ public class ModelLargeChest extends ModelChest { this.chestBelow.rotationPointY = 6.0F; this.chestBelow.rotationPointZ = 1.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelLeashKnot.java b/src/game/java/net/minecraft/client/model/ModelLeashKnot.java index 66c9931d..09829d41 100644 --- a/src/game/java/net/minecraft/client/model/ModelLeashKnot.java +++ b/src/game/java/net/minecraft/client/model/ModelLeashKnot.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelLeashKnot extends ModelBase { public ModelRenderer field_110723_a; @@ -43,6 +43,7 @@ public class ModelLeashKnot extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.field_110723_a.render(f5); @@ -54,9 +55,10 @@ public class ModelLeashKnot extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.field_110723_a.rotateAngleY = f3 / 57.295776F; this.field_110723_a.rotateAngleX = f4 / 57.295776F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelMagmaCube.java b/src/game/java/net/minecraft/client/model/ModelMagmaCube.java index 9d40c598..d332f3a0 100644 --- a/src/game/java/net/minecraft/client/model/ModelMagmaCube.java +++ b/src/game/java/net/minecraft/client/model/ModelMagmaCube.java @@ -7,13 +7,13 @@ import net.minecraft.entity.monster.EntityMagmaCube; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.monster.EntityMagmaCube; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelMagmaCube extends ModelBase { ModelRenderer[] segments = new ModelRenderer[8]; @@ -54,6 +54,7 @@ public class ModelMagmaCube extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.core.render(f5); @@ -69,6 +70,7 @@ public class ModelMagmaCube extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float var2, float var3, float f) { EntityMagmaCube entitymagmacube = (EntityMagmaCube) entitylivingbase; float f1 = entitymagmacube.prevSquishFactor @@ -82,4 +84,4 @@ public class ModelMagmaCube extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelMinecart.java b/src/game/java/net/minecraft/client/model/ModelMinecart.java index d02c55f1..370b5a4a 100644 --- a/src/game/java/net/minecraft/client/model/ModelMinecart.java +++ b/src/game/java/net/minecraft/client/model/ModelMinecart.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelMinecart extends ModelBase { public ModelRenderer[] sideModels = new ModelRenderer[7]; @@ -61,6 +61,7 @@ public class ModelMinecart extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity var1, float var2, float var3, float f, float var5, float var6, float f1) { this.sideModels[5].rotationPointY = 4.0F - f; @@ -69,4 +70,4 @@ public class ModelMinecart extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelOcelot.java b/src/game/java/net/minecraft/client/model/ModelOcelot.java index 1d737343..b7189090 100644 --- a/src/game/java/net/minecraft/client/model/ModelOcelot.java +++ b/src/game/java/net/minecraft/client/model/ModelOcelot.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelOcelot extends ModelBase { ModelRenderer ocelotBackLeftLeg; @@ -78,6 +78,7 @@ public class ModelOcelot extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); if (this.isChild) { @@ -116,6 +117,7 @@ public class ModelOcelot extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float var2, float var3, float var4) { EntityOcelot entityocelot = (EntityOcelot) entitylivingbase; this.ocelotBody.rotationPointY = 12.0F; @@ -177,6 +179,7 @@ public class ModelOcelot extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { this.ocelotHead.rotateAngleX = f3 / 57.295776F; this.ocelotHead.rotateAngleY = f2 / 57.295776F; @@ -202,4 +205,4 @@ public class ModelOcelot extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelPig.java b/src/game/java/net/minecraft/client/model/ModelPig.java index 1d87e209..7ffbfbb5 100644 --- a/src/game/java/net/minecraft/client/model/ModelPig.java +++ b/src/game/java/net/minecraft/client/model/ModelPig.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelPig extends ModelQuadruped { public ModelPig() { @@ -33,4 +33,4 @@ public class ModelPig extends ModelQuadruped { this.head.setTextureOffset(16, 16).addBox(-2.0F, 0.0F, -9.0F, 4, 3, 1, parFloat1); this.childYOffset = 4.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelPlayer.java b/src/game/java/net/minecraft/client/model/ModelPlayer.java index 78a487b4..b3c453af 100644 --- a/src/game/java/net/minecraft/client/model/ModelPlayer.java +++ b/src/game/java/net/minecraft/client/model/ModelPlayer.java @@ -9,13 +9,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelPlayer extends ModelBiped { public ModelRenderer bipedLeftArmwear; @@ -86,6 +86,7 @@ public class ModelPlayer extends ModelBiped { this.bipedBodyWear.setRotationPoint(0.0F, 0.0F, 0.0F); } + @Override public void postRenderArm(float f) { if (this.smallArms) { ++this.bipedRightArm.rotationPointX; @@ -100,6 +101,7 @@ public class ModelPlayer extends ModelBiped { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); GlStateManager.pushMatrix(); @@ -155,6 +157,7 @@ public class ModelPlayer extends ModelBiped { this.bipedRightArmwear.render(0.0625F); } + @Override public void setInvisible(boolean flag) { super.setInvisible(flag); this.bipedLeftArmwear.showModel = flag; @@ -172,6 +175,7 @@ public class ModelPlayer extends ModelBiped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); copyModelAngles(this.bipedLeftLeg, this.bipedLeftLegwear); @@ -186,4 +190,4 @@ public class ModelPlayer extends ModelBiped { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelQuadruped.java b/src/game/java/net/minecraft/client/model/ModelQuadruped.java index 80e2a92f..a9202d3f 100644 --- a/src/game/java/net/minecraft/client/model/ModelQuadruped.java +++ b/src/game/java/net/minecraft/client/model/ModelQuadruped.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelQuadruped extends ModelBase { public ModelRenderer head = new ModelRenderer(this, 0, 0); @@ -60,6 +60,7 @@ public class ModelQuadruped extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); if (this.isChild) { @@ -94,6 +95,7 @@ public class ModelQuadruped extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { float f4 = 57.295776F; this.head.rotateAngleX = f3 / 57.295776F; @@ -104,4 +106,4 @@ public class ModelQuadruped extends ModelBase { this.leg3.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.1415927F) * 1.4F * f1; this.leg4.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelRabbit.java b/src/game/java/net/minecraft/client/model/ModelRabbit.java index e75dacca..fc005074 100644 --- a/src/game/java/net/minecraft/client/model/ModelRabbit.java +++ b/src/game/java/net/minecraft/client/model/ModelRabbit.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelRabbit extends ModelBase { ModelRenderer rabbitLeftFoot; @@ -115,6 +115,7 @@ public class ModelRabbit extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); if (this.isChild) { @@ -160,6 +161,7 @@ public class ModelRabbit extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase var1, float var2, float var3, float var4) { } @@ -169,6 +171,7 @@ public class ModelRabbit extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float f1, float f2, float var6, Entity entity) { float f3 = f - (float) entity.ticksExisted; EntityRabbit entityrabbit = (EntityRabbit) entity; @@ -191,4 +194,4 @@ public class ModelRabbit extends ModelBase { parModelRenderer.rotateAngleY = parFloat2; parModelRenderer.rotateAngleZ = parFloat3; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelRenderer.java b/src/game/java/net/minecraft/client/model/ModelRenderer.java index c0e9e25f..42562310 100644 --- a/src/game/java/net/minecraft/client/model/ModelRenderer.java +++ b/src/game/java/net/minecraft/client/model/ModelRenderer.java @@ -15,13 +15,13 @@ import net.minecraft.client.renderer.Tessellator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.client.renderer.Tessellator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelRenderer { public float textureWidth; @@ -293,4 +293,4 @@ public class ModelRenderer { this.textureHeight = (float) textureHeightIn; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSheep1.java b/src/game/java/net/minecraft/client/model/ModelSheep1.java index 2e6edd4a..5b3e72b7 100644 --- a/src/game/java/net/minecraft/client/model/ModelSheep1.java +++ b/src/game/java/net/minecraft/client/model/ModelSheep1.java @@ -7,13 +7,13 @@ import net.minecraft.entity.passive.EntitySheep; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.passive.EntitySheep; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSheep1 extends ModelQuadruped { private float headRotationAngleX; @@ -58,6 +58,7 @@ public class ModelSheep1 extends ModelQuadruped { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { super.setLivingAnimations(entitylivingbase, f, f1, f2); this.head.rotationPointY = 6.0F + ((EntitySheep) entitylivingbase).getHeadRotationPointY(f2) * 9.0F; @@ -70,8 +71,9 @@ public class ModelSheep1 extends ModelQuadruped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.head.rotateAngleX = this.headRotationAngleX; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSheep2.java b/src/game/java/net/minecraft/client/model/ModelSheep2.java index f3d97cd3..fdcf2769 100644 --- a/src/game/java/net/minecraft/client/model/ModelSheep2.java +++ b/src/game/java/net/minecraft/client/model/ModelSheep2.java @@ -7,13 +7,13 @@ import net.minecraft.entity.passive.EntitySheep; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.passive.EntitySheep; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSheep2 extends ModelQuadruped { private float headRotationAngleX; @@ -45,6 +45,7 @@ public class ModelSheep2 extends ModelQuadruped { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { super.setLivingAnimations(entitylivingbase, f, f1, f2); this.head.rotationPointY = 6.0F + ((EntitySheep) entitylivingbase).getHeadRotationPointY(f2) * 9.0F; @@ -57,8 +58,9 @@ public class ModelSheep2 extends ModelQuadruped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.head.rotateAngleX = this.headRotationAngleX; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSign.java b/src/game/java/net/minecraft/client/model/ModelSign.java index 9bd39b1d..f2dc67e6 100644 --- a/src/game/java/net/minecraft/client/model/ModelSign.java +++ b/src/game/java/net/minecraft/client/model/ModelSign.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSign extends ModelBase { /** @@ -43,4 +43,4 @@ public class ModelSign extends ModelBase { this.signBoard.render(0.0625F); this.signStick.render(0.0625F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSilverfish.java b/src/game/java/net/minecraft/client/model/ModelSilverfish.java index 3240d372..5fec6569 100644 --- a/src/game/java/net/minecraft/client/model/ModelSilverfish.java +++ b/src/game/java/net/minecraft/client/model/ModelSilverfish.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSilverfish extends ModelBase { /** @@ -78,6 +78,7 @@ public class ModelSilverfish extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); @@ -97,6 +98,7 @@ public class ModelSilverfish extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float var4, float var5, float var6, Entity var7) { for (int i = 0; i < this.silverfishBodyParts.length; ++i) { this.silverfishBodyParts[i].rotateAngleY = MathHelper.cos(f * 0.9F + (float) i * 0.15F * 3.1415927F) @@ -111,4 +113,4 @@ public class ModelSilverfish extends ModelBase { this.silverfishWings[2].rotateAngleY = this.silverfishBodyParts[1].rotateAngleY; this.silverfishWings[2].rotationPointX = this.silverfishBodyParts[1].rotationPointX; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSkeleton.java b/src/game/java/net/minecraft/client/model/ModelSkeleton.java index 97474629..14af42fd 100644 --- a/src/game/java/net/minecraft/client/model/ModelSkeleton.java +++ b/src/game/java/net/minecraft/client/model/ModelSkeleton.java @@ -7,13 +7,13 @@ import net.minecraft.entity.monster.EntitySkeleton; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.monster.EntitySkeleton; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSkeleton extends ModelZombie { public ModelSkeleton() { @@ -58,6 +58,7 @@ public class ModelSkeleton extends ModelZombie { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { this.aimedBow = ((EntitySkeleton) entitylivingbase).getSkeletonType() == 1; super.setLivingAnimations(entitylivingbase, f, f1, f2); @@ -69,7 +70,8 @@ public class ModelSkeleton extends ModelZombie { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSkeletonHead.java b/src/game/java/net/minecraft/client/model/ModelSkeletonHead.java index 7ee1bba4..802c4395 100644 --- a/src/game/java/net/minecraft/client/model/ModelSkeletonHead.java +++ b/src/game/java/net/minecraft/client/model/ModelSkeletonHead.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSkeletonHead extends ModelBase { public ModelRenderer skeletonHead; @@ -43,6 +43,7 @@ public class ModelSkeletonHead extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.skeletonHead.render(f5); @@ -54,9 +55,10 @@ public class ModelSkeletonHead extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.skeletonHead.rotateAngleY = f3 / 57.295776F; this.skeletonHead.rotateAngleX = f4 / 57.295776F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSlime.java b/src/game/java/net/minecraft/client/model/ModelSlime.java index c887799a..eac72ca2 100644 --- a/src/game/java/net/minecraft/client/model/ModelSlime.java +++ b/src/game/java/net/minecraft/client/model/ModelSlime.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSlime extends ModelBase { ModelRenderer slimeBodies; @@ -50,6 +50,7 @@ public class ModelSlime extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.slimeBodies.render(f5); @@ -60,4 +61,4 @@ public class ModelSlime extends ModelBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSnowMan.java b/src/game/java/net/minecraft/client/model/ModelSnowMan.java index 9c480fd0..85a523d9 100644 --- a/src/game/java/net/minecraft/client/model/ModelSnowMan.java +++ b/src/game/java/net/minecraft/client/model/ModelSnowMan.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSnowMan extends ModelBase { public ModelRenderer body; @@ -56,6 +56,7 @@ public class ModelSnowMan extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.body.render(f5); @@ -71,6 +72,7 @@ public class ModelSnowMan extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.head.rotateAngleY = f3 / 57.295776F; @@ -87,4 +89,4 @@ public class ModelSnowMan extends ModelBase { this.leftHand.rotationPointX = -f7 * 5.0F; this.leftHand.rotationPointZ = f6 * 5.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSpider.java b/src/game/java/net/minecraft/client/model/ModelSpider.java index 67339047..12bd3d2c 100644 --- a/src/game/java/net/minecraft/client/model/ModelSpider.java +++ b/src/game/java/net/minecraft/client/model/ModelSpider.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSpider extends ModelBase { public ModelRenderer spiderHead; @@ -80,6 +80,7 @@ public class ModelSpider extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.spiderHead.render(f5); @@ -101,6 +102,7 @@ public class ModelSpider extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { this.spiderHead.rotateAngleY = f2 / 57.295776F; this.spiderHead.rotateAngleX = f3 / 57.295776F; @@ -148,4 +150,4 @@ public class ModelSpider extends ModelBase { this.spiderLeg7.rotateAngleZ += f14; this.spiderLeg8.rotateAngleZ += -f14; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelSquid.java b/src/game/java/net/minecraft/client/model/ModelSquid.java index f2d8b091..19de9be6 100644 --- a/src/game/java/net/minecraft/client/model/ModelSquid.java +++ b/src/game/java/net/minecraft/client/model/ModelSquid.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelSquid extends ModelBase { ModelRenderer squidBody; @@ -53,6 +53,7 @@ public class ModelSquid extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.squidBody.render(f5); @@ -69,10 +70,11 @@ public class ModelSquid extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float var4, float var5, float var6, Entity var7) { for (int i = 0; i < this.squidTentacles.length; ++i) { this.squidTentacles[i].rotateAngleX = f; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelVillager.java b/src/game/java/net/minecraft/client/model/ModelVillager.java index f203a2b7..556036e9 100644 --- a/src/game/java/net/minecraft/client/model/ModelVillager.java +++ b/src/game/java/net/minecraft/client/model/ModelVillager.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelVillager extends ModelBase { public ModelRenderer villagerHead; @@ -67,6 +67,7 @@ public class ModelVillager extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.villagerHead.render(f5); @@ -82,6 +83,7 @@ public class ModelVillager extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float var3, float f2, float f3, float var6, Entity var7) { this.villagerHead.rotateAngleY = f2 / 57.295776F; this.villagerHead.rotateAngleX = f3 / 57.295776F; @@ -93,4 +95,4 @@ public class ModelVillager extends ModelBase { this.rightVillagerLeg.rotateAngleY = 0.0F; this.leftVillagerLeg.rotateAngleY = 0.0F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelWitch.java b/src/game/java/net/minecraft/client/model/ModelWitch.java index 68509530..9f867bfa 100644 --- a/src/game/java/net/minecraft/client/model/ModelWitch.java +++ b/src/game/java/net/minecraft/client/model/ModelWitch.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelWitch extends ModelVillager { public boolean field_82900_g; @@ -66,6 +66,7 @@ public class ModelWitch extends ModelVillager { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.villagerNose.offsetX = this.villagerNose.offsetY = this.villagerNose.offsetZ = 0.0F; @@ -80,4 +81,4 @@ public class ModelWitch extends ModelVillager { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelWither.java b/src/game/java/net/minecraft/client/model/ModelWither.java index 4e2aa449..ec901f15 100644 --- a/src/game/java/net/minecraft/client/model/ModelWither.java +++ b/src/game/java/net/minecraft/client/model/ModelWither.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelWither extends ModelBase { private ModelRenderer[] field_82905_a; @@ -62,6 +62,7 @@ public class ModelWither extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); @@ -80,6 +81,7 @@ public class ModelWither extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float var2, float var3, float var4) { EntityWither entitywither = (EntityWither) entitylivingbase; @@ -97,6 +99,7 @@ public class ModelWither extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float var1, float var2, float f, float f1, float f2, float var6, Entity var7) { float f3 = MathHelper.cos(f * 0.1F); this.field_82905_a[1].rotateAngleX = (0.065F + 0.05F * f3) * 3.1415927F; @@ -106,4 +109,4 @@ public class ModelWither extends ModelBase { this.field_82904_b[0].rotateAngleY = f1 / 57.295776F; this.field_82904_b[0].rotateAngleX = f2 / 57.295776F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelWolf.java b/src/game/java/net/minecraft/client/model/ModelWolf.java index 5bacb959..b4e9b8c2 100644 --- a/src/game/java/net/minecraft/client/model/ModelWolf.java +++ b/src/game/java/net/minecraft/client/model/ModelWolf.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelWolf extends ModelBase { public ModelRenderer wolfHeadMain; @@ -74,6 +74,7 @@ public class ModelWolf extends ModelBase { /** * + Sets the models various rotation angles then renders the model. */ + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); @@ -112,6 +113,7 @@ public class ModelWolf extends ModelBase { * float params here are the same second and third as in the setRotationAngles * method. */ + @Override public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { EntityWolf entitywolf = (EntityWolf) entitylivingbase; if (entitywolf.isAngry()) { @@ -163,10 +165,11 @@ public class ModelWolf extends ModelBase { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.wolfHeadMain.rotateAngleX = f4 / 57.295776F; this.wolfHeadMain.rotateAngleY = f3 / 57.295776F; this.wolfTail.rotateAngleX = f2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelZombie.java b/src/game/java/net/minecraft/client/model/ModelZombie.java index 96e96320..2fddf1a6 100644 --- a/src/game/java/net/minecraft/client/model/ModelZombie.java +++ b/src/game/java/net/minecraft/client/model/ModelZombie.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelZombie extends ModelBiped { public ModelZombie() { @@ -45,6 +45,7 @@ public class ModelZombie extends ModelBiped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); float f6 = MathHelper.sin(this.swingProgress * 3.1415927F); @@ -62,4 +63,4 @@ public class ModelZombie extends ModelBiped { this.bipedRightArm.rotateAngleX += MathHelper.sin(f2 * 0.067F) * 0.05F; this.bipedLeftArm.rotateAngleX -= MathHelper.sin(f2 * 0.067F) * 0.05F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/ModelZombieVillager.java b/src/game/java/net/minecraft/client/model/ModelZombieVillager.java index 14cae187..ad17da22 100644 --- a/src/game/java/net/minecraft/client/model/ModelZombieVillager.java +++ b/src/game/java/net/minecraft/client/model/ModelZombieVillager.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelZombieVillager extends ModelBiped { public ModelZombieVillager() { @@ -52,6 +52,7 @@ public class ModelZombieVillager extends ModelBiped { * time(so that arms and legs swing back and forth) and par2 represents how * "far" arms and legs can swing at most. */ + @Override public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); float f6 = MathHelper.sin(this.swingProgress * 3.1415927F); @@ -69,4 +70,4 @@ public class ModelZombieVillager extends ModelBiped { this.bipedRightArm.rotateAngleX += MathHelper.sin(f2 * 0.067F) * 0.05F; this.bipedLeftArm.rotateAngleX -= MathHelper.sin(f2 * 0.067F) * 0.05F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/PositionTextureVertex.java b/src/game/java/net/minecraft/client/model/PositionTextureVertex.java index 8a15b62c..d019e289 100644 --- a/src/game/java/net/minecraft/client/model/PositionTextureVertex.java +++ b/src/game/java/net/minecraft/client/model/PositionTextureVertex.java @@ -5,13 +5,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PositionTextureVertex { public Vec3 vector3D; @@ -50,4 +50,4 @@ public class PositionTextureVertex { public PositionTextureVertex setTexturePosition(float parFloat1, float parFloat2) { return new PositionTextureVertex(this, parFloat1, parFloat2); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/TextureOffset.java b/src/game/java/net/minecraft/client/model/TextureOffset.java index 59f9db85..ca9a9072 100644 --- a/src/game/java/net/minecraft/client/model/TextureOffset.java +++ b/src/game/java/net/minecraft/client/model/TextureOffset.java @@ -3,13 +3,13 @@ package net.minecraft.client.model; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.model; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureOffset { public final int textureOffsetX; @@ -31,4 +31,4 @@ public class TextureOffset { this.textureOffsetX = textureOffsetXIn; this.textureOffsetY = textureOffsetYIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/model/TexturedQuad.java b/src/game/java/net/minecraft/client/model/TexturedQuad.java index c16d78e7..9be46146 100644 --- a/src/game/java/net/minecraft/client/model/TexturedQuad.java +++ b/src/game/java/net/minecraft/client/model/TexturedQuad.java @@ -8,13 +8,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TexturedQuad { public PositionTextureVertex[] vertexPositions; @@ -94,4 +94,4 @@ public class TexturedQuad { this.vertexPositions = apositiontexturevertex; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/ChunkProviderClient.java b/src/game/java/net/minecraft/client/multiplayer/ChunkProviderClient.java index ce048fa1..88e518f6 100644 --- a/src/game/java/net/minecraft/client/multiplayer/ChunkProviderClient.java +++ b/src/game/java/net/minecraft/client/multiplayer/ChunkProviderClient.java @@ -21,13 +21,13 @@ import net.minecraft.world.chunk.IChunkProvider; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.chunk.IChunkProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderClient implements IChunkProvider { private static final Logger logger = LogManager.getLogger(); @@ -65,6 +65,7 @@ public class ChunkProviderClient implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return false; } @@ -72,22 +73,27 @@ public class ChunkProviderClient implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { return false; } + @Override public int getLoadedChunkCount() { return this.chunkListing.size(); } + @Override public List getPossibleCreatures(EnumCreatureType var1, BlockPos var2) { return null; } + @Override public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) { return null; } @@ -106,6 +112,7 @@ public class ChunkProviderClient implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "MultiplayerChunkCache: " + this.chunkMapping.getNumHashElements() + ", " + this.chunkListing.size(); } @@ -113,6 +120,7 @@ public class ChunkProviderClient implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int var2, int var3) { } @@ -121,6 +129,7 @@ public class ChunkProviderClient implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -130,11 +139,13 @@ public class ChunkProviderClient implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { Chunk chunk = (Chunk) this.chunkMapping.getValueByKey(ChunkCoordIntPair.chunkXZ2Int(i, j)); return chunk == null ? this.blankChunk : chunk; } + @Override public void recreateStructures(Chunk var1, int var2, int var3) { } @@ -143,6 +154,7 @@ public class ChunkProviderClient implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -151,6 +163,7 @@ public class ChunkProviderClient implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -172,6 +185,7 @@ public class ChunkProviderClient implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { long i = EagRuntime.steadyTimeMillis(); @@ -186,4 +200,4 @@ public class ChunkProviderClient implements IChunkProvider { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/GuiConnecting.java b/src/game/java/net/minecraft/client/multiplayer/GuiConnecting.java index 70d2467a..32d9ce5a 100644 --- a/src/game/java/net/minecraft/client/multiplayer/GuiConnecting.java +++ b/src/game/java/net/minecraft/client/multiplayer/GuiConnecting.java @@ -32,13 +32,13 @@ import net.minecraft.util.ChatComponentText; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.ChatComponentText; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiConnecting extends GuiScreen { private static final Logger logger = LogManager.getLogger(); @@ -133,6 +133,7 @@ public class GuiConnecting extends GuiScreen { * + Called by the controls from the buttonList when activated. (Mouse pressed * for buttons) */ + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { this.cancel = true; @@ -147,6 +148,7 @@ public class GuiConnecting extends GuiScreen { } + @Override public boolean canCloseGui() { return false; } @@ -183,6 +185,7 @@ public class GuiConnecting extends GuiScreen { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { this.drawDefaultBackground(); if (this.networkManager == null || !this.networkManager.isChannelOpen()) { @@ -201,6 +204,7 @@ public class GuiConnecting extends GuiScreen { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add( @@ -212,12 +216,14 @@ public class GuiConnecting extends GuiScreen { * the equivalent of KeyListener.keyTyped(KeyEvent e). Args : character * (character on the key), keyCode (lwjgl Keyboard key code) */ + @Override protected void keyTyped(char parChar1, int parInt1) { } /** * + Called from the main game loop to update the screen. */ + @Override public void updateScreen() { ++timer; if (timer > 1) { @@ -319,4 +325,4 @@ public class GuiConnecting extends GuiScreen { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/PlayerControllerMP.java b/src/game/java/net/minecraft/client/multiplayer/PlayerControllerMP.java index 88fe8805..3ba47954 100644 --- a/src/game/java/net/minecraft/client/multiplayer/PlayerControllerMP.java +++ b/src/game/java/net/minecraft/client/multiplayer/PlayerControllerMP.java @@ -37,13 +37,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -55,7 +55,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerControllerMP { public static void clickBlockCreative(Minecraft mcIn, PlayerControllerMP parPlayerControllerMP, @@ -549,4 +549,4 @@ public class PlayerControllerMP { new C0EPacketClickWindow(windowId, slotId, mouseButtonClicked, mode, itemstack, short1)); return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/ServerAddress.java b/src/game/java/net/minecraft/client/multiplayer/ServerAddress.java index caa752bf..cde620f9 100644 --- a/src/game/java/net/minecraft/client/multiplayer/ServerAddress.java +++ b/src/game/java/net/minecraft/client/multiplayer/ServerAddress.java @@ -3,13 +3,13 @@ package net.minecraft.client.multiplayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.multiplayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerAddress { private final String ipAddress; @@ -40,4 +40,4 @@ public class ServerAddress { return this.serverPort; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/ServerData.java b/src/game/java/net/minecraft/client/multiplayer/ServerData.java index a6e89176..26b28e34 100644 --- a/src/game/java/net/minecraft/client/multiplayer/ServerData.java +++ b/src/game/java/net/minecraft/client/multiplayer/ServerData.java @@ -20,13 +20,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerData { public static enum ServerResourceMode { @@ -253,4 +253,4 @@ public class ServerData { this.resourceMode = mode; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/ServerList.java b/src/game/java/net/minecraft/client/multiplayer/ServerList.java index c875096c..d820a63b 100644 --- a/src/game/java/net/minecraft/client/multiplayer/ServerList.java +++ b/src/game/java/net/minecraft/client/multiplayer/ServerList.java @@ -25,13 +25,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerList { private static final Logger logger = LogManager.getLogger(); @@ -326,4 +326,4 @@ public class ServerList { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/multiplayer/WorldClient.java b/src/game/java/net/minecraft/client/multiplayer/WorldClient.java index 9b9bc940..fcfb8f7f 100644 --- a/src/game/java/net/minecraft/client/multiplayer/WorldClient.java +++ b/src/game/java/net/minecraft/client/multiplayer/WorldClient.java @@ -39,13 +39,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -57,7 +57,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldClient extends World { private NetHandlerPlayClient sendQueue; @@ -110,25 +110,30 @@ public class WorldClient extends World { /** * + Adds some basic stats of the world to the given crash report. */ + @Override public CrashReportCategory addWorldInfoToCrashReport(CrashReport crashreport) { CrashReportCategory crashreportcategory = super.addWorldInfoToCrashReport(crashreport); crashreportcategory.addCrashSectionCallable("Forced entities", new Callable() { + @Override public String call() { return WorldClient.this.entityList.size() + " total; " + WorldClient.this.entityList.toString(); } }); crashreportcategory.addCrashSectionCallable("Retry entities", new Callable() { + @Override public String call() { return WorldClient.this.entitySpawnQueue.size() + " total; " + WorldClient.this.entitySpawnQueue.toString(); } }); crashreportcategory.addCrashSectionCallable("Server brand", new Callable() { + @Override public String call() throws Exception { return WorldClient.this.mc.thePlayer.getClientBrand(); } }); crashreportcategory.addCrashSectionCallable("Server type", new Callable() { + @Override public String call() throws Exception { return "Non-integrated multiplayer server"; } @@ -140,6 +145,7 @@ public class WorldClient extends World { * + Creates the chunk provider for this world. Called in the constructor. * Retrieves provider from worldProvider? */ + @Override protected IChunkProvider createChunkProvider() { this.clientChunkProvider = new ChunkProviderClient(this); return this.clientChunkProvider; @@ -165,7 +171,7 @@ public class WorldClient extends World { ItemStack itemstack = this.mc.thePlayer.getHeldItem(); boolean flag = this.mc.playerController.getCurrentGameType() == WorldSettings.GameType.CREATIVE && itemstack != null && Block.getBlockFromItem(itemstack.getItem()) == Blocks.barrier; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i = 0; i < 1000; ++i) { int j = parInt1 + this.rand.nextInt(b0) - this.rand.nextInt(b0); @@ -186,10 +192,12 @@ public class WorldClient extends World { * + Returns the Entity with the given ID, or null if it doesn't exist in this * World. */ + @Override public Entity getEntityByID(int i) { return (Entity) (i == this.mc.thePlayer.getEntityId() ? this.mc.thePlayer : super.getEntityByID(i)); } + @Override protected int getRenderDistanceChunks() { return this.mc.gameSettings.renderDistanceChunks; } @@ -211,12 +219,14 @@ public class WorldClient extends World { return super.setBlockState(parBlockPos, parIBlockState, 3); } + @Override public void makeFireworks(double d0, double d1, double d2, double d3, double d4, double d5, NBTTagCompound nbttagcompound) { this.mc.effectRenderer.addEffect( new EntityFirework.StarterFX(this, d0, d1, d2, d3, d4, d5, this.mc.effectRenderer, nbttagcompound)); } + @Override protected void onEntityAdded(Entity entity) { super.onEntityAdded(entity); if (this.entitySpawnQueue.contains(entity)) { @@ -225,6 +235,7 @@ public class WorldClient extends World { } + @Override protected void onEntityRemoved(Entity entity) { super.onEntityRemoved(entity); boolean flag = false; @@ -242,6 +253,7 @@ public class WorldClient extends World { /** * + par8 is loudness, all pars passed to minecraftInstance.sndManager.playSound */ + @Override public void playSound(double d0, double d1, double d2, String s, float f, float f1, boolean flag) { double d3 = this.mc.getRenderViewEntity().getDistanceSq(d0, d1, d2); PositionedSoundRecord positionedsoundrecord = new PositionedSoundRecord(new ResourceLocation(s), f, f1, @@ -314,6 +326,7 @@ public class WorldClient extends World { * + Schedule the entity for removal during the next tick. Marks the entity dead * in anticipation. */ + @Override public void removeEntity(Entity entity) { super.removeEntity(entity); this.entityList.remove(entity); @@ -332,6 +345,7 @@ public class WorldClient extends World { /** * + If on MP, sends a quitting packet. */ + @Override public void sendQuittingDisconnectingPacket() { this.sendQueue.getNetworkManager().closeChannel(new ChatComponentText("Quitting")); } @@ -343,6 +357,7 @@ public class WorldClient extends World { /** * + Sets the world time. */ + @Override public void setWorldTime(long i) { if (i < 0L) { i = -i; @@ -357,6 +372,7 @@ public class WorldClient extends World { /** * + Called when an entity is spawned in the world. This includes players. */ + @Override public boolean spawnEntityInWorld(Entity entity) { boolean flag = super.spawnEntityInWorld(entity); this.entityList.add(entity); @@ -372,6 +388,7 @@ public class WorldClient extends World { /** * + Runs a single tick for the world */ + @Override public void tick() { super.tick(); this.setTotalWorldTime(this.getTotalWorldTime() + 1L); @@ -391,6 +408,7 @@ public class WorldClient extends World { this.updateBlocks(); } + @Override protected void updateBlocks() { super.updateBlocks(); this.previousActiveChunkSet.retainAll(this.activeChunkSet); @@ -419,6 +437,7 @@ public class WorldClient extends World { /** * + Updates all weather states. */ + @Override protected void updateWeather() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/network/NetHandlerPlayClient.java b/src/game/java/net/minecraft/client/network/NetHandlerPlayClient.java index ad10c99e..39edef15 100644 --- a/src/game/java/net/minecraft/client/network/NetHandlerPlayClient.java +++ b/src/game/java/net/minecraft/client/network/NetHandlerPlayClient.java @@ -221,13 +221,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -239,7 +239,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetHandlerPlayClient implements INetHandlerPlayClient { private static final Logger logger = LogManager.getLogger(); @@ -357,6 +357,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * its currently held item, being hurt or receiving a critical hit by normal or * magical means */ + @Override public void handleAnimation(S0BPacketAnimation packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); if (entity != null) { @@ -383,6 +384,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * instrument (including audiovisual feedback) and in BlockContainer to set the * number of players accessing a (Ender)Chest */ + @Override public void handleBlockAction(S24PacketBlockAction packetIn) { this.gameController.theWorld.addBlockEvent(packetIn.getBlockPosition(), packetIn.getBlockType(), packetIn.getData1(), packetIn.getData2()); @@ -392,6 +394,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates all registered IWorldAccess instances with * destroyBlockInWorldPartially */ + @Override public void handleBlockBreakAnim(S25PacketBlockBreakAnim packetIn) { this.gameController.theWorld.sendBlockBreakProgress(packetIn.getBreakerId(), packetIn.getPosition(), packetIn.getProgress()); @@ -401,10 +404,12 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates the block and metadata and generates a blockupdate (and notify the * clients) */ + @Override public void handleBlockChange(S23PacketBlockChange packetIn) { this.clientWorldController.invalidateRegionAndSetBlock(packetIn.getBlockPosition(), packetIn.getBlockState()); } + @Override public void handleCamera(S43PacketCamera packetIn) { Entity entity = packetIn.getEntity(this.clientWorldController); @@ -414,6 +419,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleChangeGameState(S2BPacketChangeGameState packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; int i = packetIn.getGameState(); @@ -459,6 +465,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Prints a chatmessage in the chat GUI */ + @Override public void handleChat(S02PacketChat packetIn) { if (packetIn.getType() == 2) { this.gameController.ingameGUI.setRecordPlaying(packetIn.getChatComponent(), false); @@ -472,6 +479,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates the specified chunk with the supplied data, marks it for * re-rendering and lighting recalculation */ + @Override public void handleChunkData(S21PacketChunkData packetIn) { if (packetIn.func_149274_i()) { if (packetIn.getExtractedSize() == 0) { @@ -497,10 +505,12 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Resets the ItemStack held in hand and closes the window that is opened */ + @Override public void handleCloseWindow(S2EPacketCloseWindow packetIn) { this.gameController.thePlayer.closeScreenAndDropStack(); } + @Override public void handleCollectItem(S0DPacketCollectItem packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getCollectedItemEntityID()); Object object = (EntityLivingBase) this.clientWorldController.getEntityByID(packetIn.getEntityID()); @@ -524,6 +534,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleCombatEvent(S42PacketCombatEvent packetIn) { // used by twitch stream @@ -534,6 +545,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Verifies that the server and client are synchronized with respect to the * inventory/container opened by the player and confirms if it is the case. */ + @Override public void handleConfirmTransaction(S32PacketConfirmTransaction packetIn) { Container container = null; EntityPlayerSP entityplayersp = this.gameController.thePlayer; @@ -557,6 +569,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * player instance and finally "MC|RPack" which the server uses to communicate * the identifier of the default server resourcepack for the client to load. */ + @Override public void handleCustomPayload(S3FPacketCustomPayload packetIn) { if ("MC|TrList".equals(packetIn.getChannelName())) { PacketBuffer packetbuffer = packetIn.getBufferData(); @@ -597,6 +610,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * monitor them. The latter happens when distance between the player and item * increases beyond a certain treshold (typically the viewing distance) */ + @Override public void handleDestroyEntities(S13PacketDestroyEntities packetIn) { for (int i = 0; i < packetIn.getEntityIDs().length; ++i) { this.clientWorldController.removeEntityFromWorld(packetIn.getEntityIDs()[i]); @@ -607,6 +621,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Closes the network channel */ + @Override public void handleDisconnect(S40PacketDisconnect packetIn) { this.netManager.closeChannel(packetIn.getReason()); } @@ -615,6 +630,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Removes or sets the ScoreObjective to be displayed at a particular * scoreboard position (list, sidebar, below name) */ + @Override public void handleDisplayScoreboard(S3DPacketDisplayScoreboard packetIn) { Scoreboard scoreboard = this.clientWorldController.getScoreboard(); if (packetIn.func_149370_d().length() == 0) { @@ -626,6 +642,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleEffect(S28PacketEffect packetIn) { if (packetIn.isSoundServerwide()) { this.gameController.theWorld.playBroadcastSound(packetIn.getSoundType(), packetIn.getSoundPos(), @@ -637,6 +654,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleEntityAttach(S1BPacketEntityAttach packetIn) { Object object = this.clientWorldController.getEntityByID(packetIn.getEntityId()); Entity entity = this.clientWorldController.getEntityByID(packetIn.getVehicleEntityId()); @@ -676,6 +694,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleEntityEffect(S1DPacketEntityEffect packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); if (entity instanceof EntityLivingBase) { @@ -686,6 +705,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } } + @Override public void handleEntityEquipment(S04PacketEntityEquipment packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); if (entity != null) { @@ -698,6 +718,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates the direction in which the specified entity is looking, normally * this head rotation is independent of the rotation of the entity itself */ + @Override public void handleEntityHeadLook(S19PacketEntityHeadLook packetIn) { Entity entity = packetIn.getEntity(this.clientWorldController); if (entity != null) { @@ -711,6 +732,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * or when objects in your watchlist have changed -> Registers any changes * locally */ + @Override public void handleEntityMetadata(S1CPacketEntityMetadata packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); if (entity != null && packetIn.func_149376_c() != null) { @@ -725,6 +747,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * specification of a subset of this data (e.g. only rel. position, abs. * rotation or both). */ + @Override public void handleEntityMovement(S14PacketEntity packetIn) { Entity entity = packetIn.getEntity(this.clientWorldController); if (entity != null) { @@ -742,6 +765,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } } + @Override public void handleEntityNBT(S49PacketUpdateEntityNBT packetIn) { Entity entity = packetIn.getEntity(this.clientWorldController); if (entity != null) { @@ -756,6 +780,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * weapon/tool attackDamage, hostiles followRange randomization, zombie * maxHealth and knockback resistance as well as reinforcement spawning chance. */ + @Override public void handleEntityProperties(S20PacketEntityProperties packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); if (entity != null) { @@ -796,6 +821,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * (breeding/smoke particles), Sheep (...), Tameable (...), Villager (particles * for breeding mode, angry and happy), Wolf (...) */ + @Override public void handleEntityStatus(S19PacketEntityStatus packetIn) { Entity entity = packetIn.getEntity(this.clientWorldController); if (entity != null) { @@ -811,6 +837,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Updates an entity's position and rotation as specified by the packet */ + @Override public void handleEntityTeleport(S18PacketEntityTeleport packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); if (entity != null) { @@ -836,6 +863,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Sets the velocity of the specified entity to the specified value */ + @Override public void handleEntityVelocity(S12PacketEntityVelocity packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); if (entity != null) { @@ -848,6 +876,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Initiates a new explosion (sound, particles, drop spawn) for the affected * blocks indicated by the packet. */ + @Override public void handleExplosion(S27PacketExplosion packetIn) { Explosion explosion = new Explosion(this.gameController.theWorld, (Entity) null, packetIn.getX(), packetIn.getY(), packetIn.getZ(), packetIn.getStrength(), packetIn.getAffectedBlockPositions()); @@ -860,6 +889,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Updates which hotbar slot of the player is currently selected */ + @Override public void handleHeldItemChange(S09PacketHeldItemChange packetIn) { if (packetIn.getHeldItemHotbarIndex() >= 0 && packetIn.getHeldItemHotbarIndex() < InventoryPlayer.getHotbarSize()) { @@ -873,6 +903,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * (gametype,hardcore-mode,terraintype,difficulty,player limit), creates a new * WorldClient and sets the player initial dimension */ + @Override public void handleJoinGame(S01PacketJoinGame packetIn) { this.gameController.playerController = new PlayerControllerMP(this.gameController, this); this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false, @@ -894,10 +925,12 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { WebViewOverlayController.setPacketSendCallback(this::webViewSendHandler); } + @Override public void handleKeepAlive(S00PacketKeepAlive packetIn) { this.addToSendQueue(new C00PacketKeepAlive(packetIn.func_149134_c())); } + @Override public void handleMapChunkBulk(S26PacketMapChunkBulk packetIn) { for (int i = 0; i < packetIn.getChunkCount(); ++i) { int j = packetIn.getChunkX(i); @@ -920,6 +953,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates the worlds MapStorage with the specified MapData for the specified * map-identifier and invokes a MapItemRenderer for it */ + @Override public void handleMaps(S34PacketMaps packetIn) { MapData mapdata = ItemMap.loadMapData(packetIn.getMapId(), this.gameController.theWorld); packetIn.setMapdataTo(mapdata); @@ -932,6 +966,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * S23PacketBlockChange and if 64 or more blocks are changed, the server sends * S21PacketChunkData */ + @Override public void handleMultiBlockChange(S22PacketMultiBlockChange packetIn) { BlockUpdateData[] dat = packetIn.getChangedBlocks(); for (int i = 0; i < dat.length; ++i) { @@ -947,6 +982,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * Furnace, Dispenser, Enchanting table, Brewing stand, Villager merchant, * Beacon, Anvil, Hopper, Dropper, Horse */ + @Override public void handleOpenWindow(S2DPacketOpenWindow packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; if ("minecraft:container".equals(packetIn.getGuiId())) { @@ -978,6 +1014,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Spawns a specified number of particles at the specified location with a * randomized displacement according to specified bounds */ + @Override public void handleParticles(S2APacketParticles packetIn) { if (packetIn.getParticleCount() == 0) { double d0 = (double) (packetIn.getParticleSpeed() * packetIn.getXOffset()); @@ -1013,6 +1050,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handlePlayerAbilities(S39PacketPlayerAbilities packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; entityplayersp.capabilities.isFlying = packetIn.isFlying(); @@ -1023,6 +1061,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { entityplayersp.capabilities.setPlayerWalkSpeed(packetIn.getWalkSpeed()); } + @Override public void handlePlayerListHeaderFooter(S47PacketPlayerListHeaderFooter packetIn) { this.gameController.ingameGUI.getTabList() .setHeader(packetIn.getHeader().getFormattedText().length() == 0 ? null : packetIn.getHeader()); @@ -1030,6 +1069,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { .setFooter(packetIn.getFooter().getFormattedText().length() == 0 ? null : packetIn.getFooter()); } + @Override public void handlePlayerListItem(S38PacketPlayerListItem packetIn) { List lst = packetIn.func_179767_a(); for (int i = 0, l = lst.size(); i < l; ++i) { @@ -1075,6 +1115,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * reply to the server with the clients post-processing perspective on the * player positioning */ + @Override public void handlePlayerPosLook(S08PacketPlayerPosLook packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; double d0 = packetIn.getX(); @@ -1122,6 +1163,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleRemoveEntityEffect(S1EPacketRemoveEntityEffect packetIn) { Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); if (entity instanceof EntityLivingBase) { @@ -1130,6 +1172,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleResourcePack(S48PacketResourcePackSend packetIn) { final String s = packetIn.getURL(); final String s1 = packetIn.getHash(); @@ -1158,6 +1201,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { .sendPacket(new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.DECLINED)); } else { NetHandlerPlayClient.this.gameController.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { + @Override public void confirmClicked(boolean flag, int var2) { NetHandlerPlayClient.this.gameController = Minecraft.getMinecraft(); if (flag) { @@ -1196,6 +1240,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } } + @Override public void handleRespawn(S07PacketRespawn packetIn) { if (packetIn.getDimensionID() != this.gameController.thePlayer.dimension) { this.doneLoadingTerrain = false; @@ -1217,6 +1262,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + May create a scoreboard objective, remove an objective from the scoreboard * or update an objectives' displayname */ + @Override public void handleScoreboardObjective(S3BPacketScoreboardObjective packetIn) { Scoreboard scoreboard = this.clientWorldController.getScoreboard(); if (packetIn.func_149338_e() == 0) { @@ -1236,11 +1282,13 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleServerDifficulty(S41PacketServerDifficulty packetIn) { this.gameController.theWorld.getWorldInfo().setDifficulty(packetIn.getDifficulty()); this.gameController.theWorld.getWorldInfo().setDifficultyLocked(packetIn.isDifficultyLocked()); } + @Override public void handleSetCompressionLevel(S46PacketSetCompressionLevel packetIn) { if (!this.netManager.isLocalChannel()) { this.netManager.setCompressionTreshold(packetIn.func_179760_a()); @@ -1248,6 +1296,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleSetExperience(S1FPacketSetExperience packetIn) { this.gameController.thePlayer.setXPStats(packetIn.func_149397_c(), packetIn.getTotalExperience(), packetIn.getLevel()); @@ -1257,6 +1306,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Handles pickin up an ItemStack or dropping one in your inventory or an open * (non-creative) container */ + @Override public void handleSetSlot(S2FPacketSetSlot packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; if (packetIn.func_149175_c() == -1) { @@ -1288,6 +1338,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Creates a sign in the specified location if it didn't exist and opens the * GUI to edit its text */ + @Override public void handleSignEditorOpen(S36PacketSignEditorOpen packetIn) { Object object = this.clientWorldController.getTileEntity(packetIn.getSignPosition()); if (!(object instanceof TileEntitySign)) { @@ -1299,6 +1350,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { this.gameController.thePlayer.openEditSign((TileEntitySign) object); } + @Override public void handleSoundEffect(S29PacketSoundEffect packetIn) { this.gameController.theWorld.playSound(packetIn.getX(), packetIn.getY(), packetIn.getZ(), packetIn.getSoundName(), packetIn.getVolume(), packetIn.getPitch(), false); @@ -1307,6 +1359,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Spawns an experience orb and sets its value (amount of XP) */ + @Override public void handleSpawnExperienceOrb(S11PacketSpawnExperienceOrb packetIn) { EntityXPOrb entityxporb = new EntityXPOrb(this.clientWorldController, (double) packetIn.getX() / 32.0D, (double) packetIn.getY() / 32.0D, (double) packetIn.getZ() / 32.0D, packetIn.getXPValue()); @@ -1322,6 +1375,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Handles globally visible entities. Used in vanilla for lightning bolts */ + @Override public void handleSpawnGlobalEntity(S2CPacketSpawnGlobalEntity packetIn) { double d0 = (double) packetIn.func_149051_d() / 32.0D; double d1 = (double) packetIn.func_149050_e() / 32.0D; @@ -1348,6 +1402,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * rotation, momentum and type. Updates the entities Datawatchers with the * entity metadata specified in the packet */ + @Override public void handleSpawnMob(S0FPacketSpawnMob packetIn) { double d0 = (double) packetIn.getX() / 32.0D; double d1 = (double) packetIn.getY() / 32.0D; @@ -1387,96 +1442,124 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Spawns an instance of the objecttype indicated by the packet and sets its * position and momentum */ + @Override public void handleSpawnObject(S0EPacketSpawnObject packetIn) { double d0 = (double) packetIn.getX() / 32.0D; double d1 = (double) packetIn.getY() / 32.0D; double d2 = (double) packetIn.getZ() / 32.0D; - Object object = null; - if (packetIn.getType() == 10) { + Entity object = null; + boolean b = false; + switch (packetIn.getType()) { + case 10: object = EntityMinecart.func_180458_a(this.clientWorldController, d0, d1, d2, EntityMinecart.EnumMinecartType.byNetworkID(packetIn.func_149009_m())); - } else if (packetIn.getType() == 90) { + break; + case 90: + b = true; Entity entity = this.clientWorldController.getEntityByID(packetIn.func_149009_m()); if (entity instanceof EntityPlayer) { object = new EntityFishHook(this.clientWorldController, d0, d1, d2, (EntityPlayer) entity); } - - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 60) { + break; + case 60: object = new EntityArrow(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 61) { + break; + case 61: object = new EntitySnowball(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 71) { + break; + case 71: + b = true; object = new EntityItemFrame(this.clientWorldController, new BlockPos(MathHelper.floor_double(d0), MathHelper.floor_double(d1), MathHelper.floor_double(d2)), EnumFacing.getHorizontal(packetIn.func_149009_m())); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 77) { + break; + case 77: + b = true; object = new EntityLeashKnot(this.clientWorldController, new BlockPos(MathHelper.floor_double(d0), MathHelper.floor_double(d1), MathHelper.floor_double(d2))); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 65) { + break; + case 65: object = new EntityEnderPearl(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 72) { + break; + case 72: object = new EntityEnderEye(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 76) { + break; + case 76: object = new EntityFireworkRocket(this.clientWorldController, d0, d1, d2, (ItemStack) null); - } else if (packetIn.getType() == 63) { + break; + case 63: + b = true; object = new EntityLargeFireball(this.clientWorldController, d0, d1, d2, (double) packetIn.getSpeedX() / 8000.0D, (double) packetIn.getSpeedY() / 8000.0D, (double) packetIn.getSpeedZ() / 8000.0D); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 64) { + break; + case 64: + b = true; object = new EntitySmallFireball(this.clientWorldController, d0, d1, d2, (double) packetIn.getSpeedX() / 8000.0D, (double) packetIn.getSpeedY() / 8000.0D, (double) packetIn.getSpeedZ() / 8000.0D); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 66) { + break; + case 66: + b = true; object = new EntityWitherSkull(this.clientWorldController, d0, d1, d2, (double) packetIn.getSpeedX() / 8000.0D, (double) packetIn.getSpeedY() / 8000.0D, (double) packetIn.getSpeedZ() / 8000.0D); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 62) { + break; + case 62: object = new EntityEgg(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 73) { + break; + case 73: + b = true; object = new EntityPotion(this.clientWorldController, d0, d1, d2, packetIn.func_149009_m()); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 75) { + break; + case 75: + b = true; object = new EntityExpBottle(this.clientWorldController, d0, d1, d2); - packetIn.func_149002_g(0); - } else if (packetIn.getType() == 1) { + break; + case 1: object = new EntityBoat(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 50) { + break; + case 50: object = new EntityTNTPrimed(this.clientWorldController, d0, d1, d2, (EntityLivingBase) null); - } else if (packetIn.getType() == 78) { + break; + case 78: object = new EntityArmorStand(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 51) { + break; + case 51: object = new EntityEnderCrystal(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 2) { + break; + case 2: object = new EntityItem(this.clientWorldController, d0, d1, d2); - } else if (packetIn.getType() == 70) { + break; + case 70: + b = true; object = new EntityFallingBlock(this.clientWorldController, d0, d1, d2, Block.getStateById(packetIn.func_149009_m() & '\uffff')); + break; + } + + if (b) { + // fix for compiler bug packetIn.func_149002_g(0); } if (object != null) { - ((Entity) object).serverPosX = packetIn.getX(); - ((Entity) object).serverPosY = packetIn.getY(); - ((Entity) object).serverPosZ = packetIn.getZ(); - ((Entity) object).rotationPitch = (float) (packetIn.getPitch() * 360) / 256.0F; - ((Entity) object).rotationYaw = (float) (packetIn.getYaw() * 360) / 256.0F; - Entity[] aentity = ((Entity) object).getParts(); + object.serverPosX = packetIn.getX(); + object.serverPosY = packetIn.getY(); + object.serverPosZ = packetIn.getZ(); + object.rotationPitch = (float) (packetIn.getPitch() * 360) / 256.0F; + object.rotationYaw = (float) (packetIn.getYaw() * 360) / 256.0F; + Entity[] aentity = object.getParts(); if (aentity != null) { - int i = packetIn.getEntityID() - ((Entity) object).getEntityId(); + int i = packetIn.getEntityID() - object.getEntityId(); for (int j = 0; j < aentity.length; ++j) { aentity[j].setEntityId(aentity[j].getEntityId() + i); } } - ((Entity) object).setEntityId(packetIn.getEntityID()); - this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), (Entity) object); + object.setEntityId(packetIn.getEntityID()); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), object); if (packetIn.func_149009_m() > 0) { if (packetIn.getType() == 60) { Entity entity1 = this.clientWorldController.getEntityByID(packetIn.func_149009_m()); @@ -1485,8 +1568,8 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } } - ((Entity) object).setVelocity((double) packetIn.getSpeedX() / 8000.0D, - (double) packetIn.getSpeedY() / 8000.0D, (double) packetIn.getSpeedZ() / 8000.0D); + object.setVelocity((double) packetIn.getSpeedX() / 8000.0D, (double) packetIn.getSpeedY() / 8000.0D, + (double) packetIn.getSpeedZ() / 8000.0D); } } @@ -1495,6 +1578,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Handles the spawning of a painting object */ + @Override public void handleSpawnPainting(S10PacketSpawnPainting packetIn) { EntityPainting entitypainting = new EntityPainting(this.clientWorldController, packetIn.getPosition(), packetIn.getFacing(), packetIn.getTitle()); @@ -1505,6 +1589,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Handles the creation of a nearby player entity, sets the position and held * item */ + @Override public void handleSpawnPlayer(S0CPacketSpawnPlayer packetIn) { double d0 = (double) packetIn.getX() / 32.0D; double d1 = (double) packetIn.getY() / 32.0D; @@ -1536,6 +1621,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleSpawnPosition(S05PacketSpawnPosition packetIn) { this.gameController.thePlayer.setSpawnPoint(packetIn.getSpawnPos(), true); this.gameController.theWorld.getWorldInfo().setSpawn(packetIn.getSpawnPos()); @@ -1544,6 +1630,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Updates the players statistics or achievements */ + @Override public void handleStatistics(S37PacketStatistics packetIn) { boolean flag = false; @@ -1581,6 +1668,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Displays the available command-completion options the server knows of */ + @Override public void handleTabComplete(S3APacketTabComplete packetIn) { String[] astring = packetIn.func_149630_c(); if (this.gameController.currentScreen instanceof GuiChat) { @@ -1595,6 +1683,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * registration, Register/Remove the player-team-memberships, Set team * displayname/prefix/suffix and/or whether friendly fire is enabled */ + @Override public void handleTeams(S3EPacketTeams packetIn) { Scoreboard scoreboard = this.clientWorldController.getScoreboard(); ScorePlayerTeam scoreplayerteam; @@ -1634,11 +1723,13 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleTimeUpdate(S03PacketTimeUpdate packetIn) { this.gameController.theWorld.setTotalWorldTime(packetIn.getTotalWorldTime()); this.gameController.theWorld.setWorldTime(packetIn.getWorldTime()); } + @Override public void handleTitle(S45PacketTitle packetIn) { S45PacketTitle.Type s45packettitle$type = packetIn.getType(); String s = null; @@ -1661,6 +1752,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { packetIn.getFadeOutTime()); } + @Override public void handleUpdateHealth(S06PacketUpdateHealth packetIn) { this.gameController.thePlayer.setPlayerSPHealth(packetIn.getHealth()); this.gameController.thePlayer.getFoodStats().setFoodLevel(packetIn.getFoodLevel()); @@ -1671,6 +1763,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Either updates the score with a specified value or removes the score for an * objective */ + @Override public void handleUpdateScore(S3CPacketUpdateScore packetIn) { Scoreboard scoreboard = this.clientWorldController.getScoreboard(); ScoreObjective scoreobjective = scoreboard.getObjective(packetIn.getObjectiveName()); @@ -1690,6 +1783,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Updates a specified sign with the specified text lines */ + @Override public void handleUpdateSign(S33PacketUpdateSign packetIn) { boolean flag = false; if (this.gameController.theWorld.isBlockLoaded(packetIn.getPos())) { @@ -1717,6 +1811,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Updates the NBTTagCompound metadata of instances of the following * entitytypes: Mob spawners, command blocks, beacons, skulls, flowerpot */ + @Override public void handleUpdateTileEntity(S35PacketUpdateTileEntity packetIn) { if (this.gameController.theWorld.isBlockLoaded(packetIn.getPos())) { TileEntity tileentity = this.gameController.theWorld.getTileEntity(packetIn.getPos()); @@ -1737,6 +1832,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Retrieves the player identified by the packet, puts him to sleep if * possible (and flags whether all players are asleep) */ + @Override public void handleUseBed(S0APacketUseBed packetIn) { packetIn.getPlayer(this.clientWorldController).trySleep(packetIn.getBedPosition()); } @@ -1745,6 +1841,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Handles the placement of a specified ItemStack in a specified * container/inventory slot */ + @Override public void handleWindowItems(S30PacketWindowItems packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; if (packetIn.func_148911_c() == 0) { @@ -1758,6 +1855,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { /** * + Sets the progressbar of the opened window to the specified value */ + @Override public void handleWindowProperty(S31PacketWindowProperty packetIn) { EntityPlayerSP entityplayersp = this.gameController.thePlayer; if (entityplayersp.openContainer != null && entityplayersp.openContainer.windowId == packetIn.getWindowId()) { @@ -1766,6 +1864,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } + @Override public void handleWorldBorder(S44PacketWorldBorder packetIn) { packetIn.func_179788_a(this.clientWorldController.getWorldBorder()); } @@ -1778,6 +1877,7 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { * + Invoked when disconnecting, the parameter is a ChatComponent describing the * reason for termination */ + @Override public void onDisconnect(IChatComponent ichatcomponent) { VoiceClientController.handleServerDisconnect(); Minecraft.getMinecraft().getRenderManager() @@ -1822,4 +1922,4 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/network/NetworkPlayerInfo.java b/src/game/java/net/minecraft/client/network/NetworkPlayerInfo.java index 6fca2682..1efb05ce 100644 --- a/src/game/java/net/minecraft/client/network/NetworkPlayerInfo.java +++ b/src/game/java/net/minecraft/client/network/NetworkPlayerInfo.java @@ -13,13 +13,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetworkPlayerInfo { private final GameProfile gameProfile; @@ -185,4 +185,4 @@ public class NetworkPlayerInfo { protected void setResponseTime(int parInt1) { this.responseTime = parInt1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/Barrier.java b/src/game/java/net/minecraft/client/particle/Barrier.java index b43ae76f..7feafb39 100644 --- a/src/game/java/net/minecraft/client/particle/Barrier.java +++ b/src/game/java/net/minecraft/client/particle/Barrier.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,10 +29,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Barrier extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... parArrayOfInt) { return new Barrier(worldIn, xCoordIn, yCoordIn, zCoordIn, Item.getItemFromBlock(Blocks.barrier)); @@ -48,10 +49,12 @@ public class Barrier extends EntityFX { this.particleMaxAge = 80; } + @Override public int getFXLayer() { return 1; } + @Override public boolean renderAccelerated(IAcceleratedParticleEngine accelerator, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { accelerator.drawParticle(this, particleIcon.getOriginX(), particleIcon.getOriginY(), getBrightnessForRender(f), @@ -63,6 +66,7 @@ public class Barrier extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldRendererIn, Entity entityIn, float partialTicks, float parFloat2, float parFloat3, float parFloat4, float parFloat5, float parFloat6) { float f = this.particleIcon.getMinU(); @@ -97,4 +101,4 @@ public class Barrier extends EntityFX { .tex((double) f, (double) f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) .lightmap(j, k).endVertex(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EffectRenderer.java b/src/game/java/net/minecraft/client/particle/EffectRenderer.java index da1db100..78d17a0e 100644 --- a/src/game/java/net/minecraft/client/particle/EffectRenderer.java +++ b/src/game/java/net/minecraft/client/particle/EffectRenderer.java @@ -44,13 +44,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -62,7 +62,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EffectRenderer { private static final ResourceLocation particleTextures = new ResourceLocation("textures/particle/particles.png"); @@ -392,12 +392,14 @@ public class EffectRenderer { CrashReportCategory crashreportcategory = crashreport .makeCategory("Particle being rendered"); crashreportcategory.addCrashSectionCallable("Particle", new Callable() { + @Override public String call() throws Exception { return entityfx.toString(); } }); final int l = i; crashreportcategory.addCrashSectionCallable("Particle Type", new Callable() { + @Override public String call() throws Exception { return l == 0 ? "MISC_TEXTURE" : (l == 1 ? "TERRAIN_TEXTURE" @@ -452,11 +454,13 @@ public class EffectRenderer { CrashReportCategory crashreportcategory = crashreport.makeCategory("Particle being ticked"); final int i = parEntityFX.getFXLayer(); crashreportcategory.addCrashSectionCallable("Particle", new Callable() { + @Override public String call() throws Exception { return parEntityFX.toString(); } }); crashreportcategory.addCrashSectionCallable("Particle Type", new Callable() { + @Override public String call() throws Exception { return i == 0 ? "MISC_TEXTURE" : (i == 1 ? "TERRAIN_TEXTURE" : (i == 3 ? "ENTITY_PARTICLE_TEXTURE" : "Unknown - " + i)); @@ -504,4 +508,4 @@ public class EffectRenderer { this.particleEmitters.removeAll(arraylist); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityAuraFX.java b/src/game/java/net/minecraft/client/particle/EntityAuraFX.java index e0b362fd..da31648e 100644 --- a/src/game/java/net/minecraft/client/particle/EntityAuraFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityAuraFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAuraFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityAuraFX(world, d0, d1, d2, d3, d4, d5); @@ -34,6 +35,7 @@ public class EntityAuraFX extends EntityFX { } public static class HappyVillagerFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntityAuraFX entityaurafx = new EntityAuraFX(world, d0, d1, d2, d3, d4, d5); @@ -63,6 +65,7 @@ public class EntityAuraFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -76,4 +79,4 @@ public class EntityAuraFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityBlockDustFX.java b/src/game/java/net/minecraft/client/particle/EntityBlockDustFX.java index 3c849a25..ffec5d5f 100644 --- a/src/game/java/net/minecraft/client/particle/EntityBlockDustFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityBlockDustFX.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBlockDustFX extends EntityDiggingFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... aint) { IBlockState iblockstate = Block.getStateById(aint[0]); @@ -44,4 +45,4 @@ public class EntityBlockDustFX extends EntityDiggingFX { this.motionY = ySpeedIn; this.motionZ = zSpeedIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityBreakingFX.java b/src/game/java/net/minecraft/client/particle/EntityBreakingFX.java index 61cf4f65..c8b46b92 100644 --- a/src/game/java/net/minecraft/client/particle/EntityBreakingFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityBreakingFX.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,10 +31,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBreakingFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... aint) { int i = aint.length > 1 ? aint[1] : 0; @@ -43,6 +44,7 @@ public class EntityBreakingFX extends EntityFX { } public static class SlimeFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityBreakingFX(world, d0, d1, d2, Items.slime_ball); @@ -50,6 +52,7 @@ public class EntityBreakingFX extends EntityFX { } public static class SnowballFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityBreakingFX(world, d0, d1, d2, Items.snowball); @@ -80,10 +83,12 @@ public class EntityBreakingFX extends EntityFX { this.particleScale /= 2.0F; } + @Override public int getFXLayer() { return 1; } + @Override public boolean renderAccelerated(IAcceleratedParticleEngine accelerator, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { int w = this.particleIcon.getIconWidth(); @@ -100,6 +105,7 @@ public class EntityBreakingFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; @@ -141,4 +147,4 @@ public class EntityBreakingFX extends EntityFX { .tex((double) f7, (double) f9).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) .lightmap(j, k).endVertex(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityBubbleFX.java b/src/game/java/net/minecraft/client/particle/EntityBubbleFX.java index 631c443d..a976871d 100644 --- a/src/game/java/net/minecraft/client/particle/EntityBubbleFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityBubbleFX.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBubbleFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityBubbleFX(world, d0, d1, d2, d3, d4, d5); @@ -53,6 +54,7 @@ public class EntityBubbleFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -71,4 +73,4 @@ public class EntityBubbleFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityCloudFX.java b/src/game/java/net/minecraft/client/particle/EntityCloudFX.java index b9d33b4e..cf4acd30 100644 --- a/src/game/java/net/minecraft/client/particle/EntityCloudFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityCloudFX.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,10 +27,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCloudFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityCloudFX(world, d0, d1, d2, d3, d4, d5); @@ -62,6 +63,7 @@ public class EntityCloudFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -92,6 +94,7 @@ public class EntityCloudFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -99,4 +102,4 @@ public class EntityCloudFX extends EntityFX { this.particleScale = this.field_70569_a * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityCrit2FX.java b/src/game/java/net/minecraft/client/particle/EntityCrit2FX.java index 4185483f..a9841ef4 100644 --- a/src/game/java/net/minecraft/client/particle/EntityCrit2FX.java +++ b/src/game/java/net/minecraft/client/particle/EntityCrit2FX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCrit2FX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityCrit2FX(world, d0, d1, d2, d3, d4, d5); @@ -37,6 +38,7 @@ public class EntityCrit2FX extends EntityFX { } public static class MagicFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntityCrit2FX entitycrit2fx = new EntityCrit2FX(world, d0, d1, d2, d3, d4, d5); @@ -78,6 +80,7 @@ public class EntityCrit2FX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -103,6 +106,7 @@ public class EntityCrit2FX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -110,4 +114,4 @@ public class EntityCrit2FX extends EntityFX { this.particleScale = this.field_174839_a * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityCritFX.java b/src/game/java/net/minecraft/client/particle/EntityCritFX.java index 24492d34..ae72253a 100644 --- a/src/game/java/net/minecraft/client/particle/EntityCritFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityCritFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCritFX extends EntitySmokeFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityCritFX(world, d0, d1, d2, d3, d4, d5); @@ -37,4 +38,4 @@ public class EntityCritFX extends EntitySmokeFX { double parDouble2, double parDouble3) { super(worldIn, xCoordIn, yCoordIn, zCoordIn, parDouble1, parDouble2, parDouble3, 2.5F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityDiggingFX.java b/src/game/java/net/minecraft/client/particle/EntityDiggingFX.java index d612ed32..a5245446 100644 --- a/src/game/java/net/minecraft/client/particle/EntityDiggingFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityDiggingFX.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,10 +33,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDiggingFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... aint) { return (new EntityDiggingFX(world, d0, d1, d2, d3, d4, d5, Block.getStateById(aint[0]))).func_174845_l(); @@ -86,6 +87,7 @@ public class EntityDiggingFX extends EntityFX { } } + @Override public int getBrightnessForRender(float f) { int i = super.getBrightnessForRender(f); int j = 0; @@ -96,10 +98,12 @@ public class EntityDiggingFX extends EntityFX { return i == 0 ? j : i; } + @Override public int getFXLayer() { return 1; } + @Override public boolean renderAccelerated(IAcceleratedParticleEngine accelerator, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { int w = this.particleIcon.getIconWidth(); @@ -116,6 +120,7 @@ public class EntityDiggingFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; @@ -157,4 +162,4 @@ public class EntityDiggingFX extends EntityFX { .tex((double) f7, (double) f9).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) .lightmap(j, k).endVertex(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityDropParticleFX.java b/src/game/java/net/minecraft/client/particle/EntityDropParticleFX.java index e00ca3ca..aed92ee5 100644 --- a/src/game/java/net/minecraft/client/particle/EntityDropParticleFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityDropParticleFX.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,10 +29,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDropParticleFX extends EntityFX { public static class LavaFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityDropParticleFX(world, d0, d1, d2, Material.lava); @@ -40,6 +41,7 @@ public class EntityDropParticleFX extends EntityFX { } public static class WaterFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityDropParticleFX(world, d0, d1, d2, Material.water); @@ -76,10 +78,12 @@ public class EntityDropParticleFX extends EntityFX { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float partialTicks) { return this.materialType == Material.water ? super.getBrightness(partialTicks) : 1.0F; } + @Override public int getBrightnessForRender(float partialTicks) { return this.materialType == Material.water ? super.getBrightnessForRender(partialTicks) : 257; } @@ -87,6 +91,7 @@ public class EntityDropParticleFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -149,4 +154,4 @@ public class EntityDropParticleFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityEnchantmentTableParticleFX.java b/src/game/java/net/minecraft/client/particle/EntityEnchantmentTableParticleFX.java index 685a3970..bcec6c53 100644 --- a/src/game/java/net/minecraft/client/particle/EntityEnchantmentTableParticleFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityEnchantmentTableParticleFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEnchantmentTableParticleFX extends EntityFX { public static class EnchantmentTable implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityEnchantmentTableParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -64,6 +65,7 @@ public class EntityEnchantmentTableParticleFX extends EntityFX { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float f) { float f1 = super.getBrightness(f); float f2 = (float) this.particleAge / (float) this.particleMaxAge; @@ -72,6 +74,7 @@ public class EntityEnchantmentTableParticleFX extends EntityFX { return f1 * (1.0F - f2) + f2; } + @Override public int getBrightnessForRender(float f) { int i = super.getBrightnessForRender(f); float f1 = (float) this.particleAge / (float) this.particleMaxAge; @@ -90,6 +93,7 @@ public class EntityEnchantmentTableParticleFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -107,4 +111,4 @@ public class EntityEnchantmentTableParticleFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityExplodeFX.java b/src/game/java/net/minecraft/client/particle/EntityExplodeFX.java index cba6fcbe..28436fb0 100644 --- a/src/game/java/net/minecraft/client/particle/EntityExplodeFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityExplodeFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityExplodeFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityExplodeFX(world, d0, d1, d2, d3, d4, d5); @@ -47,6 +48,7 @@ public class EntityExplodeFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -67,4 +69,4 @@ public class EntityExplodeFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityFX.java b/src/game/java/net/minecraft/client/particle/EntityFX.java index 0414fbea..dd2907a4 100644 --- a/src/game/java/net/minecraft/client/particle/EntityFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityFX.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFX extends Entity { public static double interpPosX; @@ -83,6 +83,7 @@ public class EntityFX extends Entity { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } @@ -91,10 +92,12 @@ public class EntityFX extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { } @@ -106,6 +109,7 @@ public class EntityFX extends Entity { return this.particleBlue; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 0.0f; } @@ -142,6 +146,7 @@ public class EntityFX extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -165,6 +170,7 @@ public class EntityFX extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound tagCompund) { } @@ -272,6 +278,7 @@ public class EntityFX extends Entity { this.particleBlue = particleBlueIn; } + @Override public String toString() { return this.getClass().getSimpleName() + ", Pos (" + this.posX + "," + this.posY + "," + this.posZ + "), RGBA (" + this.particleRed + "," + this.particleGreen + "," + this.particleBlue + "," + this.particleAlpha @@ -281,6 +288,7 @@ public class EntityFX extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityFirework.java b/src/game/java/net/minecraft/client/particle/EntityFirework.java index 36f4d857..c48300e5 100644 --- a/src/game/java/net/minecraft/client/particle/EntityFirework.java +++ b/src/game/java/net/minecraft/client/particle/EntityFirework.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,10 +32,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFirework { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntityFirework.SparkFX entityfirework$sparkfx = new EntityFirework.SparkFX(world, d0, d1, d2, d3, d4, d5, @@ -51,6 +52,7 @@ public class EntityFirework { this.particleMaxAge = 4; } + @Override public boolean renderAccelerated(IAcceleratedParticleEngine accelerator, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { accelerator.drawParticle(this, 64, 32, getBrightnessForRender(f), 64, @@ -60,6 +62,7 @@ public class EntityFirework { return true; } + @Override public void renderParticle(WorldRenderer worldrenderer, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = 0.25F; @@ -123,22 +126,27 @@ public class EntityFirework { this.noClip = false; } + @Override public boolean canBePushed() { return false; } + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float var1) { return 15728880; } + @Override public AxisAlignedBB getCollisionBoundingBox() { return null; } + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -188,6 +196,7 @@ public class EntityFirework { } + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { if (!this.twinkle || this.particleAge < this.particleMaxAge / 3 @@ -355,10 +364,12 @@ public class EntityFirework { || minecraft.getRenderViewEntity().getDistanceSq(this.posX, this.posY, this.posZ) >= 256.0D; } + @Override public int getFXLayer() { return 0; } + @Override public void onUpdate() { if (this.fireworkAge == 0 && this.fireworkExplosions != null) { boolean flag = this.func_92037_i(); @@ -438,8 +449,9 @@ public class EntityFirework { } + @Override public void renderParticle(WorldRenderer var1, Entity var2, float var3, float var4, float var5, float var6, float var7, float var8) { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityFishWakeFX.java b/src/game/java/net/minecraft/client/particle/EntityFishWakeFX.java index 80627f43..c4ee1100 100644 --- a/src/game/java/net/minecraft/client/particle/EntityFishWakeFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityFishWakeFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFishWakeFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityFishWakeFX(world, d0, d1, d2, d3, d4, d5); @@ -54,6 +55,7 @@ public class EntityFishWakeFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -72,4 +74,4 @@ public class EntityFishWakeFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityFlameFX.java b/src/game/java/net/minecraft/client/particle/EntityFlameFX.java index 236d9352..bc94bc83 100644 --- a/src/game/java/net/minecraft/client/particle/EntityFlameFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityFlameFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFlameFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityFlameFX(world, d0, d1, d2, d3, d4, d5); @@ -57,6 +58,7 @@ public class EntityFlameFX extends EntityFX { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float f) { float f1 = ((float) this.particleAge + f) / (float) this.particleMaxAge; f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); @@ -64,6 +66,7 @@ public class EntityFlameFX extends EntityFX { return f2 * f1 + (1.0F - f1); } + @Override public int getBrightnessForRender(float f) { float f1 = ((float) this.particleAge + f) / (float) this.particleMaxAge; f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); @@ -81,6 +84,7 @@ public class EntityFlameFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -103,10 +107,11 @@ public class EntityFlameFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge; this.particleScale = this.flameScale * (1.0F - f6 * f6 * 0.5F); super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityFootStepFX.java b/src/game/java/net/minecraft/client/particle/EntityFootStepFX.java index 615a293f..fec2c0b7 100644 --- a/src/game/java/net/minecraft/client/particle/EntityFootStepFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityFootStepFX.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,10 +35,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFootStepFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityFootStepFX(Minecraft.getMinecraft().getTextureManager(), world, d0, d1, d2); @@ -59,6 +60,7 @@ public class EntityFootStepFX extends EntityFX { this.footstepMaxAge = 200; } + @Override public int getFXLayer() { return 3; } @@ -66,6 +68,7 @@ public class EntityFootStepFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { ++this.footstepAge; if (this.footstepAge == this.footstepMaxAge) { @@ -77,6 +80,7 @@ public class EntityFootStepFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity var2, float f, float var4, float var5, float var6, float var7, float var8) { float f1 = ((float) this.footstepAge + f) / (float) this.footstepMaxAge; @@ -109,4 +113,4 @@ public class EntityFootStepFX extends EntityFX { GlStateManager.disableBlend(); GlStateManager.enableLighting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityHeartFX.java b/src/game/java/net/minecraft/client/particle/EntityHeartFX.java index b3f0b98c..acadf272 100644 --- a/src/game/java/net/minecraft/client/particle/EntityHeartFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityHeartFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityHeartFX extends EntityFX { public static class AngryVillagerFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntityHeartFX entityheartfx = new EntityHeartFX(world, d0, d1 + 0.5D, d2, d3, d4, d5); @@ -40,6 +41,7 @@ public class EntityHeartFX extends EntityFX { } public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityHeartFX(world, d0, d1, d2, d3, d4, d5); @@ -71,6 +73,7 @@ public class EntityHeartFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -98,6 +101,7 @@ public class EntityHeartFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -105,4 +109,4 @@ public class EntityHeartFX extends EntityFX { this.particleScale = this.particleScaleOverTime * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityHugeExplodeFX.java b/src/game/java/net/minecraft/client/particle/EntityHugeExplodeFX.java index 37a69a90..eebe48b4 100644 --- a/src/game/java/net/minecraft/client/particle/EntityHugeExplodeFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityHugeExplodeFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityHugeExplodeFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityHugeExplodeFX(world, d0, d1, d2, d3, d4, d5); @@ -48,6 +49,7 @@ public class EntityHugeExplodeFX extends EntityFX { super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); } + @Override public int getFXLayer() { return 1; } @@ -55,6 +57,7 @@ public class EntityHugeExplodeFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { for (int i = 0; i < 6; ++i) { double d0 = this.posX + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; @@ -74,7 +77,8 @@ public class EntityHugeExplodeFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer var1, Entity var2, float var3, float var4, float var5, float var6, float var7, float var8) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityLargeExplodeFX.java b/src/game/java/net/minecraft/client/particle/EntityLargeExplodeFX.java index 952e6b12..803cba46 100644 --- a/src/game/java/net/minecraft/client/particle/EntityLargeExplodeFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityLargeExplodeFX.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,10 +33,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLargeExplodeFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityLargeExplodeFX(Minecraft.getMinecraft().getTextureManager(), world, d0, d1, d2, d3, d4, @@ -60,10 +61,12 @@ public class EntityLargeExplodeFX extends EntityFX { this.field_70582_as = 1.0F - (float) parDouble1 * 0.5F; } + @Override public int getBrightnessForRender(float var1) { return '\uf0f0'; } + @Override public int getFXLayer() { return 3; } @@ -71,6 +74,7 @@ public class EntityLargeExplodeFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -85,6 +89,7 @@ public class EntityLargeExplodeFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity var2, float f, float f1, float f2, float f3, float f4, float f5) { int i = (int) (((float) this.field_70581_a + f) * 15.0F / (float) this.field_70584_aq); @@ -127,4 +132,4 @@ public class EntityLargeExplodeFX extends EntityFX { GlStateManager.enableLighting(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityLavaFX.java b/src/game/java/net/minecraft/client/particle/EntityLavaFX.java index b429c075..15ecb093 100644 --- a/src/game/java/net/minecraft/client/particle/EntityLavaFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityLavaFX.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,10 +27,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLavaFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityLavaFX(world, d0, d1, d2); @@ -56,10 +57,12 @@ public class EntityLavaFX extends EntityFX { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float f) { float f1 = ((float) this.particleAge + f) / (float) this.particleMaxAge; f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); @@ -72,6 +75,7 @@ public class EntityLavaFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -101,10 +105,11 @@ public class EntityLavaFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge; this.particleScale = this.lavaParticleScale * (1.0F - f6 * f6); super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityNoteFX.java b/src/game/java/net/minecraft/client/particle/EntityNoteFX.java index 3cb5be82..616fd8ce 100644 --- a/src/game/java/net/minecraft/client/particle/EntityNoteFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityNoteFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityNoteFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityNoteFX(world, d0, d1, d2, d3, d4, d5); @@ -64,6 +65,7 @@ public class EntityNoteFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -91,6 +93,7 @@ public class EntityNoteFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -98,4 +101,4 @@ public class EntityNoteFX extends EntityFX { this.particleScale = this.noteParticleScale * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityParticleEmitter.java b/src/game/java/net/minecraft/client/particle/EntityParticleEmitter.java index 52df3e3e..dd7a199d 100644 --- a/src/game/java/net/minecraft/client/particle/EntityParticleEmitter.java +++ b/src/game/java/net/minecraft/client/particle/EntityParticleEmitter.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityParticleEmitter extends EntityFX { private Entity attachedEntity; @@ -43,6 +43,7 @@ public class EntityParticleEmitter extends EntityFX { this.onUpdate(); } + @Override public int getFXLayer() { return 3; } @@ -50,6 +51,7 @@ public class EntityParticleEmitter extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { for (int i = 0; i < 16; ++i) { double d0 = (double) (this.rand.nextFloat() * 2.0F - 1.0F); @@ -75,7 +77,8 @@ public class EntityParticleEmitter extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer var1, Entity var2, float var3, float var4, float var5, float var6, float var7, float var8) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityPickupFX.java b/src/game/java/net/minecraft/client/particle/EntityPickupFX.java index 7176a0ff..ecd9c94f 100644 --- a/src/game/java/net/minecraft/client/particle/EntityPickupFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityPickupFX.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPickupFX extends EntityFX { private Entity field_174840_a; @@ -48,6 +48,7 @@ public class EntityPickupFX extends EntityFX { this.field_174841_aA = parFloat1; } + @Override public int getFXLayer() { return 3; } @@ -55,6 +56,7 @@ public class EntityPickupFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { ++this.age; if (this.age == this.maxAge) { @@ -66,6 +68,7 @@ public class EntityPickupFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer var1, Entity var2, float f, float var4, float var5, float var6, float var7, float var8) { float f1 = ((float) this.age + f) / (float) this.maxAge; @@ -94,4 +97,4 @@ public class EntityPickupFX extends EntityFX { this.field_174842_aB.renderEntityWithPosYaw(this.field_174840_a, (double) ((float) d6), (double) ((float) d7), (double) ((float) d8), this.field_174840_a.rotationYaw, f); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityPortalFX.java b/src/game/java/net/minecraft/client/particle/EntityPortalFX.java index 8299282e..a434da36 100644 --- a/src/game/java/net/minecraft/client/particle/EntityPortalFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityPortalFX.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPortalFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityPortalFX(world, d0, d1, d2, d3, d4, d5); @@ -63,6 +64,7 @@ public class EntityPortalFX extends EntityFX { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float f) { float f1 = super.getBrightness(f); float f2 = (float) this.particleAge / (float) this.particleMaxAge; @@ -70,6 +72,7 @@ public class EntityPortalFX extends EntityFX { return f1 * (1.0F - f2) + f2; } + @Override public int getBrightnessForRender(float f) { int i = super.getBrightnessForRender(f); float f1 = (float) this.particleAge / (float) this.particleMaxAge; @@ -88,6 +91,7 @@ public class EntityPortalFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -107,6 +111,7 @@ public class EntityPortalFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge; @@ -116,4 +121,4 @@ public class EntityPortalFX extends EntityFX { this.particleScale = this.portalParticleScale * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityRainFX.java b/src/game/java/net/minecraft/client/particle/EntityRainFX.java index 6a4dcdd7..d875c1d1 100644 --- a/src/game/java/net/minecraft/client/particle/EntityRainFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityRainFX.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,10 +29,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityRainFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new EntityRainFX(world, d0, d1, d2); @@ -56,6 +57,7 @@ public class EntityRainFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -99,4 +101,4 @@ public class EntityRainFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntityReddustFX.java b/src/game/java/net/minecraft/client/particle/EntityReddustFX.java index 76a46bb6..bfe523c8 100644 --- a/src/game/java/net/minecraft/client/particle/EntityReddustFX.java +++ b/src/game/java/net/minecraft/client/particle/EntityReddustFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityReddustFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntityReddustFX(world, d0, d1, d2, (float) d3, (float) d4, (float) d5); @@ -68,6 +69,7 @@ public class EntityReddustFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -96,6 +98,7 @@ public class EntityReddustFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -103,4 +106,4 @@ public class EntityReddustFX extends EntityFX { this.particleScale = this.reddustParticleScale * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntitySmokeFX.java b/src/game/java/net/minecraft/client/particle/EntitySmokeFX.java index 6f955cb2..75a9d614 100644 --- a/src/game/java/net/minecraft/client/particle/EntitySmokeFX.java +++ b/src/game/java/net/minecraft/client/particle/EntitySmokeFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySmokeFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntitySmokeFX(world, d0, d1, d2, d3, d4, d5); @@ -64,6 +65,7 @@ public class EntitySmokeFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -93,6 +95,7 @@ public class EntitySmokeFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -100,4 +103,4 @@ public class EntitySmokeFX extends EntityFX { this.particleScale = this.smokeParticleScale * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntitySnowShovelFX.java b/src/game/java/net/minecraft/client/particle/EntitySnowShovelFX.java index 89ac6567..37368f91 100644 --- a/src/game/java/net/minecraft/client/particle/EntitySnowShovelFX.java +++ b/src/game/java/net/minecraft/client/particle/EntitySnowShovelFX.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySnowShovelFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntitySnowShovelFX(world, d0, d1, d2, d3, d4, d5); @@ -65,6 +66,7 @@ public class EntitySnowShovelFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -89,6 +91,7 @@ public class EntitySnowShovelFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -96,4 +99,4 @@ public class EntitySnowShovelFX extends EntityFX { this.particleScale = this.snowDigParticleScale * f6; super.renderParticle(worldrenderer, entity, f, f1, f2, f3, f4, f5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntitySpellParticleFX.java b/src/game/java/net/minecraft/client/particle/EntitySpellParticleFX.java index a2c66a42..cc2b6b78 100644 --- a/src/game/java/net/minecraft/client/particle/EntitySpellParticleFX.java +++ b/src/game/java/net/minecraft/client/particle/EntitySpellParticleFX.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,10 +27,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySpellParticleFX extends EntityFX { public static class AmbientMobFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntitySpellParticleFX entityspellparticlefx = new EntitySpellParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -41,6 +42,7 @@ public class EntitySpellParticleFX extends EntityFX { } public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntitySpellParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -48,6 +50,7 @@ public class EntitySpellParticleFX extends EntityFX { } public static class InstantFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntitySpellParticleFX entityspellparticlefx = new EntitySpellParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -57,6 +60,7 @@ public class EntitySpellParticleFX extends EntityFX { } public static class MobFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntitySpellParticleFX entityspellparticlefx = new EntitySpellParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -66,6 +70,7 @@ public class EntitySpellParticleFX extends EntityFX { } public static class WitchFactory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { EntitySpellParticleFX entityspellparticlefx = new EntitySpellParticleFX(world, d0, d1, d2, d3, d4, d5); @@ -101,6 +106,7 @@ public class EntitySpellParticleFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -130,6 +136,7 @@ public class EntitySpellParticleFX extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer worldrenderer, Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { float f6 = ((float) this.particleAge + f) / (float) this.particleMaxAge * 32.0F; @@ -143,4 +150,4 @@ public class EntitySpellParticleFX extends EntityFX { public void setBaseSpellTextureIndex(int baseSpellTextureIndexIn) { this.baseSpellTextureIndex = baseSpellTextureIndexIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntitySplashFX.java b/src/game/java/net/minecraft/client/particle/EntitySplashFX.java index 4cf29382..3a216380 100644 --- a/src/game/java/net/minecraft/client/particle/EntitySplashFX.java +++ b/src/game/java/net/minecraft/client/particle/EntitySplashFX.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySplashFX extends EntityRainFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntitySplashFX(world, d0, d1, d2, d3, d4, d5); @@ -45,4 +46,4 @@ public class EntitySplashFX extends EntityRainFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/EntitySuspendFX.java b/src/game/java/net/minecraft/client/particle/EntitySuspendFX.java index a97f12dc..cf2fd2aa 100644 --- a/src/game/java/net/minecraft/client/particle/EntitySuspendFX.java +++ b/src/game/java/net/minecraft/client/particle/EntitySuspendFX.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySuspendFX extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { return new EntitySuspendFX(world, d0, d1, d2, d3, d4, d5); @@ -53,6 +54,7 @@ public class EntitySuspendFX extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -67,4 +69,4 @@ public class EntitySuspendFX extends EntityFX { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/IParticleFactory.java b/src/game/java/net/minecraft/client/particle/IParticleFactory.java index efd92c40..d5ded1f3 100644 --- a/src/game/java/net/minecraft/client/particle/IParticleFactory.java +++ b/src/game/java/net/minecraft/client/particle/IParticleFactory.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,9 +23,9 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IParticleFactory { EntityFX getEntityFX(int var1, World var2, double var3, double var5, double var7, double var9, double var11, double var13, int... var15); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/particle/MobAppearance.java b/src/game/java/net/minecraft/client/particle/MobAppearance.java index 1cacfb32..72228a1c 100644 --- a/src/game/java/net/minecraft/client/particle/MobAppearance.java +++ b/src/game/java/net/minecraft/client/particle/MobAppearance.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,10 +35,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MobAppearance extends EntityFX { public static class Factory implements IParticleFactory { + @Override public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double var9, double var11, double var13, int... var15) { return new MobAppearance(world, d0, d1, d2); @@ -55,6 +56,7 @@ public class MobAppearance extends EntityFX { this.particleMaxAge = 30; } + @Override public int getFXLayer() { return 3; } @@ -62,6 +64,7 @@ public class MobAppearance extends EntityFX { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.entity == null) { @@ -75,6 +78,7 @@ public class MobAppearance extends EntityFX { /** * + Renders the particle */ + @Override public void renderParticle(WorldRenderer var1, Entity entityx, float f, float var4, float var5, float var6, float var7, float var8) { if (this.entity != null) { @@ -103,4 +107,4 @@ public class MobAppearance extends EntityFX { GlStateManager.enableDepth(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/player/inventory/ContainerLocalMenu.java b/src/game/java/net/minecraft/client/player/inventory/ContainerLocalMenu.java index 728f10b9..94475486 100644 --- a/src/game/java/net/minecraft/client/player/inventory/ContainerLocalMenu.java +++ b/src/game/java/net/minecraft/client/player/inventory/ContainerLocalMenu.java @@ -15,13 +15,13 @@ import net.minecraft.world.LockCode; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.LockCode; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerLocalMenu extends InventoryBasic implements ILockableContainer { private String guiID; @@ -44,36 +44,44 @@ public class ContainerLocalMenu extends InventoryBasic implements ILockableConta this.guiID = id; } + @Override public Container createContainer(InventoryPlayer var1, EntityPlayer var2) { throw new UnsupportedOperationException(); } + @Override public int getField(int i) { return this.field_174895_b.containsKey(Integer.valueOf(i)) ? ((Integer) this.field_174895_b.get(Integer.valueOf(i))).intValue() : 0; } + @Override public int getFieldCount() { return this.field_174895_b.size(); } + @Override public String getGuiID() { return this.guiID; } + @Override public LockCode getLockCode() { return LockCode.EMPTY_CODE; } + @Override public boolean isLocked() { return false; } + @Override public void setField(int i, int j) { this.field_174895_b.put(Integer.valueOf(i), Integer.valueOf(j)); } + @Override public void setLockCode(LockCode var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java b/src/game/java/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java index b0b5fc73..f29871fb 100644 --- a/src/game/java/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java +++ b/src/game/java/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java @@ -9,13 +9,13 @@ import net.minecraft.world.IInteractionObject; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.IInteractionObject; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LocalBlockIntercommunication implements IInteractionObject { private String guiID; @@ -38,6 +38,7 @@ public class LocalBlockIntercommunication implements IInteractionObject { this.displayName = displayNameIn; } + @Override public Container createContainer(InventoryPlayer var1, EntityPlayer var2) { throw new UnsupportedOperationException(); } @@ -46,10 +47,12 @@ public class LocalBlockIntercommunication implements IInteractionObject { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return this.displayName; } + @Override public String getGuiID() { return this.guiID; } @@ -58,6 +61,7 @@ public class LocalBlockIntercommunication implements IInteractionObject { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.displayName.getUnformattedText(); } @@ -65,7 +69,8 @@ public class LocalBlockIntercommunication implements IInteractionObject { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ActiveRenderInfo.java b/src/game/java/net/minecraft/client/renderer/ActiveRenderInfo.java index e91550d7..dd756fe0 100644 --- a/src/game/java/net/minecraft/client/renderer/ActiveRenderInfo.java +++ b/src/game/java/net/minecraft/client/renderer/ActiveRenderInfo.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ActiveRenderInfo { /** @@ -139,4 +139,4 @@ public class ActiveRenderInfo { rotationXY = rotationX * MathHelper.sin(f2 * 3.1415927F / 180.0F) * (float) (1 - i * 2); rotationXZ = MathHelper.cos(f2 * 3.1415927F / 180.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/BlockFluidRenderer.java b/src/game/java/net/minecraft/client/renderer/BlockFluidRenderer.java index 9f355f49..c098211e 100644 --- a/src/game/java/net/minecraft/client/renderer/BlockFluidRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/BlockFluidRenderer.java @@ -19,13 +19,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFluidRenderer { private EaglerTextureAtlasSprite[] atlasSpritesLava = new EaglerTextureAtlasSprite[2]; @@ -329,4 +329,4 @@ public class BlockFluidRenderer { return flag2; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/BlockModelRenderer.java b/src/game/java/net/minecraft/client/renderer/BlockModelRenderer.java index 5078c4d5..0f98cb9f 100644 --- a/src/game/java/net/minecraft/client/renderer/BlockModelRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/BlockModelRenderer.java @@ -27,13 +27,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockModelRenderer { class AmbientOcclusionFace { @@ -558,62 +558,61 @@ public class BlockModelRenderer { private void renderModelAmbientOcclusionQuads(IBlockAccess blockAccessIn, Block blockIn, BlockPos blockPosIn, WorldRenderer worldRendererIn, List listQuadsIn, float[] quadBounds, BitSet boundsFlags, BlockModelRenderer.AmbientOcclusionFace aoFaceIn) { + boolean isDeferred = DeferredStateManager.isDeferredRenderer(); boolean isDynamicLights = isDeferred || DynamicLightsStateManager.isDynamicLightsRender(); - double d0 = (double) blockPosIn.getX(); - double d1 = (double) blockPosIn.getY(); - double d2 = (double) blockPosIn.getZ(); - Block.EnumOffsetType block$enumoffsettype = blockIn.getOffsetType(); - if (block$enumoffsettype != Block.EnumOffsetType.NONE) { - long i = MathHelper.getPositionRandom(blockPosIn); - d0 += ((double) ((float) (i >> 16 & 15L) / 15.0F) - 0.5D) * 0.5D; - d2 += ((double) ((float) (i >> 24 & 15L) / 15.0F) - 0.5D) * 0.5D; - if (!isDeferred && block$enumoffsettype == Block.EnumOffsetType.XYZ) { - d1 += ((double) ((float) (i >> 20 & 15L) / 15.0F) - 1.0D) * 0.2D; + + double posX = blockPosIn.getX(); + double posY = blockPosIn.getY(); + double posZ = blockPosIn.getZ(); + + Block.EnumOffsetType offsetType = blockIn.getOffsetType(); + if (offsetType != Block.EnumOffsetType.NONE) { + long randomOffset = MathHelper.getPositionRandom(blockPosIn); + posX += ((randomOffset >> 16 & 15L) / 15.0F - 0.5D) * 0.5D; + posZ += ((randomOffset >> 24 & 15L) / 15.0F - 0.5D) * 0.5D; + if (!isDeferred && offsetType == Block.EnumOffsetType.XYZ) { + posY += ((randomOffset >> 20 & 15L) / 15.0F - 1.0D) * 0.2D; } } - for (int i = 0, l = listQuadsIn.size(); i < l; ++i) { - BakedQuad bakedquad = listQuadsIn.get(i); - int[] vertData = isDynamicLights ? bakedquad.getVertexDataWithNormals() : bakedquad.getVertexData(); - this.fillQuadBounds(blockIn, vertData, bakedquad.getFace(), quadBounds, boundsFlags, + for (BakedQuad bakedQuad : listQuadsIn) { + int[] vertexData = isDynamicLights ? bakedQuad.getVertexDataWithNormals() : bakedQuad.getVertexData(); + + this.fillQuadBounds(blockIn, vertexData, bakedQuad.getFace(), quadBounds, boundsFlags, isDynamicLights ? 8 : 7); - aoFaceIn.updateVertexBrightness(blockAccessIn, blockIn, blockPosIn, bakedquad.getFace(), quadBounds, + + aoFaceIn.updateVertexBrightness(blockAccessIn, blockIn, blockPosIn, bakedQuad.getFace(), quadBounds, boundsFlags); - worldRendererIn.addVertexData(vertData); + + worldRendererIn.addVertexData(vertexData); + worldRendererIn.putBrightness4(aoFaceIn.vertexBrightness[0], aoFaceIn.vertexBrightness[1], aoFaceIn.vertexBrightness[2], aoFaceIn.vertexBrightness[3]); - if (bakedquad.hasTintIndex()) { - int j = blockIn.colorMultiplier(blockAccessIn, blockPosIn, bakedquad.getTintIndex()); + + if (bakedQuad.hasTintIndex()) { + int colorMultiplier = blockIn.colorMultiplier(blockAccessIn, blockPosIn, bakedQuad.getTintIndex()); if (EntityRenderer.anaglyphEnable) { - j = TextureUtil.anaglyphColor(j); + colorMultiplier = TextureUtil.anaglyphColor(colorMultiplier); } - float f = (float) (j >> 16 & 255) / 255.0F; - float f1 = (float) (j >> 8 & 255) / 255.0F; - float f2 = (float) (j & 255) / 255.0F; - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0] * f, - aoFaceIn.vertexColorMultiplier[0] * f1, aoFaceIn.vertexColorMultiplier[0] * f2, 4); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1] * f, - aoFaceIn.vertexColorMultiplier[1] * f1, aoFaceIn.vertexColorMultiplier[1] * f2, 3); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2] * f, - aoFaceIn.vertexColorMultiplier[2] * f1, aoFaceIn.vertexColorMultiplier[2] * f2, 2); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3] * f, - aoFaceIn.vertexColorMultiplier[3] * f1, aoFaceIn.vertexColorMultiplier[3] * f2, 1); + float red = (colorMultiplier >> 16 & 255) / 255.0F; + float green = (colorMultiplier >> 8 & 255) / 255.0F; + float blue = (colorMultiplier & 255) / 255.0F; + + for (int vertex = 0; vertex < 4; vertex++) { + float aoColor = aoFaceIn.vertexColorMultiplier[vertex]; + worldRendererIn.putColorMultiplier(aoColor * red, aoColor * green, aoColor * blue, 4 - vertex); + } } else { - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[0], aoFaceIn.vertexColorMultiplier[0], - aoFaceIn.vertexColorMultiplier[0], 4); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[1], aoFaceIn.vertexColorMultiplier[1], - aoFaceIn.vertexColorMultiplier[1], 3); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[2], aoFaceIn.vertexColorMultiplier[2], - aoFaceIn.vertexColorMultiplier[2], 2); - worldRendererIn.putColorMultiplier(aoFaceIn.vertexColorMultiplier[3], aoFaceIn.vertexColorMultiplier[3], - aoFaceIn.vertexColorMultiplier[3], 1); + for (int vertex = 0; vertex < 4; vertex++) { + float aoColor = aoFaceIn.vertexColorMultiplier[vertex]; + worldRendererIn.putColorMultiplier(aoColor, aoColor, aoColor, 4 - vertex); + } } - worldRendererIn.putPosition(d0, d1, d2); + worldRendererIn.putPosition(posX, posY, posZ); } - } public void renderModelBrightness(IBakedModel parIBakedModel, IBlockState parIBlockState, float parFloat1, @@ -678,7 +677,7 @@ public class BlockModelRenderer { float[] afloat = isDeferred ? new float[EnumFacing._VALUES.length * 2] : null; BitSet bitset = new BitSet(3); - BlockPos.MutableBlockPos pointer = new BlockPos.MutableBlockPos(); + BlockPos pointer = new BlockPos(); EnumFacing[] facings = EnumFacing._VALUES; for (int m = 0; m < facings.length; ++m) { EnumFacing enumfacing = facings[m]; @@ -853,4 +852,4 @@ public class BlockModelRenderer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/BlockModelShapes.java b/src/game/java/net/minecraft/client/renderer/BlockModelShapes.java index 770d5272..ebee4811 100644 --- a/src/game/java/net/minecraft/client/renderer/BlockModelShapes.java +++ b/src/game/java/net/minecraft/client/renderer/BlockModelShapes.java @@ -62,13 +62,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -80,7 +80,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockModelShapes { private final Map bakedModelStore = Maps.newIdentityHashMap(); @@ -260,6 +260,7 @@ public class BlockModelShapes { this.registerBlockWithStateMapper(Blocks.flower_pot, (new StateMap.Builder()).ignore(new IProperty[] { BlockFlowerPot.LEGACY_DATA }).build()); this.registerBlockWithStateMapper(Blocks.quartz_block, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState state) { BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType) state.getValue(BlockQuartz.VARIANT); switch (blockquartz$enumtype) { @@ -278,11 +279,13 @@ public class BlockModelShapes { } }); this.registerBlockWithStateMapper(Blocks.deadbush, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState var1) { return new ModelResourceLocation("dead_bush", "normal"); } }); this.registerBlockWithStateMapper(Blocks.pumpkin_stem, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); if (iblockstate.getValue(BlockStem.FACING) != EnumFacing.UP) { @@ -295,6 +298,7 @@ public class BlockModelShapes { } }); this.registerBlockWithStateMapper(Blocks.melon_stem, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); if (iblockstate.getValue(BlockStem.FACING) != EnumFacing.UP) { @@ -307,6 +311,7 @@ public class BlockModelShapes { } }); this.registerBlockWithStateMapper(Blocks.dirt, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); String s = BlockDirt.VARIANT.getName((BlockDirt.DirtType) linkedhashmap.remove(BlockDirt.VARIANT)); @@ -318,6 +323,7 @@ public class BlockModelShapes { } }); this.registerBlockWithStateMapper(Blocks.double_stone_slab, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); String s = BlockStoneSlab.VARIANT @@ -328,6 +334,7 @@ public class BlockModelShapes { } }); this.registerBlockWithStateMapper(Blocks.double_stone_slab2, new StateMapperBase() { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); String s = BlockStoneSlabNew.VARIANT @@ -357,4 +364,4 @@ public class BlockModelShapes { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/BlockRendererDispatcher.java b/src/game/java/net/minecraft/client/renderer/BlockRendererDispatcher.java index 24f54eea..8975776d 100644 --- a/src/game/java/net/minecraft/client/renderer/BlockRendererDispatcher.java +++ b/src/game/java/net/minecraft/client/renderer/BlockRendererDispatcher.java @@ -20,13 +20,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockRendererDispatcher implements IResourceManagerReloadListener { private BlockModelShapes blockModelShapes; @@ -94,6 +94,7 @@ public class BlockRendererDispatcher implements IResourceManagerReloadListener { } } + @Override public void onResourceManagerReload(IResourceManager var1) { this.fluidRenderer.initAtlasSprites(); } @@ -101,22 +102,28 @@ public class BlockRendererDispatcher implements IResourceManagerReloadListener { public boolean renderBlock(IBlockState state, BlockPos pos, IBlockAccess blockAccess, WorldRenderer worldRendererIn) { try { + boolean res; int i = state.getBlock().getRenderType(); if (i == -1) { - return false; + res = false; } else { switch (i) { case 1: - return this.fluidRenderer.renderFluid(blockAccess, state, pos, worldRendererIn); + res = this.fluidRenderer.renderFluid(blockAccess, state, pos, worldRendererIn); + break; case 2: - return false; + res = false; + break; case 3: IBakedModel ibakedmodel = this.getModelFromBlockState(state, blockAccess, pos); - return this.blockModelRenderer.renderModel(blockAccess, ibakedmodel, state, pos, worldRendererIn); + res = this.blockModelRenderer.renderModel(blockAccess, ibakedmodel, state, pos, worldRendererIn); + break; default: - return false; + res = false; + break; } } + return res; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Tesselating block in world"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being tesselated"); @@ -156,4 +163,4 @@ public class BlockRendererDispatcher implements IResourceManagerReloadListener { Tessellator.getInstance().getWorldRenderer()); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ChestRenderer.java b/src/game/java/net/minecraft/client/renderer/ChestRenderer.java index 6d4be370..0f69df14 100644 --- a/src/game/java/net/minecraft/client/renderer/ChestRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/ChestRenderer.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChestRenderer { public void renderChestBrightness(Block color, float parFloat1) { @@ -34,4 +34,4 @@ public class ChestRenderer { GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); TileEntityItemStackRenderer.instance.renderByItem(new ItemStack(color)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ChunkRenderContainer.java b/src/game/java/net/minecraft/client/renderer/ChunkRenderContainer.java index 3471bf07..a94bdd91 100644 --- a/src/game/java/net/minecraft/client/renderer/ChunkRenderContainer.java +++ b/src/game/java/net/minecraft/client/renderer/ChunkRenderContainer.java @@ -15,13 +15,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ChunkRenderContainer { private double viewEntityX; @@ -74,4 +74,4 @@ public abstract class ChunkRenderContainer { } public abstract void renderChunkLayer(EnumWorldBlockLayer var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/DestroyBlockProgress.java b/src/game/java/net/minecraft/client/renderer/DestroyBlockProgress.java index c97ff1f2..ef28636d 100644 --- a/src/game/java/net/minecraft/client/renderer/DestroyBlockProgress.java +++ b/src/game/java/net/minecraft/client/renderer/DestroyBlockProgress.java @@ -5,13 +5,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DestroyBlockProgress { private final int miningPlayerEntId; @@ -69,4 +69,4 @@ public class DestroyBlockProgress { this.partialBlockProgress = damage; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/EntityRenderer.java b/src/game/java/net/minecraft/client/renderer/EntityRenderer.java index dacca1a7..a6bafa63 100644 --- a/src/game/java/net/minecraft/client/renderer/EntityRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/EntityRenderer.java @@ -114,13 +114,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -132,7 +132,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityRenderer implements IResourceManagerReloadListener { private static final Logger logger = LogManager.getLogger(); @@ -1373,11 +1373,13 @@ public class EntityRenderer implements IResourceManagerReloadListener { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering screen"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Screen render details"); crashreportcategory.addCrashSectionCallable("Screen name", new Callable() { + @Override public String call() throws Exception { return EntityRenderer.this.mc.currentScreen.getClass().getName(); } }); crashreportcategory.addCrashSectionCallable("Mouse location", new Callable() { + @Override public String call() throws Exception { return HString.format("Scaled: (%d, %d). Absolute: (%d, %d)", new Object[] { Integer.valueOf(j1), Integer.valueOf(k1), @@ -1386,6 +1388,7 @@ public class EntityRenderer implements IResourceManagerReloadListener { } }); crashreportcategory.addCrashSectionCallable("Screen size", new Callable() { + @Override public String call() throws Exception { return HString.format("Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %d", new Object[] { Integer.valueOf(scaledresolution.getScaledWidth()), @@ -1396,6 +1399,7 @@ public class EntityRenderer implements IResourceManagerReloadListener { } }); crashreportcategory.addCrashSectionCallable("Eagler Scale", new Callable() { + @Override public String call() throws Exception { return "" + ff[0]; } @@ -1480,6 +1484,7 @@ public class EntityRenderer implements IResourceManagerReloadListener { entity.getEntityBoundingBox().addCoord(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0) .expand((double) f, (double) f, (double) f), Predicates.and(EntitySelectors.NOT_SPECTATING, new Predicate() { + @Override public boolean apply(Entity entity2) { return entity2.canBeCollidedWith(); } @@ -1598,6 +1603,7 @@ public class EntityRenderer implements IResourceManagerReloadListener { this.useShader = false; } + @Override public void onResourceManagerReload(IResourceManager var1) { } @@ -1882,7 +1888,7 @@ public class EntityRenderer implements IResourceManagerReloadListener { float f1 = (float) this.rendererUpdateCount + partialTicks; worldrenderer.setTranslation(-d0, -d1, -d2); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i1 = k - b0; i1 <= k + b0; ++i1) { for (int j1 = i - b0; j1 <= i + b0; ++j1) { @@ -2854,4 +2860,4 @@ public class EntityRenderer implements IResourceManagerReloadListener { this.torchFlickerX += (this.torchFlickerDX - this.torchFlickerX) * 1.0F; this.lightmapUpdateNeeded = true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/EnumFaceDirection.java b/src/game/java/net/minecraft/client/renderer/EnumFaceDirection.java index 9c6934b7..921a1618 100644 --- a/src/game/java/net/minecraft/client/renderer/EnumFaceDirection.java +++ b/src/game/java/net/minecraft/client/renderer/EnumFaceDirection.java @@ -5,13 +5,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumFaceDirection { DOWN(new EnumFaceDirection.VertexInformation[] { @@ -126,4 +126,4 @@ public enum EnumFaceDirection { public EnumFaceDirection.VertexInformation func_179025_a(int parInt1) { return this.vertexInfos[parInt1]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/GLAllocation.java b/src/game/java/net/minecraft/client/renderer/GLAllocation.java index 30ef1cb5..8f73d74c 100644 --- a/src/game/java/net/minecraft/client/renderer/GLAllocation.java +++ b/src/game/java/net/minecraft/client/renderer/GLAllocation.java @@ -9,13 +9,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GLAllocation { /** @@ -65,4 +65,4 @@ public class GLAllocation { public static int generateDisplayLists() { return EaglercraftGPU.glGenLists(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/IImageBuffer.java b/src/game/java/net/minecraft/client/renderer/IImageBuffer.java index 79a6cfcb..fb9f1743 100644 --- a/src/game/java/net/minecraft/client/renderer/IImageBuffer.java +++ b/src/game/java/net/minecraft/client/renderer/IImageBuffer.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,10 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IImageBuffer { ImageData parseUserSkin(ImageData var1); void skinAvailable(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ImageBufferDownload.java b/src/game/java/net/minecraft/client/renderer/ImageBufferDownload.java index 7f1261ec..1de6cc36 100644 --- a/src/game/java/net/minecraft/client/renderer/ImageBufferDownload.java +++ b/src/game/java/net/minecraft/client/renderer/ImageBufferDownload.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ImageBufferDownload implements IImageBuffer { private int[] imageData; @@ -46,6 +46,7 @@ public class ImageBufferDownload implements IImageBuffer { return false; } + @Override public ImageData parseUserSkin(ImageData bufferedimage) { if (bufferedimage == null) { return null; @@ -113,6 +114,7 @@ public class ImageBufferDownload implements IImageBuffer { } } + @Override public void skinAvailable() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/InventoryEffectRenderer.java b/src/game/java/net/minecraft/client/renderer/InventoryEffectRenderer.java index d0e1971f..0a0e40bc 100644 --- a/src/game/java/net/minecraft/client/renderer/InventoryEffectRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/InventoryEffectRenderer.java @@ -12,13 +12,13 @@ import net.minecraft.potion.PotionEffect; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.potion.PotionEffect; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class InventoryEffectRenderer extends GuiContainer { private boolean hasActivePotionEffects; @@ -88,6 +88,7 @@ public abstract class InventoryEffectRenderer extends GuiContainer { * + Draws the screen and all the components in it. Args : mouseX, mouseY, * renderPartialTicks */ + @Override public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f); if (this.hasActivePotionEffects) { @@ -101,6 +102,7 @@ public abstract class InventoryEffectRenderer extends GuiContainer { * when the GUI is displayed and when the window resizes, the buttonList is * cleared beforehand. */ + @Override public void initGui() { super.initGui(); this.updateActivePotionEffects(); @@ -116,4 +118,4 @@ public abstract class InventoryEffectRenderer extends GuiContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ItemMeshDefinition.java b/src/game/java/net/minecraft/client/renderer/ItemMeshDefinition.java index b1182c91..bb73afb1 100644 --- a/src/game/java/net/minecraft/client/renderer/ItemMeshDefinition.java +++ b/src/game/java/net/minecraft/client/renderer/ItemMeshDefinition.java @@ -6,13 +6,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,8 +24,8 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ItemMeshDefinition { ModelResourceLocation getModelLocation(ItemStack var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ItemModelMesher.java b/src/game/java/net/minecraft/client/renderer/ItemModelMesher.java index 94696734..d215aa60 100644 --- a/src/game/java/net/minecraft/client/renderer/ItemModelMesher.java +++ b/src/game/java/net/minecraft/client/renderer/ItemModelMesher.java @@ -15,13 +15,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemModelMesher { private final Map simpleShapes = Maps.newHashMap(); @@ -104,4 +104,4 @@ public class ItemModelMesher { public void register(Item item, ItemMeshDefinition definition) { this.shapers.put(item, definition); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ItemRenderer.java b/src/game/java/net/minecraft/client/renderer/ItemRenderer.java index d81e1897..31faf5b3 100644 --- a/src/game/java/net/minecraft/client/renderer/ItemRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/ItemRenderer.java @@ -36,13 +36,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -54,7 +54,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemRenderer { private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); @@ -572,4 +572,4 @@ public class ItemRenderer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/RegionRenderCache.java b/src/game/java/net/minecraft/client/renderer/RegionRenderCache.java index c9027859..4a5a58a0 100644 --- a/src/game/java/net/minecraft/client/renderer/RegionRenderCache.java +++ b/src/game/java/net/minecraft/client/renderer/RegionRenderCache.java @@ -14,13 +14,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegionRenderCache extends ChunkCache { private final IBlockState DEFAULT_STATE = Blocks.air.getDefaultState(); @@ -49,6 +49,7 @@ public class RegionRenderCache extends ChunkCache { this.blockStates = new IBlockState[8000]; } + @Override public IBlockState getBlockState(BlockPos blockpos) { int i = this.getPositionIndex(blockpos); IBlockState iblockstate = this.blockStates[i]; @@ -97,6 +98,7 @@ public class RegionRenderCache extends ChunkCache { } } + @Override public int getCombinedLight(BlockPos blockpos, int i) { int j = this.getPositionIndex(blockpos); int k = this.combinedLights[j]; @@ -125,9 +127,10 @@ public class RegionRenderCache extends ChunkCache { return i * 400 + k * 20 + j; } + @Override public TileEntity getTileEntity(BlockPos blockpos) { int i = (blockpos.getX() >> 4) - this.chunkX; int j = (blockpos.getZ() >> 4) - this.chunkZ; return this.chunkArray[i][j].getTileEntity(blockpos, Chunk.EnumCreateEntityType.QUEUED); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/RegionRenderCacheBuilder.java b/src/game/java/net/minecraft/client/renderer/RegionRenderCacheBuilder.java index ba30a146..2c17b41f 100644 --- a/src/game/java/net/minecraft/client/renderer/RegionRenderCacheBuilder.java +++ b/src/game/java/net/minecraft/client/renderer/RegionRenderCacheBuilder.java @@ -6,13 +6,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegionRenderCacheBuilder { private final WorldRenderer[] worldRenderers = new WorldRenderer[EnumWorldBlockLayer._VALUES.length]; @@ -45,4 +45,4 @@ public class RegionRenderCacheBuilder { public WorldRenderer getWorldRendererByLayerId(int id) { return this.worldRenderers[id]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/RenderGlobal.java b/src/game/java/net/minecraft/client/renderer/RenderGlobal.java index ac9314e9..756cd0e7 100644 --- a/src/game/java/net/minecraft/client/renderer/RenderGlobal.java +++ b/src/game/java/net/minecraft/client/renderer/RenderGlobal.java @@ -110,13 +110,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -128,7 +128,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListener { public static interface ChunkCullAdapter { @@ -325,6 +325,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene this.generateSky2(); } + @Override public void broadcastSound(int i, BlockPos blockpos, int var3) { switch (i) { case 1013: @@ -632,8 +633,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene BlockPos blockpos = new BlockPos(pos.getX() >> 4 << 4, pos.getY() >> 4 << 4, pos.getZ() >> 4 << 4); Chunk chunk = this.theWorld.getChunkFromBlockCoords(blockpos); - for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, - blockpos.add(15, 15, 15))) { + for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos.add(15, 15, 15))) { if (chunk.getBlock(blockpos$mutableblockpos).isOpaqueCube()) { visgraph.func_178606_a(blockpos$mutableblockpos); } @@ -783,6 +783,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } + @Override public void markBlockForUpdate(BlockPos blockpos) { int i = blockpos.getX(); int j = blockpos.getY(); @@ -794,6 +795,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene * + On the client, re-renders all blocks in this range, inclusive. On the * server, does nothing. Args: min x, min y, min z, max x, max y, max z */ + @Override public void markBlockRangeForRenderUpdate(int i, int j, int k, int l, int i1, int j1) { this.markBlocksForUpdate(i - 1, j - 1, k - 1, l + 1, i1 + 1, j1 + 1); } @@ -805,6 +807,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene this.viewFrustum.markBlocksForUpdate(x1, y1, z1, x2, y2, z2); } + @Override public void notifyLightSet(BlockPos blockpos) { int i = blockpos.getX(); int j = blockpos.getY(); @@ -817,6 +820,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene * worlds, starts downloading any necessary textures. On server worlds, adds the * entity to the entity tracker. */ + @Override public void onEntityAdded(Entity var1) { } @@ -825,13 +829,16 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene * client worlds, releases any downloaded textures. On server worlds, removes * the entity from the entity tracker. */ + @Override public void onEntityRemoved(Entity var1) { } + @Override public void onResourceManagerReload(IResourceManager var1) { this.updateDestroyBlockIcons(); } + @Override public void playAuxSFX(EntityPlayer var1, int i, BlockPos blockpos, int j) { EaglercraftRandom random = this.theWorld.rand; switch (i) { @@ -1020,6 +1027,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } + @Override public void playRecord(String s, BlockPos blockpos) { ISound isound = (ISound) this.mapSoundPositions.get(blockpos); if (isound != null) { @@ -1044,12 +1052,14 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene /** * + Plays the specified sound. Arg: soundName, x, y, z, volume, pitch */ + @Override public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { } /** * + Plays sound to all near players except the player reference given */ + @Override public void playSoundToNearExcept(EntityPlayer var1, String var2, double var3, double var5, double var7, float var9, float var10) { } @@ -2227,6 +2237,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } } + @Override public void sendBlockBreakProgress(int i, BlockPos blockpos, int j) { if (j >= 0 && j < 10) { DestroyBlockProgress destroyblockprogress = (DestroyBlockProgress) this.damagedBlocks @@ -2458,6 +2469,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene parDouble3, parDouble4, parDouble5, parDouble6, parArrayOfInt); } + @Override public void spawnParticle(int i, boolean flag, final double d0, final double d1, final double d2, double d3, double d4, double d5, int... aint) { try { @@ -2471,6 +2483,7 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } crashreportcategory.addCrashSectionCallable("Position", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(d0, d1, d2); } @@ -2521,4 +2534,4 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/RenderHelper.java b/src/game/java/net/minecraft/client/renderer/RenderHelper.java index 3fb0ca8b..34d57693 100644 --- a/src/game/java/net/minecraft/client/renderer/RenderHelper.java +++ b/src/game/java/net/minecraft/client/renderer/RenderHelper.java @@ -8,13 +8,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderHelper { /** @@ -97,4 +97,4 @@ public class RenderHelper { colorBuffer.flip(); return colorBuffer; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/RenderList.java b/src/game/java/net/minecraft/client/renderer/RenderList.java index 2f7e3d50..d7481846 100644 --- a/src/game/java/net/minecraft/client/renderer/RenderList.java +++ b/src/game/java/net/minecraft/client/renderer/RenderList.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,9 +26,10 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderList extends ChunkRenderContainer { + @Override public void renderChunkLayer(EnumWorldBlockLayer enumworldblocklayer) { if (this.initialized) { for (int i = 0, l = this.renderChunks.size(); i < l; ++i) { @@ -44,4 +45,4 @@ public class RenderList extends ChunkRenderContainer { this.renderChunks.clear(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/StitcherException.java b/src/game/java/net/minecraft/client/renderer/StitcherException.java index 938a4a43..bfa2d596 100644 --- a/src/game/java/net/minecraft/client/renderer/StitcherException.java +++ b/src/game/java/net/minecraft/client/renderer/StitcherException.java @@ -5,13 +5,13 @@ import net.minecraft.client.renderer.texture.Stitcher; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.renderer.texture.Stitcher; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StitcherException extends RuntimeException { private final Stitcher.Holder holder; @@ -32,4 +32,4 @@ public class StitcherException extends RuntimeException { super(parString1); this.holder = parHolder; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/Tessellator.java b/src/game/java/net/minecraft/client/renderer/Tessellator.java index 876d9b3b..ceb72300 100644 --- a/src/game/java/net/minecraft/client/renderer/Tessellator.java +++ b/src/game/java/net/minecraft/client/renderer/Tessellator.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.WorldVertexBufferUploader; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.WorldVertexBufferUploader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Tessellator { public static final int GL_TRIANGLES = RealOpenGLEnums.GL_TRIANGLES; @@ -65,4 +65,4 @@ public class Tessellator { public WorldRenderer getWorldRenderer() { return this.worldRenderer; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/ViewFrustum.java b/src/game/java/net/minecraft/client/renderer/ViewFrustum.java index 359d94cb..6f6c8efc 100644 --- a/src/game/java/net/minecraft/client/renderer/ViewFrustum.java +++ b/src/game/java/net/minecraft/client/renderer/ViewFrustum.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ViewFrustum { protected final RenderGlobal renderGlobal; @@ -167,4 +167,4 @@ public class ViewFrustum { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BakedQuad.java b/src/game/java/net/minecraft/client/renderer/block/model/BakedQuad.java index 0558dcea..efdb63f4 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BakedQuad.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BakedQuad.java @@ -5,13 +5,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BakedQuad { protected final int[] vertexData; @@ -64,4 +64,4 @@ public class BakedQuad { public boolean hasTintIndex() { return this.tintIndex != -1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BlockFaceUV.java b/src/game/java/net/minecraft/client/renderer/block/model/BlockFaceUV.java index 6b48103d..943130e0 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BlockFaceUV.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BlockFaceUV.java @@ -9,13 +9,13 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeDeserializer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,10 +27,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeDeserializer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockFaceUV { public static class Deserializer implements JSONTypeDeserializer { + @Override public BlockFaceUV deserialize(JSONObject jsonobject) throws JSONException { float[] afloat = this.parseUV(jsonobject); int i = this.parseRotation(jsonobject); @@ -107,4 +108,4 @@ public class BlockFaceUV { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BlockPart.java b/src/game/java/net/minecraft/client/renderer/block/model/BlockPart.java index 90f7f836..25d804bf 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BlockPart.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BlockPart.java @@ -19,13 +19,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,10 +37,11 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPart { public static class Deserializer implements JSONTypeDeserializer { + @Override public BlockPart deserialize(JSONObject jsonobject) throws JSONException { Vector3f vector3f = this.parsePositionFrom(jsonobject); Vector3f vector3f1 = this.parsePositionTo(jsonobject); @@ -203,4 +204,4 @@ public class BlockPart { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BlockPartFace.java b/src/game/java/net/minecraft/client/renderer/block/model/BlockPartFace.java index 588a1415..539c8564 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BlockPartFace.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BlockPartFace.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,10 +28,11 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPartFace { public static class Deserializer implements JSONTypeDeserializer { + @Override public BlockPartFace deserialize(JSONObject jsonobject) throws JSONException { EnumFacing enumfacing = this.parseCullFace(jsonobject); int i = this.parseTintIndex(jsonobject); @@ -67,4 +68,4 @@ public class BlockPartFace { this.texture = textureIn; this.blockFaceUV = blockFaceUVIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BlockPartRotation.java b/src/game/java/net/minecraft/client/renderer/block/model/BlockPartRotation.java index 373685e1..99ededc2 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BlockPartRotation.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BlockPartRotation.java @@ -6,13 +6,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPartRotation { public final Vector3f origin; @@ -38,4 +38,4 @@ public class BlockPartRotation { this.angle = angleIn; this.rescale = rescaleIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/BreakingFour.java b/src/game/java/net/minecraft/client/renderer/block/model/BreakingFour.java index fe1f4387..46054c95 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/BreakingFour.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/BreakingFour.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BreakingFour extends BakedQuad { private final EaglerTextureAtlasSprite texture; @@ -87,4 +87,4 @@ public class BreakingFour extends BakedQuad { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/FaceBakery.java b/src/game/java/net/minecraft/client/renderer/block/model/FaceBakery.java index 39a2283c..b05b7732 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/FaceBakery.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/FaceBakery.java @@ -15,13 +15,13 @@ import net.minecraft.util.Vec3i; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.Vec3i; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FaceBakery { private static final float field_178418_a = 1.0F / (float) Math.cos(0.39269909262657166D) - 1.0F; @@ -410,4 +410,4 @@ public class FaceBakery { faceData[i + 2] = Float.floatToRawIntBits(position.z); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java b/src/game/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java index 5aeb6477..f865affa 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java @@ -10,13 +10,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,10 +28,11 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemCameraTransforms { public static class Deserializer implements JSONTypeDeserializer { + @Override public ItemCameraTransforms deserialize(JSONObject jsonobject) throws JSONException { ItemTransformVec3f itemtransformvec3f = this.func_181683_a(jsonobject, "thirdperson"); ItemTransformVec3f itemtransformvec3f1 = this.func_181683_a(jsonobject, "firstperson"); @@ -135,4 +136,4 @@ public class ItemCameraTransforms { return ItemTransformVec3f.DEFAULT; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/ItemModelGenerator.java b/src/game/java/net/minecraft/client/renderer/block/model/ItemModelGenerator.java index 37184afa..6c26174e 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/ItemModelGenerator.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/ItemModelGenerator.java @@ -16,13 +16,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemModelGenerator { static class Span { @@ -318,4 +318,4 @@ public class ItemModelGenerator { return new ModelBlock(arraylist, hashmap, false, false, blockModel.func_181682_g()); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java b/src/game/java/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java index ba112eba..e0d53cef 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemTransformVec3f { public static class Deserializer implements JSONTypeDeserializer { @@ -37,6 +37,7 @@ public class ItemTransformVec3f { private static final Vector3f TRANSLATION_DEFAULT = new Vector3f(0.0F, 0.0F, 0.0F); private static final Vector3f SCALE_DEFAULT = new Vector3f(1.0F, 1.0F, 1.0F); + @Override public ItemTransformVec3f deserialize(JSONObject jsonobject) throws JSONException { Vector3f vector3f = this.parseVector3f(jsonobject, "rotation", ROTATION_DEFAULT); Vector3f vector3f1 = this.parseVector3f(jsonobject, "translation", TRANSLATION_DEFAULT); @@ -84,6 +85,7 @@ public class ItemTransformVec3f { this.scale = new Vector3f(scale); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -97,10 +99,11 @@ public class ItemTransformVec3f { } } + @Override public int hashCode() { int i = this.rotation.hashCode(); i = 31 * i + this.translation.hashCode(); i = 31 * i + this.scale.hashCode(); return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/ModelBlock.java b/src/game/java/net/minecraft/client/renderer/block/model/ModelBlock.java index 7707c334..7c7f46a7 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/ModelBlock.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/ModelBlock.java @@ -22,13 +22,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBlock { static final class Bookkeep { @@ -53,6 +53,7 @@ public class ModelBlock { } public static class Deserializer implements JSONTypeDeserializer { + @Override public ModelBlock deserialize(JSONObject jsonobject) throws JSONException { List list = this.getModelElements(jsonobject); String s = this.getParent(jsonobject); @@ -262,4 +263,4 @@ public class ModelBlock { private boolean startsWithHash(String hash) { return hash.charAt(0) == 35; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java b/src/game/java/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java index d7858174..28eb872e 100644 --- a/src/game/java/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java +++ b/src/game/java/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java @@ -21,13 +21,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,11 +39,12 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBlockDefinition { public static class Deserializer implements JSONTypeDeserializer { + @Override public ModelBlockDefinition deserialize(JSONObject jsonobject) throws JSONException { List list = this.parseVariantsList(jsonobject); return new ModelBlockDefinition((Collection) list); @@ -79,6 +80,7 @@ public class ModelBlockDefinition { public static class Variant { public static class Deserializer implements JSONTypeDeserializer { + @Override public ModelBlockDefinition.Variant deserialize(JSONObject jsonobject) throws JSONException { String s = this.parseModel(jsonobject); ModelRotation modelrotation = this.parseRotation(jsonobject); @@ -132,6 +134,7 @@ public class ModelBlockDefinition { this.weight = weightIn; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -157,6 +160,7 @@ public class ModelBlockDefinition { return this.weight; } + @Override public int hashCode() { int i = this.modelLocation.hashCode(); i = 31 * i + (this.modelRotation != null ? this.modelRotation.hashCode() : 0); @@ -178,6 +182,7 @@ public class ModelBlockDefinition { this.listVariants = listVariantsIn; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -194,6 +199,7 @@ public class ModelBlockDefinition { return this.listVariants; } + @Override public int hashCode() { int i = this.name.hashCode(); i = 31 * i + this.listVariants.hashCode(); @@ -221,6 +227,7 @@ public class ModelBlockDefinition { } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -242,7 +249,8 @@ public class ModelBlockDefinition { } } + @Override public int hashCode() { return this.mapVariants.hashCode(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java b/src/game/java/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java index de14ece1..d2bc8705 100644 --- a/src/game/java/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java +++ b/src/game/java/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java @@ -16,13 +16,13 @@ import net.minecraft.client.resources.model.ModelResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.client.resources.model.ModelResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockStateMapper { private Map blockStateMap = Maps.newIdentityHashMap(); @@ -61,4 +61,4 @@ public class BlockStateMapper { public void registerBuiltInBlocks(Block... parArrayOfBlock) { Collections.addAll(this.setBuiltInBlocks, parArrayOfBlock); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java b/src/game/java/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java index 2ea12312..1a03cb03 100644 --- a/src/game/java/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java +++ b/src/game/java/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,12 +26,13 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DefaultStateMapper extends StateMapperBase { + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { return new ModelResourceLocation( (ResourceLocation) Block.blockRegistry.getNameForObject(iblockstate.getBlock()), this.getPropertyString(iblockstate.getProperties())); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/statemap/IStateMapper.java b/src/game/java/net/minecraft/client/renderer/block/statemap/IStateMapper.java index 87e08b16..c3083fcc 100644 --- a/src/game/java/net/minecraft/client/renderer/block/statemap/IStateMapper.java +++ b/src/game/java/net/minecraft/client/renderer/block/statemap/IStateMapper.java @@ -9,13 +9,13 @@ import net.minecraft.client.resources.model.ModelResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,8 +27,8 @@ import net.minecraft.client.resources.model.ModelResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IStateMapper { Map putStateModelLocations(Block var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/statemap/StateMap.java b/src/game/java/net/minecraft/client/renderer/block/statemap/StateMap.java index d4b52e5e..0a138b91 100644 --- a/src/game/java/net/minecraft/client/renderer/block/statemap/StateMap.java +++ b/src/game/java/net/minecraft/client/renderer/block/statemap/StateMap.java @@ -16,13 +16,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StateMap extends StateMapperBase { public static class Builder { @@ -73,6 +73,7 @@ public class StateMap extends StateMapperBase { this.ignored = ignored; } + @Override protected ModelResourceLocation getModelResourceLocation(IBlockState iblockstate) { LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(iblockstate.getProperties()); String s; @@ -92,4 +93,4 @@ public class StateMap extends StateMapperBase { return new ModelResourceLocation(s, this.getPropertyString(linkedhashmap)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/block/statemap/StateMapperBase.java b/src/game/java/net/minecraft/client/renderer/block/statemap/StateMapperBase.java index 4ece79a6..605d7ea0 100644 --- a/src/game/java/net/minecraft/client/renderer/block/statemap/StateMapperBase.java +++ b/src/game/java/net/minecraft/client/renderer/block/statemap/StateMapperBase.java @@ -13,13 +13,13 @@ import net.minecraft.client.resources.model.ModelResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.client.resources.model.ModelResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class StateMapperBase implements IStateMapper { protected Map mapStateModelLocations = Maps.newLinkedHashMap(); @@ -60,6 +60,7 @@ public abstract class StateMapperBase implements IStateMapper { return stringbuilder.toString(); } + @Override public Map putStateModelLocations(Block blockIn) { for (IBlockState iblockstate : blockIn.getBlockState().getValidStates()) { this.mapStateModelLocations.put(iblockstate, this.getModelResourceLocation(iblockstate)); @@ -67,4 +68,4 @@ public abstract class StateMapperBase implements IStateMapper { return this.mapStateModelLocations; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java b/src/game/java/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java index ec19af17..fc702926 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java @@ -11,13 +11,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkCompileTaskGenerator { public static enum Status { @@ -127,4 +127,4 @@ public class ChunkCompileTaskGenerator { public void setStatus(ChunkCompileTaskGenerator.Status statusIn) { this.status = statusIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java b/src/game/java/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java index 796cf2b5..50e1653e 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java @@ -12,13 +12,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkRenderWorker { private static final Logger LOGGER = LogManager.getLogger(); @@ -103,7 +103,6 @@ public class ChunkRenderWorker { this.chunkRenderDispatcher.uploadChunk(enumworldblocklayer, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(enumworldblocklayer), generator.getRenderChunk(), compiledchunk); - generator.getRenderChunk().setCompiledChunk(compiledchunk); generator.setStatus(ChunkCompileTaskGenerator.Status.DONE); } } @@ -118,10 +117,9 @@ public class ChunkRenderWorker { .getWorldRendererByLayer(EnumWorldBlockLayer.REALISTIC_WATER), generator.getRenderChunk(), compiledchunk); } - generator.getRenderChunk().setCompiledChunk(compiledchunk); generator.setStatus(ChunkCompileTaskGenerator.Status.DONE); } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/CompiledChunk.java b/src/game/java/net/minecraft/client/renderer/chunk/CompiledChunk.java index 5e3198f9..d7eaa326 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/CompiledChunk.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/CompiledChunk.java @@ -1,5 +1,6 @@ package net.minecraft.client.renderer.chunk; +import java.util.Arrays; import java.util.List; import com.google.common.collect.Lists; @@ -12,13 +13,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,22 +31,26 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CompiledChunk { - public static final CompiledChunk DUMMY = new CompiledChunk() { + public static final CompiledChunk DUMMY = new CompiledChunk(null) { + @Override public boolean isVisible(EnumFacing facing, EnumFacing facing2) { return true; } + @Override public void setLayerStarted(EnumWorldBlockLayer layer) { throw new UnsupportedOperationException(); } + @Override protected void setLayerUsed(EnumWorldBlockLayer layer) { throw new UnsupportedOperationException(); } }; + private final RenderChunk chunk; private final boolean[] layersUsed = new boolean[EnumWorldBlockLayer._VALUES.length]; private final boolean[] layersStarted = new boolean[EnumWorldBlockLayer._VALUES.length]; private boolean empty = true; @@ -54,6 +59,10 @@ public class CompiledChunk { private WorldRenderer.State state; private WorldRenderer.State stateWater; + public CompiledChunk(RenderChunk chunk) { + this.chunk = chunk; + } + public void addTileEntity(TileEntity tileEntityIn) { this.tileEntities.add(tileEntityIn); } @@ -86,6 +95,16 @@ public class CompiledChunk { return this.setVisibility.isVisible(enumfacing, enumfacing1); } + public void reset() { + Arrays.fill(layersUsed, false); + Arrays.fill(layersStarted, false); + empty = true; + tileEntities.clear(); + setVisibility.setAllVisible(false); + setState(null); + setStateRealisticWater(null); + } + public void setLayerStarted(EnumWorldBlockLayer enumworldblocklayer) { this.layersStarted[enumworldblocklayer.ordinal()] = true; } @@ -96,14 +115,20 @@ public class CompiledChunk { } public void setState(WorldRenderer.State stateIn) { + if (this.state != stateIn && this.state != null) { + this.state.release(); + } this.state = stateIn; } public void setStateRealisticWater(WorldRenderer.State stateIn) { + if (this.stateWater != stateIn && this.stateWater != null) { + this.stateWater.release(); + } this.stateWater = stateIn; } public void setVisibility(SetVisibility visibility) { this.setVisibility = visibility; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java b/src/game/java/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java index 731d52ca..450b0b24 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,8 +25,8 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRenderChunkFactory { RenderChunk makeRenderChunk(World var1, RenderGlobal var2, BlockPos var3, int var4); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/ListChunkFactory.java b/src/game/java/net/minecraft/client/renderer/chunk/ListChunkFactory.java index 1e65c866..0dda7559 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/ListChunkFactory.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/ListChunkFactory.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,11 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ListChunkFactory implements IRenderChunkFactory { + @Override public RenderChunk makeRenderChunk(World worldIn, RenderGlobal globalRenderer, BlockPos pos, int index) { return new ListedRenderChunk(worldIn, globalRenderer, pos, index); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/ListedRenderChunk.java b/src/game/java/net/minecraft/client/renderer/chunk/ListedRenderChunk.java index 27d8681a..00e382d3 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/ListedRenderChunk.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/ListedRenderChunk.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ListedRenderChunk extends RenderChunk { private final int[] baseDisplayList; @@ -41,6 +41,7 @@ public class ListedRenderChunk extends RenderChunk { } } + @Override public void deleteGlResources() { super.deleteGlResources(); for (int i = 0; i < this.baseDisplayList.length; ++i) { @@ -52,6 +53,7 @@ public class ListedRenderChunk extends RenderChunk { return !parCompiledChunk.isLayerEmpty(layer) ? this.baseDisplayList[layer.ordinal()] : -1; } + @Override public void rebuildChunk(float x, float y, float z, ChunkCompileTaskGenerator generator) { super.rebuildChunk(x, y, z, generator); EnumWorldBlockLayer[] layers = EnumWorldBlockLayer._VALUES; @@ -61,4 +63,4 @@ public class ListedRenderChunk extends RenderChunk { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/RenderChunk.java b/src/game/java/net/minecraft/client/renderer/chunk/RenderChunk.java index 16b1428f..f881a970 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/RenderChunk.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/RenderChunk.java @@ -33,13 +33,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +51,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderChunk { public static enum ShadowFrustumState { @@ -169,7 +169,11 @@ public class RenderChunk { } public void rebuildChunk(float x, float y, float z, ChunkCompileTaskGenerator generator) { - CompiledChunk compiledchunk = new CompiledChunk(); + if (compiledChunk == CompiledChunk.DUMMY) { + compiledChunk = new CompiledChunk(this); + } else { + compiledChunk.reset(); + } boolean flag = true; BlockPos blockpos = this.position; BlockPos blockpos1 = blockpos.add(15, 15, 15); @@ -180,7 +184,7 @@ public class RenderChunk { } regionrendercache = new RegionRenderCache(this.world, blockpos.add(-1, -1, -1), blockpos1.add(1, 1, 1), 1); - generator.setCompiledChunk(compiledchunk); + generator.setCompiledChunk(compiledChunk); VisGraph visgraph = new VisGraph(); HashSet hashset = Sets.newHashSet(); @@ -189,7 +193,7 @@ public class RenderChunk { boolean[] aboolean = new boolean[EnumWorldBlockLayer._VALUES.length]; BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); - for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBox(blockpos, blockpos1)) { + for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos1)) { IBlockState iblockstate = regionrendercache.getBlockStateFaster(blockpos$mutableblockpos); Block block = iblockstate.getBlock(); if (block.isOpaqueCube()) { @@ -201,7 +205,7 @@ public class RenderChunk { TileEntitySpecialRenderer tileentityspecialrenderer = TileEntityRendererDispatcher.instance .getSpecialRenderer(tileentity); if (tileentity != null && tileentityspecialrenderer != null) { - compiledchunk.addTileEntity(tileentity); + compiledChunk.addTileEntity(tileentity); if (tileentityspecialrenderer.func_181055_a()) { hashset.add(tileentity); } @@ -212,8 +216,8 @@ public class RenderChunk { int i = enumworldblocklayer1.ordinal(); if (block.getRenderType() != -1) { WorldRenderer worldrenderer = generator.getRegionRenderCacheBuilder().getWorldRendererByLayerId(i); - if (!compiledchunk.isLayerStarted(enumworldblocklayer1)) { - compiledchunk.setLayerStarted(enumworldblocklayer1); + if (!compiledChunk.isLayerStarted(enumworldblocklayer1)) { + compiledChunk.setLayerStarted(enumworldblocklayer1); this.preRenderBlocks(worldrenderer, blockpos); } @@ -224,8 +228,8 @@ public class RenderChunk { enumworldblocklayer1 = EnumWorldBlockLayer.GLASS_HIGHLIGHTS; worldrenderer = generator.getRegionRenderCacheBuilder() .getWorldRendererByLayerId(enumworldblocklayer1.ordinal()); - if (!compiledchunk.isLayerStarted(enumworldblocklayer1)) { - compiledchunk.setLayerStarted(enumworldblocklayer1); + if (!compiledChunk.isLayerStarted(enumworldblocklayer1)) { + compiledChunk.setLayerStarted(enumworldblocklayer1); this.preRenderBlocks(worldrenderer, blockpos); } @@ -239,18 +243,18 @@ public class RenderChunk { for (int i = 0; i < layers.length; ++i) { EnumWorldBlockLayer enumworldblocklayer = layers[i]; if (aboolean[enumworldblocklayer.ordinal()]) { - compiledchunk.setLayerUsed(enumworldblocklayer); + compiledChunk.setLayerUsed(enumworldblocklayer); } - if (compiledchunk.isLayerStarted(enumworldblocklayer)) { + if (compiledChunk.isLayerStarted(enumworldblocklayer)) { this.postRenderBlocks(enumworldblocklayer, x, y, z, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(enumworldblocklayer), - compiledchunk); + compiledChunk); } } } - compiledchunk.setVisibility(visgraph.computeVisibility()); + compiledChunk.setVisibility(visgraph.computeVisibility()); HashSet hashset1 = Sets.newHashSet(hashset); HashSet hashset2 = Sets.newHashSet(this.field_181056_j); @@ -285,10 +289,6 @@ public class RenderChunk { } } - public void setCompiledChunk(CompiledChunk compiledChunkIn) { - this.compiledChunk = compiledChunkIn; - } - public boolean setFrameIndex(int frameIndexIn) { if (this.frameIndex == frameIndexIn) { return false; @@ -317,6 +317,10 @@ public class RenderChunk { public void stopCompileTask() { this.finishCompileTask(); - this.compiledChunk = CompiledChunk.DUMMY; + if (this.compiledChunk != CompiledChunk.DUMMY) { + this.compiledChunk.setState(null); + this.compiledChunk.setStateRealisticWater(null); + this.compiledChunk = CompiledChunk.DUMMY; + } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/SetVisibility.java b/src/game/java/net/minecraft/client/renderer/chunk/SetVisibility.java index 7357c94b..245ff4d6 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/SetVisibility.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/SetVisibility.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SetVisibility { private static final int COUNT_FACES = EnumFacing._VALUES.length; @@ -59,6 +59,7 @@ public class SetVisibility { this.bitSet.set(facing2.ordinal() + facing.ordinal() * COUNT_FACES, parFlag); } + @Override public String toString() { StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append(' '); @@ -88,4 +89,4 @@ public class SetVisibility { return stringbuilder.toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/chunk/VisGraph.java b/src/game/java/net/minecraft/client/renderer/chunk/VisGraph.java index 9103ea92..303b3220 100644 --- a/src/game/java/net/minecraft/client/renderer/chunk/VisGraph.java +++ b/src/game/java/net/minecraft/client/renderer/chunk/VisGraph.java @@ -14,13 +14,13 @@ import net.minecraft.util.IntegerCache; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.IntegerCache; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VisGraph { private static final int field_178616_a = (int) Math.pow(16.0D, 0.0D); @@ -184,4 +184,4 @@ public class VisGraph { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/culling/ClippingHelper.java b/src/game/java/net/minecraft/client/renderer/culling/ClippingHelper.java index d4c529a6..ff1f6227 100644 --- a/src/game/java/net/minecraft/client/renderer/culling/ClippingHelper.java +++ b/src/game/java/net/minecraft/client/renderer/culling/ClippingHelper.java @@ -3,13 +3,13 @@ package net.minecraft.client.renderer.culling; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.renderer.culling; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClippingHelper { public float[][] frustum = new float[6][4]; @@ -56,4 +56,4 @@ public class ClippingHelper { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/culling/ClippingHelperImpl.java b/src/game/java/net/minecraft/client/renderer/culling/ClippingHelperImpl.java index 993b7332..8eb6d027 100644 --- a/src/game/java/net/minecraft/client/renderer/culling/ClippingHelperImpl.java +++ b/src/game/java/net/minecraft/client/renderer/culling/ClippingHelperImpl.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClippingHelperImpl extends ClippingHelper { private static ClippingHelperImpl instance = new ClippingHelperImpl(); @@ -128,4 +128,4 @@ public class ClippingHelperImpl extends ClippingHelper { parArrayOfFloat[3] /= f; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/culling/Frustum.java b/src/game/java/net/minecraft/client/renderer/culling/Frustum.java index b2833537..9d994daa 100644 --- a/src/game/java/net/minecraft/client/renderer/culling/Frustum.java +++ b/src/game/java/net/minecraft/client/renderer/culling/Frustum.java @@ -5,13 +5,13 @@ import net.minecraft.util.AxisAlignedBB; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.AxisAlignedBB; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Frustum implements ICamera { private ClippingHelper clippingHelper; @@ -43,6 +43,7 @@ public class Frustum implements ICamera { * + Returns true if the bounding box is inside all 6 clipping planes, otherwise * returns false. */ + @Override public boolean isBoundingBoxInFrustum(AxisAlignedBB axisalignedbb) { return this.isBoxInFrustum(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ); @@ -59,9 +60,10 @@ public class Frustum implements ICamera { parDouble6 - this.zPosition); } + @Override public void setPosition(double d0, double d1, double d2) { this.xPosition = d0; this.yPosition = d1; this.zPosition = d2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/culling/ICamera.java b/src/game/java/net/minecraft/client/renderer/culling/ICamera.java index ede89a59..da275dcf 100644 --- a/src/game/java/net/minecraft/client/renderer/culling/ICamera.java +++ b/src/game/java/net/minecraft/client/renderer/culling/ICamera.java @@ -5,13 +5,13 @@ import net.minecraft.util.AxisAlignedBB; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.AxisAlignedBB; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ICamera { /** @@ -33,4 +33,4 @@ public interface ICamera { boolean isBoundingBoxInFrustum(AxisAlignedBB var1); void setPosition(double var1, double var3, double var5); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/ArmorStandRenderer.java b/src/game/java/net/minecraft/client/renderer/entity/ArmorStandRenderer.java index 452f80f5..84255ffd 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/ArmorStandRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/entity/ArmorStandRenderer.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ArmorStandRenderer extends RendererLivingEntity { /** @@ -43,6 +43,7 @@ public class ArmorStandRenderer extends RendererLivingEntity { public ArmorStandRenderer(RenderManager parRenderManager) { super(parRenderManager, new ModelArmorStand(), 0.0F); LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) { + @Override protected void initArmor() { this.field_177189_c = new ModelArmorStandArmor(0.5F); this.field_177186_d = new ModelArmorStandArmor(1.0F); @@ -53,6 +54,7 @@ public class ArmorStandRenderer extends RendererLivingEntity { this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead)); } + @Override protected boolean canRenderName(EntityArmorStand entityarmorstand) { return entityarmorstand.getAlwaysRenderNameTag(); } @@ -61,15 +63,18 @@ public class ArmorStandRenderer extends RendererLivingEntity { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityArmorStand var1) { return TEXTURE_ARMOR_STAND; } + @Override public ModelArmorStand getMainModel() { return (ModelArmorStand) super.getMainModel(); } + @Override protected void rotateCorpse(EntityArmorStand var1, float var2, float f, float var4) { GlStateManager.rotate(180.0F - f, 0.0F, 1.0F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/Render.java b/src/game/java/net/minecraft/client/renderer/entity/Render.java index b5346102..0dbca82d 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/Render.java +++ b/src/game/java/net/minecraft/client/renderer/entity/Render.java @@ -22,6 +22,7 @@ import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; @@ -32,13 +33,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +51,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Render { private static final ResourceLocation shadowTextures = new ResourceLocation("textures/misc/shadow.png"); @@ -225,7 +226,10 @@ public abstract class Render { private void renderEntityOnFire(Entity entity, double x, double y, double z, float partialTicks) { if (entity.width == 0 || entity.height == 0) { return; + } else if (entity instanceof EntityItem && entity.isImmuneToFire()) { + return; } + GlStateManager.disableLighting(); TextureMap texturemap = Minecraft.getMinecraft().getTextureMapBlocks(); EaglerTextureAtlasSprite textureatlassprite = texturemap.getAtlasSprite("minecraft:blocks/fire_layer_0"); @@ -411,4 +415,4 @@ public abstract class Render { return livingEntity.isInRangeToRender3d(camX, camY, camZ) && (livingEntity.ignoreFrustumCheck || camera.isBoundingBoxInFrustum(axisalignedbb)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderArrow.java b/src/game/java/net/minecraft/client/renderer/entity/RenderArrow.java index 16f32596..3e8953dd 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderArrow.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderArrow.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderArrow extends Render { private static final ResourceLocation arrowTextures = new ResourceLocation("textures/entity/arrow.png"); @@ -47,6 +47,7 @@ public class RenderArrow extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityArrow entityarrow, double d0, double d1, double d2, float f, float f1) { this.bindEntityTexture(entityarrow); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -115,7 +116,8 @@ public class RenderArrow extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityArrow var1) { return arrowTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderBat.java b/src/game/java/net/minecraft/client/renderer/entity/RenderBat.java index 1fe63607..b9c4794e 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderBat.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderBat.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderBat extends RenderLiving { private static final ResourceLocation batTextures = new ResourceLocation("textures/entity/bat.png"); @@ -40,6 +40,7 @@ public class RenderBat extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityBat var1) { return batTextures; } @@ -48,10 +49,12 @@ public class RenderBat extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityBat var1, float var2) { GlStateManager.scale(0.35F, 0.35F, 0.35F); } + @Override protected void rotateCorpse(EntityBat entitybat, float f, float f1, float f2) { if (!entitybat.getIsBatHanging()) { GlStateManager.translate(0.0F, MathHelper.cos(f * 0.3F) * 0.1F, 0.0F); @@ -61,4 +64,4 @@ public class RenderBat extends RenderLiving { super.rotateCorpse(entitybat, f, f1, f2); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderBiped.java b/src/game/java/net/minecraft/client/renderer/entity/RenderBiped.java index d20603ad..0a6ef90c 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderBiped.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderBiped.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderBiped extends RenderLiving { private static final ResourceLocation DEFAULT_RES_LOC = new ResourceLocation("textures/entity/steve.png"); @@ -51,11 +51,13 @@ public class RenderBiped extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(T var1) { return DEFAULT_RES_LOC; } + @Override public void transformHeldFull3DItemLayer() { GlStateManager.translate(0.0F, 0.1875F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderBlaze.java b/src/game/java/net/minecraft/client/renderer/entity/RenderBlaze.java index 753050b0..9c119b63 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderBlaze.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderBlaze.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderBlaze extends RenderLiving { private static final ResourceLocation blazeTextures = new ResourceLocation("textures/entity/blaze.png"); @@ -35,6 +35,7 @@ public class RenderBlaze extends RenderLiving { super(renderManagerIn, new ModelBlaze(), 0.5F); } + @Override public void doRender(EntityBlaze entityliving, double d0, double d1, double d2, float f, float f1) { if (DeferredStateManager.isInDeferredPass()) { DeferredStateManager.setEmissionConstant(1.0f); @@ -52,7 +53,8 @@ public class RenderBlaze extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityBlaze var1) { return blazeTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderBoat.java b/src/game/java/net/minecraft/client/renderer/entity/RenderBoat.java index e3e5ef72..41d6c4e2 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderBoat.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderBoat.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderBoat extends Render { private static final ResourceLocation boatTextures = new ResourceLocation("textures/entity/boat.png"); @@ -50,6 +50,7 @@ public class RenderBoat extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityBoat entityboat, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.translate((float) d0, (float) d1 + 0.25F, (float) d2); @@ -79,7 +80,8 @@ public class RenderBoat extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityBoat var1) { return boatTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderCaveSpider.java b/src/game/java/net/minecraft/client/renderer/entity/RenderCaveSpider.java index f288a392..862edb25 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderCaveSpider.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderCaveSpider.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderCaveSpider extends RenderSpider { private static final ResourceLocation caveSpiderTextures = new ResourceLocation( @@ -40,6 +40,7 @@ public class RenderCaveSpider extends RenderSpider { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityCaveSpider var1) { return caveSpiderTextures; } @@ -48,7 +49,8 @@ public class RenderCaveSpider extends RenderSpider { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityCaveSpider var1, float var2) { GlStateManager.scale(0.7F, 0.7F, 0.7F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderChicken.java b/src/game/java/net/minecraft/client/renderer/entity/RenderChicken.java index db7f4195..cc3bbb64 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderChicken.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderChicken.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderChicken extends RenderLiving { private static final ResourceLocation chickenTextures = new ResourceLocation("textures/entity/chicken.png"); @@ -39,6 +39,7 @@ public class RenderChicken extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityChicken var1) { return chickenTextures; } @@ -46,9 +47,10 @@ public class RenderChicken extends RenderLiving { /** * + Defines what float the third param in setRotationAngles of ModelBase is */ + @Override protected float handleRotationFloat(EntityChicken livingBase, float partialTicks) { float f = livingBase.field_70888_h + (livingBase.wingRotation - livingBase.field_70888_h) * partialTicks; float f1 = livingBase.field_70884_g + (livingBase.destPos - livingBase.field_70884_g) * partialTicks; return (MathHelper.sin(f) + 1.0F) * f1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderCow.java b/src/game/java/net/minecraft/client/renderer/entity/RenderCow.java index b02e0a19..d1bbdc15 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderCow.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderCow.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderCow extends RenderLiving { private static final ResourceLocation cowTextures = new ResourceLocation("textures/entity/cow/cow.png"); @@ -38,7 +38,8 @@ public class RenderCow extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityCow var1) { return cowTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderCreeper.java b/src/game/java/net/minecraft/client/renderer/entity/RenderCreeper.java index b714072e..de3265b1 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderCreeper.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderCreeper.java @@ -11,13 +11,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderCreeper extends RenderLiving { private static final ResourceLocation creeperTextures = new ResourceLocation("textures/entity/creeper/creeper.png"); @@ -39,6 +39,7 @@ public class RenderCreeper extends RenderLiving { this.addLayer(new LayerCreeperCharge(this)); } + @Override public void doRender(EntityCreeper entitycreeper, double d0, double d1, double d2, float f, float f1) { float ff = entitycreeper.getCreeperFlashIntensity(f); if ((int) (ff * 10.0F) % 2 != 0) { @@ -55,6 +56,7 @@ public class RenderCreeper extends RenderLiving { * + Returns an ARGB int color back. Args: entityLiving, lightBrightness, * partialTickTime */ + @Override protected int getColorMultiplier(EntityCreeper entitycreeper, float var2, float f) { float f1 = entitycreeper.getCreeperFlashIntensity(f); if ((int) (f1 * 10.0F) % 2 == 0) { @@ -70,6 +72,7 @@ public class RenderCreeper extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityCreeper var1) { return creeperTextures; } @@ -78,6 +81,7 @@ public class RenderCreeper extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityCreeper entitycreeper, float f) { float f1 = entitycreeper.getCreeperFlashIntensity(f); float f2 = 1.0F + MathHelper.sin(f1 * 100.0F) * f1 * 0.01F; @@ -88,4 +92,4 @@ public class RenderCreeper extends RenderLiving { float f4 = (1.0F + f1 * 0.1F) / f2; GlStateManager.scale(f3, f4, f3); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderDragon.java b/src/game/java/net/minecraft/client/renderer/entity/RenderDragon.java index 32f42fd6..8872969e 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderDragon.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderDragon.java @@ -25,13 +25,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderDragon extends RenderLiving { private static final ResourceLocation enderDragonCrystalBeamTextures = new ResourceLocation( @@ -69,6 +69,7 @@ public class RenderDragon extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityDragon entitydragon, double d0, double d1, double d2, float f, float f1) { BossStatus.setBossStatus(entitydragon, false); super.doRender(entitydragon, d0, d1, d2, f, f1); @@ -133,6 +134,7 @@ public class RenderDragon extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityDragon var1) { return enderDragonTextures; } @@ -140,6 +142,7 @@ public class RenderDragon extends RenderLiving { /** * + Renders the model in RenderLiving */ + @Override protected void renderModel(EntityDragon entitydragon, float f, float f1, float f2, float f3, float f4, float f5) { if (DeferredStateManager.isDeferredRenderer()) { if (entitydragon.deathTicks > 0) { @@ -192,6 +195,7 @@ public class RenderDragon extends RenderLiving { } + @Override protected void rotateCorpse(EntityDragon entitydragon, float var2, float var3, float f) { float f1 = (float) entitydragon.getMovementOffsets(7, f)[0]; float f2 = (float) (entitydragon.getMovementOffsets(5, f)[1] - entitydragon.getMovementOffsets(10, f)[1]); @@ -209,4 +213,4 @@ public class RenderDragon extends RenderLiving { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderEnderman.java b/src/game/java/net/minecraft/client/renderer/entity/RenderEnderman.java index a78aaf87..357f7259 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderEnderman.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderEnderman.java @@ -11,13 +11,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderEnderman extends RenderLiving { private static final ResourceLocation endermanTextures = new ResourceLocation( @@ -52,6 +52,7 @@ public class RenderEnderman extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityEnderman entityenderman, double d0, double d1, double d2, float f, float f1) { this.endermanModel.isCarrying = entityenderman.getHeldBlockState().getBlock().getMaterial() != Material.air; this.endermanModel.isAttacking = entityenderman.isScreaming(); @@ -68,7 +69,8 @@ public class RenderEnderman extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityEnderman var1) { return endermanTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderEndermite.java b/src/game/java/net/minecraft/client/renderer/entity/RenderEndermite.java index 4af52edc..2d968390 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderEndermite.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderEndermite.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderEndermite extends RenderLiving { private static final ResourceLocation ENDERMITE_TEXTURES = new ResourceLocation("textures/entity/endermite.png"); @@ -34,6 +34,7 @@ public class RenderEndermite extends RenderLiving { super(renderManagerIn, new ModelEnderMite(), 0.3F); } + @Override protected float getDeathMaxRotation(EntityEndermite entityLivingBaseIn) { return 180.0F; } @@ -42,7 +43,8 @@ public class RenderEndermite extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityEndermite var1) { return ENDERMITE_TEXTURES; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderEntity.java b/src/game/java/net/minecraft/client/renderer/entity/RenderEntity.java index 6a87534b..b7566a9a 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderEntity.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderEntity.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderEntity extends Render { public RenderEntity(RenderManager renderManagerIn) { @@ -40,6 +40,7 @@ public class RenderEntity extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); renderOffsetAABB(entity.getEntityBoundingBox(), d0 - entity.lastTickPosX, d1 - entity.lastTickPosY, @@ -52,7 +53,8 @@ public class RenderEntity extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(Entity var1) { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderEntityItem.java b/src/game/java/net/minecraft/client/renderer/entity/RenderEntityItem.java index db300c63..5c450a0d 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderEntityItem.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderEntityItem.java @@ -19,13 +19,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderEntityItem extends Render { private final RenderItem itemRenderer; @@ -58,6 +58,7 @@ public class RenderEntityItem extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityItem entityitem, double d0, double d1, double d2, float f, float f1) { boolean emissive = entityitem.eaglerEmissiveFlag; entityitem.eaglerEmissiveFlag = false; @@ -170,7 +171,8 @@ public class RenderEntityItem extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityItem var1) { return TextureMap.locationBlocksTexture; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderFallingBlock.java b/src/game/java/net/minecraft/client/renderer/entity/RenderFallingBlock.java index 4c211c8c..dea33fb0 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderFallingBlock.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderFallingBlock.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderFallingBlock extends Render { public RenderFallingBlock(RenderManager renderManagerIn) { @@ -55,6 +55,7 @@ public class RenderFallingBlock extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityFallingBlock entityfallingblock, double d0, double d1, double d2, float f, float f1) { if (entityfallingblock.getBlock() != null) { this.bindTexture(TextureMap.locationBlocksTexture); @@ -98,7 +99,8 @@ public class RenderFallingBlock extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityFallingBlock var1) { return TextureMap.locationBlocksTexture; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderFireball.java b/src/game/java/net/minecraft/client/renderer/entity/RenderFireball.java index abac1377..208b8b50 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderFireball.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderFireball.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderFireball extends Render { private float scale; @@ -50,6 +50,7 @@ public class RenderFireball extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityFireball entityfireball, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); this.bindEntityTexture(entityfireball); @@ -84,7 +85,8 @@ public class RenderFireball extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityFireball var1) { return TextureMap.locationBlocksTexture; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderFish.java b/src/game/java/net/minecraft/client/renderer/entity/RenderFish.java index a0d74272..52e1a3d6 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderFish.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderFish.java @@ -13,13 +13,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderFish extends Render { private static final ResourceLocation FISH_PARTICLES = new ResourceLocation("textures/particle/particles.png"); @@ -48,6 +48,7 @@ public class RenderFish extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityFishHook entityfishhook, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.translate((float) d0, (float) d1, (float) d2); @@ -143,7 +144,8 @@ public class RenderFish extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityFishHook var1) { return FISH_PARTICLES; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderGhast.java b/src/game/java/net/minecraft/client/renderer/entity/RenderGhast.java index 2407eff9..392ea544 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderGhast.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderGhast.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderGhast extends RenderLiving { private static final ResourceLocation ghastTextures = new ResourceLocation("textures/entity/ghast/ghast.png"); @@ -41,6 +41,7 @@ public class RenderGhast extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityGhast entityghast) { return entityghast.isAttacking() ? ghastShootingTextures : ghastTextures; } @@ -49,6 +50,7 @@ public class RenderGhast extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityGhast var1, float var2) { float f = 1.0F; float f1 = (8.0F + f) / 2.0F; @@ -56,4 +58,4 @@ public class RenderGhast extends RenderLiving { GlStateManager.scale(f2, f1, f2); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderGiantZombie.java b/src/game/java/net/minecraft/client/renderer/entity/RenderGiantZombie.java index 945d5f53..ca2a02e9 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderGiantZombie.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderGiantZombie.java @@ -11,13 +11,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderGiantZombie extends RenderLiving { private static final ResourceLocation zombieTextures = new ResourceLocation("textures/entity/zombie/zombie.png"); @@ -40,6 +40,7 @@ public class RenderGiantZombie extends RenderLiving { this.scale = scaleIn; this.addLayer(new LayerHeldItem(this)); this.addLayer(new LayerBipedArmor(this) { + @Override protected void initArmor() { this.field_177189_c = new ModelZombie(0.5F, false); this.field_177186_d = new ModelZombie(1.0F, false); @@ -51,6 +52,7 @@ public class RenderGiantZombie extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityGiantZombie var1) { return zombieTextures; } @@ -59,11 +61,13 @@ public class RenderGiantZombie extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityGiantZombie var1, float var2) { GlStateManager.scale(this.scale, this.scale, this.scale); } + @Override public void transformHeldFull3DItemLayer() { GlStateManager.translate(0.0F, 0.1875F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderGuardian.java b/src/game/java/net/minecraft/client/renderer/entity/RenderGuardian.java index 5f981ba3..e2729548 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderGuardian.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderGuardian.java @@ -22,13 +22,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderGuardian extends RenderLiving { private static final ResourceLocation GUARDIAN_TEXTURE = new ResourceLocation("textures/entity/guardian.png"); @@ -63,6 +63,7 @@ public class RenderGuardian extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityGuardian entityguardian, double d0, double d1, double d2, float f, float f1) { if (this.field_177115_a != ((ModelGuardian) this.mainModel).func_178706_a()) { this.mainModel = new ModelGuardian(); @@ -165,6 +166,7 @@ public class RenderGuardian extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityGuardian entityguardian) { return entityguardian.isElder() ? GUARDIAN_ELDER_TEXTURE : GUARDIAN_TEXTURE; } @@ -173,6 +175,7 @@ public class RenderGuardian extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityGuardian entityguardian, float var2) { if (entityguardian.isElder()) { GlStateManager.scale(2.35F, 2.35F, 2.35F); @@ -180,6 +183,7 @@ public class RenderGuardian extends RenderLiving { } + @Override public boolean shouldRender(EntityGuardian entityguardian, ICamera icamera, double d0, double d1, double d2) { if (super.shouldRender(entityguardian, icamera, d0, d1, d2)) { return true; @@ -199,4 +203,4 @@ public class RenderGuardian extends RenderLiving { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderHorse.java b/src/game/java/net/minecraft/client/renderer/entity/RenderHorse.java index 0b34e788..d8ff138a 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderHorse.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderHorse.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderHorse extends RenderLiving { private static final Map field_110852_a = Maps.newHashMap(); @@ -70,6 +70,7 @@ public class RenderHorse extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityHorse entityhorse) { if (!entityhorse.func_110239_cn()) { switch (entityhorse.getHorseType()) { @@ -94,6 +95,7 @@ public class RenderHorse extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityHorse entityhorse, float f) { float f1 = 1.0F; int i = entityhorse.getHorseType(); @@ -106,4 +108,4 @@ public class RenderHorse extends RenderLiving { GlStateManager.scale(f1, f1, f1); super.preRenderCallback(entityhorse, f); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderIronGolem.java b/src/game/java/net/minecraft/client/renderer/entity/RenderIronGolem.java index 23dceb13..40fa2698 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderIronGolem.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderIronGolem.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderIronGolem extends RenderLiving { private static final ResourceLocation ironGolemTextures = new ResourceLocation("textures/entity/iron_golem.png"); @@ -41,10 +41,12 @@ public class RenderIronGolem extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityIronGolem var1) { return ironGolemTextures; } + @Override protected void rotateCorpse(EntityIronGolem entityirongolem, float f, float f1, float f2) { super.rotateCorpse(entityirongolem, f, f1, f2); if ((double) entityirongolem.limbSwingAmount >= 0.01D) { @@ -54,4 +56,4 @@ public class RenderIronGolem extends RenderLiving { GlStateManager.rotate(6.5F * f5, 0.0F, 0.0F, 1.0F); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderItem.java b/src/game/java/net/minecraft/client/renderer/entity/RenderItem.java index 45abc2bf..4eca6061 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderItem.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderItem.java @@ -82,13 +82,13 @@ import net.starlikeclient.minecraft.init.ItemsStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -100,7 +100,7 @@ import net.starlikeclient.minecraft.init.ItemsStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderItem implements IResourceManagerReloadListener { private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation( @@ -163,6 +163,7 @@ public class RenderItem implements IResourceManagerReloadListener { return this.itemModelMesher; } + @Override public void onResourceManagerReload(IResourceManager var1) { this.itemModelMesher.rebuildCache(); } @@ -668,6 +669,7 @@ public class RenderItem implements IResourceManagerReloadListener { this.registerItem(Items.nether_wart, "nether_wart"); this.itemModelMesher.register(Items.potionitem, new ItemMeshDefinition() { + @Override public ModelResourceLocation getModelLocation(ItemStack itemstack) { return ItemPotion.isSplash(itemstack.getMetadata()) ? new ModelResourceLocation("bottle_splash", "inventory") @@ -684,6 +686,7 @@ public class RenderItem implements IResourceManagerReloadListener { this.registerItem(Items.ender_eye, "ender_eye"); this.registerItem(Items.speckled_melon, "speckled_melon"); this.itemModelMesher.register(Items.spawn_egg, new ItemMeshDefinition() { + @Override public ModelResourceLocation getModelLocation(ItemStack var1) { return new ModelResourceLocation("spawn_egg", "inventory"); } @@ -721,6 +724,7 @@ public class RenderItem implements IResourceManagerReloadListener { this.registerItem(Items.lead, "lead"); this.registerItem(Items.name_tag, "name_tag"); this.itemModelMesher.register(Items.banner, new ItemMeshDefinition() { + @Override public ModelResourceLocation getModelLocation(ItemStack var1) { return new ModelResourceLocation("banner", "inventory"); } @@ -741,11 +745,13 @@ public class RenderItem implements IResourceManagerReloadListener { this.registerItem(Items.prismarine_shard, "prismarine_shard"); this.registerItem(Items.prismarine_crystals, "prismarine_crystals"); this.itemModelMesher.register(Items.enchanted_book, new ItemMeshDefinition() { + @Override public ModelResourceLocation getModelLocation(ItemStack var1) { return new ModelResourceLocation("enchanted_book", "inventory"); } }); this.itemModelMesher.register(Items.filled_map, new ItemMeshDefinition() { + @Override public ModelResourceLocation getModelLocation(ItemStack var1) { return new ModelResourceLocation("filled_map", "inventory"); } @@ -892,21 +898,25 @@ public class RenderItem implements IResourceManagerReloadListener { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering item"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Item being rendered"); crashreportcategory.addCrashSectionCallable("Item Type", new Callable() { + @Override public String call() throws Exception { return String.valueOf(stack.getItem()); } }); crashreportcategory.addCrashSectionCallable("Item Aux", new Callable() { + @Override public String call() throws Exception { return String.valueOf(stack.getMetadata()); } }); crashreportcategory.addCrashSectionCallable("Item NBT", new Callable() { + @Override public String call() throws Exception { return String.valueOf(stack.getTagCompound()); } }); crashreportcategory.addCrashSectionCallable("Item Foil", new Callable() { + @Override public String call() throws Exception { return String.valueOf(stack.hasEffect()); } diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderLeashKnot.java b/src/game/java/net/minecraft/client/renderer/entity/RenderLeashKnot.java index a7115cfc..b2d43a15 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderLeashKnot.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderLeashKnot.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderLeashKnot extends Render { private static final ResourceLocation leashKnotTextures = new ResourceLocation("textures/entity/lead_knot.png"); @@ -44,6 +44,7 @@ public class RenderLeashKnot extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityLeashKnot entityleashknot, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.disableCull(); @@ -62,7 +63,8 @@ public class RenderLeashKnot extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityLeashKnot var1) { return leashKnotTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderLightningBolt.java b/src/game/java/net/minecraft/client/renderer/entity/RenderLightningBolt.java index ff5eba58..abdddd55 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderLightningBolt.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderLightningBolt.java @@ -18,13 +18,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderLightningBolt extends Render { public RenderLightningBolt(RenderManager renderManagerIn) { @@ -51,6 +51,7 @@ public class RenderLightningBolt extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityLightningBolt entitylightningbolt, double d0, double d1, double d2, float var8, float var9) { if (DeferredStateManager.isInDeferredPass()) { @@ -175,7 +176,8 @@ public class RenderLightningBolt extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityLightningBolt var1) { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderLiving.java b/src/game/java/net/minecraft/client/renderer/entity/RenderLiving.java index b51c1d3c..d9225785 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderLiving.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderLiving.java @@ -14,13 +14,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class RenderLiving extends RendererLivingEntity { public RenderLiving(RenderManager rendermanagerIn, ModelBase modelbaseIn, float shadowsizeIn) { super(rendermanagerIn, modelbaseIn, shadowsizeIn); } + @Override protected boolean canRenderName(T entityliving) { return super.canRenderName(entityliving) && (entityliving.getAlwaysRenderNameTagForRender() || entityliving.hasCustomName() && entityliving == this.renderManager.pointedEntity); @@ -52,6 +53,7 @@ public abstract class RenderLiving extends RendererLivin * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(T entityliving, double d0, double d1, double d2, float f, float f1) { super.doRender(entityliving, d0, d1, d2, f, f1); this.renderLeash(entityliving, d0, d1, d2, f, f1); @@ -177,6 +179,7 @@ public abstract class RenderLiving extends RendererLivin } + @Override public boolean shouldRender(T entityliving, ICamera icamera, double d0, double d1, double d2) { if (super.shouldRender(entityliving, icamera, d0, d1, d2)) { return true; @@ -187,4 +190,4 @@ public abstract class RenderLiving extends RendererLivin return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderMagmaCube.java b/src/game/java/net/minecraft/client/renderer/entity/RenderMagmaCube.java index 0088f2ac..1d7a5182 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderMagmaCube.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderMagmaCube.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderMagmaCube extends RenderLiving { private static final ResourceLocation magmaCubeTextures = new ResourceLocation( @@ -40,6 +40,7 @@ public class RenderMagmaCube extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityMagmaCube var1) { return magmaCubeTextures; } @@ -48,6 +49,7 @@ public class RenderMagmaCube extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityMagmaCube entitymagmacube, float f) { int i = entitymagmacube.getSlimeSize(); float f1 = (entitymagmacube.prevSquishFactor @@ -56,4 +58,4 @@ public class RenderMagmaCube extends RenderLiving { float f3 = (float) i; GlStateManager.scale(f2 * f3, 1.0F / f2 * f3, f2 * f3); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderManager.java b/src/game/java/net/minecraft/client/renderer/entity/RenderManager.java index f1a1534f..73ce510b 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderManager.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderManager.java @@ -107,18 +107,19 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.ReportedException; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.starlikeclient.StarlikeClient; import net.starlikeclient.minecraft.init.EntitiesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -130,7 +131,7 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderManager { public static void setupLightmapCoords(Entity entity, float partialTicks) { @@ -285,6 +286,14 @@ public class RenderManager { public boolean doRenderEntity(Entity entity, double x, double y, double z, float entityYaw, float partialTicks, boolean parFlag) { + if (entity.shouldCull) { + Render render = getEntityRenderObject(entity); + if (render.canRenderName(entity) && StarlikeClient.Config.Culling.renderNameTagsOnCulledEntities) { + render.renderLivingLabel(entity, entity.getDisplayName().getFormattedText(), x, y, z, 64); + } + return false; + } + Render render = null; try { @@ -522,4 +531,4 @@ public class RenderManager { Render render = this.getEntityRenderObject(entityIn); return render != null && render.shouldRender(entityIn, camera, camX, camY, camZ); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderMinecart.java b/src/game/java/net/minecraft/client/renderer/entity/RenderMinecart.java index 7fd3cc46..d4ea5de8 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderMinecart.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderMinecart.java @@ -14,13 +14,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderMinecart extends Render { private static final ResourceLocation minecartTextures = new ResourceLocation("textures/entity/minecart.png"); @@ -54,6 +54,7 @@ public class RenderMinecart extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(T entityminecart, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); this.bindEntityTexture(entityminecart); @@ -137,7 +138,8 @@ public class RenderMinecart extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(T var1) { return minecartTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java b/src/game/java/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java index 94547407..8338439b 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java @@ -8,13 +8,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderMinecartMobSpawner extends RenderMinecart { public RenderMinecartMobSpawner(RenderManager renderManagerIn) { super(renderManagerIn); } + @Override protected void func_180560_a(EntityMinecartMobSpawner entityminecartmobspawner, float f, IBlockState iblockstate) { super.func_180560_a(entityminecartmobspawner, f, iblockstate); if (iblockstate.getBlock() == Blocks.mob_spawner) { @@ -41,4 +42,4 @@ public class RenderMinecartMobSpawner extends RenderMinecart { private static final ResourceLocation mooshroomTextures = new ResourceLocation("textures/entity/cow/mooshroom.png"); @@ -40,7 +40,8 @@ public class RenderMooshroom extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityMooshroom var1) { return mooshroomTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderOcelot.java b/src/game/java/net/minecraft/client/renderer/entity/RenderOcelot.java index db687add..ed5ebd32 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderOcelot.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderOcelot.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderOcelot extends RenderLiving { private static final ResourceLocation blackOcelotTextures = new ResourceLocation("textures/entity/cat/black.png"); @@ -43,6 +43,7 @@ public class RenderOcelot extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityOcelot entityocelot) { switch (entityocelot.getTameSkin()) { case 0: @@ -61,6 +62,7 @@ public class RenderOcelot extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityOcelot entityocelot, float f) { super.preRenderCallback(entityocelot, f); if (entityocelot.isTamed()) { @@ -68,4 +70,4 @@ public class RenderOcelot extends RenderLiving { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderPainting.java b/src/game/java/net/minecraft/client/renderer/entity/RenderPainting.java index aa873b03..45269724 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderPainting.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderPainting.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderPainting extends Render { private static final ResourceLocation KRISTOFFER_PAINTING_TEXTURE = new ResourceLocation( @@ -50,6 +50,7 @@ public class RenderPainting extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityPainting entitypainting, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.translate(d0, d1, d2); @@ -70,6 +71,7 @@ public class RenderPainting extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityPainting var1) { return KRISTOFFER_PAINTING_TEXTURE; } @@ -186,4 +188,4 @@ public class RenderPainting extends Render { OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) i1, (float) j1); GlStateManager.color(1.0F, 1.0F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderPig.java b/src/game/java/net/minecraft/client/renderer/entity/RenderPig.java index 8a20067b..158ac5d3 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderPig.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderPig.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderPig extends RenderLiving { private static final ResourceLocation pigTextures = new ResourceLocation("textures/entity/pig/pig.png"); @@ -40,7 +40,8 @@ public class RenderPig extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityPig var1) { return pigTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderPigZombie.java b/src/game/java/net/minecraft/client/renderer/entity/RenderPigZombie.java index 96b2cf7e..ad8dd957 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderPigZombie.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderPigZombie.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderPigZombie extends RenderBiped { private static final ResourceLocation ZOMBIE_PIGMAN_TEXTURE = new ResourceLocation( @@ -37,6 +37,7 @@ public class RenderPigZombie extends RenderBiped { super(renderManagerIn, new ModelZombie(), 0.5F, 1.0F); this.addLayer(new LayerHeldItem(this)); this.addLayer(new LayerBipedArmor(this) { + @Override protected void initArmor() { this.field_177189_c = new ModelZombie(0.5F, false); this.field_177186_d = new ModelZombie(1.0F, false); @@ -48,7 +49,8 @@ public class RenderPigZombie extends RenderBiped { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityPigZombie var1) { return ZOMBIE_PIGMAN_TEXTURE; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderPlayer.java b/src/game/java/net/minecraft/client/renderer/entity/RenderPlayer.java index 8ffbc064..6793aa0b 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderPlayer.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderPlayer.java @@ -24,13 +24,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderPlayer extends RendererLivingEntity { private boolean smallArms; @@ -76,6 +76,7 @@ public class RenderPlayer extends RendererLivingEntity { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2, float f, float f1) { if (!abstractclientplayer.isUser() || this.renderManager.livingPlayer == abstractclientplayer) { @@ -93,10 +94,12 @@ public class RenderPlayer extends RendererLivingEntity { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(AbstractClientPlayer abstractclientplayer) { return abstractclientplayer.getLocationSkin(); } + @Override public ModelBiped getMainModel() { return (ModelBiped) super.getMainModel(); } @@ -105,6 +108,7 @@ public class RenderPlayer extends RendererLivingEntity { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(AbstractClientPlayer var1, float var2) { float f = 0.9375F; GlStateManager.scale(f, f, f); @@ -126,6 +130,7 @@ public class RenderPlayer extends RendererLivingEntity { /** * + Sets a simple glTranslate on a LivingEntity. */ + @Override public void renderLivingAt(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2) { if (abstractclientplayer.isEntityAlive() && abstractclientplayer.isPlayerSleeping()) { super.renderLivingAt(abstractclientplayer, d0 + (double) abstractclientplayer.renderOffsetX, @@ -136,6 +141,7 @@ public class RenderPlayer extends RendererLivingEntity { } + @Override protected void renderOffsetLivingLabel(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2, String s, float f, double d3) { if (d3 < 100.0D) { @@ -165,6 +171,7 @@ public class RenderPlayer extends RendererLivingEntity { } } + @Override protected void rotateCorpse(AbstractClientPlayer abstractclientplayer, float f, float f1, float f2) { if (abstractclientplayer.isEntityAlive() && abstractclientplayer.isPlayerSleeping()) { GlStateManager.rotate(abstractclientplayer.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); @@ -214,7 +221,8 @@ public class RenderPlayer extends RendererLivingEntity { } + @Override public void transformHeldFull3DItemLayer() { GlStateManager.translate(0.0F, 0.1875F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderPotion.java b/src/game/java/net/minecraft/client/renderer/entity/RenderPotion.java index a5670e8a..3270ad2e 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderPotion.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderPotion.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,14 +25,15 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderPotion extends RenderSnowball { public RenderPotion(RenderManager renderManagerIn, RenderItem itemRendererIn) { super(renderManagerIn, Items.potionitem, itemRendererIn); } + @Override public ItemStack func_177082_d(EntityPotion entitypotion) { return new ItemStack(this.field_177084_a, 1, entitypotion.getPotionDamage()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderRabbit.java b/src/game/java/net/minecraft/client/renderer/entity/RenderRabbit.java index ad818e77..572d8f31 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderRabbit.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderRabbit.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderRabbit extends RenderLiving { private static final ResourceLocation BROWN = new ResourceLocation("textures/entity/rabbit/brown.png"); @@ -47,6 +47,7 @@ public class RenderRabbit extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityRabbit entityrabbit) { String s = EnumChatFormatting.getTextWithoutFormattingCodes(entityrabbit.getName()); if (s != null && s.equals("Toast")) { @@ -71,4 +72,4 @@ public class RenderRabbit extends RenderLiving { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSheep.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSheep.java index 416fb10c..34cfc937 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSheep.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSheep.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSheep extends RenderLiving { private static final ResourceLocation shearedSheepTextures = new ResourceLocation( @@ -41,7 +41,8 @@ public class RenderSheep extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySheep var1) { return shearedSheepTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSilverfish.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSilverfish.java index 42e7125a..2e17a480 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSilverfish.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSilverfish.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSilverfish extends RenderLiving { private static final ResourceLocation silverfishTextures = new ResourceLocation("textures/entity/silverfish.png"); @@ -34,6 +34,7 @@ public class RenderSilverfish extends RenderLiving { super(renderManagerIn, new ModelSilverfish(), 0.3F); } + @Override protected float getDeathMaxRotation(EntitySilverfish var1) { return 180.0F; } @@ -42,7 +43,8 @@ public class RenderSilverfish extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySilverfish var1) { return silverfishTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSkeleton.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSkeleton.java index 53b84aa7..d972a2d4 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSkeleton.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSkeleton.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSkeleton extends RenderBiped { private static final ResourceLocation skeletonTextures = new ResourceLocation( @@ -40,6 +40,7 @@ public class RenderSkeleton extends RenderBiped { super(renderManagerIn, new ModelSkeleton(), 0.5F); this.addLayer(new LayerHeldItem(this)); this.addLayer(new LayerBipedArmor(this) { + @Override protected void initArmor() { this.field_177189_c = new ModelSkeleton(0.5F, true); this.field_177186_d = new ModelSkeleton(1.0F, true); @@ -51,6 +52,7 @@ public class RenderSkeleton extends RenderBiped { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySkeleton entityskeleton) { return entityskeleton.getSkeletonType() == 1 ? witherSkeletonTextures : skeletonTextures; } @@ -59,6 +61,7 @@ public class RenderSkeleton extends RenderBiped { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntitySkeleton entityskeleton, float var2) { if (entityskeleton.getSkeletonType() == 1) { GlStateManager.scale(1.2F, 1.2F, 1.2F); @@ -66,7 +69,8 @@ public class RenderSkeleton extends RenderBiped { } + @Override public void transformHeldFull3DItemLayer() { GlStateManager.translate(0.09375F, 0.1875F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSlime.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSlime.java index 247d4c9d..bfe4ae0a 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSlime.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSlime.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSlime extends RenderLiving { public static final ResourceLocation slimeTextures = new ResourceLocation("textures/entity/slime/slime.png"); @@ -45,6 +45,7 @@ public class RenderSlime extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntitySlime entityslime, double d0, double d1, double d2, float f, float f1) { this.shadowSize = 0.25F * (float) entityslime.getSlimeSize(); super.doRender(entityslime, d0, d1, d2, f, f1); @@ -54,6 +55,7 @@ public class RenderSlime extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySlime var1) { return slimeTextures; } @@ -62,6 +64,7 @@ public class RenderSlime extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntitySlime entityslime, float f) { float f1 = (float) entityslime.getSlimeSize(); float f2 = (entityslime.prevSquishFactor + (entityslime.squishFactor - entityslime.prevSquishFactor) * f) @@ -69,4 +72,4 @@ public class RenderSlime extends RenderLiving { float f3 = 1.0F / (f2 + 1.0F); GlStateManager.scale(f3 * f1, 1.0F / f3 * f1, f3 * f1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSnowMan.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSnowMan.java index 11e1e394..d4f89881 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSnowMan.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSnowMan.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSnowMan extends RenderLiving { private static final ResourceLocation snowManTextures = new ResourceLocation("textures/entity/snowman.png"); @@ -40,11 +40,13 @@ public class RenderSnowMan extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySnowman var1) { return snowManTextures; } + @Override public ModelSnowMan getMainModel() { return (ModelSnowMan) super.getMainModel(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSnowball.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSnowball.java index 40bb185f..96630748 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSnowball.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSnowball.java @@ -13,13 +13,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSnowball extends Render { protected final Item field_177084_a; @@ -51,6 +51,7 @@ public class RenderSnowball extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(T entity, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.translate((float) d0, (float) d1, (float) d2); @@ -82,7 +83,8 @@ public class RenderSnowball extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(Entity var1) { return TextureMap.locationBlocksTexture; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSpider.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSpider.java index a8177f25..f14ff58a 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSpider.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSpider.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSpider extends RenderLiving { private static final ResourceLocation spiderTextures = new ResourceLocation("textures/entity/spider/spider.png"); @@ -36,6 +36,7 @@ public class RenderSpider extends RenderLiving { this.addLayer(new LayerSpiderEyes(this)); } + @Override protected float getDeathMaxRotation(T var1) { return 180.0F; } @@ -44,7 +45,8 @@ public class RenderSpider extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(T var1) { return spiderTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderSquid.java b/src/game/java/net/minecraft/client/renderer/entity/RenderSquid.java index e0228642..1a290194 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderSquid.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderSquid.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderSquid extends RenderLiving { private static final ResourceLocation squidTextures = new ResourceLocation("textures/entity/squid.png"); @@ -39,6 +39,7 @@ public class RenderSquid extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntitySquid var1) { return squidTextures; } @@ -46,10 +47,12 @@ public class RenderSquid extends RenderLiving { /** * + Defines what float the third param in setRotationAngles of ModelBase is */ + @Override protected float handleRotationFloat(EntitySquid entitysquid, float f) { return entitysquid.lastTentacleAngle + (entitysquid.tentacleAngle - entitysquid.lastTentacleAngle) * f; } + @Override protected void rotateCorpse(EntitySquid entitysquid, float var2, float f, float f1) { float f2 = entitysquid.prevSquidPitch + (entitysquid.squidPitch - entitysquid.prevSquidPitch) * f1; float f3 = entitysquid.prevSquidYaw + (entitysquid.squidYaw - entitysquid.prevSquidYaw) * f1; @@ -59,4 +62,4 @@ public class RenderSquid extends RenderLiving { GlStateManager.rotate(f3, 0.0F, 1.0F, 0.0F); GlStateManager.translate(0.0F, -1.2F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderTNTPrimed.java b/src/game/java/net/minecraft/client/renderer/entity/RenderTNTPrimed.java index 52c8223c..109e0705 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderTNTPrimed.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderTNTPrimed.java @@ -16,13 +16,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderTNTPrimed extends Render { public RenderTNTPrimed(RenderManager renderManagerIn) { @@ -50,6 +50,7 @@ public class RenderTNTPrimed extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityTNTPrimed entitytntprimed, double d0, double d1, double d2, float f, float f1) { BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); GlStateManager.pushMatrix(); @@ -108,7 +109,8 @@ public class RenderTNTPrimed extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityTNTPrimed var1) { return TextureMap.locationBlocksTexture; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderTntMinecart.java b/src/game/java/net/minecraft/client/renderer/entity/RenderTntMinecart.java index dbd137d6..e3aaa0b6 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderTntMinecart.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderTntMinecart.java @@ -14,13 +14,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderTntMinecart extends RenderMinecart { public RenderTntMinecart(RenderManager renderManagerIn) { super(renderManagerIn); } + @Override protected void func_180560_a(EntityMinecartTNT entityminecarttnt, float f, IBlockState iblockstate) { int i = entityminecarttnt.getFuseTicks(); if (i > -1 && (float) i - f + 1.0F < 10.0F) { @@ -68,4 +69,4 @@ public class RenderTntMinecart extends RenderMinecart { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderVillager.java b/src/game/java/net/minecraft/client/renderer/entity/RenderVillager.java index 6c22ad74..74016eae 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderVillager.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderVillager.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderVillager extends RenderLiving { private static final ResourceLocation villagerTextures = new ResourceLocation( @@ -52,6 +52,7 @@ public class RenderVillager extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityVillager entityvillager) { switch (entityvillager.getProfession()) { case 0: @@ -69,6 +70,7 @@ public class RenderVillager extends RenderLiving { } } + @Override public ModelVillager getMainModel() { return (ModelVillager) super.getMainModel(); } @@ -77,6 +79,7 @@ public class RenderVillager extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityVillager entityvillager, float var2) { float f = 0.9375F; if (entityvillager.getGrowingAge() < 0) { @@ -88,4 +91,4 @@ public class RenderVillager extends RenderLiving { GlStateManager.scale(f, f, f); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderWitch.java b/src/game/java/net/minecraft/client/renderer/entity/RenderWitch.java index 4f604969..fb3a7ec6 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderWitch.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderWitch.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderWitch extends RenderLiving { private static final ResourceLocation witchTextures = new ResourceLocation("textures/entity/witch.png"); @@ -45,6 +45,7 @@ public class RenderWitch extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityWitch entitywitch, double d0, double d1, double d2, float f, float f1) { ((ModelWitch) this.mainModel).field_82900_g = entitywitch.getHeldItem() != null; super.doRender(entitywitch, d0, d1, d2, f, f1); @@ -54,6 +55,7 @@ public class RenderWitch extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityWitch var1) { return witchTextures; } @@ -62,12 +64,14 @@ public class RenderWitch extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityWitch var1, float var2) { float f = 0.9375F; GlStateManager.scale(f, f, f); } + @Override public void transformHeldFull3DItemLayer() { GlStateManager.translate(0.0F, 0.1875F, 0.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderWither.java b/src/game/java/net/minecraft/client/renderer/entity/RenderWither.java index 92861c7a..d375a08a 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderWither.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderWither.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderWither extends RenderLiving { private static final ResourceLocation invulnerableWitherTextures = new ResourceLocation( @@ -48,6 +48,7 @@ public class RenderWither extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityWither entitywither, double d0, double d1, double d2, float f, float f1) { BossStatus.setBossStatus(entitywither, true); super.doRender(entitywither, d0, d1, d2, f, f1); @@ -57,6 +58,7 @@ public class RenderWither extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityWither entitywither) { int i = entitywither.getInvulTime(); return i > 0 && (i > 80 || i / 5 % 2 != 1) ? invulnerableWitherTextures : witherTextures; @@ -66,6 +68,7 @@ public class RenderWither extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityWither entitywither, float f) { float f1 = 2.0F; int i = entitywither.getInvulTime(); @@ -75,4 +78,4 @@ public class RenderWither extends RenderLiving { GlStateManager.scale(f1, f1, f1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderWolf.java b/src/game/java/net/minecraft/client/renderer/entity/RenderWolf.java index 918c305c..aa45aeab 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderWolf.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderWolf.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderWolf extends RenderLiving { private static final ResourceLocation wolfTextures = new ResourceLocation("textures/entity/wolf/wolf.png"); @@ -49,6 +49,7 @@ public class RenderWolf extends RenderLiving { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityWolf entitywolf, double d0, double d1, double d2, float f, float f1) { if (entitywolf.isWolfWet()) { float f2 = entitywolf.getBrightness(f1) * entitywolf.getShadingWhileWet(f1); @@ -62,6 +63,7 @@ public class RenderWolf extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityWolf entitywolf) { return entitywolf.isTamed() ? tamedWolfTextures : (entitywolf.isAngry() ? anrgyWolfTextures : wolfTextures); } @@ -69,7 +71,8 @@ public class RenderWolf extends RenderLiving { /** * + Defines what float the third param in setRotationAngles of ModelBase is */ + @Override protected float handleRotationFloat(EntityWolf entitywolf, float var2) { return entitywolf.getTailRotation(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderXPOrb.java b/src/game/java/net/minecraft/client/renderer/entity/RenderXPOrb.java index ff7dff3c..12bc8f3c 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderXPOrb.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderXPOrb.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderXPOrb extends Render { private static final ResourceLocation experienceOrbTextures = new ResourceLocation( @@ -50,6 +50,7 @@ public class RenderXPOrb extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityXPOrb entityxporb, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.translate((float) d0, (float) d1, (float) d2); @@ -98,7 +99,8 @@ public class RenderXPOrb extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityXPOrb var1) { return experienceOrbTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RenderZombie.java b/src/game/java/net/minecraft/client/renderer/entity/RenderZombie.java index 4a36e3a6..ba4aee3d 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RenderZombie.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RenderZombie.java @@ -18,13 +18,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderZombie extends RenderBiped { private static final ResourceLocation zombieTextures = new ResourceLocation("textures/entity/zombie/zombie.png"); @@ -54,6 +54,7 @@ public class RenderZombie extends RenderBiped { this.zombieVillagerModel = new ModelZombieVillager(); this.addLayer(new LayerHeldItem(this)); LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) { + @Override protected void initArmor() { this.field_177189_c = new ModelZombie(0.5F, false); this.field_177186_d = new ModelZombie(1.0F, false); @@ -79,6 +80,7 @@ public class RenderZombie extends RenderBiped { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityZombie entityzombie, double d0, double d1, double d2, float f, float f1) { this.func_82427_a(entityzombie); super.doRender(entityzombie, d0, d1, d2, f, f1); @@ -100,10 +102,12 @@ public class RenderZombie extends RenderBiped { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityZombie entityzombie) { return entityzombie.isVillager() ? zombieVillagerTextures : zombieTextures; } + @Override protected void rotateCorpse(EntityZombie entityzombie, float f, float f1, float f2) { if (entityzombie.isConverting()) { f1 += (float) (Math.cos((double) entityzombie.ticksExisted * 3.25D) * 3.141592653589793D * 0.25D); @@ -111,4 +115,4 @@ public class RenderZombie extends RenderBiped { super.rotateCorpse(entityzombie, f, f1, f2); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java b/src/game/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java index 6d9a454b..e89763ed 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java +++ b/src/game/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java @@ -42,13 +42,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -60,7 +60,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class RendererLivingEntity extends Render { private static final Logger logger = LogManager.getLogger(); @@ -90,6 +90,7 @@ public abstract class RendererLivingEntity extends R return this.layerRenderers.add((LayerRenderer) layer); } + @Override protected boolean canRenderName(T entitylivingbase) { EntityPlayerSP entityplayersp = Minecraft.getMinecraft().thePlayer; if (entitylivingbase instanceof EntityPlayer && entitylivingbase != entityplayersp) { @@ -124,6 +125,7 @@ public abstract class RendererLivingEntity extends R * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(T entitylivingbase, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.disableCull(); @@ -393,6 +395,7 @@ public abstract class RendererLivingEntity extends R } + @Override public void renderName(T entitylivingbase, double d0, double d1, double d2) { if (this.canRenderName(entitylivingbase)) { double d3 = entitylivingbase.getDistanceSqToEntity(this.renderManager.livingPlayer); @@ -537,4 +540,4 @@ public abstract class RendererLivingEntity extends R GlStateManager.enableTexture2D(); GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java index 65b3d32f..79e80879 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java @@ -31,13 +31,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class LayerArmorBase implements LayerRenderer { protected static final ResourceLocation ENCHANTED_ITEM_GLINT_RES = new ResourceLocation( @@ -69,6 +69,7 @@ public abstract class LayerArmorBase implements LayerRender this.initArmor(); } + @Override public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float partialTicks, float scale, float parFloat3, float parFloat4, float parFloat5, float parFloat6, float parFloat7) { this.renderLayer(entitylivingbaseIn, partialTicks, scale, parFloat3, parFloat4, parFloat5, parFloat6, parFloat7, @@ -281,7 +282,8 @@ public abstract class LayerArmorBase implements LayerRender } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArrow.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArrow.java index 81889bee..e531e9e4 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArrow.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerArrow.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerArrow implements LayerRenderer { private final RendererLivingEntity field_177168_a; @@ -39,6 +39,7 @@ public class LayerArrow implements LayerRenderer { this.field_177168_a = parRendererLivingEntity; } + @Override public void doRenderLayer(EntityLivingBase entitylivingbase, float var2, float var3, float f, float var5, float var6, float var7, float var8) { int i = entitylivingbase.getArrowCountInEntity(); @@ -83,7 +84,8 @@ public class LayerArrow implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java index f10ebcd0..c131caa2 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java @@ -6,13 +6,13 @@ import net.minecraft.client.renderer.entity.RendererLivingEntity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,13 +24,14 @@ import net.minecraft.client.renderer.entity.RendererLivingEntity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerBipedArmor extends LayerArmorBase { public LayerBipedArmor(RendererLivingEntity rendererIn) { super(rendererIn); } + @Override protected void func_177179_a(ModelBiped modelbiped, int i) { this.func_177194_a(modelbiped); switch (i) { @@ -59,8 +60,9 @@ public class LayerBipedArmor extends LayerArmorBase { parModelBiped.setInvisible(false); } + @Override protected void initArmor() { this.field_177189_c = new ModelBiped(0.5F); this.field_177186_d = new ModelBiped(1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCape.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCape.java index 0d6ff4cc..75ea9223 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCape.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCape.java @@ -10,13 +10,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerCape implements LayerRenderer { private final RenderPlayer playerRenderer; @@ -37,6 +37,7 @@ public class LayerCape implements LayerRenderer { this.playerRenderer = playerRendererIn; } + @Override public void doRenderLayer(AbstractClientPlayer abstractclientplayer, float var2, float var3, float f, float var5, float var6, float var7, float var8) { if (abstractclientplayer.hasPlayerInfo() && !abstractclientplayer.isInvisible() @@ -90,7 +91,8 @@ public class LayerCape implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java index dc6bb95f..6d76ca89 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java @@ -18,13 +18,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerCreeperCharge implements LayerRenderer { private static final ResourceLocation LIGHTNING_TEXTURE = new ResourceLocation( @@ -48,6 +48,7 @@ public class LayerCreeperCharge implements LayerRenderer { this.creeperRenderer = creeperRendererIn; } + @Override public void doRenderLayer(EntityCreeper entitycreeper, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (entitycreeper.getPowered()) { @@ -130,7 +131,8 @@ public class LayerCreeperCharge implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java index a5483329..28b907f5 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java @@ -23,13 +23,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerCustomHead implements LayerRenderer { private final ModelRenderer field_177209_a; @@ -50,6 +50,7 @@ public class LayerCustomHead implements LayerRenderer { this.field_177209_a = parModelRenderer; } + @Override public void doRenderLayer(EntityLivingBase entitylivingbase, float var2, float var3, float var4, float var5, float var6, float var7, float f) { ItemStack itemstack = entitylivingbase.getCurrentArmor(3); @@ -113,7 +114,8 @@ public class LayerCustomHead implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java index 3e35bfe9..267aebfe 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java @@ -8,13 +8,13 @@ import net.minecraft.client.renderer.entity.RenderPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.renderer.entity.RenderPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerDeadmau5Head implements LayerRenderer { private final RenderPlayer playerRenderer; @@ -35,6 +35,7 @@ public class LayerDeadmau5Head implements LayerRenderer { this.playerRenderer = playerRendererIn; } + @Override public void doRenderLayer(AbstractClientPlayer abstractclientplayer, float var2, float var3, float f, float var5, float var6, float var7, float var8) { if (abstractclientplayer.getName().equals("deadmau5") && abstractclientplayer.hasSkin() @@ -65,7 +66,8 @@ public class LayerDeadmau5Head implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java index a084a007..9bd6b0c5 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java @@ -22,13 +22,13 @@ import net.minecraft.entity.boss.EntityDragon; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,9 +40,10 @@ import net.minecraft.entity.boss.EntityDragon; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerEnderDragonDeath implements LayerRenderer { + @Override public void doRenderLayer(EntityDragon entitydragon, float var2, float var3, float f, float var5, float var6, float var7, float var8) { if (DeferredStateManager.isInDeferredPass()) { @@ -136,7 +137,8 @@ public class LayerEnderDragonDeath implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java index 66986443..b29a637b 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerEnderDragonEyes implements LayerRenderer { private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/enderdragon/dragon_eyes.png"); @@ -42,6 +42,7 @@ public class LayerEnderDragonEyes implements LayerRenderer { this.dragonRenderer = dragonRendererIn; } + @Override public void doRenderLayer(EntityDragon entitydragon, float f, float f1, float f2, float f3, float f4, float f5, float f6) { this.dragonRenderer.bindTexture(TEXTURE); @@ -74,7 +75,8 @@ public class LayerEnderDragonEyes implements LayerRenderer { GlStateManager.depthFunc(GL_LEQUAL); } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java index fa5f5761..226991fd 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerEndermanEyes implements LayerRenderer { private static final ResourceLocation field_177203_a = new ResourceLocation( @@ -46,6 +46,7 @@ public class LayerEndermanEyes implements LayerRenderer { this.endermanRenderer = endermanRendererIn; } + @Override public void doRenderLayer(EntityEnderman entityenderman, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (DeferredStateManager.isInDeferredPass()) { @@ -117,7 +118,8 @@ public class LayerEndermanEyes implements LayerRenderer { GlStateManager.enableAlpha(); } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java index cf7b858d..31f18860 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java @@ -18,13 +18,13 @@ import net.minecraft.util.EnumWorldBlockLayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.EnumWorldBlockLayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerHeldBlock implements LayerRenderer { private final RenderEnderman endermanRenderer; @@ -45,6 +45,7 @@ public class LayerHeldBlock implements LayerRenderer { this.endermanRenderer = endermanRendererIn; } + @Override public void doRenderLayer(EntityEnderman entityenderman, float var2, float var3, float f, float var5, float var6, float var7, float var8) { IBlockState iblockstate = entityenderman.getHeldBlockState(); @@ -101,7 +102,8 @@ public class LayerHeldBlock implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java index 1ef0d849..f90b57b5 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java @@ -16,13 +16,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerHeldItem implements LayerRenderer { private final RendererLivingEntity livingEntityRenderer; @@ -43,6 +43,7 @@ public class LayerHeldItem implements LayerRenderer { this.livingEntityRenderer = livingEntityRendererIn; } + @Override public void doRenderLayer(EntityLivingBase entitylivingbase, float var2, float var3, float var4, float var5, float var6, float var7, float var8) { ItemStack itemstack = entitylivingbase.getHeldItem(); @@ -81,7 +82,8 @@ public class LayerHeldItem implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java index 8bf24652..a3069e3f 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java @@ -15,13 +15,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerHeldItemWitch implements LayerRenderer { private final RenderWitch witchRenderer; @@ -42,6 +42,7 @@ public class LayerHeldItemWitch implements LayerRenderer { this.witchRenderer = witchRendererIn; } + @Override public void doRenderLayer(EntityWitch entitywitch, float var2, float var3, float var4, float var5, float var6, float var7, float var8) { ItemStack itemstack = entitywitch.getHeldItem(); @@ -102,7 +103,8 @@ public class LayerHeldItemWitch implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java index 538f7e9c..c396adb3 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java @@ -13,13 +13,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerIronGolemFlower implements LayerRenderer { private final RenderIronGolem ironGolemRenderer; @@ -40,6 +40,7 @@ public class LayerIronGolemFlower implements LayerRenderer { this.ironGolemRenderer = ironGolemRendererIn; } + @Override public void doRenderLayer(EntityIronGolem entityirongolem, float var2, float var3, float f, float var5, float var6, float var7, float var8) { if (entityirongolem.getHoldRoseTick() != 0) { @@ -66,7 +67,8 @@ public class LayerIronGolemFlower implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java index 64e21bed..30432d16 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java @@ -16,13 +16,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerMooshroomMushroom implements LayerRenderer { private final RenderMooshroom mooshroomRenderer; @@ -43,6 +43,7 @@ public class LayerMooshroomMushroom implements LayerRenderer { this.mooshroomRenderer = mooshroomRendererIn; } + @Override public void doRenderLayer(EntityMooshroom entitymooshroom, float var2, float var3, float var4, float var5, float var6, float var7, float var8) { if (!entitymooshroom.isChild() && !entitymooshroom.isInvisible()) { @@ -79,7 +80,8 @@ public class LayerMooshroomMushroom implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerRenderer.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerRenderer.java index 632cfa42..5d3aed14 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerRenderer.java @@ -5,13 +5,13 @@ import net.minecraft.entity.EntityLivingBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,10 @@ import net.minecraft.entity.EntityLivingBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface LayerRenderer { void doRenderLayer(E var1, float var2, float var3, float var4, float var5, float var6, float var7, float var8); boolean shouldCombineTextures(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSaddle.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSaddle.java index e3907137..e4aedc88 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSaddle.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSaddle.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerSaddle implements LayerRenderer { private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/pig/pig_saddle.png"); @@ -37,6 +37,7 @@ public class LayerSaddle implements LayerRenderer { this.pigRenderer = pigRendererIn; } + @Override public void doRenderLayer(EntityPig entitypig, float f, float f1, float var4, float f2, float f3, float f4, float f5) { if (entitypig.getSaddled()) { @@ -46,7 +47,8 @@ public class LayerSaddle implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java index 2d6ead8e..3623c8c3 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerSheepWool implements LayerRenderer { private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/sheep/sheep_fur.png"); @@ -39,6 +39,7 @@ public class LayerSheepWool implements LayerRenderer { this.sheepRenderer = sheepRendererIn; } + @Override public void doRenderLayer(EntitySheep entitysheep, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (!entitysheep.getSheared() && !entitysheep.isInvisible()) { @@ -65,7 +66,8 @@ public class LayerSheepWool implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java index d53634c6..46559785 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java @@ -17,13 +17,13 @@ import net.minecraft.entity.monster.EntitySlime; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.entity.monster.EntitySlime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerSlimeGel implements LayerRenderer { private final RenderSlime slimeRenderer; @@ -45,6 +45,7 @@ public class LayerSlimeGel implements LayerRenderer { this.slimeRenderer = slimeRendererIn; } + @Override public void doRenderLayer(EntitySlime entityslime, float f, float f1, float var4, float f2, float f3, float f4, float f5) { if (DeferredStateManager.isInDeferredPass()) { @@ -90,7 +91,8 @@ public class LayerSlimeGel implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java index 0fe742d6..982d89bf 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java @@ -11,13 +11,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerSnowmanHead implements LayerRenderer { private final RenderSnowMan snowManRenderer; @@ -38,6 +38,7 @@ public class LayerSnowmanHead implements LayerRenderer { this.snowManRenderer = snowManRendererIn; } + @Override public void doRenderLayer(EntitySnowman entitysnowman, float var2, float var3, float var4, float var5, float var6, float var7, float var8) { if (!entitysnowman.isInvisible()) { @@ -53,7 +54,8 @@ public class LayerSnowmanHead implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java index 50f2b941..557226b4 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerSpiderEyes implements LayerRenderer { private static final ResourceLocation SPIDER_EYES = new ResourceLocation("textures/entity/spider_eyes.png"); @@ -45,6 +45,7 @@ public class LayerSpiderEyes implements LayerRenderer { this.spiderRenderer = spiderRendererIn; } + @Override public void doRenderLayer(EntitySpider entityspider, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (DeferredStateManager.isInDeferredPass()) { @@ -122,7 +123,8 @@ public class LayerSpiderEyes implements LayerRenderer { GlStateManager.disablePolygonOffset(); } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java index 85bfe0a5..991fa085 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java @@ -6,13 +6,13 @@ import net.minecraft.client.renderer.entity.RendererLivingEntity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,15 +24,16 @@ import net.minecraft.client.renderer.entity.RendererLivingEntity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerVillagerArmor extends LayerBipedArmor { public LayerVillagerArmor(RendererLivingEntity rendererIn) { super(rendererIn); } + @Override protected void initArmor() { this.field_177189_c = new ModelZombieVillager(0.5F, 0.0F, true); this.field_177186_d = new ModelZombieVillager(1.0F, 0.0F, true); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java index 41ecb91f..16dbce58 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java @@ -19,13 +19,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerWitherAura implements LayerRenderer { private static final ResourceLocation WITHER_ARMOR = new ResourceLocation( @@ -49,6 +49,7 @@ public class LayerWitherAura implements LayerRenderer { this.witherRenderer = witherRendererIn; } + @Override public void doRenderLayer(EntityWither entitywither, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (entitywither.isArmored()) { @@ -128,7 +129,8 @@ public class LayerWitherAura implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java index 14db51db..88595ebb 100644 --- a/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java +++ b/src/game/java/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayerWolfCollar implements LayerRenderer { private static final ResourceLocation WOLF_COLLAR = new ResourceLocation("textures/entity/wolf/wolf_collar.png"); @@ -38,6 +38,7 @@ public class LayerWolfCollar implements LayerRenderer { this.wolfRenderer = wolfRendererIn; } + @Override public void doRenderLayer(EntityWolf entitywolf, float f, float f1, float var4, float f2, float f3, float f4, float f5) { if (entitywolf.isTamed() && !entitywolf.isInvisible()) { @@ -49,7 +50,8 @@ public class LayerWolfCollar implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/AbstractTexture.java b/src/game/java/net/minecraft/client/renderer/texture/AbstractTexture.java index 19eaca14..847b07e3 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/AbstractTexture.java +++ b/src/game/java/net/minecraft/client/renderer/texture/AbstractTexture.java @@ -9,13 +9,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AbstractTexture implements ITextureObject { protected int glTextureId = -1; @@ -45,6 +45,7 @@ public abstract class AbstractTexture implements ITextureObject { } + @Override public int getGlTextureId() { if (this.glTextureId == -1) { this.glTextureId = TextureUtil.glGenTextures(); @@ -70,10 +71,12 @@ public abstract class AbstractTexture implements ITextureObject { } } + @Override public void restoreLastBlurMipmap() { this.setBlurMipmapDirect(this.blurLast, this.mipmapLast); } + @Override public void setBlurMipmap(boolean parFlag, boolean parFlag2) { this.blurLast = this.blur; this.mipmapLast = this.mipmap; @@ -102,4 +105,4 @@ public abstract class AbstractTexture implements ITextureObject { EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, i); EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, short1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/DynamicTexture.java b/src/game/java/net/minecraft/client/renderer/texture/DynamicTexture.java index e2b63e89..5b04ad5b 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/DynamicTexture.java +++ b/src/game/java/net/minecraft/client/renderer/texture/DynamicTexture.java @@ -8,13 +8,13 @@ import net.minecraft.client.resources.IResourceManager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.resources.IResourceManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicTexture extends AbstractTexture { private final int[] dynamicTextureData; @@ -51,10 +51,11 @@ public class DynamicTexture extends AbstractTexture { return this.dynamicTextureData; } + @Override public void loadTexture(IResourceManager resourceManager) throws IOException { } public void updateDynamicTexture() { TextureUtil.uploadTexture(this.getGlTextureId(), this.dynamicTextureData, this.width, this.height); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/IIconCreator.java b/src/game/java/net/minecraft/client/renderer/texture/IIconCreator.java index 16ac1fc1..6c4d22c3 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/IIconCreator.java +++ b/src/game/java/net/minecraft/client/renderer/texture/IIconCreator.java @@ -3,13 +3,13 @@ package net.minecraft.client.renderer.texture; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.renderer.texture; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IIconCreator { void registerSprites(TextureMap var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/ITextureObject.java b/src/game/java/net/minecraft/client/renderer/texture/ITextureObject.java index 89d0a4c9..bb7732aa 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/ITextureObject.java +++ b/src/game/java/net/minecraft/client/renderer/texture/ITextureObject.java @@ -7,13 +7,13 @@ import net.minecraft.client.resources.IResourceManager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.IResourceManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITextureObject { int getGlTextureId(); @@ -35,4 +35,4 @@ public interface ITextureObject { void restoreLastBlurMipmap(); void setBlurMipmap(boolean var1, boolean var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/ITickable.java b/src/game/java/net/minecraft/client/renderer/texture/ITickable.java index 581dcbcb..3cddbb32 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/ITickable.java +++ b/src/game/java/net/minecraft/client/renderer/texture/ITickable.java @@ -3,13 +3,13 @@ package net.minecraft.client.renderer.texture; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.renderer.texture; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITickable { void tick(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/ITickableTextureObject.java b/src/game/java/net/minecraft/client/renderer/texture/ITickableTextureObject.java index 1503d289..fdb6bebb 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/ITickableTextureObject.java +++ b/src/game/java/net/minecraft/client/renderer/texture/ITickableTextureObject.java @@ -3,13 +3,13 @@ package net.minecraft.client.renderer.texture; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.renderer.texture; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITickableTextureObject extends ITextureObject, ITickable { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java b/src/game/java/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java index 831bd5b1..31b62e4b 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java +++ b/src/game/java/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java @@ -16,13 +16,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayeredColorMaskTexture extends AbstractTexture { /** @@ -52,6 +52,7 @@ public class LayeredColorMaskTexture extends AbstractTexture { this.field_174950_i = parList2; } + @Override public void loadTexture(IResourceManager parIResourceManager) throws IOException { this.deleteGlTexture(); @@ -97,4 +98,4 @@ public class LayeredColorMaskTexture extends AbstractTexture { regenerateIfNotAllocated(); TextureUtil.uploadTextureImage(this.getGlTextureId(), bufferedimage); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/LayeredTexture.java b/src/game/java/net/minecraft/client/renderer/texture/LayeredTexture.java index 3ebfa0f5..527c239f 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/LayeredTexture.java +++ b/src/game/java/net/minecraft/client/renderer/texture/LayeredTexture.java @@ -15,13 +15,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LayeredTexture extends AbstractTexture { private static final Logger logger = LogManager.getLogger(); @@ -43,6 +43,7 @@ public class LayeredTexture extends AbstractTexture { this.layeredTextureNames = Lists.newArrayList(textureNames); } + @Override public void loadTexture(IResourceManager parIResourceManager) throws IOException { this.deleteGlTexture(); ImageData bufferedimage = null; @@ -69,4 +70,4 @@ public class LayeredTexture extends AbstractTexture { regenerateIfNotAllocated(); TextureUtil.uploadTextureImage(this.getGlTextureId(), bufferedimage); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/SimpleTexture.java b/src/game/java/net/minecraft/client/renderer/texture/SimpleTexture.java index a81e9dfa..792b1a44 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/SimpleTexture.java +++ b/src/game/java/net/minecraft/client/renderer/texture/SimpleTexture.java @@ -14,13 +14,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleTexture extends AbstractTexture { private static final Logger logger = LogManager.getLogger(); @@ -42,6 +42,7 @@ public class SimpleTexture extends AbstractTexture { this.textureLocation = textureResourceLocation; } + @Override public void loadTexture(IResourceManager parIResourceManager) throws IOException { this.deleteGlTexture(); InputStream inputstream = null; @@ -75,4 +76,4 @@ public class SimpleTexture extends AbstractTexture { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/Stitcher.java b/src/game/java/net/minecraft/client/renderer/texture/Stitcher.java index 3df2442f..2b6bfb6f 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/Stitcher.java +++ b/src/game/java/net/minecraft/client/renderer/texture/Stitcher.java @@ -16,13 +16,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Stitcher { public static class Holder implements Comparable { @@ -54,6 +54,7 @@ public class Stitcher { parInt1); } + @Override public int compareTo(Stitcher.Holder stitcher$holder) { int i; if (this.getHeight() == stitcher$holder.getHeight()) { @@ -106,6 +107,7 @@ public class Stitcher { } } + @Override public String toString() { return "Holder{width=" + this.width + ", height=" + this.height + '}'; } @@ -197,6 +199,7 @@ public class Stitcher { return this.holder; } + @Override public String toString() { return "Slot{originX=" + this.originX + ", originY=" + this.originY + ", width=" + this.width + ", height=" + this.height + ", texture=" + this.holder + ", subSlots=" + this.subSlots + '}'; @@ -371,4 +374,4 @@ public class Stitcher { return arraylist1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/TextureClock.java b/src/game/java/net/minecraft/client/renderer/texture/TextureClock.java index ee294ff7..cd7cde39 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/TextureClock.java +++ b/src/game/java/net/minecraft/client/renderer/texture/TextureClock.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureClock extends EaglerTextureAtlasSprite { private double field_94239_h; @@ -36,6 +36,7 @@ public class TextureClock extends EaglerTextureAtlasSprite { super(iconName); } + @Override public void updateAnimation(IFramebufferGL[] copyColorFramebuffer) { if (!this.framesTextureData.isEmpty()) { Minecraft minecraft = Minecraft.getMinecraft(); @@ -77,4 +78,4 @@ public class TextureClock extends EaglerTextureAtlasSprite { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/TextureCompass.java b/src/game/java/net/minecraft/client/renderer/texture/TextureCompass.java index cb10b7f2..5a4aa1fe 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/TextureCompass.java +++ b/src/game/java/net/minecraft/client/renderer/texture/TextureCompass.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureCompass extends EaglerTextureAtlasSprite { public static String field_176608_l; @@ -40,6 +40,7 @@ public class TextureCompass extends EaglerTextureAtlasSprite { field_176608_l = iconName; } + @Override public void updateAnimation(IFramebufferGL[] copyColorFramebuffer) { Minecraft minecraft = Minecraft.getMinecraft(); if (minecraft.theWorld != null && minecraft.thePlayer != null) { @@ -103,4 +104,4 @@ public class TextureCompass extends EaglerTextureAtlasSprite { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/TextureManager.java b/src/game/java/net/minecraft/client/renderer/texture/TextureManager.java index e3fdcc06..6b74b11a 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/TextureManager.java +++ b/src/game/java/net/minecraft/client/renderer/texture/TextureManager.java @@ -27,13 +27,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureManager implements ITickable, IResourceManagerReloadListener { private static final Logger logger = LogManager.getLogger(); @@ -133,6 +133,7 @@ public class TextureManager implements ITickable, IResourceManagerReloadListener crashreportcategory.addCrashSection("Resource location", textureLocation); final ITextureObject textureObj2 = textureObj; crashreportcategory.addCrashSectionCallable("Texture object class", new Callable() { + @Override public String call() throws Exception { return textureObj2.getClass().getName(); } @@ -155,6 +156,7 @@ public class TextureManager implements ITickable, IResourceManagerReloadListener } } + @Override public void onResourceManagerReload(IResourceManager var1) { for (Entry entry : this.mapTextureObjects.entrySet()) { this.loadTexture((ResourceLocation) entry.getKey(), (ITextureObject) entry.getValue()); @@ -162,10 +164,11 @@ public class TextureManager implements ITickable, IResourceManagerReloadListener } + @Override public void tick() { for (int i = 0, l = this.listTickables.size(); i < l; ++i) { this.listTickables.get(i).tick(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/TextureMap.java b/src/game/java/net/minecraft/client/renderer/texture/TextureMap.java index 6aa4eb44..4b3cd08b 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/TextureMap.java +++ b/src/game/java/net/minecraft/client/renderer/texture/TextureMap.java @@ -45,13 +45,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -63,7 +63,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureMap extends AbstractTexture implements ITickableTextureObject { private static final Logger logger = LogManager.getLogger(); @@ -113,6 +113,7 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec new Object[] { this.basePath, location.getResourcePath(), Integer.valueOf(parInt1), ".png" })); } + @Override public void deleteGlTexture() { super.deleteGlTexture(); if (eaglerPBRMaterialTexture != -1) { @@ -194,6 +195,7 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec this.loadTextureAtlas(resourceManager); } + @Override public void loadTexture(IResourceManager parIResourceManager) throws IOException { if (this.iconCreator != null) { this.loadSprites(parIResourceManager, this.iconCreator); @@ -433,16 +435,19 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Applying mipmap"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Sprite being mipmapped"); crashreportcategory.addCrashSectionCallable("Sprite name", new Callable() { + @Override public String call() throws Exception { return textureatlassprite1.getIconName(); } }); crashreportcategory.addCrashSectionCallable("Sprite size", new Callable() { + @Override public String call() throws Exception { return textureatlassprite1.getIconWidth() + " x " + textureatlassprite1.getIconHeight(); } }); crashreportcategory.addCrashSectionCallable("Sprite frames", new Callable() { + @Override public String call() throws Exception { return textureatlassprite1.getFrameCount() + " frames"; } @@ -559,6 +564,7 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec } } + @Override public void setBlurMipmapDirect0(boolean parFlag, boolean parFlag2) { if (isGLES2) { super.setBlurMipmapDirect0(parFlag, false); @@ -586,6 +592,7 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec } } + @Override public void tick() { this.updateAnimations(); } @@ -606,4 +613,4 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObjec _wglBindFramebuffer(_GL_FRAMEBUFFER, null); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/texture/TextureUtil.java b/src/game/java/net/minecraft/client/renderer/texture/TextureUtil.java index c1681170..607a474c 100644 --- a/src/game/java/net/minecraft/client/renderer/texture/TextureUtil.java +++ b/src/game/java/net/minecraft/client/renderer/texture/TextureUtil.java @@ -31,13 +31,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureUtil { private static final Logger logger = LogManager.getLogger(); @@ -373,4 +373,4 @@ public class TextureUtil { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/RenderEnderCrystal.java b/src/game/java/net/minecraft/client/renderer/tileentity/RenderEnderCrystal.java index 1e12f07a..51b176b8 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/RenderEnderCrystal.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/RenderEnderCrystal.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderEnderCrystal extends Render { private static final ResourceLocation enderCrystalTextures = new ResourceLocation( @@ -50,6 +50,7 @@ public class RenderEnderCrystal extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityEnderCrystal entityendercrystal, double d0, double d1, double d2, float f, float f1) { float f2 = (float) entityendercrystal.innerRotation + f1; GlStateManager.pushMatrix(); @@ -66,7 +67,8 @@ public class RenderEnderCrystal extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityEnderCrystal var1) { return enderCrystalTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/RenderItemFrame.java b/src/game/java/net/minecraft/client/renderer/tileentity/RenderItemFrame.java index 71bd7b0e..696c08b0 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/RenderItemFrame.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/RenderItemFrame.java @@ -35,13 +35,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -53,7 +53,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderItemFrame extends Render { private static final ResourceLocation mapBackgroundTextures = new ResourceLocation( @@ -76,6 +76,7 @@ public class RenderItemFrame extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityItemFrame entityitemframe, double d0, double d1, double d2, float var8, float var9) { GlStateManager.pushMatrix(); BlockPos blockpos = entityitemframe.getHangingPosition(); @@ -115,6 +116,7 @@ public class RenderItemFrame extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityItemFrame var1) { return null; } @@ -171,6 +173,7 @@ public class RenderItemFrame extends Render { } } + @Override protected void renderName(EntityItemFrame entityitemframe, double d0, double d1, double d2) { if (Minecraft.isGuiEnabled() && entityitemframe.getDisplayedItem() != null && entityitemframe.getDisplayedItem().hasDisplayName() @@ -222,4 +225,4 @@ public class RenderItemFrame extends Render { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/RenderWitherSkull.java b/src/game/java/net/minecraft/client/renderer/tileentity/RenderWitherSkull.java index f1d62e47..22e537f6 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/RenderWitherSkull.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/RenderWitherSkull.java @@ -10,13 +10,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderWitherSkull extends Render { private static final ResourceLocation invulnerableWitherTextures = new ResourceLocation( @@ -51,6 +51,7 @@ public class RenderWitherSkull extends Render { * func_76986_a(T entity, double d, double d1, double d2, float f, float f1). * But JAD is pre 1.5 so doe */ + @Override public void doRender(EntityWitherSkull entitywitherskull, double d0, double d1, double d2, float f, float f1) { GlStateManager.pushMatrix(); GlStateManager.disableCull(); @@ -85,7 +86,8 @@ public class RenderWitherSkull extends Render { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityWitherSkull entitywitherskull) { return entitywitherskull.isInvulnerable() ? invulnerableWitherTextures : witherTextures; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java index 9fee9ae1..6123207c 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java @@ -22,13 +22,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityBannerRenderer extends TileEntitySpecialRenderer { static class TimedBannerTexture { @@ -106,6 +106,7 @@ public class TileEntityBannerRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation beaconBeam = new ResourceLocation("textures/entity/beacon_beam.png"); + @Override public boolean func_181055_a() { return true; } + @Override public void renderTileEntityAt(TileEntityBeacon tileentitybeacon, double d0, double d1, double d2, float f, int var9) { if (DeferredStateManager.isEnableShadowRender()) @@ -303,4 +305,4 @@ public class TileEntityBeaconRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation textureTrappedDouble = new ResourceLocation( @@ -60,6 +60,7 @@ public class TileEntityChestRenderer extends TileEntitySpecialRenderer { /** @@ -38,6 +38,7 @@ public class TileEntityEnchantmentTableRenderer extends TileEntitySpecialRendere "textures/entity/enchanting_table_book.png"); private ModelBook field_147541_c = new ModelBook(); + @Override public void renderTileEntityAt(TileEntityEnchantmentTable tileentityenchantmenttable, double d0, double d1, double d2, float f, int var9) { GlStateManager.pushMatrix(); @@ -87,4 +88,4 @@ public class TileEntityEnchantmentTableRenderer extends TileEntitySpecialRendere this.field_147541_c.render((Entity) null, f1, f4, f5, f6, 0.0F, 0.0625F); GlStateManager.popMatrix(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java index fe7f65e5..a667e68e 100644 --- a/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java +++ b/src/game/java/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java @@ -28,13 +28,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityEndPortalRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation END_SKY_TEXTURE = new ResourceLocation("textures/environment/end_sky.png"); @@ -61,6 +61,7 @@ public class TileEntityEndPortalRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation ENDER_CHEST_TEXTURE = new ResourceLocation("textures/entity/chest/ender.png"); private ModelChest field_147521_c = new ModelChest(); + @Override public void renderTileEntityAt(TileEntityEnderChest tileentityenderchest, double d0, double d1, double d2, float f, int i) { int j = 0; @@ -94,4 +95,4 @@ public class TileEntityEnderChestRenderer extends TileEntitySpecialRenderer { /** @@ -52,6 +52,7 @@ public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer { private final BlockRendererDispatcher blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); + @Override public void renderTileEntityAt(TileEntityPiston tileentitypiston, double d0, double d1, double d2, float f, int var9) { BlockPos blockpos = tileentitypiston.getPos(); @@ -114,4 +115,4 @@ public class TileEntityPistonRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation SIGN_TEXTURE = new ResourceLocation("textures/entity/sign.png"); @@ -52,6 +52,7 @@ public class TileEntitySignRenderer extends TileEntitySpecialRenderer { private static final ResourceLocation SKELETON_TEXTURES = new ResourceLocation( @@ -127,6 +127,7 @@ public class TileEntitySkullRenderer extends TileEntitySpecialRenderer { protected static final ResourceLocation[] DESTROY_STAGES = new ResourceLocation[] { @@ -68,4 +68,4 @@ public abstract class TileEntitySpecialRenderer { public void setRendererDispatcher(TileEntityRendererDispatcher rendererDispatcherIn) { this.rendererDispatcher = rendererDispatcherIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java b/src/game/java/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java index 14fba96d..a43ce262 100644 --- a/src/game/java/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java +++ b/src/game/java/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DefaultVertexFormats { public static final VertexFormat BLOCK = VertexFormat.BLOCK; @@ -38,4 +38,4 @@ public class DefaultVertexFormats { public static final VertexFormat POSITION_TEX_NORMAL = VertexFormat.POSITION_TEX_NORMAL; public static final VertexFormat POSITION_TEX_LMAP_COLOR = VertexFormat.POSITION_TEX_LMAP_COLOR; public static final VertexFormat POSITION_TEX_COLOR_NORMAL = VertexFormat.POSITION_TEX_COLOR_NORMAL; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/AbstractResourcePack.java b/src/game/java/net/minecraft/client/resources/AbstractResourcePack.java index 2b1fda7b..e2278ac3 100644 --- a/src/game/java/net/minecraft/client/resources/AbstractResourcePack.java +++ b/src/game/java/net/minecraft/client/resources/AbstractResourcePack.java @@ -21,13 +21,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AbstractResourcePack implements IResourcePack { private static final Logger resourceLog = LogManager.getLogger(); @@ -70,16 +70,19 @@ public abstract class AbstractResourcePack implements IResourcePack { this.resourcePackFile = resourcePackFileIn; } + @Override public InputStream getInputStream(ResourceLocation location) throws IOException { return this.getInputStreamByName(locationToName(location)); } protected abstract InputStream getInputStreamByName(String var1) throws IOException; + @Override public ImageData getPackImage() throws IOException { return TextureUtil.readBufferedImage(this.getInputStreamByName("pack.png")); } + @Override public T getPackMetadata(IMetadataSerializer parIMetadataSerializer, String parString1) throws IOException { try { @@ -92,6 +95,7 @@ public abstract class AbstractResourcePack implements IResourcePack { } } + @Override public String getPackName() { return this.resourcePackFile; } @@ -103,7 +107,8 @@ public abstract class AbstractResourcePack implements IResourcePack { new Object[] { parString1, this.resourcePackFile }); } + @Override public boolean resourceExists(ResourceLocation location) { return this.hasResourceName(locationToName(location)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/DefaultPlayerSkin.java b/src/game/java/net/minecraft/client/resources/DefaultPlayerSkin.java index 19d2413d..d3e18be2 100644 --- a/src/game/java/net/minecraft/client/resources/DefaultPlayerSkin.java +++ b/src/game/java/net/minecraft/client/resources/DefaultPlayerSkin.java @@ -6,13 +6,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DefaultPlayerSkin { /** @@ -75,4 +75,4 @@ public class DefaultPlayerSkin { private static boolean isSlimSkin(EaglercraftUUID playerUUID) { return (playerUUID.hashCode() & 1) == 1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/DefaultResourcePack.java b/src/game/java/net/minecraft/client/resources/DefaultResourcePack.java index a929c059..823f7fe6 100644 --- a/src/game/java/net/minecraft/client/resources/DefaultResourcePack.java +++ b/src/game/java/net/minecraft/client/resources/DefaultResourcePack.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,11 +35,12 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DefaultResourcePack implements IResourcePack { public static final Set defaultResourceDomains = ImmutableSet.of("minecraft", "eagler", "starlike"); + @Override public InputStream getInputStream(ResourceLocation parResourceLocation) throws IOException { InputStream inputstream = this.getResourceStream(parResourceLocation); if (inputstream != null) { @@ -58,10 +59,12 @@ public class DefaultResourcePack implements IResourcePack { return null; } + @Override public ImageData getPackImage() throws IOException { return TextureUtil.readBufferedImage(EagRuntime.getRequiredResourceStream("pack.png")); } + @Override public T getPackMetadata(IMetadataSerializer parIMetadataSerializer, String parString1) throws IOException { try { @@ -72,10 +75,12 @@ public class DefaultResourcePack implements IResourcePack { } } + @Override public String getPackName() { return "Default"; } + @Override public Set getResourceDomains() { return defaultResourceDomains; } @@ -85,8 +90,9 @@ public class DefaultResourcePack implements IResourcePack { .getResourceStream("/assets/" + location.getResourceDomain() + "/" + location.getResourcePath()); } + @Override public boolean resourceExists(ResourceLocation location) { return EagRuntime .getResourceExists("/assets/" + location.getResourceDomain() + "/" + location.getResourcePath()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/FallbackResourceManager.java b/src/game/java/net/minecraft/client/resources/FallbackResourceManager.java index 88365dcb..5903a840 100644 --- a/src/game/java/net/minecraft/client/resources/FallbackResourceManager.java +++ b/src/game/java/net/minecraft/client/resources/FallbackResourceManager.java @@ -17,13 +17,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FallbackResourceManager implements IResourceManager { private static final Logger logger = LogManager.getLogger(); @@ -56,6 +56,7 @@ public class FallbackResourceManager implements IResourceManager { this.resourcePacks.add(resourcePack); } + @Override public List getAllResources(ResourceLocation location) throws IOException { ArrayList arraylist = Lists.newArrayList(); ResourceLocation resourcelocation = getLocationMcmeta(location); @@ -82,6 +83,7 @@ public class FallbackResourceManager implements IResourceManager { return resourcePack.getInputStream(location); } + @Override public IResource getResource(ResourceLocation location) throws IOException { IResourcePack iresourcepack = null; ResourceLocation resourcelocation = getLocationMcmeta(location); @@ -106,8 +108,9 @@ public class FallbackResourceManager implements IResourceManager { throw new FileNotFoundException(location.toString()); } + @Override public Set getResourceDomains() { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/FoliageColorReloadListener.java b/src/game/java/net/minecraft/client/resources/FoliageColorReloadListener.java index b854d5a5..50b45a25 100644 --- a/src/game/java/net/minecraft/client/resources/FoliageColorReloadListener.java +++ b/src/game/java/net/minecraft/client/resources/FoliageColorReloadListener.java @@ -9,13 +9,13 @@ import net.minecraft.world.ColorizerFoliage; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,11 +27,12 @@ import net.minecraft.world.ColorizerFoliage; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FoliageColorReloadListener implements IResourceManagerReloadListener { private static final ResourceLocation LOC_FOLIAGE_PNG = new ResourceLocation("textures/colormap/foliage.png"); + @Override public void onResourceManagerReload(IResourceManager iresourcemanager) { try { ColorizerFoliage.setFoliageBiomeColorizer( @@ -41,4 +42,4 @@ public class FoliageColorReloadListener implements IResourceManagerReloadListene } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/GrassColorReloadListener.java b/src/game/java/net/minecraft/client/resources/GrassColorReloadListener.java index 11a03842..e4301421 100644 --- a/src/game/java/net/minecraft/client/resources/GrassColorReloadListener.java +++ b/src/game/java/net/minecraft/client/resources/GrassColorReloadListener.java @@ -9,13 +9,13 @@ import net.minecraft.world.ColorizerGrass; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,11 +27,12 @@ import net.minecraft.world.ColorizerGrass; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GrassColorReloadListener implements IResourceManagerReloadListener { private static final ResourceLocation LOC_GRASS_PNG = new ResourceLocation("textures/colormap/grass.png"); + @Override public void onResourceManagerReload(IResourceManager iresourcemanager) { try { ColorizerGrass.setGrassBiomeColorizer( @@ -41,4 +42,4 @@ public class GrassColorReloadListener implements IResourceManagerReloadListener } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/I18n.java b/src/game/java/net/minecraft/client/resources/I18n.java index f8333cec..516e0161 100644 --- a/src/game/java/net/minecraft/client/resources/I18n.java +++ b/src/game/java/net/minecraft/client/resources/I18n.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.resources; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class I18n { private static Locale i18nLocale; @@ -37,4 +37,4 @@ public class I18n { static void setLocale(Locale i18nLocaleIn) { i18nLocale = i18nLocaleIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/IReloadableResourceManager.java b/src/game/java/net/minecraft/client/resources/IReloadableResourceManager.java index ef462818..07f61229 100644 --- a/src/game/java/net/minecraft/client/resources/IReloadableResourceManager.java +++ b/src/game/java/net/minecraft/client/resources/IReloadableResourceManager.java @@ -5,13 +5,13 @@ import java.util.List; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,10 +23,10 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IReloadableResourceManager extends IResourceManager { void registerReloadListener(IResourceManagerReloadListener var1); void reloadResources(List var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/IResource.java b/src/game/java/net/minecraft/client/resources/IResource.java index 2ded972c..2b667164 100644 --- a/src/game/java/net/minecraft/client/resources/IResource.java +++ b/src/game/java/net/minecraft/client/resources/IResource.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IResource { InputStream getInputStream(); @@ -38,4 +38,4 @@ public interface IResource { String getResourcePackName(); boolean hasMetadata(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/IResourceManager.java b/src/game/java/net/minecraft/client/resources/IResourceManager.java index 2d768b23..502c99dd 100644 --- a/src/game/java/net/minecraft/client/resources/IResourceManager.java +++ b/src/game/java/net/minecraft/client/resources/IResourceManager.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IResourceManager { List getAllResources(ResourceLocation var1) throws IOException; @@ -35,4 +35,4 @@ public interface IResourceManager { IResource getResource(ResourceLocation var1) throws IOException; Set getResourceDomains(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/IResourceManagerReloadListener.java b/src/game/java/net/minecraft/client/resources/IResourceManagerReloadListener.java index 9334c927..f728f576 100644 --- a/src/game/java/net/minecraft/client/resources/IResourceManagerReloadListener.java +++ b/src/game/java/net/minecraft/client/resources/IResourceManagerReloadListener.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.resources; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IResourceManagerReloadListener { void onResourceManagerReload(IResourceManager var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/IResourcePack.java b/src/game/java/net/minecraft/client/resources/IResourcePack.java index 2dc95767..7a8082ce 100644 --- a/src/game/java/net/minecraft/client/resources/IResourcePack.java +++ b/src/game/java/net/minecraft/client/resources/IResourcePack.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IResourcePack { InputStream getInputStream(ResourceLocation var1) throws IOException; @@ -44,4 +44,4 @@ public interface IResourcePack { Set getResourceDomains(); boolean resourceExists(ResourceLocation var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/Language.java b/src/game/java/net/minecraft/client/resources/Language.java index bc641163..19ea8148 100644 --- a/src/game/java/net/minecraft/client/resources/Language.java +++ b/src/game/java/net/minecraft/client/resources/Language.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.HString; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.HString; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Language implements Comparable { private final String languageCode; @@ -38,10 +38,12 @@ public class Language implements Comparable { this.bidirectional = bidirectionalIn; } + @Override public int compareTo(Language language) { return this.languageCode.compareTo(language.languageCode); } + @Override public boolean equals(Object object) { return this == object ? true : (!(object instanceof Language) ? false : this.languageCode.equals(((Language) object).languageCode)); @@ -51,6 +53,7 @@ public class Language implements Comparable { return this.languageCode; } + @Override public int hashCode() { return this.languageCode.hashCode(); } @@ -59,7 +62,8 @@ public class Language implements Comparable { return this.bidirectional; } + @Override public String toString() { return HString.format("%s (%s)", new Object[] { this.name, this.region }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/LanguageManager.java b/src/game/java/net/minecraft/client/resources/LanguageManager.java index b6202692..5af7a421 100644 --- a/src/game/java/net/minecraft/client/resources/LanguageManager.java +++ b/src/game/java/net/minecraft/client/resources/LanguageManager.java @@ -19,13 +19,13 @@ import net.minecraft.util.StringTranslate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.StringTranslate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LanguageManager implements IResourceManagerReloadListener { private static final Logger logger = LogManager.getLogger(); @@ -70,6 +70,7 @@ public class LanguageManager implements IResourceManagerReloadListener { return currentLocale.isUnicode(); } + @Override public void onResourceManagerReload(IResourceManager iresourcemanager) { ArrayList arraylist = Lists.newArrayList(new String[] { "en_US" }); if (!"en_US".equals(this.currentLanguage)) { @@ -109,4 +110,4 @@ public class LanguageManager implements IResourceManagerReloadListener { public void setCurrentLanguage(Language currentLanguageIn) { this.currentLanguage = currentLanguageIn.getLanguageCode(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/Locale.java b/src/game/java/net/minecraft/client/resources/Locale.java index fca21d20..7d8b565f 100644 --- a/src/game/java/net/minecraft/client/resources/Locale.java +++ b/src/game/java/net/minecraft/client/resources/Locale.java @@ -22,13 +22,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Locale { /** @@ -166,4 +166,4 @@ public class Locale { String s = (String) this.properties.get(parString1); return s == null ? parString1 : s; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/ResourcePackFileNotFoundException.java b/src/game/java/net/minecraft/client/resources/ResourcePackFileNotFoundException.java index ea6f5f1f..c25b7e22 100644 --- a/src/game/java/net/minecraft/client/resources/ResourcePackFileNotFoundException.java +++ b/src/game/java/net/minecraft/client/resources/ResourcePackFileNotFoundException.java @@ -8,13 +8,13 @@ import net.lax1dude.eaglercraft.v1_8.HString; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,10 +26,10 @@ import net.lax1dude.eaglercraft.v1_8.HString; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ResourcePackFileNotFoundException extends FileNotFoundException { public ResourcePackFileNotFoundException(File parFile, String parString1) { super(HString.format("\'%s\' in ResourcePack \'%s\'", new Object[] { parString1, parFile })); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/ResourcePackListEntry.java b/src/game/java/net/minecraft/client/resources/ResourcePackListEntry.java index 897182f4..36b98fbd 100644 --- a/src/game/java/net/minecraft/client/resources/ResourcePackListEntry.java +++ b/src/game/java/net/minecraft/client/resources/ResourcePackListEntry.java @@ -19,13 +19,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListEntry { private static final ResourceLocation RESOURCE_PACKS_TEXTURE = new ResourceLocation( @@ -56,6 +56,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE this.mc = Minecraft.getMinecraft(); } + @Override public void drawEntry(int var1, int i, int j, int k, int l, int i1, int j1, boolean flag) { int k1 = this.func_183019_a(); if (k1 != 1) { @@ -168,6 +169,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE /** * + Returns true if the mouse has been pressed on this control. */ + @Override public boolean mousePressed(int var1, int var2, int var3, int var4, int i, int j) { if (this.func_148310_d() && i <= 32) { if (this.func_148309_e()) { @@ -178,6 +180,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE proceedWithBs(l, false); } else { this.mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { + @Override public void confirmClicked(boolean flag, int var2) { proceedWithBs(l, flag); @@ -223,6 +226,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE * + Fired when the mouse button is released. Arguments: index, x, y, * mouseEvent, relativeX, relativeY */ + @Override public void mouseReleased(int var1, int var2, int var3, int var4, int var5, int var6) { } @@ -231,6 +235,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE String s1 = I18n.format("resourcePack.incompatible.confirm.title", new Object[0]); String s = I18n.format("resourcePack.incompatible.confirm." + (l > 1 ? "new" : "old"), new Object[0]); this.mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { + @Override public void confirmClicked(boolean flag, int var2) { List list2 = ResourcePackListEntry.this.resourcePacksGUI .getListContaining(ResourcePackListEntry.this); @@ -256,6 +261,7 @@ public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListE } } + @Override public void setSelected(int var1, int var2, int var3) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/ResourcePackListEntryDefault.java b/src/game/java/net/minecraft/client/resources/ResourcePackListEntryDefault.java index 45a09925..10c4715e 100644 --- a/src/game/java/net/minecraft/client/resources/ResourcePackListEntryDefault.java +++ b/src/game/java/net/minecraft/client/resources/ResourcePackListEntryDefault.java @@ -16,13 +16,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ResourcePackListEntryDefault extends ResourcePackListEntry { private static final Logger logger = LogManager.getLogger(); @@ -56,22 +56,27 @@ public class ResourcePackListEntryDefault extends ResourcePackListEntry { dynamictexture); } + @Override protected boolean func_148307_h() { return false; } + @Override protected boolean func_148308_f() { return false; } + @Override protected boolean func_148309_e() { return false; } + @Override protected boolean func_148310_d() { return false; } + @Override protected String func_148311_a() { try { PackMetadataSection packmetadatasection = (PackMetadataSection) this.field_148320_d @@ -88,18 +93,22 @@ public class ResourcePackListEntryDefault extends ResourcePackListEntry { return EnumChatFormatting.RED + "Missing " + "pack.mcmeta" + " :("; } + @Override protected String func_148312_b() { return "Default"; } + @Override protected void func_148313_c() { this.mc.getTextureManager().bindTexture(this.resourcePackIcon); } + @Override protected boolean func_148314_g() { return false; } + @Override protected int func_183019_a() { return 1; } @@ -108,4 +117,4 @@ public class ResourcePackListEntryDefault extends ResourcePackListEntry { protected String getEaglerFolderName() { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/ResourcePackListEntryFound.java b/src/game/java/net/minecraft/client/resources/ResourcePackListEntryFound.java index 571da2ff..f0121279 100644 --- a/src/game/java/net/minecraft/client/resources/ResourcePackListEntryFound.java +++ b/src/game/java/net/minecraft/client/resources/ResourcePackListEntryFound.java @@ -5,13 +5,13 @@ import net.minecraft.client.gui.GuiScreenResourcePacks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.gui.GuiScreenResourcePacks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ResourcePackListEntryFound extends ResourcePackListEntry { private final ResourcePackRepository.Entry field_148319_c; @@ -34,14 +34,17 @@ public class ResourcePackListEntryFound extends ResourcePackListEntry { this.field_148319_c = parEntry; } + @Override protected String func_148311_a() { return this.field_148319_c.getTexturePackDescription(); } + @Override protected String func_148312_b() { return this.field_148319_c.getResourcePackEaglerDisplayName(); } + @Override protected void func_148313_c() { this.field_148319_c.bindTexturePackIcon(this.mc.getTextureManager()); } @@ -50,6 +53,7 @@ public class ResourcePackListEntryFound extends ResourcePackListEntry { return this.field_148319_c; } + @Override protected int func_183019_a() { return this.field_148319_c.func_183027_f(); } @@ -58,4 +62,4 @@ public class ResourcePackListEntryFound extends ResourcePackListEntry { protected String getEaglerFolderName() { return field_148319_c.getResourcePackName(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/ResourcePackRepository.java b/src/game/java/net/minecraft/client/resources/ResourcePackRepository.java index 0368fffe..5cbff544 100644 --- a/src/game/java/net/minecraft/client/resources/ResourcePackRepository.java +++ b/src/game/java/net/minecraft/client/resources/ResourcePackRepository.java @@ -27,13 +27,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ResourcePackRepository { public class Entry { @@ -80,6 +80,7 @@ public class ResourcePackRepository { } + @Override public boolean equals(Object object) { return this == object ? true : (object instanceof ResourcePackRepository.Entry ? this.toString().equals(object.toString()) @@ -108,10 +109,12 @@ public class ResourcePackRepository { : this.rePackMetadataSection.getPackDescription().getFormattedText(); } + @Override public int hashCode() { return this.toString().hashCode(); } + @Override public String toString() { return this.reResourcePack.resourcePackFile; } @@ -258,4 +261,4 @@ public class ResourcePackRepository { this.repositoryEntriesAll = list; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/SimpleReloadableResourceManager.java b/src/game/java/net/minecraft/client/resources/SimpleReloadableResourceManager.java index e44c816d..ee408b1a 100644 --- a/src/game/java/net/minecraft/client/resources/SimpleReloadableResourceManager.java +++ b/src/game/java/net/minecraft/client/resources/SimpleReloadableResourceManager.java @@ -21,13 +21,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleReloadableResourceManager implements IReloadableResourceManager { private static final Logger logger = LogManager.getLogger(); @@ -58,6 +58,7 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag this.setResourceDomains.clear(); } + @Override public List getAllResources(ResourceLocation parResourceLocation) throws IOException { IResourceManager iresourcemanager = (IResourceManager) this.domainResourceManagers .get(parResourceLocation.getResourceDomain()); @@ -68,6 +69,7 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag } } + @Override public IResource getResource(ResourceLocation parResourceLocation) throws IOException { IResourceManager iresourcemanager = (IResourceManager) this.domainResourceManagers .get(parResourceLocation.getResourceDomain()); @@ -78,6 +80,7 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag } } + @Override public Set getResourceDomains() { return this.setResourceDomains; } @@ -89,6 +92,7 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag } + @Override public void registerReloadListener(IResourceManagerReloadListener iresourcemanagerreloadlistener) { this.reloadListeners.add(iresourcemanagerreloadlistener); iresourcemanagerreloadlistener.onResourceManagerReload(this); @@ -109,10 +113,12 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag } + @Override public void reloadResources(List list) { this.clearResources(); logger.info("Reloading ResourceManager: " + joinerResourcePacks.join(Iterables.transform(list, new Function() { + @Override public String apply(IResourcePack iresourcepack1) { return iresourcepack1.getPackName(); } @@ -124,4 +130,4 @@ public class SimpleReloadableResourceManager implements IReloadableResourceManag this.notifyReloadListeners(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/SimpleResource.java b/src/game/java/net/minecraft/client/resources/SimpleResource.java index e19f039d..35c162a1 100644 --- a/src/game/java/net/minecraft/client/resources/SimpleResource.java +++ b/src/game/java/net/minecraft/client/resources/SimpleResource.java @@ -18,13 +18,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleResource implements IResource { private final Map mapMetadataSections = Maps.newHashMap(); @@ -58,6 +58,7 @@ public class SimpleResource implements IResource { this.srMetadataSerializer = srMetadataSerializerIn; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -85,10 +86,12 @@ public class SimpleResource implements IResource { } } + @Override public InputStream getInputStream() { return this.resourceInputStream; } + @Override public T getMetadata(String s) { if (!this.hasMetadata()) { return (T) null; @@ -115,21 +118,25 @@ public class SimpleResource implements IResource { } } + @Override public ResourceLocation getResourceLocation() { return this.srResourceLocation; } + @Override public String getResourcePackName() { return this.resourcePackName; } + @Override public int hashCode() { int i = this.resourcePackName != null ? this.resourcePackName.hashCode() : 0; i = 31 * i + (this.srResourceLocation != null ? this.srResourceLocation.hashCode() : 0); return i; } + @Override public boolean hasMetadata() { return this.mcmetaInputStream != null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/AnimationFrame.java b/src/game/java/net/minecraft/client/resources/data/AnimationFrame.java index 2a35a41b..e4c8c9f2 100644 --- a/src/game/java/net/minecraft/client/resources/data/AnimationFrame.java +++ b/src/game/java/net/minecraft/client/resources/data/AnimationFrame.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources.data; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.resources.data; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AnimationFrame { private final int frameIndex; @@ -47,4 +47,4 @@ public class AnimationFrame { public boolean hasNoTime() { return this.frameTime == -1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSection.java index 50cadc8f..ebd87f61 100644 --- a/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSection.java @@ -9,13 +9,13 @@ import com.google.common.collect.Sets; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import com.google.common.collect.Sets; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AnimationMetadataSection implements IMetadataSection { private final List animationFrames; @@ -91,4 +91,4 @@ public class AnimationMetadataSection implements IMetadataSection { public boolean isInterpolate() { return this.interpolate; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java index f4c59bef..17b82e1c 100644 --- a/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java @@ -14,13 +14,13 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeSerializer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,10 +32,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeSerializer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSerializer implements JSONTypeSerializer { + @Override public AnimationMetadataSection deserialize(JSONObject jsonobject) throws JSONException { ArrayList arraylist = Lists.newArrayList(); int i = jsonobject.optInt("frametime", 1); @@ -76,6 +77,7 @@ public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSeria /** * + The name of this section type as it appears in JSON. */ + @Override public String getSectionName() { return "animation"; } @@ -98,6 +100,7 @@ public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSeria } } + @Override public JSONObject serialize(AnimationMetadataSection animationmetadatasection) { JSONObject jsonobject = new JSONObject(); jsonobject.put("frametime", Integer.valueOf(animationmetadatasection.getFrameTime())); @@ -128,4 +131,4 @@ public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSeria return jsonobject; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java index 4ec3c0d4..ddfe14df 100644 --- a/src/game/java/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources.data; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.client.resources.data; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BaseMetadataSectionSerializer implements IMetadataSectionSerializer { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/FontMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/FontMetadataSection.java index d6f23c17..8801378f 100644 --- a/src/game/java/net/minecraft/client/resources/data/FontMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/FontMetadataSection.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources.data; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.resources.data; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FontMetadataSection implements IMetadataSection { private final float[] charWidths; @@ -33,4 +33,4 @@ public class FontMetadataSection implements IMetadataSection { this.charLefts = parArrayOfFloat2; this.charSpacings = parArrayOfFloat3; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java index 907b57c4..5cad5fd5 100644 --- a/src/game/java/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java @@ -7,13 +7,13 @@ import org.json.JSONObject; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,9 +25,10 @@ import org.json.JSONObject; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FontMetadataSectionSerializer extends BaseMetadataSectionSerializer { + @Override public FontMetadataSection deserialize(JSONObject jsonobject) throws JSONException { float[] afloat = new float[256]; float[] afloat1 = new float[256]; @@ -83,7 +84,8 @@ public class FontMetadataSectionSerializer extends BaseMetadataSectionSerializer /** * + The name of this section type as it appears in JSON. */ + @Override public String getSectionName() { return "font"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/IMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/IMetadataSection.java index 83bb2b7e..16cbe106 100644 --- a/src/game/java/net/minecraft/client/resources/data/IMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/IMetadataSection.java @@ -3,13 +3,13 @@ package net.minecraft.client.resources.data; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.resources.data; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IMetadataSection { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/IMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/IMetadataSectionSerializer.java index 1538d4db..dfdd8f49 100644 --- a/src/game/java/net/minecraft/client/resources/data/IMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/IMetadataSectionSerializer.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeDeserializer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,11 +25,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeDeserializer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IMetadataSectionSerializer extends JSONTypeDeserializer { /** * + The name of this section type as it appears in JSON. */ String getSectionName(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/IMetadataSerializer.java b/src/game/java/net/minecraft/client/resources/data/IMetadataSerializer.java index 972d2ee0..77fcf7f9 100644 --- a/src/game/java/net/minecraft/client/resources/data/IMetadataSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/IMetadataSerializer.java @@ -9,13 +9,13 @@ import net.minecraft.util.RegistrySimple; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.RegistrySimple; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IMetadataSerializer { class Registration { @@ -67,4 +67,4 @@ public class IMetadataSerializer { this.metadataSectionSerializerRegistry.putObject(parIMetadataSectionSerializer.getSectionName(), new IMetadataSerializer.Registration(parIMetadataSectionSerializer, parClass1)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSection.java index c367c02c..9a5cdc68 100644 --- a/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSection.java @@ -7,13 +7,13 @@ import net.minecraft.client.resources.Language; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.Language; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LanguageMetadataSection implements IMetadataSection { private final Collection languages; @@ -37,4 +37,4 @@ public class LanguageMetadataSection implements IMetadataSection { public Collection getLanguages() { return this.languages; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java index fdd222db..bf46f72d 100644 --- a/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java @@ -12,13 +12,13 @@ import net.minecraft.client.resources.Language; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,9 +30,10 @@ import net.minecraft.client.resources.Language; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LanguageMetadataSectionSerializer extends BaseMetadataSectionSerializer { + @Override public LanguageMetadataSection deserialize(JSONObject jsonobject) throws JSONException { HashSet hashset = Sets.newHashSet(); @@ -60,7 +61,8 @@ public class LanguageMetadataSectionSerializer extends BaseMetadataSectionSerial /** * + The name of this section type as it appears in JSON. */ + @Override public String getSectionName() { return "language"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/PackMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/PackMetadataSection.java index a6f9e6f3..b1863036 100644 --- a/src/game/java/net/minecraft/client/resources/data/PackMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/PackMetadataSection.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PackMetadataSection implements IMetadataSection { private final IChatComponent packDescription; @@ -41,4 +41,4 @@ public class PackMetadataSection implements IMetadataSection { public int getPackFormat() { return this.packFormat; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java index aab1e811..3150c083 100644 --- a/src/game/java/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java @@ -10,13 +10,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,10 +28,11 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PackMetadataSectionSerializer extends BaseMetadataSectionSerializer implements JSONTypeSerializer { + @Override public PackMetadataSection deserialize(JSONObject jsonobject) throws JSONException { IChatComponent ichatcomponent = JSONTypeProvider.deserialize(jsonobject.get("description"), IChatComponent.class); @@ -46,10 +47,12 @@ public class PackMetadataSectionSerializer extends BaseMetadataSectionSerializer /** * + The name of this section type as it appears in JSON. */ + @Override public String getSectionName() { return "pack"; } + @Override public JSONObject serialize(PackMetadataSection packmetadatasection) { JSONObject jsonobject = new JSONObject(); jsonobject.put("pack_format", packmetadatasection.getPackFormat()); @@ -57,4 +60,4 @@ public class PackMetadataSectionSerializer extends BaseMetadataSectionSerializer (JSONObject) JSONTypeProvider.serialize(packmetadatasection.getPackDescription())); return jsonobject; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/TextureMetadataSection.java b/src/game/java/net/minecraft/client/resources/data/TextureMetadataSection.java index fd1e6b6c..92067253 100644 --- a/src/game/java/net/minecraft/client/resources/data/TextureMetadataSection.java +++ b/src/game/java/net/minecraft/client/resources/data/TextureMetadataSection.java @@ -6,13 +6,13 @@ import java.util.List; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureMetadataSection implements IMetadataSection { private final boolean textureBlur; @@ -48,4 +48,4 @@ public class TextureMetadataSection implements IMetadataSection { public boolean getTextureClamp() { return this.textureClamp; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java b/src/game/java/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java index bf2d372b..3f5ea06d 100644 --- a/src/game/java/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java +++ b/src/game/java/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java @@ -11,13 +11,13 @@ import com.google.common.collect.Lists; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,9 +29,10 @@ import com.google.common.collect.Lists; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureMetadataSectionSerializer extends BaseMetadataSectionSerializer { + @Override public TextureMetadataSection deserialize(JSONObject jsonobject) throws JSONException { boolean flag = jsonobject.optBoolean("blur", false); boolean flag1 = jsonobject.optBoolean("clamp", false); @@ -67,7 +68,8 @@ public class TextureMetadataSectionSerializer extends BaseMetadataSectionSeriali /** * + The name of this section type as it appears in JSON. */ + @Override public String getSectionName() { return "texture"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/BuiltInModel.java b/src/game/java/net/minecraft/client/resources/model/BuiltInModel.java index c60b30da..2e057fed 100644 --- a/src/game/java/net/minecraft/client/resources/model/BuiltInModel.java +++ b/src/game/java/net/minecraft/client/resources/model/BuiltInModel.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BuiltInModel implements IBakedModel { private ItemCameraTransforms cameraTransforms; @@ -37,31 +37,38 @@ public class BuiltInModel implements IBakedModel { this.cameraTransforms = parItemCameraTransforms; } + @Override public List getFaceQuads(EnumFacing var1) { return null; } + @Override public List getGeneralQuads() { return null; } + @Override public ItemCameraTransforms getItemCameraTransforms() { return this.cameraTransforms; } + @Override public EaglerTextureAtlasSprite getParticleTexture() { return null; } + @Override public boolean isAmbientOcclusion() { return false; } + @Override public boolean isBuiltInRenderer() { return true; } + @Override public boolean isGui3d() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/IBakedModel.java b/src/game/java/net/minecraft/client/resources/model/IBakedModel.java index 58bb2eac..33904f5c 100644 --- a/src/game/java/net/minecraft/client/resources/model/IBakedModel.java +++ b/src/game/java/net/minecraft/client/resources/model/IBakedModel.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBakedModel { List getFaceQuads(EnumFacing var1); @@ -44,4 +44,4 @@ public interface IBakedModel { boolean isBuiltInRenderer(); boolean isGui3d(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/ModelBakery.java b/src/game/java/net/minecraft/client/resources/model/ModelBakery.java index f875b54d..ca11bb85 100644 --- a/src/game/java/net/minecraft/client/resources/model/ModelBakery.java +++ b/src/game/java/net/minecraft/client/resources/model/ModelBakery.java @@ -51,13 +51,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -69,7 +69,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelBakery { private static final Set LOCATIONS_BUILTIN_TEXTURES = Sets.newHashSet(new ResourceLocation[] { @@ -383,6 +383,7 @@ public class ModelBakery { HashSet hashset = Sets.newHashSet(); ArrayList arraylist = Lists.newArrayList(this.variants.keySet()); Collections.sort(arraylist, new Comparator() { + @Override public int compare(ModelResourceLocation modelresourcelocation1, ModelResourceLocation modelresourcelocation2) { return modelresourcelocation1.toString().compareTo(modelresourcelocation2.toString()); @@ -532,6 +533,7 @@ public class ModelBakery { set.addAll(this.getItemsTextureLocations()); set.remove(TextureMap.LOCATION_MISSING_TEXTURE); IIconCreator iiconcreator = new IIconCreator() { + @Override public void registerSprites(TextureMap texturemap) { for (ResourceLocation resourcelocation : (Set) set) { EaglerTextureAtlasSprite textureatlassprite = texturemap.registerSprite(resourcelocation); @@ -739,4 +741,4 @@ public class ModelBakery { this.bakeBlockModels(); return this.bakedRegistry; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/ModelManager.java b/src/game/java/net/minecraft/client/resources/model/ModelManager.java index 005a5ebe..da3323f3 100644 --- a/src/game/java/net/minecraft/client/resources/model/ModelManager.java +++ b/src/game/java/net/minecraft/client/resources/model/ModelManager.java @@ -9,13 +9,13 @@ import net.minecraft.util.IRegistry; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.IRegistry; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelManager implements IResourceManagerReloadListener { private IRegistry modelRegistry; @@ -61,10 +61,11 @@ public class ModelManager implements IResourceManagerReloadListener { return this.texMap; } + @Override public void onResourceManagerReload(IResourceManager iresourcemanager) { ModelBakery modelbakery = new ModelBakery(iresourcemanager, this.texMap, this.modelProvider); this.modelRegistry = modelbakery.setupModelRegistry(); this.defaultModel = (IBakedModel) this.modelRegistry.getObject(ModelBakery.MODEL_MISSING); this.modelProvider.reloadModels(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/ModelResourceLocation.java b/src/game/java/net/minecraft/client/resources/model/ModelResourceLocation.java index 9f20d117..c31eccb0 100644 --- a/src/game/java/net/minecraft/client/resources/model/ModelResourceLocation.java +++ b/src/game/java/net/minecraft/client/resources/model/ModelResourceLocation.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModelResourceLocation extends ResourceLocation { protected static String[] parsePathString(String parString1) { @@ -62,6 +62,7 @@ public class ModelResourceLocation extends ResourceLocation { this(0, parsePathString(parString1 + '#' + (parString2 == null ? "normal" : parString2))); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -77,11 +78,13 @@ public class ModelResourceLocation extends ResourceLocation { return this.variant; } + @Override public int hashCode() { return 31 * super.hashCode() + this.variant.hashCode(); } + @Override public String toString() { return super.toString() + '#' + this.variant; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/ModelRotation.java b/src/game/java/net/minecraft/client/resources/model/ModelRotation.java index 31498015..7f8b0dcf 100644 --- a/src/game/java/net/minecraft/client/resources/model/ModelRotation.java +++ b/src/game/java/net/minecraft/client/resources/model/ModelRotation.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum ModelRotation { X0_Y0(0, 0), X0_Y90(0, 90), X0_Y180(0, 180), X0_Y270(0, 270), X90_Y0(90, 0), X90_Y90(90, 90), X90_Y180(90, 180), @@ -115,4 +115,4 @@ public enum ModelRotation { return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/SimpleBakedModel.java b/src/game/java/net/minecraft/client/resources/model/SimpleBakedModel.java index 93d5906d..fa7377f9 100644 --- a/src/game/java/net/minecraft/client/resources/model/SimpleBakedModel.java +++ b/src/game/java/net/minecraft/client/resources/model/SimpleBakedModel.java @@ -14,13 +14,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleBakedModel implements IBakedModel { public static class Builder { @@ -135,31 +135,38 @@ public class SimpleBakedModel implements IBakedModel { this.cameraTransforms = parItemCameraTransforms; } + @Override public List getFaceQuads(EnumFacing enumfacing) { return (List) this.faceQuads.get(enumfacing.ordinal()); } + @Override public List getGeneralQuads() { return this.generalQuads; } + @Override public ItemCameraTransforms getItemCameraTransforms() { return this.cameraTransforms; } + @Override public EaglerTextureAtlasSprite getParticleTexture() { return this.texture; } + @Override public boolean isAmbientOcclusion() { return this.ambientOcclusion; } + @Override public boolean isBuiltInRenderer() { return false; } + @Override public boolean isGui3d() { return this.gui3d; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/resources/model/WeightedBakedModel.java b/src/game/java/net/minecraft/client/resources/model/WeightedBakedModel.java index 4265f774..c7cfd79c 100644 --- a/src/game/java/net/minecraft/client/resources/model/WeightedBakedModel.java +++ b/src/game/java/net/minecraft/client/resources/model/WeightedBakedModel.java @@ -15,13 +15,13 @@ import net.minecraft.util.WeightedRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.WeightedRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WeightedBakedModel implements IBakedModel { public static class Builder { @@ -63,6 +63,7 @@ public class WeightedBakedModel implements IBakedModel { this.model = parIBakedModel; } + @Override public int compareTo(WeightedBakedModel.MyWeighedRandomItem weightedbakedmodel$myweighedrandomitem) { return ComparisonChain.start().compare(weightedbakedmodel$myweighedrandomitem.itemWeight, this.itemWeight) .compare(this.getCountQuads(), weightedbakedmodel$myweighedrandomitem.getCountQuads()).result(); @@ -79,6 +80,7 @@ public class WeightedBakedModel implements IBakedModel { return i; } + @Override public String toString() { return "MyWeighedRandomItem{weight=" + this.itemWeight + ", model=" + this.model + '}'; } @@ -101,31 +103,38 @@ public class WeightedBakedModel implements IBakedModel { Math.abs((int) parLong1 >> 16) % this.totalWeight)).model; } + @Override public List getFaceQuads(EnumFacing enumfacing) { return this.baseModel.getFaceQuads(enumfacing); } + @Override public List getGeneralQuads() { return this.baseModel.getGeneralQuads(); } + @Override public ItemCameraTransforms getItemCameraTransforms() { return this.baseModel.getItemCameraTransforms(); } + @Override public EaglerTextureAtlasSprite getParticleTexture() { return this.baseModel.getParticleTexture(); } + @Override public boolean isAmbientOcclusion() { return this.baseModel.isAmbientOcclusion(); } + @Override public boolean isBuiltInRenderer() { return this.baseModel.isBuiltInRenderer(); } + @Override public boolean isGui3d() { return this.baseModel.isGui3d(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/settings/GameSettings.java b/src/game/java/net/minecraft/client/settings/GameSettings.java index 5af4e3ad..0c0c3304 100644 --- a/src/game/java/net/minecraft/client/settings/GameSettings.java +++ b/src/game/java/net/minecraft/client/settings/GameSettings.java @@ -27,6 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformType; import net.lax1dude.eaglercraft.v1_8.internal.KeyboardConstants; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.minecraft.GuiScreenVideoSettingsWarning; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredConfig; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.EaglerDeferredPipeline; import net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights.DynamicLightsStateManager; @@ -48,13 +49,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -66,7 +67,7 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameSettings { public static enum Options { @@ -245,7 +246,7 @@ public class GameSettings { public float mouseSensitivity = 0.5F; public boolean invertMouse; - public int renderDistanceChunks = -1; + public int renderDistanceChunks = 4; public boolean viewBobbing = true; public boolean anaglyph; public boolean fboEnable = true; @@ -271,7 +272,7 @@ public class GameSettings { public boolean allowBlockAlternatives = true; public boolean reducedDebugInfo = false; public boolean hideServerAddress; - public boolean advancedItemTooltips; + public boolean advancedItemTooltips = EagRuntime.getPlatformType() == EnumPlatformType.DESKTOP; /** * + Whether to pause when the game loses focus, toggled by F3+P */ @@ -323,30 +324,36 @@ public class GameSettings { new KeyBinding("key.hotbar.7", 8, "key.categories.inventory"), new KeyBinding("key.hotbar.8", 9, "key.categories.inventory"), new KeyBinding("key.hotbar.9", 10, "key.categories.inventory") }; - public KeyBinding[] keyBindings; - protected Minecraft mc; - public EnumDifficulty difficulty; + public KeyBinding[] keyBindings = (KeyBinding[]) ArrayUtils.addAll( + new KeyBinding[] { this.keyBindAttack, this.keyBindUseItem, this.keyBindForward, this.keyBindLeft, + this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindSneak, this.keyBindSprint, + this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindPlayerList, + this.keyBindPickBlock, this.keyBindCommand, this.keyBindScreenshot, this.keyBindTogglePerspective, + this.keyBindSmoothCamera, this.keyBindZoomCamera, this.keyBindFunction, this.keyBindClose }, + this.keyBindsHotbar); + protected final Minecraft mc; + public EnumDifficulty difficulty = EnumDifficulty.NORMAL; public boolean hasCreatedDemoWorld; - public int relayTimeout; - public boolean hideJoinCode; + public int relayTimeout = 4; + public boolean hideJoinCode = false; public boolean hideGUI; public int thirdPersonView; public boolean showDebugInfo; public boolean showDebugProfilerChart; public boolean field_181657_aC; - public String lastServer; + public String lastServer = ""; public boolean smoothCamera; public boolean debugCamEnable; - public float fovSetting; - public float gammaSetting; + public float fovSetting = 70.0F; + public float gammaSetting = 1.0F; public float saturation; /** * + GUI scale */ public int guiScale = 3; public int particleSetting = 2; - public String language; - public boolean forceUnicodeFont; + public String language = EagRuntime.getConfiguration().getDefaultLocale(); + public boolean forceUnicodeFont = false; public boolean hudFps = true; public boolean hudCoords = true; public boolean hudPlayer = false; @@ -368,12 +375,13 @@ public class GameSettings { public boolean hasShownProfanityFilter = true; public float touchControlOpacity = 1.0f; public boolean hideDefaultUsernameWarning = false; + public boolean hideVideoSettingsWarning = EagRuntime.getPlatformType() == EnumPlatformType.DESKTOP; public int voiceListenRadius = 16; public float voiceListenVolume = 0.5f; public float voiceSpeakVolume = 0.5f; public int voicePTTKey = 47; // V - public EnumScreenRecordingCodec screenRecordCodec; + public EnumScreenRecordingCodec screenRecordCodec = ScreenRecordingController.getDefaultCodec(); public int screenRecordFPS = ScreenRecordingController.DEFAULT_FPS; public int screenRecordResolution = ScreenRecordingController.DEFAULT_RESOLUTION; @@ -386,26 +394,26 @@ public class GameSettings { public float screenRecordMicVolume = ScreenRecordingController.DEFAULT_MIC_VOLUME; public GameSettings(Minecraft mcIn) { - this.keyBindings = (KeyBinding[]) ArrayUtils.addAll(new KeyBinding[] { this.keyBindAttack, this.keyBindUseItem, - this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, - this.keyBindSneak, this.keyBindSprint, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, - this.keyBindPlayerList, this.keyBindPickBlock, this.keyBindCommand, this.keyBindScreenshot, - this.keyBindTogglePerspective, this.keyBindSmoothCamera, this.keyBindZoomCamera, this.keyBindFunction, - this.keyBindClose }, this.keyBindsHotbar); - this.difficulty = EnumDifficulty.NORMAL; - this.relayTimeout = 4; - this.hideJoinCode = false; - this.lastServer = ""; - this.fovSetting = 70.0F; - this.gammaSetting = 1.0F; - this.language = EagRuntime.getConfiguration().getDefaultLocale(); - this.forceUnicodeFont = false; this.mc = mcIn; - this.renderDistanceChunks = 4; - this.screenRecordCodec = ScreenRecordingController.getDefaultCodec(); this.loadOptions(); } + public int checkBadVideoSettings() { + return hideVideoSettingsWarning ? 0 + : ((renderDistanceChunks > 6 ? GuiScreenVideoSettingsWarning.WARNING_RENDER_DISTANCE : 0) + | (!enableVsync ? GuiScreenVideoSettingsWarning.WARNING_VSYNC : 0) + | (limitFramerate < 30 ? GuiScreenVideoSettingsWarning.WARNING_FRAME_LIMIT : 0)); + } + + public void fixBadVideoSettings() { + if (renderDistanceChunks > 6) + renderDistanceChunks = 4; + if (!enableVsync) + enableVsync = true; + if (limitFramerate < 30) + limitFramerate = 260; + } + public int func_181147_e() { return this.renderDistanceChunks >= 4 ? this.clouds : 0; } @@ -992,6 +1000,10 @@ public class GameSettings { this.hideDefaultUsernameWarning = astring[1].equals("true"); } + if (astring[0].equals("hideVideoSettingsWarning")) { + hideVideoSettingsWarning = astring[1].equals("true"); + } + deferredShaderConf.readOption(astring[0], astring[1]); } catch (Exception var8) { logger.warn("Skipping bad option: " + s); @@ -1411,6 +1423,7 @@ public class GameSettings { printwriter.println("screenRecordMicVolume:" + this.screenRecordMicVolume); printwriter.println("touchControlOpacity:" + this.touchControlOpacity); printwriter.println("hideDefaultUsernameWarning:" + this.hideDefaultUsernameWarning); + printwriter.println("hideVideoSettingsWarning:" + this.hideVideoSettingsWarning); for (KeyBinding keybinding : this.keyBindings) { printwriter.println("key_" + keybinding.getKeyDescription() + ":" + keybinding.getKeyCode()); @@ -1439,4 +1452,4 @@ public class GameSettings { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/settings/KeyBinding.java b/src/game/java/net/minecraft/client/settings/KeyBinding.java index 417f6ce0..d6916409 100644 --- a/src/game/java/net/minecraft/client/settings/KeyBinding.java +++ b/src/game/java/net/minecraft/client/settings/KeyBinding.java @@ -12,13 +12,13 @@ import net.minecraft.util.IntHashMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.IntHashMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class KeyBinding implements Comparable { private static final List keybindArray = Lists.newArrayList(); @@ -100,6 +100,7 @@ public class KeyBinding implements Comparable { keybindSet.add(category); } + @Override public int compareTo(KeyBinding keybinding) { int i = I18n.format(this.keyCategory, new Object[0]) .compareTo(I18n.format(keybinding.keyCategory, new Object[0])); @@ -156,4 +157,4 @@ public class KeyBinding implements Comparable { this.pressTime = 0; this.pressed = false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/stream/IStream.java b/src/game/java/net/minecraft/client/stream/IStream.java index b1399267..e30fe88e 100644 --- a/src/game/java/net/minecraft/client/stream/IStream.java +++ b/src/game/java/net/minecraft/client/stream/IStream.java @@ -3,13 +3,13 @@ package net.minecraft.client.stream; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.client.stream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IStream { public static enum AuthFailureReason { @@ -88,4 +88,4 @@ public interface IStream { void unpause(); void updateStreamVolume(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/util/JsonBlendingMode.java b/src/game/java/net/minecraft/client/util/JsonBlendingMode.java index 3361c4c3..47466ef7 100644 --- a/src/game/java/net/minecraft/client/util/JsonBlendingMode.java +++ b/src/game/java/net/minecraft/client/util/JsonBlendingMode.java @@ -8,13 +8,13 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JsonBlendingMode { private static JsonBlendingMode field_148118_a = null; @@ -148,6 +148,7 @@ public class JsonBlendingMode { this(true, false, parInt1, parInt2, parInt3, parInt4, parInt5); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -192,6 +193,7 @@ public class JsonBlendingMode { return this.field_148119_h; } + @Override public int hashCode() { int i = this.field_148116_b; i = 31 * i + this.field_148117_c; @@ -202,4 +204,4 @@ public class JsonBlendingMode { i = 31 * i + (this.field_148119_h ? 1 : 0); return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/client/util/JsonException.java b/src/game/java/net/minecraft/client/util/JsonException.java index d7860156..8dd55b4d 100644 --- a/src/game/java/net/minecraft/client/util/JsonException.java +++ b/src/game/java/net/minecraft/client/util/JsonException.java @@ -11,13 +11,13 @@ import com.google.common.collect.Lists; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import com.google.common.collect.Lists; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JsonException extends IOException { public static class Entry { @@ -49,6 +49,7 @@ public class JsonException extends IOException { this.field_151375_b.add(0, parString1); } + @Override public String toString() { return this.field_151376_a != null ? (!this.field_151375_b.isEmpty() ? this.field_151376_a + " " + this.func_151372_b() @@ -94,8 +95,9 @@ public class JsonException extends IOException { this.field_151383_a.add(0, new JsonException.Entry()); } + @Override public String getMessage() { return "Invalid " + ((JsonException.Entry) this.field_151383_a.get(this.field_151383_a.size() - 1)).toString() + ": " + this.field_151382_b; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandBase.java b/src/game/java/net/minecraft/command/CommandBase.java index 62685712..cd3890f0 100644 --- a/src/game/java/net/minecraft/command/CommandBase.java +++ b/src/game/java/net/minecraft/command/CommandBase.java @@ -25,13 +25,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class CommandBase implements ICommand { @@ -609,6 +609,7 @@ public abstract class CommandBase implements ICommand { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] var2, BlockPos var3) { return null; } @@ -616,10 +617,12 @@ public abstract class CommandBase implements ICommand { /** * + Returns true if the given command sender is allowed to use this command. */ + @Override public boolean canCommandSenderUseCommand(ICommandSender icommandsender) { return icommandsender.canCommandSenderUseCommand(this.getRequiredPermissionLevel(), this.getCommandName()); } + @Override public int compareTo(ICommand icommand) { return this.getCommandName().compareTo(icommand.getCommandName()); } @@ -627,6 +630,7 @@ public abstract class CommandBase implements ICommand { /** * + Gets a list of aliases for this command */ + @Override public List getCommandAliases() { return Collections.emptyList(); } @@ -642,7 +646,8 @@ public abstract class CommandBase implements ICommand { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int var2) { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandBlockData.java b/src/game/java/net/minecraft/command/CommandBlockData.java index 6b979d61..b84e079e 100644 --- a/src/game/java/net/minecraft/command/CommandBlockData.java +++ b/src/game/java/net/minecraft/command/CommandBlockData.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,13 +30,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandBlockData extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 ? func_175771_a(astring, 0, blockpos) : null; } @@ -44,6 +45,7 @@ public class CommandBlockData extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "blockdata"; } @@ -51,6 +53,7 @@ public class CommandBlockData extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.blockdata.usage"; } @@ -58,6 +61,7 @@ public class CommandBlockData extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -65,6 +69,7 @@ public class CommandBlockData extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 4) { throw new WrongUsageException("commands.blockdata.usage", new Object[0]); @@ -112,4 +117,4 @@ public class CommandBlockData extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandClearInventory.java b/src/game/java/net/minecraft/command/CommandClearInventory.java index a82906d7..c34c4fb8 100644 --- a/src/game/java/net/minecraft/command/CommandClearInventory.java +++ b/src/game/java/net/minecraft/command/CommandClearInventory.java @@ -14,13 +14,13 @@ import net.minecraft.util.ChatComponentTranslation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.util.ChatComponentTranslation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandClearInventory extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, this.func_147209_d()) : (astring.length == 2 ? getListOfStringsMatchingLastWord(astring, Item.itemRegistry.getKeys()) : null); @@ -51,6 +52,7 @@ public class CommandClearInventory extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "clear"; } @@ -58,6 +60,7 @@ public class CommandClearInventory extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.clear.usage"; } @@ -65,6 +68,7 @@ public class CommandClearInventory extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -73,6 +77,7 @@ public class CommandClearInventory extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -80,6 +85,7 @@ public class CommandClearInventory extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { EntityPlayerMP entityplayermp = parArrayOfString.length == 0 ? getCommandSenderAsPlayer(parICommandSender) : getPlayer(parICommandSender, parArrayOfString[0]); @@ -119,4 +125,4 @@ public class CommandClearInventory extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandClone.java b/src/game/java/net/minecraft/command/CommandClone.java index 48a104e9..88b7af6b 100644 --- a/src/game/java/net/minecraft/command/CommandClone.java +++ b/src/game/java/net/minecraft/command/CommandClone.java @@ -16,18 +16,18 @@ import net.minecraft.util.BlockPos; import net.minecraft.world.NextTickListEntry; import net.minecraft.world.World; import net.minecraft.world.gen.structure.StructureBoundingBox; -import net.starlikeclient.StarlikeSettings; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.starlikeclient.StarlikeSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandClone extends CommandBase { @@ -58,6 +58,7 @@ public class CommandClone extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 @@ -82,6 +83,7 @@ public class CommandClone extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "clone"; } @@ -89,6 +91,7 @@ public class CommandClone extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.clone.usage"; } @@ -96,6 +99,7 @@ public class CommandClone extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -103,6 +107,7 @@ public class CommandClone extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 9) { throw new WrongUsageException("commands.clone.usage", new Object[0]); @@ -115,9 +120,9 @@ public class CommandClone extends CommandBase { StructureBoundingBox structureboundingbox1 = new StructureBoundingBox(blockpos2, blockpos2.add(structureboundingbox.func_175896_b())); int i = structureboundingbox.getXSize() * structureboundingbox.getYSize() * structureboundingbox.getZSize(); - if (i > StarlikeSettings.commandModificationBlockLimit) { + if (i > StarlikeClient.Config.Commands.commandModificationBlockLimit) { throw new CommandException("commands.clone.tooManyBlocks", new Object[] { Integer.valueOf(i), - Integer.valueOf(StarlikeSettings.commandModificationBlockLimit) }); + Integer.valueOf(StarlikeClient.Config.Commands.commandModificationBlockLimit) }); } else { boolean flag = false; Block block = null; @@ -293,4 +298,4 @@ public class CommandClone extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandCompare.java b/src/game/java/net/minecraft/command/CommandCompare.java index ca1f4a3e..85c37398 100644 --- a/src/game/java/net/minecraft/command/CommandCompare.java +++ b/src/game/java/net/minecraft/command/CommandCompare.java @@ -13,13 +13,13 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,13 +31,14 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandCompare extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 ? func_175771_a(astring, 0, blockpos) : (astring.length > 3 && astring.length <= 6 ? func_175771_a(astring, 3, blockpos) @@ -50,6 +51,7 @@ public class CommandCompare extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "testforblocks"; } @@ -57,6 +59,7 @@ public class CommandCompare extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.compare.usage"; } @@ -64,6 +67,7 @@ public class CommandCompare extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -71,6 +75,7 @@ public class CommandCompare extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 9) { throw new WrongUsageException("commands.compare.usage", new Object[0]); @@ -99,8 +104,8 @@ public class CommandCompare extends CommandBase { BlockPos blockpos3 = new BlockPos(structureboundingbox1.minX - structureboundingbox.minX, structureboundingbox1.minY - structureboundingbox.minY, structureboundingbox1.minZ - structureboundingbox.minZ); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); - BlockPos.MutableBlockPos blockpos$mutableblockpos1 = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); + BlockPos blockpos$mutableblockpos1 = new BlockPos(); for (int j = structureboundingbox.minZ; j <= structureboundingbox.maxZ; ++j) { for (int k = structureboundingbox.minY; k <= structureboundingbox.maxY; ++k) { @@ -155,4 +160,4 @@ public class CommandCompare extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandDefaultGameMode.java b/src/game/java/net/minecraft/command/CommandDefaultGameMode.java index f0e847ed..587b4eb5 100644 --- a/src/game/java/net/minecraft/command/CommandDefaultGameMode.java +++ b/src/game/java/net/minecraft/command/CommandDefaultGameMode.java @@ -10,13 +10,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,13 +28,14 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandDefaultGameMode extends CommandGameMode { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "defaultgamemode"; } @@ -42,6 +43,7 @@ public class CommandDefaultGameMode extends CommandGameMode { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.defaultgamemode.usage"; } @@ -49,6 +51,7 @@ public class CommandDefaultGameMode extends CommandGameMode { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length <= 0) { throw new WrongUsageException("commands.defaultgamemode.usage", new Object[0]); @@ -74,4 +77,4 @@ public class CommandDefaultGameMode extends CommandGameMode { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandDifficulty.java b/src/game/java/net/minecraft/command/CommandDifficulty.java index 427daf87..46e35669 100644 --- a/src/game/java/net/minecraft/command/CommandDifficulty.java +++ b/src/game/java/net/minecraft/command/CommandDifficulty.java @@ -10,13 +10,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,13 +28,14 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandDifficulty extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, new String[] { "peaceful", "easy", "normal", "hard" }) @@ -44,6 +45,7 @@ public class CommandDifficulty extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "difficulty"; } @@ -51,6 +53,7 @@ public class CommandDifficulty extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.difficulty.usage"; } @@ -70,6 +73,7 @@ public class CommandDifficulty extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -77,6 +81,7 @@ public class CommandDifficulty extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length <= 0) { throw new WrongUsageException("commands.difficulty.usage", new Object[0]); @@ -87,4 +92,4 @@ public class CommandDifficulty extends CommandBase { new ChatComponentTranslation(enumdifficulty.getDifficultyResourceKey(), new Object[0]) }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandEffect.java b/src/game/java/net/minecraft/command/CommandEffect.java index 904bbdf0..5420cad8 100644 --- a/src/game/java/net/minecraft/command/CommandEffect.java +++ b/src/game/java/net/minecraft/command/CommandEffect.java @@ -12,13 +12,13 @@ import net.minecraft.util.ChatComponentTranslation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,13 +30,14 @@ import net.minecraft.util.ChatComponentTranslation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandEffect extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, this.getAllUsernames()) : (astring.length == 2 ? getListOfStringsMatchingLastWord(astring, Potion.func_181168_c()) @@ -52,6 +53,7 @@ public class CommandEffect extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "effect"; } @@ -59,6 +61,7 @@ public class CommandEffect extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.effect.usage"; } @@ -66,6 +69,7 @@ public class CommandEffect extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -74,6 +78,7 @@ public class CommandEffect extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -81,6 +86,7 @@ public class CommandEffect extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.effect.usage", new Object[0]); @@ -158,4 +164,4 @@ public class CommandEffect extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandEnchant.java b/src/game/java/net/minecraft/command/CommandEnchant.java index 73c21c2e..aaf72110 100644 --- a/src/game/java/net/minecraft/command/CommandEnchant.java +++ b/src/game/java/net/minecraft/command/CommandEnchant.java @@ -12,13 +12,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,13 +30,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandEnchant extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, this.getListOfPlayers()) : (astring.length == 2 ? getListOfStringsMatchingLastWord(astring, Enchantment.func_181077_c()) : null); @@ -45,6 +46,7 @@ public class CommandEnchant extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "enchant"; } @@ -52,6 +54,7 @@ public class CommandEnchant extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.enchant.usage"; } @@ -63,6 +66,7 @@ public class CommandEnchant extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -71,6 +75,7 @@ public class CommandEnchant extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] args, int index) { return index == 0; } @@ -78,6 +83,7 @@ public class CommandEnchant extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.enchant.usage", new Object[0]); @@ -137,4 +143,4 @@ public class CommandEnchant extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandEntityData.java b/src/game/java/net/minecraft/command/CommandEntityData.java index 99cacca7..f925d31c 100644 --- a/src/game/java/net/minecraft/command/CommandEntityData.java +++ b/src/game/java/net/minecraft/command/CommandEntityData.java @@ -9,13 +9,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandEntityData extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "entitydata"; } @@ -41,6 +42,7 @@ public class CommandEntityData extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.entitydata.usage"; } @@ -48,6 +50,7 @@ public class CommandEntityData extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -56,6 +59,7 @@ public class CommandEntityData extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -63,6 +67,7 @@ public class CommandEntityData extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.entitydata.usage", new Object[0]); @@ -84,8 +89,7 @@ public class CommandEntityData extends CommandBase { new Object[] { nbtexception.getMessage() }); } - nbttagcompound2.removeTag("UUIDMost"); - nbttagcompound2.removeTag("UUIDLeast"); + nbttagcompound2.removeTag("UUID"); nbttagcompound.merge(nbttagcompound2); if (nbttagcompound.equals(nbttagcompound1)) { throw new CommandException("commands.entitydata.failed", @@ -98,4 +102,4 @@ public class CommandEntityData extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandException.java b/src/game/java/net/minecraft/command/CommandException.java index 41257485..8c91e312 100644 --- a/src/game/java/net/minecraft/command/CommandException.java +++ b/src/game/java/net/minecraft/command/CommandException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandException extends Exception { private final Object[] errorObjects; @@ -34,4 +34,4 @@ public class CommandException extends Exception { public Object[] getErrorObjects() { return this.errorObjects; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandExecuteAt.java b/src/game/java/net/minecraft/command/CommandExecuteAt.java index 1bc26548..b9ae5379 100644 --- a/src/game/java/net/minecraft/command/CommandExecuteAt.java +++ b/src/game/java/net/minecraft/command/CommandExecuteAt.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandExecuteAt extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -53,6 +54,7 @@ public class CommandExecuteAt extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "execute"; } @@ -60,6 +62,7 @@ public class CommandExecuteAt extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.execute.usage"; } @@ -67,6 +70,7 @@ public class CommandExecuteAt extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -75,6 +79,7 @@ public class CommandExecuteAt extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -82,6 +87,7 @@ public class CommandExecuteAt extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(final ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 5) { @@ -112,44 +118,54 @@ public class CommandExecuteAt extends CommandBase { String s = buildString(parArrayOfString, b0); ICommandSender icommandsender = new ICommandSender() { + @Override public void addChatMessage(IChatComponent component) { parICommandSender.addChatMessage(component); } + @Override public boolean canCommandSenderUseCommand(int permLevel, String commandName) { return parICommandSender.canCommandSenderUseCommand(permLevel, commandName); } + @Override public Entity getCommandSenderEntity() { return entity; } + @Override public IChatComponent getDisplayName() { return entity.getDisplayName(); } + @Override public World getEntityWorld() { return entity.worldObj; } + @Override public String getName() { return entity.getName(); } + @Override public BlockPos getPosition() { return blockpos; } + @Override public Vec3 getPositionVector() { return new Vec3(d0, d1, d2); } + @Override public boolean sendCommandFeedback() { MinecraftServer minecraftserver = MinecraftServer.getServer(); return minecraftserver == null || minecraftserver.worldServers[0].getGameRules().getBoolean("commandBlockOutput"); } + @Override public void setCommandStat(CommandResultStats.Type type, int amount) { entity.setCommandStat(type, amount); } @@ -166,4 +182,4 @@ public class CommandExecuteAt extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandFill.java b/src/game/java/net/minecraft/command/CommandFill.java index 620a1207..e39005af 100644 --- a/src/game/java/net/minecraft/command/CommandFill.java +++ b/src/game/java/net/minecraft/command/CommandFill.java @@ -15,18 +15,18 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; -import net.starlikeclient.StarlikeSettings; +import net.starlikeclient.StarlikeClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,13 +38,14 @@ import net.starlikeclient.StarlikeSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandFill extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 @@ -65,6 +66,7 @@ public class CommandFill extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "fill"; } @@ -72,6 +74,7 @@ public class CommandFill extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.fill.usage"; } @@ -79,6 +82,7 @@ public class CommandFill extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -86,6 +90,7 @@ public class CommandFill extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 7) { throw new WrongUsageException("commands.fill.usage", new Object[0]); @@ -105,9 +110,9 @@ public class CommandFill extends CommandBase { Math.max(blockpos.getY(), blockpos1.getY()), Math.max(blockpos.getZ(), blockpos1.getZ())); int j = (blockpos3.getX() - blockpos2.getX() + 1) * (blockpos3.getY() - blockpos2.getY() + 1) * (blockpos3.getZ() - blockpos2.getZ() + 1); - if (j > StarlikeSettings.commandModificationBlockLimit) { + if (j > StarlikeClient.Config.Commands.commandModificationBlockLimit) { throw new CommandException("commands.fill.tooManyBlocks", new Object[] { Integer.valueOf(j), - Integer.valueOf(StarlikeSettings.commandModificationBlockLimit) }); + Integer.valueOf(StarlikeClient.Config.Commands.commandModificationBlockLimit) }); } else if (blockpos2.getY() >= 0 && blockpos3.getY() < 256) { World world = parICommandSender.getEntityWorld(); @@ -221,4 +226,4 @@ public class CommandFill extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandGameMode.java b/src/game/java/net/minecraft/command/CommandGameMode.java index cdb8803b..48905535 100644 --- a/src/game/java/net/minecraft/command/CommandGameMode.java +++ b/src/game/java/net/minecraft/command/CommandGameMode.java @@ -11,13 +11,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,13 +29,14 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandGameMode extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, @@ -47,6 +48,7 @@ public class CommandGameMode extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "gamemode"; } @@ -54,6 +56,7 @@ public class CommandGameMode extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.gamemode.usage"; } @@ -92,6 +95,7 @@ public class CommandGameMode extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -100,6 +104,7 @@ public class CommandGameMode extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 1; } @@ -107,6 +112,7 @@ public class CommandGameMode extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length <= 0) { throw new WrongUsageException("commands.gamemode.usage", new Object[0]); @@ -134,4 +140,4 @@ public class CommandGameMode extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandGameRule.java b/src/game/java/net/minecraft/command/CommandGameRule.java index 2709f9bc..beb98007 100644 --- a/src/game/java/net/minecraft/command/CommandGameRule.java +++ b/src/game/java/net/minecraft/command/CommandGameRule.java @@ -12,13 +12,13 @@ import net.minecraft.world.GameRules; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.GameRules; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandGameRule extends CommandBase { @@ -50,6 +50,7 @@ public class CommandGameRule extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { if (astring.length == 1) { return getListOfStringsMatchingLastWord(astring, this.getGameRules().getRules()); @@ -68,6 +69,7 @@ public class CommandGameRule extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "gamerule"; } @@ -75,6 +77,7 @@ public class CommandGameRule extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.gamerule.usage"; } @@ -89,6 +92,7 @@ public class CommandGameRule extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -96,6 +100,7 @@ public class CommandGameRule extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { GameRules gamerules = this.getGameRules(); String s = parArrayOfString.length > 0 ? parArrayOfString[0] : ""; @@ -125,4 +130,4 @@ public class CommandGameRule extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandGive.java b/src/game/java/net/minecraft/command/CommandGive.java index 6ed01733..d36a8d87 100644 --- a/src/game/java/net/minecraft/command/CommandGive.java +++ b/src/game/java/net/minecraft/command/CommandGive.java @@ -14,13 +14,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandGive extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, this.getPlayers()) : (astring.length == 2 ? getListOfStringsMatchingLastWord(astring, Item.itemRegistry.getKeys()) : null); @@ -47,6 +48,7 @@ public class CommandGive extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "give"; } @@ -54,6 +56,7 @@ public class CommandGive extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.give.usage"; } @@ -65,6 +68,7 @@ public class CommandGive extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -73,6 +77,7 @@ public class CommandGive extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -80,6 +85,7 @@ public class CommandGive extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.give.usage", new Object[0]); @@ -127,4 +133,4 @@ public class CommandGive extends CommandBase { new Object[] { itemstack.getChatComponent(), Integer.valueOf(i), entityplayermp.getName() }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandHandler.java b/src/game/java/net/minecraft/command/CommandHandler.java index 26c7fea6..5c6d8ddc 100644 --- a/src/game/java/net/minecraft/command/CommandHandler.java +++ b/src/game/java/net/minecraft/command/CommandHandler.java @@ -20,13 +20,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandHandler implements ICommandManager { @@ -61,6 +61,7 @@ public class CommandHandler implements ICommandManager { */ private final Set commandSet = Sets.newHashSet(); + @Override public int executeCommand(ICommandSender sender, String rawCommand) { rawCommand = rawCommand.trim(); if (rawCommand.startsWith("/")) { @@ -109,6 +110,7 @@ public class CommandHandler implements ICommandManager { return j; } + @Override public Map getCommands() { return this.commandMap; } @@ -116,6 +118,7 @@ public class CommandHandler implements ICommandManager { /** * + returns all commands that the commandSender can use */ + @Override public List getPossibleCommands(ICommandSender sender) { ArrayList arraylist = Lists.newArrayList(); @@ -128,6 +131,7 @@ public class CommandHandler implements ICommandManager { return arraylist; } + @Override public List getTabCompletionOptions(ICommandSender sender, String input, BlockPos pos) { String[] astring = input.split(" ", -1); String s = astring[0]; @@ -214,4 +218,4 @@ public class CommandHandler implements ICommandManager { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandHelp.java b/src/game/java/net/minecraft/command/CommandHelp.java index ddfb0c87..5a9804ac 100644 --- a/src/game/java/net/minecraft/command/CommandHelp.java +++ b/src/game/java/net/minecraft/command/CommandHelp.java @@ -17,13 +17,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,13 +35,14 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandHelp extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { if (astring.length == 1) { Set set = this.getCommands().keySet(); @@ -54,6 +55,7 @@ public class CommandHelp extends CommandBase { /** * + Gets a list of aliases for this command */ + @Override public List getCommandAliases() { return Arrays.asList(new String[] { "?" }); } @@ -61,6 +63,7 @@ public class CommandHelp extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "help"; } @@ -72,6 +75,7 @@ public class CommandHelp extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.help.usage"; } @@ -79,6 +83,7 @@ public class CommandHelp extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 0; } @@ -96,6 +101,7 @@ public class CommandHelp extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { List list = this.getSortedPossibleCommands(parICommandSender); boolean flag = true; @@ -141,4 +147,4 @@ public class CommandHelp extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandKill.java b/src/game/java/net/minecraft/command/CommandKill.java index 0aec4d68..1e54cb6a 100644 --- a/src/game/java/net/minecraft/command/CommandKill.java +++ b/src/game/java/net/minecraft/command/CommandKill.java @@ -10,13 +10,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,13 +28,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandKill extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -44,6 +45,7 @@ public class CommandKill extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "kill"; } @@ -51,6 +53,7 @@ public class CommandKill extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.kill.usage"; } @@ -58,6 +61,7 @@ public class CommandKill extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -66,6 +70,7 @@ public class CommandKill extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -73,6 +78,7 @@ public class CommandKill extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length == 0) { EntityPlayerMP entityplayermp = getCommandSenderAsPlayer(parICommandSender); @@ -86,4 +92,4 @@ public class CommandKill extends CommandBase { new Object[] { entity.getDisplayName() }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandNotFoundException.java b/src/game/java/net/minecraft/command/CommandNotFoundException.java index 4b8b0cf4..fad5db70 100644 --- a/src/game/java/net/minecraft/command/CommandNotFoundException.java +++ b/src/game/java/net/minecraft/command/CommandNotFoundException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandNotFoundException extends CommandException { @@ -32,4 +32,4 @@ public class CommandNotFoundException extends CommandException { public CommandNotFoundException(String parString1, Object... parArrayOfObject) { super(parString1, parArrayOfObject); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandParticle.java b/src/game/java/net/minecraft/command/CommandParticle.java index 2abfd8aa..3c149046 100644 --- a/src/game/java/net/minecraft/command/CommandParticle.java +++ b/src/game/java/net/minecraft/command/CommandParticle.java @@ -11,13 +11,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,13 +29,14 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandParticle extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, EnumParticleTypes.getParticleNames()) : (astring.length > 1 && astring.length <= 4 ? func_175771_a(astring, 1, blockpos) @@ -47,6 +48,7 @@ public class CommandParticle extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "particle"; } @@ -54,6 +56,7 @@ public class CommandParticle extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.particle.usage"; } @@ -61,6 +64,7 @@ public class CommandParticle extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -68,6 +72,7 @@ public class CommandParticle extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 8) { throw new WrongUsageException("commands.particle.usage", new Object[0]); @@ -138,4 +143,4 @@ public class CommandParticle extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandPlaySound.java b/src/game/java/net/minecraft/command/CommandPlaySound.java index 3d174a1f..df26c3a8 100644 --- a/src/game/java/net/minecraft/command/CommandPlaySound.java +++ b/src/game/java/net/minecraft/command/CommandPlaySound.java @@ -11,13 +11,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,13 +29,14 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandPlaySound extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 2 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -45,6 +46,7 @@ public class CommandPlaySound extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "playsound"; } @@ -52,6 +54,7 @@ public class CommandPlaySound extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.playsound.usage"; } @@ -59,6 +62,7 @@ public class CommandPlaySound extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -67,6 +71,7 @@ public class CommandPlaySound extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 1; } @@ -74,6 +79,7 @@ public class CommandPlaySound extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException(this.getCommandUsage(parICommandSender), new Object[0]); @@ -139,4 +145,4 @@ public class CommandPlaySound extends CommandBase { new Object[] { s, entityplayermp.getName() }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandReplaceItem.java b/src/game/java/net/minecraft/command/CommandReplaceItem.java index 3fd49a66..d119021a 100644 --- a/src/game/java/net/minecraft/command/CommandReplaceItem.java +++ b/src/game/java/net/minecraft/command/CommandReplaceItem.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandReplaceItem extends CommandBase { @@ -84,6 +84,7 @@ public class CommandReplaceItem extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, new String[] { "entity", "block" }) : (astring.length == 2 && astring[0].equals("entity") @@ -103,6 +104,7 @@ public class CommandReplaceItem extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "replaceitem"; } @@ -110,6 +112,7 @@ public class CommandReplaceItem extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.replaceitem.usage"; } @@ -117,6 +120,7 @@ public class CommandReplaceItem extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -137,6 +141,7 @@ public class CommandReplaceItem extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] astring, int i) { return astring.length > 0 && astring[0].equals("entity") && i == 1; } @@ -144,6 +149,7 @@ public class CommandReplaceItem extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.replaceitem.usage", new Object[0]); @@ -243,4 +249,4 @@ public class CommandReplaceItem extends CommandBase { Integer.valueOf(k), itemstack == null ? "Air" : itemstack.getChatComponent() }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandResultStats.java b/src/game/java/net/minecraft/command/CommandResultStats.java index 439ab751..18b39faa 100644 --- a/src/game/java/net/minecraft/command/CommandResultStats.java +++ b/src/game/java/net/minecraft/command/CommandResultStats.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandResultStats { @@ -153,42 +153,52 @@ public class CommandResultStats { String s = this.field_179675_c[resultTypeIn.getTypeID()]; if (s != null) { ICommandSender icommandsender = new ICommandSender() { + @Override public void addChatMessage(IChatComponent ichatcomponent) { sender.addChatMessage(ichatcomponent); } + @Override public boolean canCommandSenderUseCommand(int var1, String var2) { return true; } + @Override public Entity getCommandSenderEntity() { return sender.getCommandSenderEntity(); } + @Override public IChatComponent getDisplayName() { return sender.getDisplayName(); } + @Override public World getEntityWorld() { return sender.getEntityWorld(); } + @Override public String getName() { return sender.getName(); } + @Override public BlockPos getPosition() { return sender.getPosition(); } + @Override public Vec3 getPositionVector() { return sender.getPositionVector(); } + @Override public boolean sendCommandFeedback() { return sender.sendCommandFeedback(); } + @Override public void setCommandStat(CommandResultStats.Type commandresultstats$type, int i) { sender.setCommandStat(commandresultstats$type, i); } @@ -253,4 +263,4 @@ public class CommandResultStats { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandServerKick.java b/src/game/java/net/minecraft/command/CommandServerKick.java index b76f8491..c6e0f8bc 100644 --- a/src/game/java/net/minecraft/command/CommandServerKick.java +++ b/src/game/java/net/minecraft/command/CommandServerKick.java @@ -10,13 +10,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,13 +28,14 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandServerKick extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length >= 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -44,6 +45,7 @@ public class CommandServerKick extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "kick"; } @@ -51,6 +53,7 @@ public class CommandServerKick extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.kick.usage"; } @@ -58,6 +61,7 @@ public class CommandServerKick extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 3; } @@ -65,6 +69,7 @@ public class CommandServerKick extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length > 0 && parArrayOfString[0].length() > 1) { EntityPlayerMP entityplayermp = MinecraftServer.getServer().getConfigurationManager() @@ -97,4 +102,4 @@ public class CommandServerKick extends CommandBase { throw new WrongUsageException("commands.kick.usage", new Object[0]); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandSetPlayerTimeout.java b/src/game/java/net/minecraft/command/CommandSetPlayerTimeout.java index df9bb7de..d9748b49 100644 --- a/src/game/java/net/minecraft/command/CommandSetPlayerTimeout.java +++ b/src/game/java/net/minecraft/command/CommandSetPlayerTimeout.java @@ -5,13 +5,13 @@ import net.minecraft.server.MinecraftServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,13 +23,14 @@ import net.minecraft.server.MinecraftServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSetPlayerTimeout extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "setidletimeout"; } @@ -37,6 +38,7 @@ public class CommandSetPlayerTimeout extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.setidletimeout.usage"; } @@ -44,6 +46,7 @@ public class CommandSetPlayerTimeout extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 3; } @@ -51,6 +54,7 @@ public class CommandSetPlayerTimeout extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length != 1) { throw new WrongUsageException("commands.setidletimeout.usage", new Object[0]); @@ -61,4 +65,4 @@ public class CommandSetPlayerTimeout extends CommandBase { new Object[] { Integer.valueOf(i) }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandSetSpawnpoint.java b/src/game/java/net/minecraft/command/CommandSetSpawnpoint.java index 01070a13..a70fbd32 100644 --- a/src/game/java/net/minecraft/command/CommandSetSpawnpoint.java +++ b/src/game/java/net/minecraft/command/CommandSetSpawnpoint.java @@ -9,13 +9,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSetSpawnpoint extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -43,6 +44,7 @@ public class CommandSetSpawnpoint extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "spawnpoint"; } @@ -50,6 +52,7 @@ public class CommandSetSpawnpoint extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.spawnpoint.usage"; } @@ -57,6 +60,7 @@ public class CommandSetSpawnpoint extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -65,6 +69,7 @@ public class CommandSetSpawnpoint extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -72,6 +77,7 @@ public class CommandSetSpawnpoint extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length > 1 && parArrayOfString.length < 4) { throw new WrongUsageException("commands.spawnpoint.usage", new Object[0]); @@ -91,4 +97,4 @@ public class CommandSetSpawnpoint extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandShowSeed.java b/src/game/java/net/minecraft/command/CommandShowSeed.java index c0ed1479..21d30958 100644 --- a/src/game/java/net/minecraft/command/CommandShowSeed.java +++ b/src/game/java/net/minecraft/command/CommandShowSeed.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandShowSeed extends CommandBase { /** * + Returns true if the given command sender is allowed to use this command. */ + @Override public boolean canCommandSenderUseCommand(ICommandSender icommandsender) { return MinecraftServer.getServer().isSinglePlayer() || super.canCommandSenderUseCommand(icommandsender); } @@ -40,6 +41,7 @@ public class CommandShowSeed extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "seed"; } @@ -47,6 +49,7 @@ public class CommandShowSeed extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.seed.usage"; } @@ -54,6 +57,7 @@ public class CommandShowSeed extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -61,10 +65,11 @@ public class CommandShowSeed extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { Object object = parICommandSender instanceof EntityPlayer ? ((EntityPlayer) parICommandSender).worldObj : MinecraftServer.getServer().worldServerForDimension(0); parICommandSender.addChatMessage(new ChatComponentTranslation("commands.seed.success", new Object[] { Long.valueOf(((World) object).getSeed()) })); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandSpreadPlayers.java b/src/game/java/net/minecraft/command/CommandSpreadPlayers.java index 2a405cfa..14227375 100644 --- a/src/game/java/net/minecraft/command/CommandSpreadPlayers.java +++ b/src/game/java/net/minecraft/command/CommandSpreadPlayers.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSpreadPlayers extends CommandBase { @@ -140,6 +140,7 @@ public class CommandSpreadPlayers extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length >= 1 && astring.length <= 2 ? func_181043_b(astring, 0, blockpos) : null; } @@ -309,6 +310,7 @@ public class CommandSpreadPlayers extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "spreadplayers"; } @@ -316,6 +318,7 @@ public class CommandSpreadPlayers extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.spreadplayers.usage"; } @@ -323,6 +326,7 @@ public class CommandSpreadPlayers extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -330,6 +334,7 @@ public class CommandSpreadPlayers extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 6) { throw new WrongUsageException("commands.spreadplayers.usage", new Object[0]); @@ -376,4 +381,4 @@ public class CommandSpreadPlayers extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandStats.java b/src/game/java/net/minecraft/command/CommandStats.java index fd104183..6cb63198 100644 --- a/src/game/java/net/minecraft/command/CommandStats.java +++ b/src/game/java/net/minecraft/command/CommandStats.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,13 +36,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandStats extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, new String[] { "entity", "block" }) : (astring.length == 2 && astring[0].equals("entity") @@ -87,6 +88,7 @@ public class CommandStats extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "stats"; } @@ -94,6 +96,7 @@ public class CommandStats extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.stats.usage"; } @@ -101,6 +104,7 @@ public class CommandStats extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -109,6 +113,7 @@ public class CommandStats extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] astring, int i) { return astring.length > 0 && astring[0].equals("entity") && i == 1; } @@ -116,6 +121,7 @@ public class CommandStats extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.stats.usage", new Object[0]); @@ -227,4 +233,4 @@ public class CommandStats extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandTime.java b/src/game/java/net/minecraft/command/CommandTime.java index 37042d9e..8960b943 100644 --- a/src/game/java/net/minecraft/command/CommandTime.java +++ b/src/game/java/net/minecraft/command/CommandTime.java @@ -9,13 +9,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTime extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, new String[] { "set", "add", "query" }) : (astring.length == 2 && astring[0].equals("set") @@ -57,6 +58,7 @@ public class CommandTime extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "time"; } @@ -64,6 +66,7 @@ public class CommandTime extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.time.usage"; } @@ -71,6 +74,7 @@ public class CommandTime extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -78,6 +82,7 @@ public class CommandTime extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length > 1) { if (parArrayOfString[0].equals("set")) { @@ -133,4 +138,4 @@ public class CommandTime extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandTitle.java b/src/game/java/net/minecraft/command/CommandTitle.java index 12fd9aa0..9a40d4e2 100644 --- a/src/game/java/net/minecraft/command/CommandTitle.java +++ b/src/game/java/net/minecraft/command/CommandTitle.java @@ -17,13 +17,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTitle extends CommandBase { @@ -44,6 +44,7 @@ public class CommandTitle extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -54,6 +55,7 @@ public class CommandTitle extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "title"; } @@ -61,6 +63,7 @@ public class CommandTitle extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.title.usage"; } @@ -68,6 +71,7 @@ public class CommandTitle extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -76,6 +80,7 @@ public class CommandTitle extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -83,6 +88,7 @@ public class CommandTitle extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.title.usage", new Object[0]); @@ -139,4 +145,4 @@ public class CommandTitle extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandToggleDownfall.java b/src/game/java/net/minecraft/command/CommandToggleDownfall.java index 35960164..6eb1fb1a 100644 --- a/src/game/java/net/minecraft/command/CommandToggleDownfall.java +++ b/src/game/java/net/minecraft/command/CommandToggleDownfall.java @@ -6,13 +6,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,13 +24,14 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandToggleDownfall extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "toggledownfall"; } @@ -38,6 +39,7 @@ public class CommandToggleDownfall extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.downfall.usage"; } @@ -45,6 +47,7 @@ public class CommandToggleDownfall extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -52,6 +55,7 @@ public class CommandToggleDownfall extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { this.toggleDownfall(); notifyOperators(parICommandSender, this, "commands.downfall.success", new Object[0]); @@ -64,4 +68,4 @@ public class CommandToggleDownfall extends CommandBase { WorldInfo worldinfo = MinecraftServer.getServer().worldServers[0].getWorldInfo(); worldinfo.setRaining(!worldinfo.isRaining()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandTrigger.java b/src/game/java/net/minecraft/command/CommandTrigger.java index 52294c29..cc007945 100644 --- a/src/game/java/net/minecraft/command/CommandTrigger.java +++ b/src/game/java/net/minecraft/command/CommandTrigger.java @@ -17,13 +17,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,13 +35,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTrigger extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { if (astring.length == 1) { Scoreboard scoreboard = MinecraftServer.getServer().worldServerForDimension(0).getScoreboard(); @@ -64,6 +65,7 @@ public class CommandTrigger extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "trigger"; } @@ -71,6 +73,7 @@ public class CommandTrigger extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.trigger.usage"; } @@ -78,6 +81,7 @@ public class CommandTrigger extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 0; } @@ -85,6 +89,7 @@ public class CommandTrigger extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 3) { throw new WrongUsageException("commands.trigger.usage", new Object[0]); @@ -137,4 +142,4 @@ public class CommandTrigger extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandWeather.java b/src/game/java/net/minecraft/command/CommandWeather.java index 225a3076..77a88a6e 100644 --- a/src/game/java/net/minecraft/command/CommandWeather.java +++ b/src/game/java/net/minecraft/command/CommandWeather.java @@ -11,13 +11,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,13 +29,14 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandWeather extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, new String[] { "clear", "rain", "thunder" }) @@ -45,6 +46,7 @@ public class CommandWeather extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "weather"; } @@ -52,6 +54,7 @@ public class CommandWeather extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.weather.usage"; } @@ -59,6 +62,7 @@ public class CommandWeather extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -66,6 +70,7 @@ public class CommandWeather extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length >= 1 && parArrayOfString.length <= 2) { int i = (300 + ThreadLocalRandom.current().nextInt(600)) * 20 * 2; @@ -106,4 +111,4 @@ public class CommandWeather extends CommandBase { throw new WrongUsageException("commands.weather.usage", new Object[0]); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandWorldBorder.java b/src/game/java/net/minecraft/command/CommandWorldBorder.java index a96820a2..ada21bc3 100644 --- a/src/game/java/net/minecraft/command/CommandWorldBorder.java +++ b/src/game/java/net/minecraft/command/CommandWorldBorder.java @@ -12,13 +12,13 @@ import net.minecraft.world.border.WorldBorder; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,13 +30,14 @@ import net.minecraft.world.border.WorldBorder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandWorldBorder extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, @@ -53,6 +54,7 @@ public class CommandWorldBorder extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "worldborder"; } @@ -60,6 +62,7 @@ public class CommandWorldBorder extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.worldborder.usage"; } @@ -67,6 +70,7 @@ public class CommandWorldBorder extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -78,6 +82,7 @@ public class CommandWorldBorder extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.worldborder.usage", new Object[0]); @@ -218,4 +223,4 @@ public class CommandWorldBorder extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/CommandXP.java b/src/game/java/net/minecraft/command/CommandXP.java index ab8c4800..b5b72185 100644 --- a/src/game/java/net/minecraft/command/CommandXP.java +++ b/src/game/java/net/minecraft/command/CommandXP.java @@ -9,13 +9,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandXP extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 2 ? getListOfStringsMatchingLastWord(astring, this.getAllUsernames()) : null; } @@ -45,6 +46,7 @@ public class CommandXP extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "xp"; } @@ -52,6 +54,7 @@ public class CommandXP extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.xp.usage"; } @@ -59,6 +62,7 @@ public class CommandXP extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -67,6 +71,7 @@ public class CommandXP extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 1; } @@ -74,6 +79,7 @@ public class CommandXP extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length <= 0) { throw new WrongUsageException("commands.xp.usage", new Object[0]); @@ -117,4 +123,4 @@ public class CommandXP extends CommandBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/EntityNotFoundException.java b/src/game/java/net/minecraft/command/EntityNotFoundException.java index fc396ce9..35d0bdb9 100644 --- a/src/game/java/net/minecraft/command/EntityNotFoundException.java +++ b/src/game/java/net/minecraft/command/EntityNotFoundException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityNotFoundException extends CommandException { public EntityNotFoundException() { @@ -31,4 +31,4 @@ public class EntityNotFoundException extends CommandException { public EntityNotFoundException(String parString1, Object... parArrayOfObject) { super(parString1, parArrayOfObject); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/IAdminCommand.java b/src/game/java/net/minecraft/command/IAdminCommand.java index a1b221d6..b926c4d5 100644 --- a/src/game/java/net/minecraft/command/IAdminCommand.java +++ b/src/game/java/net/minecraft/command/IAdminCommand.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAdminCommand { /** * + Send an informative message to the server operators */ void notifyOperators(ICommandSender var1, ICommand var2, int var3, String var4, Object... var5); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/ICommand.java b/src/game/java/net/minecraft/command/ICommand.java index 21ffc7c2..ea8ce5f3 100644 --- a/src/game/java/net/minecraft/command/ICommand.java +++ b/src/game/java/net/minecraft/command/ICommand.java @@ -7,13 +7,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ICommand extends Comparable { /** @@ -63,4 +63,4 @@ public interface ICommand extends Comparable { * + Callback when the command is invoked */ void processCommand(ICommandSender var1, String[] var2) throws CommandException; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/ICommandManager.java b/src/game/java/net/minecraft/command/ICommandManager.java index 82337c54..3f156c9d 100644 --- a/src/game/java/net/minecraft/command/ICommandManager.java +++ b/src/game/java/net/minecraft/command/ICommandManager.java @@ -8,13 +8,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ICommandManager { int executeCommand(ICommandSender var1, String var2); @@ -39,4 +39,4 @@ public interface ICommandManager { List getPossibleCommands(ICommandSender var1); List getTabCompletionOptions(ICommandSender var1, String var2, BlockPos var3); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/ICommandSender.java b/src/game/java/net/minecraft/command/ICommandSender.java index ea9222bb..b0f52c76 100644 --- a/src/game/java/net/minecraft/command/ICommandSender.java +++ b/src/game/java/net/minecraft/command/ICommandSender.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ICommandSender { /** @@ -83,4 +83,4 @@ public interface ICommandSender { boolean sendCommandFeedback(); void setCommandStat(CommandResultStats.Type var1, int var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/NumberInvalidException.java b/src/game/java/net/minecraft/command/NumberInvalidException.java index 585824c7..5a709218 100644 --- a/src/game/java/net/minecraft/command/NumberInvalidException.java +++ b/src/game/java/net/minecraft/command/NumberInvalidException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NumberInvalidException extends CommandException { @@ -32,4 +32,4 @@ public class NumberInvalidException extends CommandException { public NumberInvalidException(String message, Object... replacements) { super(message, replacements); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/PlayerNotFoundException.java b/src/game/java/net/minecraft/command/PlayerNotFoundException.java index 3122a831..a7ca14dd 100644 --- a/src/game/java/net/minecraft/command/PlayerNotFoundException.java +++ b/src/game/java/net/minecraft/command/PlayerNotFoundException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerNotFoundException extends CommandException { public PlayerNotFoundException() { @@ -31,4 +31,4 @@ public class PlayerNotFoundException extends CommandException { public PlayerNotFoundException(String message, Object... replacements) { super(message, replacements); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/PlayerSelector.java b/src/game/java/net/minecraft/command/PlayerSelector.java index ced7b363..121b84b2 100644 --- a/src/game/java/net/minecraft/command/PlayerSelector.java +++ b/src/game/java/net/minecraft/command/PlayerSelector.java @@ -41,13 +41,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -59,7 +59,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerSelector { /** @@ -123,6 +123,7 @@ public class PlayerSelector { final AxisAlignedBB axisalignedbb = func_179661_a(position, i, j, k); if (flag && flag2 && !flag1) { Predicate predicate2 = new Predicate() { + @Override public boolean apply(Entity entity) { return entity.posX >= axisalignedbb.minX && entity.posY >= axisalignedbb.minY && entity.posZ >= axisalignedbb.minZ @@ -158,6 +159,7 @@ public class PlayerSelector { if (s != null) { final String ss = s; arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { return entity.getName().equals(ss) != flag; } @@ -173,6 +175,7 @@ public class PlayerSelector { final int j = parseIntWithDefault(parMap, "l", -1); if (i > -1 || j > -1) { arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { if (!(entity instanceof EntityPlayerMP)) { return false; @@ -193,6 +196,7 @@ public class PlayerSelector { final int i = parseIntWithDefault(parMap, "m", WorldSettings.GameType.NOT_SET.getID()); if (i != WorldSettings.GameType.NOT_SET.getID()) { arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { if (!(entity instanceof EntityPlayerMP)) { return false; @@ -229,6 +233,7 @@ public class PlayerSelector { final Map map = func_96560_a(parMap); if (map != null && map.size() > 0) { arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { Scoreboard scoreboard = MinecraftServer.getServer().worldServerForDimension(0).getScoreboard(); @@ -280,6 +285,7 @@ public class PlayerSelector { } } else if (parBlockPos != null) { Collections.sort((List) parList, new Comparator() { + @Override public int compare(Entity entity1, Entity entity2) { return ComparisonChain.start() .compare(entity1.getDistanceSq(parBlockPos), entity2.getDistanceSq(parBlockPos)).result(); @@ -315,6 +321,7 @@ public class PlayerSelector { if (s != null) { final String ss = s; arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { if (!(entity instanceof EntityLivingBase)) { return false; @@ -350,6 +357,7 @@ public class PlayerSelector { final int i = func_179650_a(parseIntWithDefault(parMap, "rym", 0)); final int j = func_179650_a(parseIntWithDefault(parMap, "ry", 359)); arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { int i1 = PlayerSelector.func_179650_a((int) Math.floor((double) entity.rotationYaw)); return i > j ? i1 >= i || i1 <= j : i1 >= i && i1 <= j; @@ -361,6 +369,7 @@ public class PlayerSelector { final int k = func_179650_a(parseIntWithDefault(parMap, "rxm", 0)); final int l = func_179650_a(parseIntWithDefault(parMap, "rx", 359)); arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { int i1 = PlayerSelector.func_179650_a((int) Math.floor((double) entity.rotationPitch)); return k > l ? i1 >= k || i1 <= l : i1 >= k && i1 <= l; @@ -384,6 +393,7 @@ public class PlayerSelector { if ((s == null || !parString1.equals("e")) && !flag2) { if (flag1) { arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof EntityPlayer; } @@ -392,6 +402,7 @@ public class PlayerSelector { } else { final String ss = s; arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { return EntityList.isStringEntityName(entity, ss) != flag; } @@ -425,6 +436,7 @@ public class PlayerSelector { final int k = i * i; final int l = j * j; arraylist.add(new Predicate() { + @Override public boolean apply(Entity entity) { int i1 = (int) entity.getDistanceSqToCenter(parBlockPos); return (i < 0 || i1 >= k) && (j < 0 || i1 <= l); @@ -611,4 +623,4 @@ public class PlayerSelector { return parMap.containsKey(parString1) ? MathHelper.parseIntWithDefault((String) parMap.get(parString1), parInt1) : parInt1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/ServerCommandManager.java b/src/game/java/net/minecraft/command/ServerCommandManager.java index 538a9436..022bbda1 100644 --- a/src/game/java/net/minecraft/command/ServerCommandManager.java +++ b/src/game/java/net/minecraft/command/ServerCommandManager.java @@ -26,13 +26,13 @@ import net.starlikeclient.minecraft.init.CommandsStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.starlikeclient.minecraft.init.CommandsStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerCommandManager extends CommandHandler implements IAdminCommand { @@ -104,6 +104,7 @@ public class ServerCommandManager extends CommandHandler implements IAdminComman /** * + Send an informative message to the server operators */ + @Override public void notifyOperators(ICommandSender sender, ICommand command, int flags, String msgFormat, Object... msgParams) { boolean flag = true; @@ -143,4 +144,4 @@ public class ServerCommandManager extends CommandHandler implements IAdminComman } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/SyntaxErrorException.java b/src/game/java/net/minecraft/command/SyntaxErrorException.java index 2cf91d18..33bf83ef 100644 --- a/src/game/java/net/minecraft/command/SyntaxErrorException.java +++ b/src/game/java/net/minecraft/command/SyntaxErrorException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SyntaxErrorException extends CommandException { @@ -32,4 +32,4 @@ public class SyntaxErrorException extends CommandException { public SyntaxErrorException(String message, Object... replacements) { super(message, replacements); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/WrongUsageException.java b/src/game/java/net/minecraft/command/WrongUsageException.java index 05532371..d35def9e 100644 --- a/src/game/java/net/minecraft/command/WrongUsageException.java +++ b/src/game/java/net/minecraft/command/WrongUsageException.java @@ -3,13 +3,13 @@ package net.minecraft.command; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.command; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WrongUsageException extends SyntaxErrorException { public WrongUsageException(String message, Object... replacements) { super(message, replacements); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandAchievement.java b/src/game/java/net/minecraft/command/server/CommandAchievement.java index 545a8963..a408b0ee 100644 --- a/src/game/java/net/minecraft/command/server/CommandAchievement.java +++ b/src/game/java/net/minecraft/command/server/CommandAchievement.java @@ -22,13 +22,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,13 +40,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandAchievement extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { if (astring.length == 1) { return getListOfStringsMatchingLastWord(astring, new String[] { "give", "take" }); @@ -68,6 +69,7 @@ public class CommandAchievement extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "achievement"; } @@ -75,6 +77,7 @@ public class CommandAchievement extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.achievement.usage"; } @@ -82,6 +85,7 @@ public class CommandAchievement extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -90,6 +94,7 @@ public class CommandAchievement extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 2; } @@ -97,6 +102,7 @@ public class CommandAchievement extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.achievement.usage", new Object[0]); @@ -158,6 +164,7 @@ public class CommandAchievement extends CommandBase { ArrayList arraylist1 = Lists.newArrayList(Iterators.filter( AchievementList.achievementList.iterator(), new Predicate() { + @Override public boolean apply(Achievement achievement7) { return entityplayermp.getStatFile().hasAchievementUnlocked(achievement7) && achievement7 != statbase; @@ -204,4 +211,4 @@ public class CommandAchievement extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandBlockLogic.java b/src/game/java/net/minecraft/command/server/CommandBlockLogic.java index 5fa69114..accb7f88 100644 --- a/src/game/java/net/minecraft/command/server/CommandBlockLogic.java +++ b/src/game/java/net/minecraft/command/server/CommandBlockLogic.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class CommandBlockLogic implements ICommandSender { /** @@ -65,6 +65,7 @@ public abstract class CommandBlockLogic implements ICommandSender { /** * + Send a chat message to the CommandSender */ + @Override public void addChatMessage(IChatComponent ichatcomponent) { if (this.trackOutput && this.getEntityWorld() != null && !this.getEntityWorld().isRemote) { this.lastOutput = (new ChatComponentText("[" + timestampFormat.format(new Date()) + "] ")) @@ -78,6 +79,7 @@ public abstract class CommandBlockLogic implements ICommandSender { * + Returns {@code true} if the CommandSender is allowed to execute the * command, {@code false} if not */ + @Override public boolean canCommandSenderUseCommand(int i, String var2) { return i <= 2; } @@ -101,6 +103,7 @@ public abstract class CommandBlockLogic implements ICommandSender { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return new ChatComponentText(this.getName()); } @@ -116,6 +119,7 @@ public abstract class CommandBlockLogic implements ICommandSender { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.customName; } @@ -152,6 +156,7 @@ public abstract class CommandBlockLogic implements ICommandSender { * + Returns true if the command sender should be sent feedback about executed * commands */ + @Override public boolean sendCommandFeedback() { MinecraftServer minecraftserver = MinecraftServer.getServer(); return minecraftserver == null @@ -166,6 +171,7 @@ public abstract class CommandBlockLogic implements ICommandSender { this.successCount = 0; } + @Override public void setCommandStat(CommandResultStats.Type commandresultstats$type, int i) { this.resultStats.func_179672_a(this, commandresultstats$type, i); } @@ -202,11 +208,13 @@ public abstract class CommandBlockLogic implements ICommandSender { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Executing command block"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Command to be executed"); crashreportcategory.addCrashSectionCallable("Command", new Callable() { + @Override public String call() throws Exception { return CommandBlockLogic.this.getCommand(); } }); crashreportcategory.addCrashSectionCallable("Name", new Callable() { + @Override public String call() throws Exception { return CommandBlockLogic.this.getName(); } @@ -247,4 +255,4 @@ public abstract class CommandBlockLogic implements ICommandSender { this.resultStats.writeStatsToNBT(tagCompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandBroadcast.java b/src/game/java/net/minecraft/command/server/CommandBroadcast.java index bf0a3a86..e66c62be 100644 --- a/src/game/java/net/minecraft/command/server/CommandBroadcast.java +++ b/src/game/java/net/minecraft/command/server/CommandBroadcast.java @@ -16,13 +16,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,13 +34,14 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandBroadcast extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length >= 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -50,6 +51,7 @@ public class CommandBroadcast extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "say"; } @@ -57,6 +59,7 @@ public class CommandBroadcast extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.say.usage"; } @@ -64,6 +67,7 @@ public class CommandBroadcast extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 1; } @@ -71,6 +75,7 @@ public class CommandBroadcast extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length > 0 && parArrayOfString[0].length() > 0) { IChatComponent ichatcomponent = getChatComponentFromNthArg(parICommandSender, parArrayOfString, 0, true); @@ -85,4 +90,4 @@ public class CommandBroadcast extends CommandBase { throw new WrongUsageException("commands.say.usage", new Object[0]); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandEmote.java b/src/game/java/net/minecraft/command/server/CommandEmote.java index 07ec4505..0bef6843 100644 --- a/src/game/java/net/minecraft/command/server/CommandEmote.java +++ b/src/game/java/net/minecraft/command/server/CommandEmote.java @@ -17,13 +17,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,13 +35,14 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandEmote extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { return getListOfStringsMatchingLastWord(args, MinecraftServer.getServer().getAllUsernames()); } @@ -49,6 +50,7 @@ public class CommandEmote extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "me"; } @@ -56,6 +58,7 @@ public class CommandEmote extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender sender) { return "commands.me.usage"; } @@ -63,6 +66,7 @@ public class CommandEmote extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 0; } @@ -70,6 +74,7 @@ public class CommandEmote extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender sender, String[] args) throws CommandException { if (args.length <= 0) { throw new WrongUsageException("commands.me.usage", new Object[0]); @@ -85,4 +90,4 @@ public class CommandEmote extends CommandBase { "chat.type.emote", new Object[] { sender.getDisplayName(), ichatcomponent })); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandListPlayers.java b/src/game/java/net/minecraft/command/server/CommandListPlayers.java index 70384234..19ed4734 100644 --- a/src/game/java/net/minecraft/command/server/CommandListPlayers.java +++ b/src/game/java/net/minecraft/command/server/CommandListPlayers.java @@ -11,13 +11,13 @@ import net.minecraft.util.ChatComponentTranslation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,13 +29,14 @@ import net.minecraft.util.ChatComponentTranslation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandListPlayers extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "list"; } @@ -43,6 +44,7 @@ public class CommandListPlayers extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.players.usage"; } @@ -50,6 +52,7 @@ public class CommandListPlayers extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 0; } @@ -57,6 +60,7 @@ public class CommandListPlayers extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { int i = MinecraftServer.getServer().getCurrentPlayerCount(); parICommandSender.addChatMessage(new ChatComponentTranslation("commands.players.list", @@ -65,4 +69,4 @@ public class CommandListPlayers extends CommandBase { .func_181058_b(parArrayOfString.length > 0 && "uuids".equalsIgnoreCase(parArrayOfString[0])))); parICommandSender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, i); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandMessage.java b/src/game/java/net/minecraft/command/server/CommandMessage.java index ea9f1f49..8bdf6ac5 100644 --- a/src/game/java/net/minecraft/command/server/CommandMessage.java +++ b/src/game/java/net/minecraft/command/server/CommandMessage.java @@ -21,13 +21,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,13 +39,14 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandMessage extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()); } @@ -53,6 +54,7 @@ public class CommandMessage extends CommandBase { /** * + Gets a list of aliases for this command */ + @Override public List getCommandAliases() { return Arrays.asList(new String[] { "w", "msg" }); } @@ -60,6 +62,7 @@ public class CommandMessage extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "tell"; } @@ -67,6 +70,7 @@ public class CommandMessage extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.message.usage"; } @@ -74,6 +78,7 @@ public class CommandMessage extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 0; } @@ -82,6 +87,7 @@ public class CommandMessage extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -89,6 +95,7 @@ public class CommandMessage extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.message.usage", new Object[0]); @@ -119,4 +126,4 @@ public class CommandMessage extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandMessageRaw.java b/src/game/java/net/minecraft/command/server/CommandMessageRaw.java index a96d41e2..f896abef 100644 --- a/src/game/java/net/minecraft/command/server/CommandMessageRaw.java +++ b/src/game/java/net/minecraft/command/server/CommandMessageRaw.java @@ -19,13 +19,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,13 +37,14 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandMessageRaw extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -53,6 +54,7 @@ public class CommandMessageRaw extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "tellraw"; } @@ -60,6 +62,7 @@ public class CommandMessageRaw extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.tellraw.usage"; } @@ -67,6 +70,7 @@ public class CommandMessageRaw extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -75,6 +79,7 @@ public class CommandMessageRaw extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -82,6 +87,7 @@ public class CommandMessageRaw extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 2) { throw new WrongUsageException("commands.tellraw.usage", new Object[0]); @@ -100,4 +106,4 @@ public class CommandMessageRaw extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandScoreboard.java b/src/game/java/net/minecraft/command/server/CommandScoreboard.java index 12df9965..41d3d3be 100644 --- a/src/game/java/net/minecraft/command/server/CommandScoreboard.java +++ b/src/game/java/net/minecraft/command/server/CommandScoreboard.java @@ -38,13 +38,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -56,7 +56,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandScoreboard extends CommandBase { @@ -99,6 +99,7 @@ public class CommandScoreboard extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { if (astring.length == 1) { return getListOfStringsMatchingLastWord(astring, new String[] { "objectives", "players", "teams" }); @@ -480,6 +481,7 @@ public class CommandScoreboard extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "scoreboard"; } @@ -487,6 +489,7 @@ public class CommandScoreboard extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.scoreboard.usage"; } @@ -506,6 +509,7 @@ public class CommandScoreboard extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -528,6 +532,7 @@ public class CommandScoreboard extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] astring, int i) { return !astring[0].equalsIgnoreCase("players") ? (astring[0].equalsIgnoreCase("teams") ? i == 2 : false) : (astring.length > 1 && astring[1].equalsIgnoreCase("operation") ? i == 2 || i == 5 : i == 2); @@ -737,6 +742,7 @@ public class CommandScoreboard extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (!this.func_175780_b(parICommandSender, parArrayOfString)) { if (parArrayOfString.length < 1) { @@ -1069,4 +1075,4 @@ public class CommandScoreboard extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandSetBlock.java b/src/game/java/net/minecraft/command/server/CommandSetBlock.java index 6e4b97b8..38842de4 100644 --- a/src/game/java/net/minecraft/command/server/CommandSetBlock.java +++ b/src/game/java/net/minecraft/command/server/CommandSetBlock.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,13 +39,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSetBlock extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 ? func_175771_a(astring, 0, blockpos) : (astring.length == 4 ? getListOfStringsMatchingLastWord(astring, Block.blockRegistry.getKeys()) @@ -58,6 +59,7 @@ public class CommandSetBlock extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "setblock"; } @@ -65,6 +67,7 @@ public class CommandSetBlock extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.setblock.usage"; } @@ -72,6 +75,7 @@ public class CommandSetBlock extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -79,6 +83,7 @@ public class CommandSetBlock extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 4) { throw new WrongUsageException("commands.setblock.usage", new Object[0]); @@ -151,4 +156,4 @@ public class CommandSetBlock extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java b/src/game/java/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java index 0ec2a4fb..4a83a230 100644 --- a/src/game/java/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java +++ b/src/game/java/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java @@ -13,13 +13,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,13 +31,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSetDefaultSpawnpoint extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 ? func_175771_a(astring, 0, blockpos) : null; } @@ -45,6 +46,7 @@ public class CommandSetDefaultSpawnpoint extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "setworldspawn"; } @@ -52,6 +54,7 @@ public class CommandSetDefaultSpawnpoint extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.setworldspawn.usage"; } @@ -59,6 +62,7 @@ public class CommandSetDefaultSpawnpoint extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -66,6 +70,7 @@ public class CommandSetDefaultSpawnpoint extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { BlockPos blockpos; if (parArrayOfString.length == 0) { @@ -84,4 +89,4 @@ public class CommandSetDefaultSpawnpoint extends CommandBase { notifyOperators(parICommandSender, this, "commands.setworldspawn.success", new Object[] { Integer.valueOf(blockpos.getX()), Integer.valueOf(blockpos.getY()), Integer.valueOf(blockpos.getZ()) }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandSummon.java b/src/game/java/net/minecraft/command/server/CommandSummon.java index 38de667a..e630c448 100644 --- a/src/game/java/net/minecraft/command/server/CommandSummon.java +++ b/src/game/java/net/minecraft/command/server/CommandSummon.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,13 +40,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandSummon extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, EntityList.getEntityNameList()) : (astring.length > 1 && astring.length <= 4 ? func_175771_a(astring, 1, blockpos) : null); @@ -55,6 +56,7 @@ public class CommandSummon extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "summon"; } @@ -62,6 +64,7 @@ public class CommandSummon extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.summon.usage"; } @@ -69,6 +72,7 @@ public class CommandSummon extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -76,6 +80,7 @@ public class CommandSummon extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.summon.usage", new Object[0]); @@ -153,4 +158,4 @@ public class CommandSummon extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandTeleport.java b/src/game/java/net/minecraft/command/server/CommandTeleport.java index 6a3fa244..c7fabb47 100644 --- a/src/game/java/net/minecraft/command/server/CommandTeleport.java +++ b/src/game/java/net/minecraft/command/server/CommandTeleport.java @@ -17,13 +17,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,13 +35,14 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTeleport extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length != 1 && astring.length != 2 ? null : getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()); @@ -50,6 +51,7 @@ public class CommandTeleport extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "tp"; } @@ -57,6 +59,7 @@ public class CommandTeleport extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.tp.usage"; } @@ -64,6 +67,7 @@ public class CommandTeleport extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -72,6 +76,7 @@ public class CommandTeleport extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -79,6 +84,7 @@ public class CommandTeleport extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.tp.usage", new Object[0]); @@ -191,4 +197,4 @@ public class CommandTeleport extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandTestFor.java b/src/game/java/net/minecraft/command/server/CommandTestFor.java index 0fcd5513..2978738b 100644 --- a/src/game/java/net/minecraft/command/server/CommandTestFor.java +++ b/src/game/java/net/minecraft/command/server/CommandTestFor.java @@ -17,13 +17,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,13 +35,14 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTestFor extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos var3) { return astring.length == 1 ? getListOfStringsMatchingLastWord(astring, MinecraftServer.getServer().getAllUsernames()) @@ -51,6 +52,7 @@ public class CommandTestFor extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "testfor"; } @@ -58,6 +60,7 @@ public class CommandTestFor extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.testfor.usage"; } @@ -65,6 +68,7 @@ public class CommandTestFor extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -73,6 +77,7 @@ public class CommandTestFor extends CommandBase { * + Return whether the specified command parameter index is a username * parameter. */ + @Override public boolean isUsernameIndex(String[] var1, int i) { return i == 0; } @@ -80,6 +85,7 @@ public class CommandTestFor extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 1) { throw new WrongUsageException("commands.testfor.usage", new Object[0]); @@ -105,4 +111,4 @@ public class CommandTestFor extends CommandBase { notifyOperators(parICommandSender, this, "commands.testfor.success", new Object[] { entity.getName() }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/command/server/CommandTestForBlock.java b/src/game/java/net/minecraft/command/server/CommandTestForBlock.java index cc7fc5cf..89bea684 100644 --- a/src/game/java/net/minecraft/command/server/CommandTestForBlock.java +++ b/src/game/java/net/minecraft/command/server/CommandTestForBlock.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,13 +39,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CommandTestForBlock extends CommandBase { /** * + Return a list of options when the user types TAB */ + @Override public List addTabCompletionOptions(ICommandSender var1, String[] astring, BlockPos blockpos) { return astring.length > 0 && astring.length <= 3 ? func_175771_a(astring, 0, blockpos) : (astring.length == 4 ? getListOfStringsMatchingLastWord(astring, Block.blockRegistry.getKeys()) @@ -55,6 +56,7 @@ public class CommandTestForBlock extends CommandBase { /** * + Gets the name of the command */ + @Override public String getCommandName() { return "testforblock"; } @@ -62,6 +64,7 @@ public class CommandTestForBlock extends CommandBase { /** * + Gets the usage string for the command. */ + @Override public String getCommandUsage(ICommandSender var1) { return "commands.testforblock.usage"; } @@ -69,6 +72,7 @@ public class CommandTestForBlock extends CommandBase { /** * + Return the required permission level for this command. */ + @Override public int getRequiredPermissionLevel() { return 2; } @@ -76,6 +80,7 @@ public class CommandTestForBlock extends CommandBase { /** * + Callback when the command is invoked */ + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 4) { throw new WrongUsageException("commands.testforblock.usage", new Object[0]); @@ -154,4 +159,4 @@ public class CommandTestForBlock extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/crash/CrashReport.java b/src/game/java/net/minecraft/crash/CrashReport.java index b79e112a..0442b329 100644 --- a/src/game/java/net/minecraft/crash/CrashReport.java +++ b/src/game/java/net/minecraft/crash/CrashReport.java @@ -17,13 +17,13 @@ import net.minecraft.util.ReportedException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ReportedException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CrashReport { private static final Logger logger = LogManager.getLogger(); @@ -77,6 +77,9 @@ public class CrashReport { private String[] stacktrace; public CrashReport(String descriptionIn, Throwable causeThrowable) { + if (causeThrowable == null) { + throw new NullPointerException("Crash report created for null throwable!"); + } this.description = descriptionIn; this.cause = causeThrowable; this.stacktrace = EagRuntime.getStackTraceElements(causeThrowable); @@ -238,29 +241,34 @@ public class CrashReport { */ private void populateEnvironment() { this.theReportCategory.addCrashSectionCallable("Minecraft Version", new Callable() { + @Override public String call() { return "1.8.8"; } }); this.theReportCategory.addCrashSectionCallable("Operating System", new Callable() { + @Override public String call() { return System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version"); } }); this.theReportCategory.addCrashSectionCallable("Java Version", new Callable() { + @Override public String call() { return System.getProperty("java.version") + ", " + System.getProperty("java.vendor"); } }); this.theReportCategory.addCrashSectionCallable("Java VM Version", new Callable() { + @Override public String call() { return System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor"); } }); - if (EagRuntime.getPlatformType() != EnumPlatformType.JAVASCRIPT) { + if (EagRuntime.getPlatformType() == EnumPlatformType.DESKTOP) { this.theReportCategory.addCrashSectionCallable("Memory", new Callable() { + @Override public String call() { long i = EagRuntime.maxMemory(); long j = EagRuntime.totalMemory(); @@ -274,4 +282,4 @@ public class CrashReport { }); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/crash/CrashReportCategory.java b/src/game/java/net/minecraft/crash/CrashReportCategory.java index b01cdadb..a4c2a686 100644 --- a/src/game/java/net/minecraft/crash/CrashReportCategory.java +++ b/src/game/java/net/minecraft/crash/CrashReportCategory.java @@ -14,13 +14,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CrashReportCategory { static class Entry { @@ -65,6 +65,7 @@ public class CrashReportCategory { final int blockData) { final int i = Block.getIdFromBlock(blockIn); category.addCrashSectionCallable("Block type", new Callable() { + @Override public String call() throws Exception { try { return HString.format("ID #%d (%s // %s)", new Object[] { Integer.valueOf(i), @@ -75,6 +76,7 @@ public class CrashReportCategory { } }); category.addCrashSectionCallable("Block data value", new Callable() { + @Override public String call() throws Exception { if (blockData < 0) { return "Unknown? (Got " + blockData + ")"; @@ -86,6 +88,7 @@ public class CrashReportCategory { } }); category.addCrashSectionCallable("Block location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(pos); } @@ -94,11 +97,13 @@ public class CrashReportCategory { public static void addBlockInfo(CrashReportCategory category, final BlockPos pos, final IBlockState state) { category.addCrashSectionCallable("Block", new Callable() { + @Override public String call() throws Exception { return state.toString(); } }); category.addCrashSectionCallable("Block location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(pos); } @@ -284,4 +289,4 @@ public class CrashReportCategory { System.arraycopy(this.stackTrace, 0, astacktraceelement, 0, astacktraceelement.length); this.stackTrace = astacktraceelement; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/creativetab/CreativeTabs.java b/src/game/java/net/minecraft/creativetab/CreativeTabs.java index 448234a8..b6654059 100644 --- a/src/game/java/net/minecraft/creativetab/CreativeTabs.java +++ b/src/game/java/net/minecraft/creativetab/CreativeTabs.java @@ -14,13 +14,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,56 +32,66 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class CreativeTabs { public static final CreativeTabs[] creativeTabArray = new CreativeTabs[13]; public static final CreativeTabs tabBlock = new CreativeTabs(0, "buildingBlocks") { + @Override public Item getTabIconItem() { return Item.getItemFromBlock(Blocks.brick_block); } }; public static final CreativeTabs tabDecorations = new CreativeTabs(1, "decorations") { + @Override public int getIconItemDamage() { return BlockDoublePlant.EnumPlantType.PAEONIA.getMeta(); } + @Override public Item getTabIconItem() { return Item.getItemFromBlock(Blocks.double_plant); } }; public static final CreativeTabs tabRedstone = new CreativeTabs(2, "redstone") { + @Override public Item getTabIconItem() { return Items.redstone; } }; public static final CreativeTabs tabTransport = new CreativeTabs(3, "transportation") { + @Override public Item getTabIconItem() { return Item.getItemFromBlock(Blocks.golden_rail); } }; public static final CreativeTabs tabMisc = (new CreativeTabs(4, "misc") { + @Override public Item getTabIconItem() { return Items.lava_bucket; } }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] { EnumEnchantmentType.ALL }); public static final CreativeTabs tabAllSearch = (new CreativeTabs(5, "search") { + @Override public Item getTabIconItem() { return Items.compass; } }).setBackgroundImageName("item_search.png"); public static final CreativeTabs tabFood = new CreativeTabs(6, "food") { + @Override public Item getTabIconItem() { return Items.apple; } }; public static final CreativeTabs tabTools = (new CreativeTabs(7, "tools") { + @Override public Item getTabIconItem() { return Items.iron_axe; } }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] { EnumEnchantmentType.DIGGER, EnumEnchantmentType.FISHING_ROD, EnumEnchantmentType.BREAKABLE }); public static final CreativeTabs tabCombat = (new CreativeTabs(8, "combat") { + @Override public Item getTabIconItem() { return Items.golden_sword; } @@ -89,21 +99,25 @@ public abstract class CreativeTabs { EnumEnchantmentType.ARMOR_FEET, EnumEnchantmentType.ARMOR_HEAD, EnumEnchantmentType.ARMOR_LEGS, EnumEnchantmentType.ARMOR_TORSO, EnumEnchantmentType.BOW, EnumEnchantmentType.WEAPON }); public static final CreativeTabs tabBrewing = new CreativeTabs(9, "brewing") { + @Override public Item getTabIconItem() { return Items.cooked_porkchop; } }; public static final CreativeTabs tabMaterials = new CreativeTabs(10, "materials") { + @Override public Item getTabIconItem() { return Items.stick; } }; public static final CreativeTabs tabInventory = (new CreativeTabs(11, "inventory") { + @Override public Item getTabIconItem() { return Item.getItemFromBlock(Blocks.chest); } }).setBackgroundImageName("inventory.png").setNoScrollbar().setNoTitle(); public static final CreativeTabs tabStarlike = new CreativeTabs(12, "starlike") { + @Override public Item getTabIconItem() { return Items.titanium_drill; } @@ -267,4 +281,4 @@ public abstract class CreativeTabs { public boolean shouldHidePlayerInventory() { return this.hasScrollbar; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java b/src/game/java/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java index 605b01db..412d98f5 100644 --- a/src/game/java/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java +++ b/src/game/java/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem { public static void doDispense(World worldIn, ItemStack stack, int speed, EnumFacing facing, IPosition position) { @@ -54,6 +54,7 @@ public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem { /** * + Dispenses the specified ItemStack from a dispenser. */ + @Override public final ItemStack dispense(IBlockSource source, ItemStack stack) { ItemStack itemstack = this.dispenseStack(source, stack); this.playDispenseSound(source); @@ -90,4 +91,4 @@ public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem { protected void spawnDispenseParticles(IBlockSource source, EnumFacing facingIn) { source.getWorld().playAuxSFX(2000, source.getBlockPos(), this.func_82488_a(facingIn)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/BehaviorProjectileDispense.java b/src/game/java/net/minecraft/dispenser/BehaviorProjectileDispense.java index 14772010..c39bcc1f 100644 --- a/src/game/java/net/minecraft/dispenser/BehaviorProjectileDispense.java +++ b/src/game/java/net/minecraft/dispenser/BehaviorProjectileDispense.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,12 +28,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispenseItem { /** * + Dispense the specified stack, play the dispense sound and spawn particles. */ + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); IPosition iposition = BlockDispenser.getDispensePosition(iblocksource); @@ -60,7 +61,8 @@ public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispense /** * + Play the dispense sound from the specified block. */ + @Override protected void playDispenseSound(IBlockSource iblocksource) { iblocksource.getWorld().playAuxSFX(1002, iblocksource.getBlockPos(), 0); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/IBehaviorDispenseItem.java b/src/game/java/net/minecraft/dispenser/IBehaviorDispenseItem.java index a8caa058..e70783bc 100644 --- a/src/game/java/net/minecraft/dispenser/IBehaviorDispenseItem.java +++ b/src/game/java/net/minecraft/dispenser/IBehaviorDispenseItem.java @@ -5,13 +5,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,13 +23,14 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBehaviorDispenseItem { IBehaviorDispenseItem itemDispenseBehaviorProvider = new IBehaviorDispenseItem() { /** * + Dispenses the specified ItemStack from a dispenser. */ + @Override public ItemStack dispense(IBlockSource var1, ItemStack itemstack) { return itemstack; } @@ -39,4 +40,4 @@ public interface IBehaviorDispenseItem { * + Dispenses the specified ItemStack from a dispenser. */ ItemStack dispense(IBlockSource var1, ItemStack var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/IBlockSource.java b/src/game/java/net/minecraft/dispenser/IBlockSource.java index 257d702a..4c4d8f3e 100644 --- a/src/game/java/net/minecraft/dispenser/IBlockSource.java +++ b/src/game/java/net/minecraft/dispenser/IBlockSource.java @@ -6,13 +6,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBlockSource extends ILocatableSource { int getBlockMetadata(); @@ -33,9 +33,12 @@ public interface IBlockSource extends ILocatableSource { T getBlockTileEntity(); + @Override double getX(); + @Override double getY(); + @Override double getZ(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/ILocatableSource.java b/src/game/java/net/minecraft/dispenser/ILocatableSource.java index 0ea918fa..ce81e8cf 100644 --- a/src/game/java/net/minecraft/dispenser/ILocatableSource.java +++ b/src/game/java/net/minecraft/dispenser/ILocatableSource.java @@ -3,13 +3,13 @@ package net.minecraft.dispenser; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.dispenser; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ILocatableSource extends ILocation { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/ILocation.java b/src/game/java/net/minecraft/dispenser/ILocation.java index 540ea7d6..03984d64 100644 --- a/src/game/java/net/minecraft/dispenser/ILocation.java +++ b/src/game/java/net/minecraft/dispenser/ILocation.java @@ -5,13 +5,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,8 +23,8 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ILocation extends IPosition { World getWorld(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/IPosition.java b/src/game/java/net/minecraft/dispenser/IPosition.java index 4e3f6a8d..3efa1199 100644 --- a/src/game/java/net/minecraft/dispenser/IPosition.java +++ b/src/game/java/net/minecraft/dispenser/IPosition.java @@ -3,13 +3,13 @@ package net.minecraft.dispenser; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.dispenser; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IPosition { double getX(); @@ -29,4 +29,4 @@ public interface IPosition { double getY(); double getZ(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/dispenser/PositionImpl.java b/src/game/java/net/minecraft/dispenser/PositionImpl.java index 49f55a66..59978514 100644 --- a/src/game/java/net/minecraft/dispenser/PositionImpl.java +++ b/src/game/java/net/minecraft/dispenser/PositionImpl.java @@ -3,13 +3,13 @@ package net.minecraft.dispenser; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.dispenser; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PositionImpl implements IPosition { protected final double x; @@ -34,15 +34,18 @@ public class PositionImpl implements IPosition { this.z = zCoord; } + @Override public double getX() { return this.x; } + @Override public double getY() { return this.y; } + @Override public double getZ() { return this.z; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/Enchantment.java b/src/game/java/net/minecraft/enchantment/Enchantment.java index 2157cc34..573583d6 100644 --- a/src/game/java/net/minecraft/enchantment/Enchantment.java +++ b/src/game/java/net/minecraft/enchantment/Enchantment.java @@ -18,13 +18,13 @@ import net.minecraft.util.StatCollector; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.StatCollector; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Enchantment { private static final Enchantment[] enchantmentsList = new Enchantment[256]; @@ -280,4 +280,4 @@ public abstract class Enchantment { this.name = enchName; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentArrowDamage.java b/src/game/java/net/minecraft/enchantment/EnchantmentArrowDamage.java index 70799ebf..daa0a445 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentArrowDamage.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentArrowDamage.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentArrowDamage extends Enchantment { public EnchantmentArrowDamage(int enchID, ResourceLocation enchName, int enchWeight) { @@ -35,6 +35,7 @@ public class EnchantmentArrowDamage extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int enchantmentLevel) { return this.getMinEnchantability(enchantmentLevel) + 15; } @@ -42,6 +43,7 @@ public class EnchantmentArrowDamage extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 8; } @@ -50,7 +52,8 @@ public class EnchantmentArrowDamage extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int enchantmentLevel) { return 1 + (enchantmentLevel - 1) * 10; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentArrowFire.java b/src/game/java/net/minecraft/enchantment/EnchantmentArrowFire.java index ba44cb87..cb1f4cdf 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentArrowFire.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentArrowFire.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentArrowFire extends Enchantment { public EnchantmentArrowFire(int enchID, ResourceLocation enchName, int enchWeight) { @@ -35,6 +35,7 @@ public class EnchantmentArrowFire extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int var1) { return 50; } @@ -42,6 +43,7 @@ public class EnchantmentArrowFire extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 1; } @@ -50,7 +52,8 @@ public class EnchantmentArrowFire extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int var1) { return 20; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentArrowInfinite.java b/src/game/java/net/minecraft/enchantment/EnchantmentArrowInfinite.java index 0eea3f5c..3344b9a7 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentArrowInfinite.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentArrowInfinite.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentArrowInfinite extends Enchantment { public EnchantmentArrowInfinite(int enchID, ResourceLocation enchName, int enchWeight) { @@ -35,6 +35,7 @@ public class EnchantmentArrowInfinite extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int var1) { return 50; } @@ -42,6 +43,7 @@ public class EnchantmentArrowInfinite extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 1; } @@ -50,7 +52,8 @@ public class EnchantmentArrowInfinite extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int var1) { return 20; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentArrowKnockback.java b/src/game/java/net/minecraft/enchantment/EnchantmentArrowKnockback.java index 79e1bb54..98346d2f 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentArrowKnockback.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentArrowKnockback.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentArrowKnockback extends Enchantment { public EnchantmentArrowKnockback(int enchID, ResourceLocation enchName, int enchWeight) { @@ -35,6 +35,7 @@ public class EnchantmentArrowKnockback extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + 25; } @@ -42,6 +43,7 @@ public class EnchantmentArrowKnockback extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 5; } @@ -50,7 +52,8 @@ public class EnchantmentArrowKnockback extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 12 + (i - 1) * 20; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentDamage.java b/src/game/java/net/minecraft/enchantment/EnchantmentDamage.java index 0332d400..365a2fec 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentDamage.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentDamage.java @@ -12,13 +12,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentDamage extends Enchantment { /** @@ -64,6 +64,7 @@ public class EnchantmentDamage extends Enchantment { * enchantment. This alternative to calcModifierDamage is sensitive to the * targets EnumCreatureAttribute. */ + @Override public float calcDamageByCreature(int level, EnumCreatureAttribute creatureType) { return this.damageType == 0 ? (float) level * 1.25F : (this.damageType == 1 && creatureType == EnumCreatureAttribute.UNDEAD ? (float) level * 2.5F @@ -75,6 +76,7 @@ public class EnchantmentDamage extends Enchantment { /** * + Determines if this enchantment can be applied to a specific ItemStack. */ + @Override public boolean canApply(ItemStack stack) { return stack.getItem() instanceof ItemAxe ? true : super.canApply(stack); } @@ -83,6 +85,7 @@ public class EnchantmentDamage extends Enchantment { * + Determines if the enchantment passed can be applyied together with this * enchantment. */ + @Override public boolean canApplyTogether(Enchantment ench) { return !(ench instanceof EnchantmentDamage); } @@ -91,6 +94,7 @@ public class EnchantmentDamage extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + thresholdEnchantability[this.damageType]; } @@ -98,6 +102,7 @@ public class EnchantmentDamage extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 10; } @@ -106,6 +111,7 @@ public class EnchantmentDamage extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return baseEnchantability[this.damageType] + (i - 1) * levelEnchantability[this.damageType]; } @@ -113,6 +119,7 @@ public class EnchantmentDamage extends Enchantment { /** * + Return the name of key in translation table of this enchantment. */ + @Override public String getName() { return "enchantment.damage." + protectionName[this.damageType]; } @@ -121,6 +128,7 @@ public class EnchantmentDamage extends Enchantment { * + Called whenever a mob is damaged with an item that has this enchantment on * it. */ + @Override public void onEntityDamaged(EntityLivingBase user, Entity target, int level) { if (target instanceof EntityLivingBase) { EntityLivingBase entitylivingbase = (EntityLivingBase) target; @@ -131,4 +139,4 @@ public class EnchantmentDamage extends Enchantment { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentData.java b/src/game/java/net/minecraft/enchantment/EnchantmentData.java index 7a4ada78..2602ac7d 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentData.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentData.java @@ -5,13 +5,13 @@ import net.minecraft.util.WeightedRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.WeightedRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentData extends WeightedRandom.Item { public final Enchantment enchantmentobj; @@ -34,4 +34,4 @@ public class EnchantmentData extends WeightedRandom.Item { this.enchantmentobj = enchantmentObj; this.enchantmentLevel = enchLevel; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentDigging.java b/src/game/java/net/minecraft/enchantment/EnchantmentDigging.java index 4af1cf9b..70e3b3d3 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentDigging.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentDigging.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentDigging extends Enchantment { protected EnchantmentDigging(int enchID, ResourceLocation enchName, int enchWeight) { @@ -36,6 +36,7 @@ public class EnchantmentDigging extends Enchantment { /** * + Determines if this enchantment can be applied to a specific ItemStack. */ + @Override public boolean canApply(ItemStack itemstack) { return itemstack.getItem() == Items.shears ? true : super.canApply(itemstack); } @@ -44,6 +45,7 @@ public class EnchantmentDigging extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -51,6 +53,7 @@ public class EnchantmentDigging extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 8; } @@ -59,7 +62,8 @@ public class EnchantmentDigging extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 1 + 10 * (i - 1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentDurability.java b/src/game/java/net/minecraft/enchantment/EnchantmentDurability.java index 0cd309c8..72646b28 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentDurability.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentDurability.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentDurability extends Enchantment { /** @@ -49,6 +49,7 @@ public class EnchantmentDurability extends Enchantment { /** * + Determines if this enchantment can be applied to a specific ItemStack. */ + @Override public boolean canApply(ItemStack itemstack) { return itemstack.isItemStackDamageable() ? true : super.canApply(itemstack); } @@ -57,6 +58,7 @@ public class EnchantmentDurability extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -64,6 +66,7 @@ public class EnchantmentDurability extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 10; } @@ -72,7 +75,8 @@ public class EnchantmentDurability extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 5 + (i - 1) * 8; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentFireAspect.java b/src/game/java/net/minecraft/enchantment/EnchantmentFireAspect.java index 8948ea7e..3422a357 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentFireAspect.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentFireAspect.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentFireAspect extends Enchantment { protected EnchantmentFireAspect(int enchID, ResourceLocation enchName, int enchWeight) { @@ -35,6 +35,7 @@ public class EnchantmentFireAspect extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -42,6 +43,7 @@ public class EnchantmentFireAspect extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -50,7 +52,8 @@ public class EnchantmentFireAspect extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 10 + 20 * (i - 1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentFishingSpeed.java b/src/game/java/net/minecraft/enchantment/EnchantmentFishingSpeed.java index ccecf478..2c0ebd14 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentFishingSpeed.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentFishingSpeed.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentFishingSpeed extends Enchantment { protected EnchantmentFishingSpeed(int enchID, ResourceLocation enchName, int enchWeight, @@ -36,6 +36,7 @@ public class EnchantmentFishingSpeed extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -43,6 +44,7 @@ public class EnchantmentFishingSpeed extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -51,7 +53,8 @@ public class EnchantmentFishingSpeed extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 15 + (i - 1) * 9; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentHelper.java b/src/game/java/net/minecraft/enchantment/EnchantmentHelper.java index 0ddaadd0..51aa0656 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentHelper.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentHelper.java @@ -26,13 +26,13 @@ import net.minecraft.util.WeightedRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.util.WeightedRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentHelper { static final class DamageIterator implements EnchantmentHelper.IModifier { @@ -54,6 +54,7 @@ public class EnchantmentHelper { private DamageIterator() { } + @Override public void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel) { enchantmentIn.onEntityDamaged(this.user, this.target, enchantmentLevel); } @@ -66,6 +67,7 @@ public class EnchantmentHelper { private HurtIterator() { } + @Override public void calculateModifier(Enchantment enchantment, int i) { enchantment.onUserHurt(this.user, this.attacker, i); } @@ -82,6 +84,7 @@ public class EnchantmentHelper { private ModifierDamage() { } + @Override public void calculateModifier(Enchantment enchantment, int i) { this.damageModifier += enchantment.calcModifierDamage(i, this.source); } @@ -94,6 +97,7 @@ public class EnchantmentHelper { private ModifierLiving() { } + @Override public void calculateModifier(Enchantment enchantment, int i) { this.livingModifier += enchantment.calcDamageByCreature(i, this.entityLiving); } @@ -556,4 +560,4 @@ public class EnchantmentHelper { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentKnockback.java b/src/game/java/net/minecraft/enchantment/EnchantmentKnockback.java index 95b3c897..a3170924 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentKnockback.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentKnockback.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentKnockback extends Enchantment { protected EnchantmentKnockback(int parInt1, ResourceLocation parResourceLocation, int parInt2) { @@ -35,6 +35,7 @@ public class EnchantmentKnockback extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -42,6 +43,7 @@ public class EnchantmentKnockback extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -50,7 +52,8 @@ public class EnchantmentKnockback extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 5 + 20 * (i - 1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentLootBonus.java b/src/game/java/net/minecraft/enchantment/EnchantmentLootBonus.java index c4db2c11..a4f64787 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentLootBonus.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentLootBonus.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentLootBonus extends Enchantment { protected EnchantmentLootBonus(int parInt1, ResourceLocation parResourceLocation, int parInt2, @@ -43,6 +43,7 @@ public class EnchantmentLootBonus extends Enchantment { * + Determines if the enchantment passed can be applyied together with this * enchantment. */ + @Override public boolean canApplyTogether(Enchantment enchantment) { return super.canApplyTogether(enchantment) && enchantment.effectId != silkTouch.effectId; } @@ -51,6 +52,7 @@ public class EnchantmentLootBonus extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -58,6 +60,7 @@ public class EnchantmentLootBonus extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -66,7 +69,8 @@ public class EnchantmentLootBonus extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 15 + (i - 1) * 9; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentOxygen.java b/src/game/java/net/minecraft/enchantment/EnchantmentOxygen.java index 61b7b0d0..01a4730b 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentOxygen.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentOxygen.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentOxygen extends Enchantment { public EnchantmentOxygen(int enchID, ResourceLocation parResourceLocation, int parInt1) { @@ -35,6 +35,7 @@ public class EnchantmentOxygen extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + 30; } @@ -42,6 +43,7 @@ public class EnchantmentOxygen extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -50,7 +52,8 @@ public class EnchantmentOxygen extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 10 * i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentProtection.java b/src/game/java/net/minecraft/enchantment/EnchantmentProtection.java index f3cf632d..610abd16 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentProtection.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentProtection.java @@ -8,13 +8,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentProtection extends Enchantment { /** @@ -87,6 +87,7 @@ public class EnchantmentProtection extends Enchantment { * + Calculates the damage protection of the enchantment based on level and * damage source passed. */ + @Override public int calcModifierDamage(int i, DamageSource damagesource) { if (damagesource.canHarmInCreative()) { return 0; @@ -108,6 +109,7 @@ public class EnchantmentProtection extends Enchantment { * + Determines if the enchantment passed can be applyied together with this * enchantment. */ + @Override public boolean canApplyTogether(Enchantment enchantment) { if (enchantment instanceof EnchantmentProtection) { EnchantmentProtection enchantmentprotection = (EnchantmentProtection) enchantment; @@ -122,6 +124,7 @@ public class EnchantmentProtection extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + thresholdEnchantability[this.protectionType]; } @@ -129,6 +132,7 @@ public class EnchantmentProtection extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 10; } @@ -137,6 +141,7 @@ public class EnchantmentProtection extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return baseEnchantability[this.protectionType] + (i - 1) * levelEnchantability[this.protectionType]; } @@ -144,7 +149,8 @@ public class EnchantmentProtection extends Enchantment { /** * + Return the name of key in translation table of this enchantment. */ + @Override public String getName() { return "enchantment.protect." + protectionName[this.protectionType]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentThorns.java b/src/game/java/net/minecraft/enchantment/EnchantmentThorns.java index 5483b3c8..92fd52af 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentThorns.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentThorns.java @@ -11,13 +11,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentThorns extends Enchantment { public static boolean func_92094_a(int parInt1, EaglercraftRandom parRandom) { @@ -48,6 +48,7 @@ public class EnchantmentThorns extends Enchantment { /** * + Determines if this enchantment can be applied to a specific ItemStack. */ + @Override public boolean canApply(ItemStack itemstack) { return itemstack.getItem() instanceof ItemArmor ? true : super.canApply(itemstack); } @@ -56,6 +57,7 @@ public class EnchantmentThorns extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -63,6 +65,7 @@ public class EnchantmentThorns extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 5; } @@ -71,6 +74,7 @@ public class EnchantmentThorns extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return 10 + 20 * (i - 1); } @@ -79,6 +83,7 @@ public class EnchantmentThorns extends Enchantment { * + Whenever an entity that has this enchantment on one of its associated items * is damaged this method will be called. */ + @Override public void onUserHurt(EntityLivingBase entitylivingbase, Entity entity, int i) { EaglercraftRandom random = entitylivingbase.getRNG(); ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantment.thorns, entitylivingbase); @@ -97,4 +102,4 @@ public class EnchantmentThorns extends Enchantment { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentUntouching.java b/src/game/java/net/minecraft/enchantment/EnchantmentUntouching.java index 925779ca..24df79a6 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentUntouching.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentUntouching.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentUntouching extends Enchantment { protected EnchantmentUntouching(int parInt1, ResourceLocation parResourceLocation, int parInt2) { @@ -36,6 +36,7 @@ public class EnchantmentUntouching extends Enchantment { /** * + Determines if this enchantment can be applied to a specific ItemStack. */ + @Override public boolean canApply(ItemStack itemstack) { return itemstack.getItem() == Items.shears ? true : super.canApply(itemstack); } @@ -44,6 +45,7 @@ public class EnchantmentUntouching extends Enchantment { * + Determines if the enchantment passed can be applyied together with this * enchantment. */ + @Override public boolean canApplyTogether(Enchantment enchantment) { return super.canApplyTogether(enchantment) && enchantment.effectId != fortune.effectId; } @@ -52,6 +54,7 @@ public class EnchantmentUntouching extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return super.getMinEnchantability(i) + 50; } @@ -59,6 +62,7 @@ public class EnchantmentUntouching extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 1; } @@ -67,7 +71,8 @@ public class EnchantmentUntouching extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int var1) { return 15; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentWaterWalker.java b/src/game/java/net/minecraft/enchantment/EnchantmentWaterWalker.java index cc95b3d0..b4b23398 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentWaterWalker.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentWaterWalker.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentWaterWalker extends Enchantment { public EnchantmentWaterWalker(int parInt1, ResourceLocation parResourceLocation, int parInt2) { @@ -35,6 +35,7 @@ public class EnchantmentWaterWalker extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + 15; } @@ -42,6 +43,7 @@ public class EnchantmentWaterWalker extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 3; } @@ -50,7 +52,8 @@ public class EnchantmentWaterWalker extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int i) { return i * 10; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnchantmentWaterWorker.java b/src/game/java/net/minecraft/enchantment/EnchantmentWaterWorker.java index 064f7eb1..f7c77f99 100644 --- a/src/game/java/net/minecraft/enchantment/EnchantmentWaterWorker.java +++ b/src/game/java/net/minecraft/enchantment/EnchantmentWaterWorker.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentWaterWorker extends Enchantment { public EnchantmentWaterWorker(int parInt1, ResourceLocation parResourceLocation, int parInt2) { @@ -35,6 +35,7 @@ public class EnchantmentWaterWorker extends Enchantment { * + Returns the maximum value of enchantability nedded on the enchantment level * passed. */ + @Override public int getMaxEnchantability(int i) { return this.getMinEnchantability(i) + 40; } @@ -42,6 +43,7 @@ public class EnchantmentWaterWorker extends Enchantment { /** * + Returns the maximum level that the enchantment can have. */ + @Override public int getMaxLevel() { return 1; } @@ -50,7 +52,8 @@ public class EnchantmentWaterWorker extends Enchantment { * + Returns the minimal value of enchantability needed on the enchantment level * passed. */ + @Override public int getMinEnchantability(int var1) { return 1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/enchantment/EnumEnchantmentType.java b/src/game/java/net/minecraft/enchantment/EnumEnchantmentType.java index b48990be..5437f2fc 100644 --- a/src/game/java/net/minecraft/enchantment/EnumEnchantmentType.java +++ b/src/game/java/net/minecraft/enchantment/EnumEnchantmentType.java @@ -10,13 +10,13 @@ import net.minecraft.item.ItemTool; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.item.ItemTool; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumEnchantmentType { ALL, ARMOR, ARMOR_FEET, ARMOR_LEGS, ARMOR_TORSO, ARMOR_HEAD, WEAPON, DIGGER, FISHING_ROD, BREAKABLE, BOW; @@ -59,4 +59,4 @@ public enum EnumEnchantmentType { : (parItem instanceof ItemFishingRod ? this == FISHING_ROD : false))); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/DataWatcher.java b/src/game/java/net/minecraft/entity/DataWatcher.java index 1b9cb8ca..143ca673 100644 --- a/src/game/java/net/minecraft/entity/DataWatcher.java +++ b/src/game/java/net/minecraft/entity/DataWatcher.java @@ -21,13 +21,13 @@ import net.minecraft.util.Rotations; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.Rotations; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DataWatcher { public static class WatchableObject { @@ -389,4 +389,4 @@ public class DataWatcher { } buffer.writeByte(127); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/Entity.java b/src/game/java/net/minecraft/entity/Entity.java index 3d237967..7242c648 100644 --- a/src/game/java/net/minecraft/entity/Entity.java +++ b/src/game/java/net/minecraft/entity/Entity.java @@ -57,13 +57,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -75,7 +75,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Entity implements ICommandSender { private static final AxisAlignedBB ZERO_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); @@ -157,6 +157,8 @@ public abstract class Entity implements ICommandSender { private String lastFilteredNameTagForFilter = null; + public boolean shouldCull = false; + public Entity(World worldIn) { this.entityId = nextEntityID++; this.renderDistanceWeight = 1.0D; @@ -187,17 +189,20 @@ public abstract class Entity implements ICommandSender { /** * + Send a chat message to the CommandSender */ + @Override public void addChatMessage(IChatComponent var1) { } public void addEntityCrashInfo(CrashReportCategory category) { category.addCrashSectionCallable("Entity Type", new Callable() { + @Override public String call() throws Exception { return EntityList.getEntityString(Entity.this) + " (" + Entity.this.getClass().getCanonicalName() + ")"; } }); category.addCrashSection("Entity ID", Integer.valueOf(this.entityId)); category.addCrashSectionCallable("Entity Name", new Callable() { + @Override public String call() throws Exception { return Entity.this.getName(); } @@ -210,11 +215,13 @@ public abstract class Entity implements ICommandSender { category.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[] { Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ) })); category.addCrashSectionCallable("Entity\'s Rider", new Callable() { + @Override public String call() throws Exception { return Entity.this.riddenByEntity.toString(); } }); category.addCrashSectionCallable("Entity\'s Vehicle", new Callable() { + @Override public String call() throws Exception { return Entity.this.ridingEntity.toString(); } @@ -323,6 +330,7 @@ public abstract class Entity implements ICommandSender { * + Returns {@code true} if the CommandSender is allowed to execute the * command, {@code false} if not */ + @Override public boolean canCommandSenderUseCommand(int var1, String var2) { return true; } @@ -396,7 +404,6 @@ public abstract class Entity implements ICommandSender { if (!this.isImmuneToFire) { this.attackEntityFrom(DamageSource.inFire, (float) amount); } - } protected void doBlockCollisions() { @@ -462,6 +469,7 @@ public abstract class Entity implements ICommandSender { protected abstract void entityInit(); + @Override public boolean equals(Object object) { return object instanceof Entity ? ((Entity) object).entityId == this.entityId : false; } @@ -581,6 +589,7 @@ public abstract class Entity implements ICommandSender { /** * + Returns the entity associated with the command sender. MAY BE NULL! */ + @Override public Entity getCommandSenderEntity() { return this; } @@ -618,6 +627,7 @@ public abstract class Entity implements ICommandSender { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { ChatComponentText chatcomponenttext = new ChatComponentText(this.getName()); chatcomponenttext.getChatStyle().setChatHoverEvent(this.getHoverEvent()); @@ -713,6 +723,7 @@ public abstract class Entity implements ICommandSender { * + Get the world, if available. {@code null} is not allowed! If you are * not an entity in the world, return the overworld */ + @Override public World getEntityWorld() { return this.worldObj; } @@ -809,6 +820,7 @@ public abstract class Entity implements ICommandSender { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { if (this.hasCustomName()) { return this.getCustomNameTag(); @@ -857,6 +869,7 @@ public abstract class Entity implements ICommandSender { * + Get the position in the world. {@code null} is not allowed! If you * are not an entity in the world, return the coordinates 0, 0, 0 */ + @Override public BlockPos getPosition() { return new BlockPos(this.posX, this.posY + 0.5D, this.posZ); } @@ -877,6 +890,7 @@ public abstract class Entity implements ICommandSender { * + Get the position vector. {@code null} is not allowed! If you are not * an entity in the world, return 0.0D, 0.0D, 0.0D */ + @Override public Vec3 getPositionVector() { return new Vec3(this.posX, this.posY, this.posZ); } @@ -947,6 +961,7 @@ public abstract class Entity implements ICommandSender { return this.dataWatcher.getWatchableObjectString(2).length() > 0; } + @Override public int hashCode() { return this.entityId; } @@ -1008,8 +1023,7 @@ public abstract class Entity implements ICommandSender { if (this.noClip) { return false; } else { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(Integer.MIN_VALUE, - Integer.MIN_VALUE, Integer.MIN_VALUE); + BlockPos blockpos$mutableblockpos = new BlockPos(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); for (int i = 0; i < 8; ++i) { int j = MathHelper.floor_double( @@ -1148,7 +1162,7 @@ public abstract class Entity implements ICommandSender { /** * + - * + * * @return True if this entity will not play sounds */ public boolean isSilent() { @@ -1833,7 +1847,10 @@ public abstract class Entity implements ICommandSender { this.dimension = tagCompund.getInteger("Dimension"); this.invulnerable = tagCompund.getBoolean("Invulnerable"); this.timeUntilPortal = tagCompund.getInteger("PortalCooldown"); - if (tagCompund.hasKey("UUIDMost", 4) && tagCompund.hasKey("UUIDLeast", 4)) { + if (tagCompund.hasKey("UUID", 12)) { + long[] uuidArray = tagCompund.getLongArray("UUID"); + this.entityUniqueID = new EaglercraftUUID(uuidArray[0], uuidArray[1]); + } else if (tagCompund.hasKey("UUIDMost", 4) && tagCompund.hasKey("UUIDLeast", 4)) { this.entityUniqueID = new EaglercraftUUID(tagCompund.getLong("UUIDMost"), tagCompund.getLong("UUIDLeast")); } else if (tagCompund.hasKey("UUID", 8)) { @@ -1954,6 +1971,7 @@ public abstract class Entity implements ICommandSender { * + Returns true if the command sender should be sent feedback about executed * commands */ + @Override public boolean sendCommandFeedback() { return false; } @@ -1987,6 +2005,7 @@ public abstract class Entity implements ICommandSender { this.velocityChanged = true; } + @Override public void setCommandStat(CommandResultStats.Type commandresultstats$type, int i) { this.cmdResultStats.func_179672_a(this, commandresultstats$type, i); } @@ -2237,6 +2256,7 @@ public abstract class Entity implements ICommandSender { } + @Override public String toString() { return HString.format("%s[\'%s\'/%d, l=\'%s\', x=%.2f, y=%.2f, z=%.2f]", new Object[] { this.getClass().getSimpleName(), this.getName(), Integer.valueOf(this.entityId), @@ -2401,8 +2421,8 @@ public abstract class Entity implements ICommandSender { tagCompund.setInteger("Dimension", this.dimension); tagCompund.setBoolean("Invulnerable", this.invulnerable); tagCompund.setInteger("PortalCooldown", this.timeUntilPortal); - tagCompund.setLong("UUIDMost", this.getUniqueID().getMostSignificantBits()); - tagCompund.setLong("UUIDLeast", this.getUniqueID().getLeastSignificantBits()); + tagCompund.setLongArray("UUID", new long[] { this.getUniqueID().getMostSignificantBits(), + this.getUniqueID().getLeastSignificantBits() }); if (this.getCustomNameTag() != null && this.getCustomNameTag().length() > 0) { tagCompund.setString("CustomName", this.getCustomNameTag()); tagCompund.setBoolean("CustomNameVisible", this.getAlwaysRenderNameTag()); @@ -2445,4 +2465,4 @@ public abstract class Entity implements ICommandSender { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityAgeable.java b/src/game/java/net/minecraft/entity/EntityAgeable.java index e2f7015c..607aea74 100644 --- a/src/game/java/net/minecraft/entity/EntityAgeable.java +++ b/src/game/java/net/minecraft/entity/EntityAgeable.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAgeable extends EntityCreature { protected int growingAge; @@ -53,6 +53,7 @@ public abstract class EntityAgeable extends EntityCreature { public abstract EntityAgeable createChild(EntityAgeable var1); + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(12, Byte.valueOf((byte) 0)); @@ -98,6 +99,7 @@ public abstract class EntityAgeable extends EntityCreature { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer player) { ItemStack itemstack = player.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.spawn_egg) { @@ -133,6 +135,7 @@ public abstract class EntityAgeable extends EntityCreature { /** * + If Animal, checks if the age timer is negative */ + @Override public boolean isChild() { return this.getGrowingAge() < 0; } @@ -149,6 +152,7 @@ public abstract class EntityAgeable extends EntityCreature { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (this.worldObj.isRemote) { @@ -184,6 +188,7 @@ public abstract class EntityAgeable extends EntityCreature { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setGrowingAge(nbttagcompound.getInteger("Age")); @@ -216,6 +221,7 @@ public abstract class EntityAgeable extends EntityCreature { /** * + Sets the width and height of the entity. Args: width, height */ + @Override protected final void setSize(float width, float height) { boolean flag = this.ageWidth > 0.0F; this.ageWidth = width; @@ -229,9 +235,10 @@ public abstract class EntityAgeable extends EntityCreature { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("Age", this.getGrowingAge()); nbttagcompound.setInteger("ForcedAge", this.field_175502_b); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityBodyHelper.java b/src/game/java/net/minecraft/entity/EntityBodyHelper.java index 2d2f970e..e5712176 100644 --- a/src/game/java/net/minecraft/entity/EntityBodyHelper.java +++ b/src/game/java/net/minecraft/entity/EntityBodyHelper.java @@ -5,13 +5,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBodyHelper { private EntityLivingBase theLiving; @@ -80,4 +80,4 @@ public class EntityBodyHelper { this.theLiving.renderYawOffset, f); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityCreature.java b/src/game/java/net/minecraft/entity/EntityCreature.java index 3ea3595b..e820579e 100644 --- a/src/game/java/net/minecraft/entity/EntityCreature.java +++ b/src/game/java/net/minecraft/entity/EntityCreature.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityCreature extends EntityLiving { public static final EaglercraftUUID FLEEING_SPEED_MODIFIER_UUID = EaglercraftUUID @@ -64,6 +64,7 @@ public abstract class EntityCreature extends EntityLiving { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return super.getCanSpawnHere() && this .getBlockPathWeight(new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ)) >= 0.0F; @@ -112,6 +113,7 @@ public abstract class EntityCreature extends EntityLiving { * + Applies logic related to leashes, for example dragging the entity or * breaking the leash. */ + @Override protected void updateLeashedState() { super.updateLeashedState(); if (this.getLeashed() && this.getLeashedToEntity() != null @@ -164,4 +166,4 @@ public abstract class EntityCreature extends EntityLiving { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityFlying.java b/src/game/java/net/minecraft/entity/EntityFlying.java index 85949bd2..4d1a834d 100644 --- a/src/game/java/net/minecraft/entity/EntityFlying.java +++ b/src/game/java/net/minecraft/entity/EntityFlying.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,19 +26,21 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityFlying extends EntityLiving { public EntityFlying(World worldIn) { super(worldIn); } + @Override public void fall(float var1, float var2) { } /** * + returns true if this entity is by a ladder, false otherwise */ + @Override public boolean isOnLadder() { return false; } @@ -46,6 +48,7 @@ public abstract class EntityFlying extends EntityLiving { /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float strafe, float forward) { if (this.isInWater()) { this.moveFlying(strafe, forward, 0.02F); @@ -94,6 +97,7 @@ public abstract class EntityFlying extends EntityLiving { this.limbSwing += this.limbSwingAmount; } + @Override protected void updateFallState(double var1, boolean var3, Block var4, BlockPos var5) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityHanging.java b/src/game/java/net/minecraft/entity/EntityHanging.java index 114b3aff..c06e41b5 100644 --- a/src/game/java/net/minecraft/entity/EntityHanging.java +++ b/src/game/java/net/minecraft/entity/EntityHanging.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityHanging extends Entity { private int tickCounter1; @@ -55,6 +55,7 @@ public abstract class EntityHanging extends Entity { /** * + Adds to the current velocity of the entity. Args: x, y, z */ + @Override public void addVelocity(double d0, double d1, double d2) { if (!this.worldObj.isRemote && !this.isDead && d0 * d0 + d1 * d1 + d2 * d2 > 0.0D) { this.setDead(); @@ -66,6 +67,7 @@ public abstract class EntityHanging extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float var2) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -84,10 +86,12 @@ public abstract class EntityHanging extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return true; } + @Override protected void entityInit() { } @@ -101,6 +105,7 @@ public abstract class EntityHanging extends Entity { public abstract int getHeightPixels(); + @Override public EnumFacing getHorizontalFacing() { return this.facingDirection; } @@ -111,6 +116,7 @@ public abstract class EntityHanging extends Entity { * + Called when a player attacks an entity. If this returns true the attack * will not happen. */ + @Override public boolean hitByEntity(Entity entity) { return entity instanceof EntityPlayer ? this.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) entity), 0.0F) @@ -120,6 +126,7 @@ public abstract class EntityHanging extends Entity { /** * + Tries to moves the entity by the passed in displacement. Args: x, y, z */ + @Override public void moveEntity(double d0, double d1, double d2) { if (!this.worldObj.isRemote && !this.isDead && d0 * d0 + d1 * d1 + d2 * d2 > 0.0D) { this.setDead(); @@ -133,6 +140,7 @@ public abstract class EntityHanging extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -183,6 +191,7 @@ public abstract class EntityHanging extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.hangingPosition = new BlockPos(nbttagcompound.getInteger("TileX"), nbttagcompound.getInteger("TileY"), nbttagcompound.getInteger("TileZ")); @@ -203,6 +212,7 @@ public abstract class EntityHanging extends Entity { * + Sets the x,y,z of the entity from the given parameters. Also seems to set * up a bounding box. */ + @Override public void setPosition(double d0, double d1, double d2) { this.posX = d0; this.posY = d1; @@ -216,6 +226,7 @@ public abstract class EntityHanging extends Entity { } + @Override protected boolean shouldSetPosAfterLoading() { return false; } @@ -270,10 +281,11 @@ public abstract class EntityHanging extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setByte("Facing", (byte) this.facingDirection.getHorizontalIndex()); nbttagcompound.setInteger("TileX", this.getHangingPosition().getX()); nbttagcompound.setInteger("TileY", this.getHangingPosition().getY()); nbttagcompound.setInteger("TileZ", this.getHangingPosition().getZ()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityLeashKnot.java b/src/game/java/net/minecraft/entity/EntityLeashKnot.java index 5a1c1a27..153dc3e8 100644 --- a/src/game/java/net/minecraft/entity/EntityLeashKnot.java +++ b/src/game/java/net/minecraft/entity/EntityLeashKnot.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLeashKnot extends EntityHanging { public static EntityLeashKnot createKnot(World worldIn, BlockPos fence) { @@ -76,18 +76,22 @@ public class EntityLeashKnot extends EntityHanging { this.posZ - 0.1875D, this.posX + 0.1875D, this.posY + 0.25D + 0.125D, this.posZ + 0.1875D)); } + @Override protected void entityInit() { super.entityInit(); } + @Override public float getEyeHeight() { return -0.0625F; } + @Override public int getHeightPixels() { return 9; } + @Override public int getWidthPixels() { return 9; } @@ -95,6 +99,7 @@ public class EntityLeashKnot extends EntityHanging { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.getHeldItem(); boolean flag = false; @@ -137,6 +142,7 @@ public class EntityLeashKnot extends EntityHanging { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { return d0 < 1024.0D; } @@ -144,12 +150,14 @@ public class EntityLeashKnot extends EntityHanging { /** * + Called when this entity is broken. Entity parameter may be null. */ + @Override public void onBroken(Entity var1) { } /** * + checks to make sure painting can be placed there */ + @Override public boolean onValidSurface() { return this.worldObj.getBlockState(this.hangingPosition).getBlock() instanceof BlockFence; } @@ -157,18 +165,21 @@ public class EntityLeashKnot extends EntityHanging { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound var1) { } /** * + Updates facing and bounding box based on it */ + @Override public void updateFacingWithBoundingBox(EnumFacing var1) { } /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound var1) { } @@ -178,7 +189,8 @@ public class EntityLeashKnot extends EntityHanging { * on disk. Ridden entities return false here as they are saved with their * rider. */ + @Override public boolean writeToNBTOptional(NBTTagCompound var1) { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityList.java b/src/game/java/net/minecraft/entity/EntityList.java index 4d27da42..42e96916 100644 --- a/src/game/java/net/minecraft/entity/EntityList.java +++ b/src/game/java/net/minecraft/entity/EntityList.java @@ -8,6 +8,8 @@ import java.util.Set; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformType; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.lax1dude.eaglercraft.v1_8.minecraft.EntityConstructor; @@ -82,13 +84,13 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -100,7 +102,7 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityList { public static class EntityEggInfo { @@ -357,11 +359,16 @@ public class EntityList { Set set = stringToClassMapping.keySet(); ArrayList arraylist = Lists.newArrayList(); - for (String s : set) { - Class oclass = (Class) stringToClassMapping.get(s); - if ((oclass.getModifiers() & 1024) != 1024) { - arraylist.add(s); + // TODO: Eventually TeaVM will support getModifiers + if (EagRuntime.getPlatformType() != EnumPlatformType.WASM_GC) { + for (String s : set) { + Class oclass = (Class) stringToClassMapping.get(s); + if ((oclass.getModifiers() & 1024) != 1024) { + arraylist.add(s); + } } + } else { + arraylist.addAll(set); } arraylist.add("LightningBolt"); @@ -404,4 +411,4 @@ public class EntityList { public static boolean isStringValidEntityName(String entityName) { return "Player".equals(entityName) || getEntityNameList().contains(entityName); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityLiving.java b/src/game/java/net/minecraft/entity/EntityLiving.java index 0c232565..e7e044d2 100644 --- a/src/game/java/net/minecraft/entity/EntityLiving.java +++ b/src/game/java/net/minecraft/entity/EntityLiving.java @@ -41,13 +41,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -59,7 +59,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityLiving extends EntityLivingBase { public static enum SpawnPlacementType { @@ -195,6 +195,7 @@ public abstract class EntityLiving extends EntityLivingBase { return !this.getLeashed() && !(this instanceof IMob); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().registerAttribute(SharedMonsterAttributes.followRange).setBaseValue(16.0D); @@ -276,6 +277,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Drop the equipment for this entity. */ + @Override protected void dropEquipment(boolean flag, int i) { for (int j = 0; j < this.getInventory().length; ++j) { ItemStack itemstack = this.getEquipmentInSlot(j); @@ -305,6 +307,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { Item item = this.getDropItem(); if (item != null) { @@ -334,6 +337,7 @@ public abstract class EntityLiving extends EntityLivingBase { this.persistenceRequired = true; } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(15, Byte.valueOf((byte) 0)); @@ -363,6 +367,7 @@ public abstract class EntityLiving extends EntityLivingBase { this.rotationYaw = this.updateRotation(this.rotationYaw, f, parFloat1); } + @Override protected float func_110146_f(float var1, float f) { this.bodyHelper.updateRenderAngles(); return f; @@ -387,6 +392,7 @@ public abstract class EntityLiving extends EntityLivingBase { return true; } + @Override public ItemStack getCurrentArmor(int i) { return this.equipment[i + 1]; } @@ -405,6 +411,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + 0: Tool in Hand; 1-4: Armor */ + @Override public ItemStack getEquipmentInSlot(int i) { return this.equipment[i]; } @@ -412,6 +419,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer var1) { if (this.experienceValue > 0) { int i = this.experienceValue; @@ -432,6 +440,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Returns the item that this EntityLiving is holding, if any. */ + @Override public ItemStack getHeldItem() { return this.equipment[0]; } @@ -439,6 +448,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + returns the inventory of this entity (only used in EntityPlayerMP it seems) */ + @Override public ItemStack[] getInventory() { return this.equipment; } @@ -470,6 +480,7 @@ public abstract class EntityLiving extends EntityLivingBase { * + The maximum height from where the entity is alowed to jump (used in * pathfinder) */ + @Override public int getMaxFallHeight() { if (this.getAttackTarget() == null) { return 3; @@ -529,6 +540,7 @@ public abstract class EntityLiving extends EntityLivingBase { return 40; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 20) { this.spawnExplosionParticle(); @@ -549,6 +561,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + First layer of player interaction */ + @Override public final boolean interactFirst(EntityPlayer entityplayer) { if (this.getLeashed() && this.getLeashedToEntity() == entityplayer) { this.clearLeashed(true, !entityplayer.capabilities.isCreativeMode); @@ -600,6 +613,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Returns whether the entity is in a server world */ + @Override public boolean isServerWorld() { return super.isServerWorld() && !this.isAIDisabled(); } @@ -607,6 +621,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Gets called every tick from main Entity class */ + @Override public void onEntityUpdate() { super.onEntityUpdate(); if (this.isEntityAlive() && this.rand.nextInt(1000) < this.livingSoundTime++) { @@ -631,6 +646,7 @@ public abstract class EntityLiving extends EntityLivingBase { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (!this.worldObj.isRemote && this.canPickUpLoot() && !this.dead @@ -649,6 +665,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote) { @@ -671,6 +688,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("CanPickUpLoot", 1)) { @@ -704,9 +722,11 @@ public abstract class EntityLiving extends EntityLivingBase { private void recreateLeash() { if (this.isLeashed && this.leashNBTTag != null) { - if (this.leashNBTTag.hasKey("UUIDMost", 4) && this.leashNBTTag.hasKey("UUIDLeast", 4)) { - EaglercraftUUID uuid = new EaglercraftUUID(this.leashNBTTag.getLong("UUIDMost"), - this.leashNBTTag.getLong("UUIDLeast")); + if (this.leashNBTTag.hasKey("UUID", 12) + || (this.leashNBTTag.hasKey("UUIDMost", 4) && this.leashNBTTag.hasKey("UUIDLeast", 4))) { + long[] uuidArray = this.leashNBTTag.hasKey("UUID", 12) ? this.leashNBTTag.getLongArray("UUID") + : new long[] { this.leashNBTTag.getLong("UUIDMost"), this.leashNBTTag.getLong("UUIDLeast") }; + EaglercraftUUID uuid = new EaglercraftUUID(uuidArray[0], uuidArray[1]); List entities = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().expand(10.0D, 10.0D, 10.0D)); @@ -735,6 +755,7 @@ public abstract class EntityLiving extends EntityLivingBase { this.leashNBTTag = null; } + @Override public boolean replaceItemInInventory(int i, ItemStack itemstack) { int j; if (i == 99) { @@ -758,6 +779,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + set the movespeed used for the new AI system */ + @Override public void setAIMoveSpeed(float f) { super.setAIMoveSpeed(f); this.setMoveForward(f); @@ -778,6 +800,7 @@ public abstract class EntityLiving extends EntityLivingBase { * + Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ + @Override public void setCurrentItemOrArmor(int i, ItemStack itemstack) { this.equipment[i] = itemstack; } @@ -892,6 +915,7 @@ public abstract class EntityLiving extends EntityLivingBase { protected void updateAITasks() { } + @Override protected final void updateEntityActionState() { ++this.entityAge; this.despawnEntity(); @@ -1010,6 +1034,7 @@ public abstract class EntityLiving extends EntityLivingBase { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("CanPickUpLoot", this.canPickUpLoot()); @@ -1037,8 +1062,9 @@ public abstract class EntityLiving extends EntityLivingBase { if (this.leashedToEntity != null) { NBTTagCompound nbttagcompound2 = new NBTTagCompound(); if (this.leashedToEntity instanceof EntityLivingBase) { - nbttagcompound2.setLong("UUIDMost", this.leashedToEntity.getUniqueID().getMostSignificantBits()); - nbttagcompound2.setLong("UUIDLeast", this.leashedToEntity.getUniqueID().getLeastSignificantBits()); + nbttagcompound2.setLongArray("UUID", + new long[] { this.leashedToEntity.getUniqueID().getMostSignificantBits(), + this.leashedToEntity.getUniqueID().getLeastSignificantBits() }); } else if (this.leashedToEntity instanceof EntityHanging) { BlockPos blockpos = ((EntityHanging) this.leashedToEntity).getHangingPosition(); nbttagcompound2.setInteger("X", blockpos.getX()); @@ -1054,4 +1080,4 @@ public abstract class EntityLiving extends EntityLivingBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityLivingBase.java b/src/game/java/net/minecraft/entity/EntityLivingBase.java index a34e5597..2de7442b 100644 --- a/src/game/java/net/minecraft/entity/EntityLivingBase.java +++ b/src/game/java/net/minecraft/entity/EntityLivingBase.java @@ -57,13 +57,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -75,7 +75,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityLivingBase extends Entity { private static final EaglercraftUUID sprintingSpeedBoostModifierUUID = EaglercraftUUID @@ -246,6 +246,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -346,6 +347,7 @@ public abstract class EntityLivingBase extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return !this.isDead; } @@ -354,6 +356,7 @@ public abstract class EntityLivingBase extends Entity { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return !this.isDead; } @@ -399,6 +402,7 @@ public abstract class EntityLivingBase extends Entity { List list = this.worldObj.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().expand(0.20000000298023224D, 0.0D, 0.20000000298023224D), Predicates.and(EntitySelectors.NOT_SPECTATING, new Predicate() { + @Override public boolean apply(Entity entity1) { return entity1.canBePushed(); } @@ -492,6 +496,7 @@ public abstract class EntityLivingBase extends Entity { protected void dropFewItems(boolean parFlag, int parInt1) { } + @Override protected void entityInit() { this.dataWatcher.addObject(7, Integer.valueOf(0)); this.dataWatcher.addObject(8, Byte.valueOf((byte) 0)); @@ -499,6 +504,7 @@ public abstract class EntityLivingBase extends Entity { this.dataWatcher.addObject(6, Float.valueOf(1.0F)); } + @Override public void fall(float f, float f1) { super.fall(f, f1); PotionEffect potioneffect = this.getActivePotionEffect(Potion.jump); @@ -545,6 +551,7 @@ public abstract class EntityLivingBase extends Entity { return parFloat2; } + @Override public void func_181013_g(float f) { this.renderYawOffset = f; } @@ -586,6 +593,7 @@ public abstract class EntityLivingBase extends Entity { return this.entityLivingToAttack; } + @Override public boolean getAlwaysRenderNameTagForRender() { return false; } @@ -639,6 +647,7 @@ public abstract class EntityLivingBase extends Entity { return "game.neutral.die"; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ItemStack itm = this.getHeldItem(); @@ -682,6 +691,7 @@ public abstract class EntityLivingBase extends Entity { return "game.neutral.hurt"; } + @Override public abstract ItemStack[] getInventory(); protected float getJumpUpwardsMotion() { @@ -699,6 +709,7 @@ public abstract class EntityLivingBase extends Entity { /** * + interpolated look vector */ + @Override public Vec3 getLook(float f) { if (f == 1.0F) { return this.getVectorForRotation(this.rotationPitch, this.rotationYawHead); @@ -712,6 +723,7 @@ public abstract class EntityLivingBase extends Entity { /** * + returns a (normalized) vector of where this entity is looking */ + @Override public Vec3 getLookVec() { return this.getLook(1.0F); } @@ -728,6 +740,7 @@ public abstract class EntityLivingBase extends Entity { return this.rand; } + @Override public float getRotationYawHead() { return this.rotationYawHead; } @@ -785,6 +798,7 @@ public abstract class EntityLivingBase extends Entity { this.motionY += 0.03999999910593033D; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 2) { this.limbSwingAmount = 1.5F; @@ -834,6 +848,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Checks whether target entity is alive. */ + @Override public boolean isEntityAlive() { return !this.isDead && this.getHealth() > 0.0F; } @@ -937,6 +952,7 @@ public abstract class EntityLivingBase extends Entity { /** * + sets the dead flag. Used when you fall off the bottom of the world. */ + @Override protected void kill() { this.attackEntityFrom(DamageSource.outOfWorld, 4.0F); } @@ -970,6 +986,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Called when a player mounts an entity. e.g. mounts a pig, mounts a boat. */ + @Override public void mountEntity(Entity entity) { if (this.ridingEntity != null && entity == null) { if (!this.worldObj.isRemote) { @@ -1191,6 +1208,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Gets called every tick from main Entity class */ + @Override public void onEntityUpdate() { this.prevSwingProgress = this.swingProgress; super.onEntityUpdate(); @@ -1321,6 +1339,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Called by the /kill command. */ + @Override public void onKillCommand() { this.attackEntityFrom(DamageSource.outOfWorld, Float.MAX_VALUE); } @@ -1407,6 +1426,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote) { @@ -1509,6 +1529,7 @@ public abstract class EntityLivingBase extends Entity { * + Setups the entity to do the hurt animation. Only used by packets in * multiplayer. */ + @Override public void performHurtAnimation() { this.hurtTime = this.maxHurtTime = 10; this.attackedAtYaw = 0.0F; @@ -1517,6 +1538,7 @@ public abstract class EntityLivingBase extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.setAbsorptionAmount(nbttagcompound.getFloat("AbsorptionAmount")); if (nbttagcompound.hasKey("Attributes", 9) && this.worldObj != null && !this.worldObj.isRemote) { @@ -1592,6 +1614,7 @@ public abstract class EntityLivingBase extends Entity { } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -1647,11 +1670,13 @@ public abstract class EntityLivingBase extends Entity { /** * + Sets that this entity has been attacked. */ + @Override protected void setBeenAttacked() { this.velocityChanged = this.rand.nextDouble() >= this .getEntityAttribute(SharedMonsterAttributes.knockbackResistance).getAttributeValue(); } + @Override public abstract void setCurrentItemOrArmor(int var1, ItemStack var2); public void setHealth(float health) { @@ -1672,6 +1697,7 @@ public abstract class EntityLivingBase extends Entity { this.lastAttackerTime = this.ticksExisted; } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float f, float f1, int i, boolean var10) { this.newPosX = d0; this.newPosY = d1; @@ -1689,6 +1715,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Sets the head's yaw rotation of the entity. */ + @Override public void setRotationYawHead(float f) { this.rotationYawHead = f; } @@ -1696,6 +1723,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Set sprinting switch for Entity. */ + @Override public void setSprinting(boolean flag) { super.setSprinting(flag); IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed); @@ -1753,6 +1781,7 @@ public abstract class EntityLivingBase extends Entity { protected void updateEntityActionState() { } + @Override protected void updateFallState(double d0, boolean flag, Block block, BlockPos blockpos) { if (!this.isInWater()) { this.handleWaterMovement(); @@ -1851,6 +1880,7 @@ public abstract class EntityLivingBase extends Entity { /** * + Handles updating while being ridden by an entity */ + @Override public void updateRidden() { super.updateRidden(); this.prevOnGroundSpeedFactor = this.onGroundSpeedFactor; @@ -1861,6 +1891,7 @@ public abstract class EntityLivingBase extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setFloat("HealF", this.getHealth()); nbttagcompound.setShort("Health", (short) ((int) Math.ceil((double) this.getHealth()))); @@ -1897,4 +1928,4 @@ public abstract class EntityLivingBase extends Entity { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityMinecartCommandBlock.java b/src/game/java/net/minecraft/entity/EntityMinecartCommandBlock.java index a4b7a5a6..25d9ae35 100644 --- a/src/game/java/net/minecraft/entity/EntityMinecartCommandBlock.java +++ b/src/game/java/net/minecraft/entity/EntityMinecartCommandBlock.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,36 +33,43 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartCommandBlock extends EntityMinecart { private final CommandBlockLogic commandBlockLogic = new CommandBlockLogic() { + @Override public int func_145751_f() { return 1; } + @Override public void func_145757_a(ByteBuf bytebuf) { bytebuf.writeInt(EntityMinecartCommandBlock.this.getEntityId()); } + @Override public Entity getCommandSenderEntity() { return EntityMinecartCommandBlock.this; } + @Override public World getEntityWorld() { return EntityMinecartCommandBlock.this.worldObj; } + @Override public BlockPos getPosition() { return new BlockPos(EntityMinecartCommandBlock.this.posX, EntityMinecartCommandBlock.this.posY + 0.5D, EntityMinecartCommandBlock.this.posZ); } + @Override public Vec3 getPositionVector() { return new Vec3(EntityMinecartCommandBlock.this.posX, EntityMinecartCommandBlock.this.posY, EntityMinecartCommandBlock.this.posZ); } + @Override public void updateCommand() { EntityMinecartCommandBlock.this.getDataWatcher().updateObject(23, this.getCommand()); EntityMinecartCommandBlock.this.getDataWatcher().updateObject(24, @@ -82,6 +89,7 @@ public class EntityMinecartCommandBlock extends EntityMinecart { super(worldIn, x, y, z); } + @Override protected void entityInit() { super.entityInit(); this.getDataWatcher().addObject(23, ""); @@ -92,10 +100,12 @@ public class EntityMinecartCommandBlock extends EntityMinecart { return this.commandBlockLogic; } + @Override public IBlockState getDefaultDisplayTile() { return Blocks.command_block.getDefaultState(); } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.COMMAND_BLOCK; } @@ -103,6 +113,7 @@ public class EntityMinecartCommandBlock extends EntityMinecart { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { this.commandBlockLogic.tryOpenEditCommandBlock(entityplayer); return false; @@ -112,6 +123,7 @@ public class EntityMinecartCommandBlock extends EntityMinecart { * + Called every tick the minecart is on an activator rail. Args: x, y, z, is * the rail receiving power */ + @Override public void onActivatorRailPass(int var1, int var2, int var3, boolean flag) { if (flag && this.ticksExisted - this.activatorRailCooldown >= 4) { this.getCommandBlockLogic().trigger(this.worldObj); @@ -120,6 +132,7 @@ public class EntityMinecartCommandBlock extends EntityMinecart { } + @Override public void onDataWatcherUpdate(int i) { super.onDataWatcherUpdate(i); if (i == 24) { @@ -138,6 +151,7 @@ public class EntityMinecartCommandBlock extends EntityMinecart { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.commandBlockLogic.readDataFromNBT(nbttagcompound); @@ -149,8 +163,9 @@ public class EntityMinecartCommandBlock extends EntityMinecart { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); this.commandBlockLogic.writeDataToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntitySpawnPlacementRegistry.java b/src/game/java/net/minecraft/entity/EntitySpawnPlacementRegistry.java index 59ee8069..4cbf6ea4 100644 --- a/src/game/java/net/minecraft/entity/EntitySpawnPlacementRegistry.java +++ b/src/game/java/net/minecraft/entity/EntitySpawnPlacementRegistry.java @@ -40,13 +40,13 @@ import net.minecraft.entity.passive.EntityWolf; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -58,7 +58,7 @@ import net.minecraft.entity.passive.EntityWolf; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySpawnPlacementRegistry { private static final HashMap ENTITY_PLACEMENTS = Maps.newHashMap(); @@ -101,4 +101,4 @@ public class EntitySpawnPlacementRegistry { public static EntityLiving.SpawnPlacementType getPlacementForEntity(Class entityClass) { return (EntityLiving.SpawnPlacementType) ENTITY_PLACEMENTS.get(entityClass); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityTracker.java b/src/game/java/net/minecraft/entity/EntityTracker.java index b5a34102..153952e3 100644 --- a/src/game/java/net/minecraft/entity/EntityTracker.java +++ b/src/game/java/net/minecraft/entity/EntityTracker.java @@ -45,13 +45,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -63,7 +63,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityTracker { private static final Logger logger = LogManager.getLogger(); @@ -109,6 +109,7 @@ public class EntityTracker { CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity To Track"); crashreportcategory.addCrashSection("Tracking range", trackingRange + " blocks"); crashreportcategory.addCrashSectionCallable("Update interval", new Callable() { + @Override public String call() throws Exception { String s = "Once per " + updateFrequency + " ticks"; if (updateFrequency == Integer.MAX_VALUE) { @@ -287,4 +288,4 @@ public class EntityTracker { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EntityTrackerEntry.java b/src/game/java/net/minecraft/entity/EntityTrackerEntry.java index 11c4705b..f63350c2 100644 --- a/src/game/java/net/minecraft/entity/EntityTrackerEntry.java +++ b/src/game/java/net/minecraft/entity/EntityTrackerEntry.java @@ -64,13 +64,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -82,7 +82,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityTrackerEntry { private static final Logger logger = LogManager.getLogger(); @@ -130,6 +130,7 @@ public class EntityTrackerEntry { this.onGround = trackedEntityIn.onGround; } + @Override public boolean equals(Object object) { return object instanceof EntityTrackerEntry ? ((EntityTrackerEntry) object).trackedEntity.getEntityId() == this.trackedEntity.getEntityId() @@ -249,6 +250,7 @@ public class EntityTrackerEntry { && this.trackedEntity.isSpectatedByPlayer(playerMP); } + @Override public int hashCode() { return this.trackedEntity.getEntityId(); } @@ -557,4 +559,4 @@ public class EntityTrackerEntry { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EnumCreatureAttribute.java b/src/game/java/net/minecraft/entity/EnumCreatureAttribute.java index 56119a77..127965a9 100644 --- a/src/game/java/net/minecraft/entity/EnumCreatureAttribute.java +++ b/src/game/java/net/minecraft/entity/EnumCreatureAttribute.java @@ -3,13 +3,13 @@ package net.minecraft.entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumCreatureAttribute { UNDEFINED, UNDEAD, ARTHROPOD; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/EnumCreatureType.java b/src/game/java/net/minecraft/entity/EnumCreatureType.java index fd2a8eb1..319433fe 100644 --- a/src/game/java/net/minecraft/entity/EnumCreatureType.java +++ b/src/game/java/net/minecraft/entity/EnumCreatureType.java @@ -10,13 +10,13 @@ import net.minecraft.entity.passive.IAnimals; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.entity.passive.IAnimals; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumCreatureType { MONSTER(IMob.class, 70, Material.air, false, false), CREATURE(EntityAnimal.class, 10, Material.air, true, true), @@ -73,4 +73,4 @@ public enum EnumCreatureType { public boolean getPeacefulCreature() { return this.isPeacefulCreature; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IEntityLivingData.java b/src/game/java/net/minecraft/entity/IEntityLivingData.java index 313555cc..4880fa84 100644 --- a/src/game/java/net/minecraft/entity/IEntityLivingData.java +++ b/src/game/java/net/minecraft/entity/IEntityLivingData.java @@ -3,13 +3,13 @@ package net.minecraft.entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IEntityLivingData { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IEntityMultiPart.java b/src/game/java/net/minecraft/entity/IEntityMultiPart.java index e5928bee..3c32c01c 100644 --- a/src/game/java/net/minecraft/entity/IEntityMultiPart.java +++ b/src/game/java/net/minecraft/entity/IEntityMultiPart.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IEntityMultiPart { boolean attackEntityFromPart(EntityDragonPart var1, DamageSource var2, float var3); World getWorld(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IEntityOwnable.java b/src/game/java/net/minecraft/entity/IEntityOwnable.java index e714a908..5051accc 100644 --- a/src/game/java/net/minecraft/entity/IEntityOwnable.java +++ b/src/game/java/net/minecraft/entity/IEntityOwnable.java @@ -3,13 +3,13 @@ package net.minecraft.entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IEntityOwnable { Entity getOwner(); String getOwnerId(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IMerchant.java b/src/game/java/net/minecraft/entity/IMerchant.java index b0b7470c..bbad438d 100644 --- a/src/game/java/net/minecraft/entity/IMerchant.java +++ b/src/game/java/net/minecraft/entity/IMerchant.java @@ -9,13 +9,13 @@ import net.minecraft.village.MerchantRecipeList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.village.MerchantRecipeList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IMerchant { EntityPlayer getCustomer(); @@ -52,4 +52,4 @@ public interface IMerchant { * itemstack is not null. */ void verifySellingItem(ItemStack var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/INpc.java b/src/game/java/net/minecraft/entity/INpc.java index 02df28e2..4fe82cd2 100644 --- a/src/game/java/net/minecraft/entity/INpc.java +++ b/src/game/java/net/minecraft/entity/INpc.java @@ -5,13 +5,13 @@ import net.minecraft.entity.passive.IAnimals; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.passive.IAnimals; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface INpc extends IAnimals { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IProjectile.java b/src/game/java/net/minecraft/entity/IProjectile.java index f934419a..6e8c0b21 100644 --- a/src/game/java/net/minecraft/entity/IProjectile.java +++ b/src/game/java/net/minecraft/entity/IProjectile.java @@ -3,13 +3,13 @@ package net.minecraft.entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProjectile { /** @@ -29,4 +29,4 @@ public interface IProjectile { * direction. */ void setThrowableHeading(double var1, double var3, double var5, float var7, float var8); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/IRangedAttackMob.java b/src/game/java/net/minecraft/entity/IRangedAttackMob.java index 7e930b82..0a718e99 100644 --- a/src/game/java/net/minecraft/entity/IRangedAttackMob.java +++ b/src/game/java/net/minecraft/entity/IRangedAttackMob.java @@ -3,13 +3,13 @@ package net.minecraft.entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRangedAttackMob { /** * + Attack the specified entity using a ranged attack. */ void attackEntityWithRangedAttack(EntityLivingBase var1, float var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/NpcMerchant.java b/src/game/java/net/minecraft/entity/NpcMerchant.java index acb70e79..dc320f19 100644 --- a/src/game/java/net/minecraft/entity/NpcMerchant.java +++ b/src/game/java/net/minecraft/entity/NpcMerchant.java @@ -11,13 +11,13 @@ import net.minecraft.village.MerchantRecipeList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.village.MerchantRecipeList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NpcMerchant implements IMerchant { private InventoryMerchant theMerchantInventory; @@ -43,6 +43,7 @@ public class NpcMerchant implements IMerchant { this.theMerchantInventory = new InventoryMerchant(parEntityPlayer, this); } + @Override public EntityPlayer getCustomer() { return this.customer; } @@ -51,22 +52,27 @@ public class NpcMerchant implements IMerchant { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.field_175548_d != null ? this.field_175548_d : new ChatComponentTranslation("entity.Villager.name", new Object[0])); } + @Override public MerchantRecipeList getRecipes(EntityPlayer var1) { return this.recipeList; } + @Override public void setCustomer(EntityPlayer var1) { } + @Override public void setRecipes(MerchantRecipeList merchantrecipelist) { this.recipeList = merchantrecipelist; } + @Override public void useRecipe(MerchantRecipe merchantrecipe) { merchantrecipe.incrementToolUses(); } @@ -76,6 +82,7 @@ public class NpcMerchant implements IMerchant { * Usually, this is just a sound byte being played depending if the suggested * itemstack is not null. */ + @Override public void verifySellingItem(ItemStack var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/SharedMonsterAttributes.java b/src/game/java/net/minecraft/entity/SharedMonsterAttributes.java index 49447244..c55c9c1f 100644 --- a/src/game/java/net/minecraft/entity/SharedMonsterAttributes.java +++ b/src/game/java/net/minecraft/entity/SharedMonsterAttributes.java @@ -16,13 +16,13 @@ import net.minecraft.nbt.NBTTagList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.nbt.NBTTagList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SharedMonsterAttributes { private static final Logger logger = LogManager.getLogger(); @@ -88,8 +88,9 @@ public class SharedMonsterAttributes { * + Creates an AttributeModifier from an NBTTagCompound */ public static AttributeModifier readAttributeModifierFromNBT(NBTTagCompound parNBTTagCompound) { - EaglercraftUUID uuid = new EaglercraftUUID(parNBTTagCompound.getLong("UUIDMost"), - parNBTTagCompound.getLong("UUIDLeast")); + long[] uuidArray = parNBTTagCompound.hasKey("UUID", 12) ? parNBTTagCompound.getLongArray("UUID") + : new long[] { parNBTTagCompound.getLong("UUIDMost"), parNBTTagCompound.getLong("UUIDLeast") }; + EaglercraftUUID uuid = new EaglercraftUUID(uuidArray[0], uuidArray[1]); try { return new AttributeModifier(uuid, parNBTTagCompound.getString("Name"), @@ -133,8 +134,8 @@ public class SharedMonsterAttributes { nbttagcompound.setString("Name", parAttributeModifier.getName()); nbttagcompound.setDouble("Amount", parAttributeModifier.getAmount()); nbttagcompound.setInteger("Operation", parAttributeModifier.getOperation()); - nbttagcompound.setLong("UUIDMost", parAttributeModifier.getID().getMostSignificantBits()); - nbttagcompound.setLong("UUIDLeast", parAttributeModifier.getID().getLeastSignificantBits()); + nbttagcompound.setLongArray("UUID", new long[] { parAttributeModifier.getID().getMostSignificantBits(), + parAttributeModifier.getID().getLeastSignificantBits() }); return nbttagcompound; } @@ -151,4 +152,4 @@ public class SharedMonsterAttributes { return nbttaglist; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIArrowAttack.java b/src/game/java/net/minecraft/entity/ai/EntityAIArrowAttack.java index bbddaf0f..92b35b08 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIArrowAttack.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIArrowAttack.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIArrowAttack extends EntityAIBase { private final EntityLiving entityHost; @@ -64,6 +64,7 @@ public class EntityAIArrowAttack extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); } @@ -71,6 +72,7 @@ public class EntityAIArrowAttack extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.attackTarget = null; this.field_75318_f = 0; @@ -80,6 +82,7 @@ public class EntityAIArrowAttack extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.entityHost.getAttackTarget(); if (entitylivingbase == null) { @@ -93,6 +96,7 @@ public class EntityAIArrowAttack extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { double d0 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.getEntityBoundingBox().minY, this.attackTarget.posZ); @@ -127,4 +131,4 @@ public class EntityAIArrowAttack extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIAttackOnCollide.java b/src/game/java/net/minecraft/entity/ai/EntityAIAttackOnCollide.java index 5b4a53f1..19863450 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIAttackOnCollide.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIAttackOnCollide.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIAttackOnCollide extends EntityAIBase { World worldObj; @@ -60,6 +60,7 @@ public class EntityAIAttackOnCollide extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); return entitylivingbase == null ? false @@ -75,6 +76,7 @@ public class EntityAIAttackOnCollide extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.attacker.getNavigator().clearPathEntity(); } @@ -82,6 +84,7 @@ public class EntityAIAttackOnCollide extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); if (entitylivingbase == null) { @@ -99,6 +102,7 @@ public class EntityAIAttackOnCollide extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.attacker.getNavigator().setPath(this.entityPathEntity, this.speedTowardsTarget); this.delayCounter = 0; @@ -107,6 +111,7 @@ public class EntityAIAttackOnCollide extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); this.attacker.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); @@ -144,4 +149,4 @@ public class EntityAIAttackOnCollide extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIAvoidEntity.java b/src/game/java/net/minecraft/entity/ai/EntityAIAvoidEntity.java index a731329a..5a47c084 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIAvoidEntity.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIAvoidEntity.java @@ -15,13 +15,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIAvoidEntity extends EntityAIBase { private final Predicate canBeSeenSelector; @@ -55,6 +55,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { public EntityAIAvoidEntity(EntityCreature parEntityCreature, Class parClass1, Predicate parPredicate, float parFloat1, double parDouble1, double parDouble2) { this.canBeSeenSelector = new Predicate() { + @Override public boolean apply(Entity entity) { return entity.isEntityAlive() && EntityAIAvoidEntity.this.theEntity.getEntitySenses().canSee(entity); } @@ -72,6 +73,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.entityPathNavigate.noPath(); } @@ -79,6 +81,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.closestLivingEntity = null; } @@ -86,6 +89,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { List list = this.theEntity.worldObj.getEntitiesWithinAABB(this.field_181064_i, this.theEntity.getEntityBoundingBox().expand((double) this.avoidDistance, 3.0D, @@ -113,6 +117,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.entityPathNavigate.setPath(this.entityPathEntity, this.farSpeed); } @@ -120,6 +125,7 @@ public class EntityAIAvoidEntity extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (this.theEntity.getDistanceSqToEntity(this.closestLivingEntity) < 49.0D) { this.theEntity.getNavigator().setSpeed(this.nearSpeed); @@ -128,4 +134,4 @@ public class EntityAIAvoidEntity extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIBase.java b/src/game/java/net/minecraft/entity/ai/EntityAIBase.java index 87b8980e..aad38893 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIBase.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIBase.java @@ -3,13 +3,13 @@ package net.minecraft.entity.ai; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity.ai; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAIBase { private int mutexBits; @@ -78,4 +78,4 @@ public abstract class EntityAIBase { */ public void updateTask() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIBeg.java b/src/game/java/net/minecraft/entity/ai/EntityAIBeg.java index 512bee7e..f3502fb8 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIBeg.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIBeg.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIBeg extends EntityAIBase { private EntityWolf theWolf; @@ -46,6 +46,7 @@ public class EntityAIBeg extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.thePlayer.isEntityAlive() ? false : (this.theWolf.getDistanceSqToEntity( @@ -66,6 +67,7 @@ public class EntityAIBeg extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theWolf.setBegging(false); this.thePlayer = null; @@ -74,6 +76,7 @@ public class EntityAIBeg extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { this.thePlayer = this.worldObject.getClosestPlayerToEntity(this.theWolf, (double) this.minPlayerDistance); return this.thePlayer == null ? false : this.hasPlayerGotBoneInHand(this.thePlayer); @@ -82,6 +85,7 @@ public class EntityAIBeg extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theWolf.setBegging(true); this.timeoutCounter = 40 + this.theWolf.getRNG().nextInt(40); @@ -90,10 +94,11 @@ public class EntityAIBeg extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theWolf.getLookHelper().setLookPosition(this.thePlayer.posX, this.thePlayer.posY + (double) this.thePlayer.getEyeHeight(), this.thePlayer.posZ, 10.0F, (float) this.theWolf.getVerticalFaceSpeed()); --this.timeoutCounter; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIBreakDoor.java b/src/game/java/net/minecraft/entity/ai/EntityAIBreakDoor.java index 9fa3ef0b..c565a268 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIBreakDoor.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIBreakDoor.java @@ -8,13 +8,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIBreakDoor extends EntityAIDoorInteract { private int breakingTime; @@ -39,6 +39,7 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { double d0 = this.theEntity.getDistanceSq(this.doorPosition); boolean flag; @@ -57,6 +58,7 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { /** * + Resets the task */ + @Override public void resetTask() { super.resetTask(); this.theEntity.worldObj.sendBlockBreakProgress(this.theEntity.getEntityId(), this.doorPosition, -1); @@ -65,6 +67,7 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!super.shouldExecute()) { return false; @@ -79,6 +82,7 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { super.startExecuting(); this.breakingTime = 0; @@ -87,6 +91,7 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { /** * + Updates the task */ + @Override public void updateTask() { super.updateTask(); if (this.theEntity.getRNG().nextInt(20) == 0) { @@ -107,4 +112,4 @@ public class EntityAIBreakDoor extends EntityAIDoorInteract { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIControlledByPlayer.java b/src/game/java/net/minecraft/entity/ai/EntityAIControlledByPlayer.java index 1f2ac762..198af13a 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIControlledByPlayer.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIControlledByPlayer.java @@ -16,13 +16,13 @@ import net.minecraft.world.pathfinder.WalkNodeProcessor; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.pathfinder.WalkNodeProcessor; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIControlledByPlayer extends EntityAIBase { private final EntityLiving thisEntity; @@ -83,6 +83,7 @@ public class EntityAIControlledByPlayer extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.speedBoosted = false; this.currentSpeed = 0.0F; @@ -91,6 +92,7 @@ public class EntityAIControlledByPlayer extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return this.thisEntity.isEntityAlive() && this.thisEntity.riddenByEntity != null && this.thisEntity.riddenByEntity instanceof EntityPlayer @@ -100,6 +102,7 @@ public class EntityAIControlledByPlayer extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.currentSpeed = 0.0F; } @@ -107,6 +110,7 @@ public class EntityAIControlledByPlayer extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { EntityPlayer entityplayer = (EntityPlayer) this.thisEntity.riddenByEntity; EntityCreature entitycreature = (EntityCreature) this.thisEntity; @@ -213,4 +217,4 @@ public class EntityAIControlledByPlayer extends EntityAIBase { this.thisEntity.moveEntityWithHeading(0.0F, f1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAICreeperSwell.java b/src/game/java/net/minecraft/entity/ai/EntityAICreeperSwell.java index 87426dd4..975cfb31 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAICreeperSwell.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAICreeperSwell.java @@ -6,13 +6,13 @@ import net.minecraft.entity.monster.EntityCreeper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.monster.EntityCreeper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAICreeperSwell extends EntityAIBase { EntityCreeper swellingCreeper; @@ -38,6 +38,7 @@ public class EntityAICreeperSwell extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.creeperAttackTarget = null; } @@ -45,6 +46,7 @@ public class EntityAICreeperSwell extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); return this.swellingCreeper.getCreeperState() > 0 @@ -54,6 +56,7 @@ public class EntityAICreeperSwell extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.swellingCreeper.getNavigator().clearPathEntity(); this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); @@ -62,6 +65,7 @@ public class EntityAICreeperSwell extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (this.creeperAttackTarget == null) { this.swellingCreeper.setCreeperState(-1); @@ -73,4 +77,4 @@ public class EntityAICreeperSwell extends EntityAIBase { this.swellingCreeper.setCreeperState(1); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIDefendVillage.java b/src/game/java/net/minecraft/entity/ai/EntityAIDefendVillage.java index 9f68a79c..aea59741 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIDefendVillage.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIDefendVillage.java @@ -8,13 +8,13 @@ import net.minecraft.village.Village; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.village.Village; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIDefendVillage extends EntityAITarget { EntityIronGolem irongolem; @@ -41,6 +41,7 @@ public class EntityAIDefendVillage extends EntityAITarget { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { Village village = this.irongolem.getVillage(); if (village == null) { @@ -65,8 +66,9 @@ public class EntityAIDefendVillage extends EntityAITarget { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.irongolem.setAttackTarget(this.villageAgressorTarget); super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIDoorInteract.java b/src/game/java/net/minecraft/entity/ai/EntityAIDoorInteract.java index 72578eaa..6edc6e5b 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIDoorInteract.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIDoorInteract.java @@ -12,13 +12,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAIDoorInteract extends EntityAIBase { protected EntityLiving theEntity; @@ -50,6 +50,7 @@ public abstract class EntityAIDoorInteract extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.hasStoppedDoorInteraction; } @@ -62,6 +63,7 @@ public abstract class EntityAIDoorInteract extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theEntity.isCollidedHorizontally) { return false; @@ -94,6 +96,7 @@ public abstract class EntityAIDoorInteract extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.hasStoppedDoorInteraction = false; this.entityPositionX = (float) ((double) ((float) this.doorPosition.getX() + 0.5F) - this.theEntity.posX); @@ -103,6 +106,7 @@ public abstract class EntityAIDoorInteract extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { float f = (float) ((double) ((float) this.doorPosition.getX() + 0.5F) - this.theEntity.posX); float f1 = (float) ((double) ((float) this.doorPosition.getZ() + 0.5F) - this.theEntity.posZ); @@ -112,4 +116,4 @@ public abstract class EntityAIDoorInteract extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIEatGrass.java b/src/game/java/net/minecraft/entity/ai/EntityAIEatGrass.java index ebfb91f4..656c2ced 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIEatGrass.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIEatGrass.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIEatGrass extends EntityAIBase { private static final Predicate field_179505_b = BlockStateHelper.forBlock(Blocks.tallgrass) @@ -51,6 +51,7 @@ public class EntityAIEatGrass extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.eatingGrassTimer > 0; } @@ -65,6 +66,7 @@ public class EntityAIEatGrass extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.eatingGrassTimer = 0; } @@ -72,6 +74,7 @@ public class EntityAIEatGrass extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.grassEaterEntity.getRNG().nextInt(this.grassEaterEntity.isChild() ? 50 : 1000) != 0) { return false; @@ -86,6 +89,7 @@ public class EntityAIEatGrass extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.eatingGrassTimer = 40; this.entityWorld.setEntityState(this.grassEaterEntity, (byte) 10); @@ -95,6 +99,7 @@ public class EntityAIEatGrass extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.eatingGrassTimer = Math.max(0, this.eatingGrassTimer - 1); if (this.eatingGrassTimer == 4) { @@ -120,4 +125,4 @@ public class EntityAIEatGrass extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearest.java b/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearest.java index 6b7db41c..673b89a8 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearest.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearest.java @@ -17,13 +17,13 @@ import net.minecraft.entity.player.EntityPlayerMP; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.entity.player.EntityPlayerMP; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFindEntityNearest extends EntityAIBase { private static final Logger field_179444_a = LogManager.getLogger(); @@ -53,6 +53,7 @@ public class EntityAIFindEntityNearest extends EntityAIBase { } this.field_179443_c = new Predicate() { + @Override public boolean apply(EntityLivingBase entitylivingbase) { double d0 = EntityAIFindEntityNearest.this.func_179438_f(); if (entitylivingbase.isSneaking()) { @@ -72,6 +73,7 @@ public class EntityAIFindEntityNearest extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { EntityLivingBase entitylivingbase = this.field_179442_b.getAttackTarget(); if (entitylivingbase == null) { @@ -95,6 +97,7 @@ public class EntityAIFindEntityNearest extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.field_179442_b.setAttackTarget((EntityLivingBase) null); super.startExecuting(); @@ -103,6 +106,7 @@ public class EntityAIFindEntityNearest extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { double d0 = this.func_179438_f(); List list = this.field_179442_b.worldObj.getEntitiesWithinAABB(this.field_179439_f, @@ -119,8 +123,9 @@ public class EntityAIFindEntityNearest extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.field_179442_b.setAttackTarget(this.field_179441_e); super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java b/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java index 5be58c2e..6b7209d8 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java @@ -20,13 +20,13 @@ import net.minecraft.scoreboard.Team; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.scoreboard.Team; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { private static final Logger field_179436_a = LogManager.getLogger(); @@ -54,6 +54,7 @@ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { } this.field_179435_c = new Predicate() { + @Override public boolean apply(Entity entity) { if (!(entity instanceof EntityPlayer)) { return false; @@ -87,6 +88,7 @@ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { EntityLivingBase entitylivingbase = this.field_179434_b.getAttackTarget(); if (entitylivingbase == null) { @@ -119,6 +121,7 @@ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.field_179434_b.setAttackTarget((EntityLivingBase) null); super.startExecuting(); @@ -127,6 +130,7 @@ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { double d0 = this.func_179431_f(); List list = this.field_179434_b.worldObj.getEntitiesWithinAABB(EntityPlayer.class, @@ -143,8 +147,9 @@ public class EntityAIFindEntityNearestPlayer extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.field_179434_b.setAttackTarget(this.field_179433_e); super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFleeSun.java b/src/game/java/net/minecraft/entity/ai/EntityAIFleeSun.java index 7b47499b..54142329 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFleeSun.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFleeSun.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFleeSun extends EntityAIBase { private EntityCreature theCreature; @@ -47,6 +47,7 @@ public class EntityAIFleeSun extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.theCreature.getNavigator().noPath(); } @@ -69,6 +70,7 @@ public class EntityAIFleeSun extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theWorld.isDaytime()) { return false; @@ -93,7 +95,8 @@ public class EntityAIFleeSun extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theCreature.getNavigator().tryMoveToXYZ(this.shelterX, this.shelterY, this.shelterZ, this.movementSpeed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFollowGolem.java b/src/game/java/net/minecraft/entity/ai/EntityAIFollowGolem.java index 561b9d60..1e1003ec 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFollowGolem.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFollowGolem.java @@ -8,13 +8,13 @@ import net.minecraft.entity.passive.EntityVillager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.entity.passive.EntityVillager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFollowGolem extends EntityAIBase { private EntityVillager theVillager; @@ -42,6 +42,7 @@ public class EntityAIFollowGolem extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.theGolem.getHoldRoseTick() > 0; } @@ -49,6 +50,7 @@ public class EntityAIFollowGolem extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theGolem = null; this.theVillager.getNavigator().clearPathEntity(); @@ -57,6 +59,7 @@ public class EntityAIFollowGolem extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.theVillager.getGrowingAge() >= 0) { return false; @@ -84,6 +87,7 @@ public class EntityAIFollowGolem extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.takeGolemRoseTick = this.theVillager.getRNG().nextInt(320); this.tookGolemRose = false; @@ -93,6 +97,7 @@ public class EntityAIFollowGolem extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theVillager.getLookHelper().setLookPositionWithEntity(this.theGolem, 30.0F, 30.0F); if (this.theGolem.getHoldRoseTick() == this.takeGolemRoseTick) { @@ -106,4 +111,4 @@ public class EntityAIFollowGolem extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFollowOwner.java b/src/game/java/net/minecraft/entity/ai/EntityAIFollowOwner.java index 9aaa8257..f3258e9d 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFollowOwner.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFollowOwner.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFollowOwner extends EntityAIBase { private EntityTameable thePet; @@ -62,6 +62,7 @@ public class EntityAIFollowOwner extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.petPathfinder.noPath() && this.thePet.getDistanceSqToEntity(this.theOwner) > (double) (this.maxDist * this.maxDist) @@ -77,6 +78,7 @@ public class EntityAIFollowOwner extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theOwner = null; this.petPathfinder.clearPathEntity(); @@ -86,6 +88,7 @@ public class EntityAIFollowOwner extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.thePet.getOwner(); if (entitylivingbase == null) { @@ -105,6 +108,7 @@ public class EntityAIFollowOwner extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.field_75343_h = 0; this.field_75344_i = ((PathNavigateGround) this.thePet.getNavigator()).getAvoidsWater(); @@ -114,6 +118,7 @@ public class EntityAIFollowOwner extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.thePet.getLookHelper().setLookPositionWithEntity(this.theOwner, 10.0F, (float) this.thePet.getVerticalFaceSpeed()); @@ -149,4 +154,4 @@ public class EntityAIFollowOwner extends EntityAIBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIFollowParent.java b/src/game/java/net/minecraft/entity/ai/EntityAIFollowParent.java index 2ca5cd59..fac976a7 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIFollowParent.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIFollowParent.java @@ -7,13 +7,13 @@ import net.minecraft.entity.passive.EntityAnimal; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.passive.EntityAnimal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIFollowParent extends EntityAIBase { EntityAnimal childAnimal; @@ -41,6 +41,7 @@ public class EntityAIFollowParent extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { if (this.childAnimal.getGrowingAge() >= 0) { return false; @@ -55,6 +56,7 @@ public class EntityAIFollowParent extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.parentAnimal = null; } @@ -62,6 +64,7 @@ public class EntityAIFollowParent extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.childAnimal.getGrowingAge() >= 0) { return false; @@ -96,6 +99,7 @@ public class EntityAIFollowParent extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.delayCounter = 0; } @@ -103,10 +107,11 @@ public class EntityAIFollowParent extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (--this.delayCounter <= 0) { this.delayCounter = 10; this.childAnimal.getNavigator().tryMoveToEntityLiving(this.parentAnimal, this.moveSpeed); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIHarvestFarmland.java b/src/game/java/net/minecraft/entity/ai/EntityAIHarvestFarmland.java index 199347c4..5091a54d 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIHarvestFarmland.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIHarvestFarmland.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { private final EntityVillager theVillager; @@ -48,6 +48,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.field_179501_f >= 0 && super.continueExecuting(); } @@ -55,6 +56,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Resets the task */ + @Override public void resetTask() { super.resetTask(); } @@ -62,6 +64,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.runDelay <= 0) { if (!this.theVillager.worldObj.getGameRules().getBoolean("mobGriefing")) { @@ -79,6 +82,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Return true to set given position as destination */ + @Override protected boolean shouldMoveTo(World worldIn, BlockPos pos) { Block block = worldIn.getBlockState(pos).getBlock(); if (block == Blocks.farmland) { @@ -103,6 +107,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { super.startExecuting(); } @@ -110,6 +115,7 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { /** * + Updates the task */ + @Override public void updateTask() { super.updateTask(); this.theVillager.getLookHelper().setLookPosition((double) this.destinationBlock.getX() + 0.5D, @@ -157,4 +163,4 @@ public class EntityAIHarvestFarmland extends EntityAIMoveToBlock { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIHurtByTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAIHurtByTarget.java index 1ddc846c..9d0ab32b 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIHurtByTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIHurtByTarget.java @@ -9,13 +9,13 @@ import net.minecraft.util.AxisAlignedBB; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.AxisAlignedBB; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIHurtByTarget extends EntityAITarget { private boolean entityCallsForHelp; @@ -48,6 +48,7 @@ public class EntityAIHurtByTarget extends EntityAITarget { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { int i = this.taskOwner.getRevengeTimer(); return i != this.revengeTimerOld && this.isSuitableTarget(this.taskOwner.getAITarget(), false); @@ -56,6 +57,7 @@ public class EntityAIHurtByTarget extends EntityAITarget { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.taskOwner.setAttackTarget(this.taskOwner.getAITarget()); this.revengeTimerOld = this.taskOwner.getRevengeTimer(); @@ -88,4 +90,4 @@ public class EntityAIHurtByTarget extends EntityAITarget { super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAILeapAtTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAILeapAtTarget.java index 26ce5401..db7c3775 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAILeapAtTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAILeapAtTarget.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAILeapAtTarget extends EntityAIBase { EntityLiving leaper; @@ -41,6 +41,7 @@ public class EntityAILeapAtTarget extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.leaper.onGround; } @@ -48,6 +49,7 @@ public class EntityAILeapAtTarget extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { this.leapTarget = this.leaper.getAttackTarget(); if (this.leapTarget == null) { @@ -62,6 +64,7 @@ public class EntityAILeapAtTarget extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { double d0 = this.leapTarget.posX - this.leaper.posX; double d1 = this.leapTarget.posZ - this.leaper.posZ; @@ -70,4 +73,4 @@ public class EntityAILeapAtTarget extends EntityAIBase { this.leaper.motionZ += d1 / (double) f * 0.5D * 0.800000011920929D + this.leaper.motionZ * 0.20000000298023224D; this.leaper.motionY = (double) this.leapMotionY; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java b/src/game/java/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java index d61b8556..4d26fbc4 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java @@ -6,13 +6,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAILookAtTradePlayer extends EntityAIWatchClosest { private final EntityVillager theMerchant; @@ -37,6 +37,7 @@ public class EntityAILookAtTradePlayer extends EntityAIWatchClosest { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.theMerchant.isTrading()) { this.closestEntity = this.theMerchant.getCustomer(); @@ -45,4 +46,4 @@ public class EntityAILookAtTradePlayer extends EntityAIWatchClosest { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAILookAtVillager.java b/src/game/java/net/minecraft/entity/ai/EntityAILookAtVillager.java index 3eabfcdb..c1655c08 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAILookAtVillager.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAILookAtVillager.java @@ -6,13 +6,13 @@ import net.minecraft.entity.passive.EntityVillager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.passive.EntityVillager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAILookAtVillager extends EntityAIBase { private EntityIronGolem theGolem; @@ -39,6 +39,7 @@ public class EntityAILookAtVillager extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.lookTime > 0; } @@ -46,6 +47,7 @@ public class EntityAILookAtVillager extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theGolem.setHoldingRose(false); this.theVillager = null; @@ -54,6 +56,7 @@ public class EntityAILookAtVillager extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theGolem.worldObj.isDaytime()) { return false; @@ -69,6 +72,7 @@ public class EntityAILookAtVillager extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.lookTime = 400; this.theGolem.setHoldingRose(true); @@ -77,8 +81,9 @@ public class EntityAILookAtVillager extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theGolem.getLookHelper().setLookPositionWithEntity(this.theVillager, 30.0F, 30.0F); --this.lookTime; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAILookIdle.java b/src/game/java/net/minecraft/entity/ai/EntityAILookIdle.java index a8f6f3b7..333088c6 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAILookIdle.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAILookIdle.java @@ -5,13 +5,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAILookIdle extends EntityAIBase { private EntityLiving idleEntity; @@ -39,6 +39,7 @@ public class EntityAILookIdle extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.idleTime >= 0; } @@ -46,6 +47,7 @@ public class EntityAILookIdle extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return this.idleEntity.getRNG().nextFloat() < 0.02F; } @@ -53,6 +55,7 @@ public class EntityAILookIdle extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { double d0 = 6.283185307179586D * this.idleEntity.getRNG().nextDouble(); this.lookX = Math.cos(d0); @@ -63,10 +66,11 @@ public class EntityAILookIdle extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { --this.idleTime; this.idleEntity.getLookHelper().setLookPosition(this.idleEntity.posX + this.lookX, this.idleEntity.posY + (double) this.idleEntity.getEyeHeight(), this.idleEntity.posZ + this.lookZ, 10.0F, (float) this.idleEntity.getVerticalFaceSpeed()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMate.java b/src/game/java/net/minecraft/entity/ai/EntityAIMate.java index de2bbd4a..dda6a430 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMate.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMate.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIMate extends EntityAIBase { private EntityAnimal theAnimal; @@ -53,6 +53,7 @@ public class EntityAIMate extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.targetMate.isEntityAlive() && this.targetMate.isInLove() && this.spawnBabyDelay < 60; } @@ -82,6 +83,7 @@ public class EntityAIMate extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.targetMate = null; this.spawnBabyDelay = 0; @@ -90,6 +92,7 @@ public class EntityAIMate extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theAnimal.isInLove()) { return false; @@ -149,6 +152,7 @@ public class EntityAIMate extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theAnimal.getLookHelper().setLookPositionWithEntity(this.targetMate, 10.0F, (float) this.theAnimal.getVerticalFaceSpeed()); @@ -159,4 +163,4 @@ public class EntityAIMate extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMoveIndoors.java b/src/game/java/net/minecraft/entity/ai/EntityAIMoveIndoors.java index dfb2b3dd..c7d6d248 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMoveIndoors.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMoveIndoors.java @@ -9,13 +9,13 @@ import net.minecraft.village.VillageDoorInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.village.VillageDoorInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIMoveIndoors extends EntityAIBase { private EntityCreature entityObj; @@ -43,6 +43,7 @@ public class EntityAIMoveIndoors extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.entityObj.getNavigator().noPath(); } @@ -50,6 +51,7 @@ public class EntityAIMoveIndoors extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.insidePosX = this.doorInfo.getInsideBlockPos().getX(); this.insidePosZ = this.doorInfo.getInsideBlockPos().getZ(); @@ -59,6 +61,7 @@ public class EntityAIMoveIndoors extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { BlockPos blockpos = new BlockPos(this.entityObj); if ((!this.entityObj.worldObj.isDaytime() || this.entityObj.worldObj.isRaining() @@ -86,6 +89,7 @@ public class EntityAIMoveIndoors extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.insidePosX = -1; BlockPos blockpos = this.doorInfo.getInsideBlockPos(); @@ -103,4 +107,4 @@ public class EntityAIMoveIndoors extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java b/src/game/java/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java index 19aacd38..00116a30 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java @@ -16,13 +16,13 @@ import net.minecraft.village.VillageDoorInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.village.VillageDoorInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIMoveThroughVillage extends EntityAIBase { private EntityCreature theEntity; @@ -57,6 +57,7 @@ public class EntityAIMoveThroughVillage extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { if (this.theEntity.getNavigator().noPath()) { return false; @@ -98,6 +99,7 @@ public class EntityAIMoveThroughVillage extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { if (this.theEntity.getNavigator().noPath() || this.theEntity.getDistanceSq(this.doorInfo.getDoorBlockPos()) < 16.0D) { @@ -116,6 +118,7 @@ public class EntityAIMoveThroughVillage extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { this.resizeDoorList(); if (this.isNocturnal && this.theEntity.worldObj.isDaytime()) { @@ -160,7 +163,8 @@ public class EntityAIMoveThroughVillage extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntity.getNavigator().setPath(this.entityPathNavigate, this.movementSpeed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMoveToBlock.java b/src/game/java/net/minecraft/entity/ai/EntityAIMoveToBlock.java index ef21e826..b4cfcdf4 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMoveToBlock.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMoveToBlock.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAIMoveToBlock extends EntityAIBase { private final EntityCreature theEntity; @@ -50,6 +50,7 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.timeoutCounter >= -this.field_179490_f && this.timeoutCounter <= 1200 && this.shouldMoveTo(this.theEntity.worldObj, this.destinationBlock); @@ -62,6 +63,7 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { } @@ -97,6 +99,7 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.runDelay > 0) { --this.runDelay; @@ -112,6 +115,7 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntity.getNavigator().tryMoveToXYZ((double) ((float) this.destinationBlock.getX()) + 0.5D, (double) (this.destinationBlock.getY() + 1), (double) ((float) this.destinationBlock.getZ()) + 0.5D, @@ -123,6 +127,7 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (this.theEntity.getDistanceSqToCenter(this.destinationBlock.up()) > 1.0D) { this.isAboveDestination = false; @@ -138,4 +143,4 @@ public abstract class EntityAIMoveToBlock extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java b/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java index 68ee5d7a..ca14e4b4 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java @@ -7,13 +7,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIMoveTowardsRestriction extends EntityAIBase { private EntityCreature theEntity; @@ -43,6 +43,7 @@ public class EntityAIMoveTowardsRestriction extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.theEntity.getNavigator().noPath(); } @@ -50,6 +51,7 @@ public class EntityAIMoveTowardsRestriction extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.theEntity.isWithinHomeDistanceCurrentPosition()) { return false; @@ -71,7 +73,8 @@ public class EntityAIMoveTowardsRestriction extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.movementSpeed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java index 471e9747..90fccda3 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java @@ -7,13 +7,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIMoveTowardsTarget extends EntityAIBase { private EntityCreature theEntity; @@ -46,6 +46,7 @@ public class EntityAIMoveTowardsTarget extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.theEntity.getNavigator().noPath() && this.targetEntity.isEntityAlive() && this.targetEntity .getDistanceSqToEntity(this.theEntity) < (double) (this.maxTargetDistance * this.maxTargetDistance); @@ -54,6 +55,7 @@ public class EntityAIMoveTowardsTarget extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.targetEntity = null; } @@ -61,6 +63,7 @@ public class EntityAIMoveTowardsTarget extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { this.targetEntity = this.theEntity.getAttackTarget(); if (this.targetEntity == null) { @@ -85,7 +88,8 @@ public class EntityAIMoveTowardsTarget extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.speed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java index c9b1143d..79a526f2 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java @@ -16,13 +16,13 @@ import net.minecraft.util.EntitySelectors; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.EntitySelectors; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAINearestAttackableTarget extends EntityAITarget { public static class Sorter implements Comparator { @@ -44,6 +44,7 @@ public class EntityAINearestAttackableTarget extends this.theEntity = theEntityIn; } + @Override public int compare(Entity entity, Entity entity1) { double d0 = this.theEntity.getDistanceSqToEntity(entity); double d1 = this.theEntity.getDistanceSqToEntity(entity1); @@ -75,6 +76,7 @@ public class EntityAINearestAttackableTarget extends this.theNearestAttackableTargetSorter = new EntityAINearestAttackableTarget.Sorter(creature); this.setMutexBits(1); this.targetEntitySelector = new Predicate() { + @Override public boolean apply(T entitylivingbase) { if (targetSelector != null && !targetSelector.apply(entitylivingbase)) { return false; @@ -109,6 +111,7 @@ public class EntityAINearestAttackableTarget extends /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.targetChance > 0 && this.taskOwner.getRNG().nextInt(this.targetChance) != 0) { return false; @@ -130,8 +133,9 @@ public class EntityAINearestAttackableTarget extends /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.taskOwner.setAttackTarget(this.targetEntity); super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIOcelotAttack.java b/src/game/java/net/minecraft/entity/ai/EntityAIOcelotAttack.java index 5c5a5161..f633b03a 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIOcelotAttack.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIOcelotAttack.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIOcelotAttack extends EntityAIBase { World theWorld; @@ -42,6 +42,7 @@ public class EntityAIOcelotAttack extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.theVictim.isEntityAlive() ? false : (this.theEntity.getDistanceSqToEntity(this.theVictim) > 225.0D ? false @@ -51,6 +52,7 @@ public class EntityAIOcelotAttack extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theVictim = null; this.theEntity.getNavigator().clearPathEntity(); @@ -59,6 +61,7 @@ public class EntityAIOcelotAttack extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.theEntity.getAttackTarget(); if (entitylivingbase == null) { @@ -72,6 +75,7 @@ public class EntityAIOcelotAttack extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theEntity.getLookHelper().setLookPositionWithEntity(this.theVictim, 30.0F, 30.0F); double d0 = (double) (this.theEntity.width * 2.0F * this.theEntity.width * 2.0F); @@ -93,4 +97,4 @@ public class EntityAIOcelotAttack extends EntityAIBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIOcelotSit.java b/src/game/java/net/minecraft/entity/ai/EntityAIOcelotSit.java index 0f68816f..8e15ca33 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIOcelotSit.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIOcelotSit.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIOcelotSit extends EntityAIMoveToBlock { private final EntityOcelot field_151493_a; @@ -44,6 +44,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return super.continueExecuting(); } @@ -51,6 +52,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Resets the task */ + @Override public void resetTask() { super.resetTask(); this.field_151493_a.setSitting(false); @@ -59,6 +61,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return this.field_151493_a.isTamed() && !this.field_151493_a.isSitting() && super.shouldExecute(); } @@ -66,6 +69,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Return true to set given position as destination */ + @Override protected boolean shouldMoveTo(World world, BlockPos blockpos) { if (!world.isAirBlock(blockpos.up())) { return false; @@ -94,6 +98,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { super.startExecuting(); this.field_151493_a.getAISit().setSitting(false); @@ -102,6 +107,7 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { /** * + Updates the task */ + @Override public void updateTask() { super.updateTask(); this.field_151493_a.getAISit().setSitting(false); @@ -112,4 +118,4 @@ public class EntityAIOcelotSit extends EntityAIMoveToBlock { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIOpenDoor.java b/src/game/java/net/minecraft/entity/ai/EntityAIOpenDoor.java index 58b083ce..83f9c1a3 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIOpenDoor.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIOpenDoor.java @@ -5,13 +5,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIOpenDoor extends EntityAIDoorInteract { boolean closeDoor; @@ -38,6 +38,7 @@ public class EntityAIOpenDoor extends EntityAIDoorInteract { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.closeDoor && this.closeDoorTemporisation > 0 && super.continueExecuting(); } @@ -45,6 +46,7 @@ public class EntityAIOpenDoor extends EntityAIDoorInteract { /** * + Resets the task */ + @Override public void resetTask() { if (this.closeDoor) { this.doorBlock.toggleDoor(this.theEntity.worldObj, this.doorPosition, false); @@ -55,6 +57,7 @@ public class EntityAIOpenDoor extends EntityAIDoorInteract { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.closeDoorTemporisation = 20; this.doorBlock.toggleDoor(this.theEntity.worldObj, this.doorPosition, true); @@ -63,8 +66,9 @@ public class EntityAIOpenDoor extends EntityAIDoorInteract { /** * + Updates the task */ + @Override public void updateTask() { --this.closeDoorTemporisation; super.updateTask(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java index edd55448..ecfa63ee 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java @@ -6,13 +6,13 @@ import net.minecraft.entity.passive.EntityTameable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.passive.EntityTameable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIOwnerHurtByTarget extends EntityAITarget { EntityTameable theDefendingTameable; @@ -40,6 +40,7 @@ public class EntityAIOwnerHurtByTarget extends EntityAITarget { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theDefendingTameable.isTamed()) { return false; @@ -59,6 +60,7 @@ public class EntityAIOwnerHurtByTarget extends EntityAITarget { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.taskOwner.setAttackTarget(this.theOwnerAttacker); EntityLivingBase entitylivingbase = this.theDefendingTameable.getOwner(); @@ -68,4 +70,4 @@ public class EntityAIOwnerHurtByTarget extends EntityAITarget { super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java b/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java index 32a1c3f3..7f654c80 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java @@ -6,13 +6,13 @@ import net.minecraft.entity.passive.EntityTameable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.passive.EntityTameable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIOwnerHurtTarget extends EntityAITarget { EntityTameable theEntityTameable; @@ -40,6 +40,7 @@ public class EntityAIOwnerHurtTarget extends EntityAITarget { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theEntityTameable.isTamed()) { return false; @@ -59,6 +60,7 @@ public class EntityAIOwnerHurtTarget extends EntityAITarget { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.taskOwner.setAttackTarget(this.theTarget); EntityLivingBase entitylivingbase = this.theEntityTameable.getOwner(); @@ -68,4 +70,4 @@ public class EntityAIOwnerHurtTarget extends EntityAITarget { super.startExecuting(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIPanic.java b/src/game/java/net/minecraft/entity/ai/EntityAIPanic.java index ca429da1..cc0e13d8 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIPanic.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIPanic.java @@ -6,13 +6,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIPanic extends EntityAIBase { private EntityCreature theEntityCreature; @@ -42,6 +42,7 @@ public class EntityAIPanic extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.theEntityCreature.getNavigator().noPath(); } @@ -49,6 +50,7 @@ public class EntityAIPanic extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.theEntityCreature.getAITarget() == null && !this.theEntityCreature.isBurning()) { return false; @@ -68,7 +70,8 @@ public class EntityAIPanic extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntityCreature.getNavigator().tryMoveToXYZ(this.randPosX, this.randPosY, this.randPosZ, this.speed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIPlay.java b/src/game/java/net/minecraft/entity/ai/EntityAIPlay.java index d6f12826..71728e5e 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIPlay.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIPlay.java @@ -9,13 +9,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIPlay extends EntityAIBase { private EntityVillager villagerObj; @@ -44,6 +44,7 @@ public class EntityAIPlay extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.playTime > 0; } @@ -51,6 +52,7 @@ public class EntityAIPlay extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.villagerObj.setPlaying(false); this.targetVillager = null; @@ -59,6 +61,7 @@ public class EntityAIPlay extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.villagerObj.getGrowingAge() >= 0) { return false; @@ -95,6 +98,7 @@ public class EntityAIPlay extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { if (this.targetVillager != null) { this.villagerObj.setPlaying(true); @@ -106,6 +110,7 @@ public class EntityAIPlay extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { --this.playTime; if (this.targetVillager != null) { @@ -122,4 +127,4 @@ public class EntityAIPlay extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java b/src/game/java/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java index 3d9b3378..9c541316 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java @@ -9,13 +9,13 @@ import net.minecraft.village.VillageDoorInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.village.VillageDoorInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIRestrictOpenDoor extends EntityAIBase { private EntityCreature entityObj; @@ -43,6 +43,7 @@ public class EntityAIRestrictOpenDoor extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.entityObj.worldObj.isDaytime() ? false : !this.frontDoor.getIsDetachedFromVillageFlag() @@ -52,6 +53,7 @@ public class EntityAIRestrictOpenDoor extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { ((PathNavigateGround) this.entityObj.getNavigator()).setBreakDoors(true); ((PathNavigateGround) this.entityObj.getNavigator()).setEnterDoors(true); @@ -61,6 +63,7 @@ public class EntityAIRestrictOpenDoor extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.entityObj.worldObj.isDaytime()) { return false; @@ -80,6 +83,7 @@ public class EntityAIRestrictOpenDoor extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { ((PathNavigateGround) this.entityObj.getNavigator()).setBreakDoors(false); ((PathNavigateGround) this.entityObj.getNavigator()).setEnterDoors(false); @@ -88,7 +92,8 @@ public class EntityAIRestrictOpenDoor extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.frontDoor.incrementDoorOpeningRestrictionCounter(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIRestrictSun.java b/src/game/java/net/minecraft/entity/ai/EntityAIRestrictSun.java index 34ac84a3..a5e33ea4 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIRestrictSun.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIRestrictSun.java @@ -6,13 +6,13 @@ import net.minecraft.pathfinding.PathNavigateGround; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.pathfinding.PathNavigateGround; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIRestrictSun extends EntityAIBase { private EntityCreature theEntity; @@ -36,6 +36,7 @@ public class EntityAIRestrictSun extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { ((PathNavigateGround) this.theEntity.getNavigator()).setAvoidSun(false); } @@ -43,6 +44,7 @@ public class EntityAIRestrictSun extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return this.theEntity.worldObj.isDaytime(); } @@ -50,7 +52,8 @@ public class EntityAIRestrictSun extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { ((PathNavigateGround) this.theEntity.getNavigator()).setAvoidSun(true); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java b/src/game/java/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java index d98f8377..7352ac2f 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java @@ -8,13 +8,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { private EntityHorse horseHost; @@ -44,6 +44,7 @@ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.horseHost.getNavigator().noPath() && this.horseHost.riddenByEntity != null; } @@ -51,6 +52,7 @@ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.horseHost.isTame() && this.horseHost.riddenByEntity != null) { Vec3 vec3 = RandomPositionGenerator.findRandomTarget(this.horseHost, 5, 4); @@ -70,6 +72,7 @@ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.horseHost.getNavigator().tryMoveToXYZ(this.targetX, this.targetY, this.targetZ, this.speed); } @@ -77,6 +80,7 @@ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (this.horseHost.getRNG().nextInt(50) == 0) { if (this.horseHost.riddenByEntity instanceof EntityPlayer) { @@ -98,4 +102,4 @@ public class EntityAIRunAroundLikeCrazy extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAISit.java b/src/game/java/net/minecraft/entity/ai/EntityAISit.java index eae7f0e5..7730fecb 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAISit.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAISit.java @@ -6,13 +6,13 @@ import net.minecraft.entity.passive.EntityTameable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.passive.EntityTameable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAISit extends EntityAIBase { private EntityTameable theEntity; @@ -38,6 +38,7 @@ public class EntityAISit extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.theEntity.setSitting(false); } @@ -52,6 +53,7 @@ public class EntityAISit extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.theEntity.isTamed()) { return false; @@ -70,8 +72,9 @@ public class EntityAISit extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.theEntity.getNavigator().clearPathEntity(); this.theEntity.setSitting(true); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAISwimming.java b/src/game/java/net/minecraft/entity/ai/EntityAISwimming.java index f5b3dd8c..644c82a1 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAISwimming.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAISwimming.java @@ -6,13 +6,13 @@ import net.minecraft.pathfinding.PathNavigateGround; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.pathfinding.PathNavigateGround; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAISwimming extends EntityAIBase { private EntityLiving theEntity; @@ -38,6 +38,7 @@ public class EntityAISwimming extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return this.theEntity.isInWater() || this.theEntity.isInLava(); } @@ -45,10 +46,11 @@ public class EntityAISwimming extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { if (this.theEntity.getRNG().nextFloat() < 0.8F) { this.theEntity.getJumpHelper().setJumping(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAITarget.java b/src/game/java/net/minecraft/entity/ai/EntityAITarget.java index 186e95a0..da5d1c05 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAITarget.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAITarget.java @@ -18,13 +18,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAITarget extends EntityAIBase { /** @@ -120,6 +120,7 @@ public abstract class EntityAITarget extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { EntityLivingBase entitylivingbase = this.taskOwner.getAttackTarget(); if (entitylivingbase == null) { @@ -187,6 +188,7 @@ public abstract class EntityAITarget extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.taskOwner.setAttackTarget((EntityLivingBase) null); } @@ -194,9 +196,10 @@ public abstract class EntityAITarget extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.targetSearchStatus = 0; this.targetSearchDelay = 0; this.targetUnseenTicks = 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAITargetNonTamed.java b/src/game/java/net/minecraft/entity/ai/EntityAITargetNonTamed.java index 27e3ea6f..006ffc5a 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAITargetNonTamed.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAITargetNonTamed.java @@ -8,13 +8,13 @@ import net.minecraft.entity.passive.EntityTameable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.entity.passive.EntityTameable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAITargetNonTamed extends EntityAINearestAttackableTarget { private EntityTameable theTameable; @@ -40,7 +40,8 @@ public class EntityAITargetNonTamed extends EntityAI /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { return !this.theTameable.isTamed() && super.shouldExecute(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAITasks.java b/src/game/java/net/minecraft/entity/ai/EntityAITasks.java index 191dff54..3305d668 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAITasks.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAITasks.java @@ -11,13 +11,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAITasks { class EntityAITaskEntry { @@ -172,4 +172,4 @@ public class EntityAITasks { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAITempt.java b/src/game/java/net/minecraft/entity/ai/EntityAITempt.java index 051289aa..cff7089f 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAITempt.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAITempt.java @@ -9,13 +9,13 @@ import net.minecraft.pathfinding.PathNavigateGround; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.pathfinding.PathNavigateGround; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAITempt extends EntityAIBase { private EntityCreature temptedEntity; @@ -59,6 +59,7 @@ public class EntityAITempt extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { if (this.scaredByPlayerMovement) { if (this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) < 36.0D) { @@ -86,7 +87,7 @@ public class EntityAITempt extends EntityAIBase { /** * + - * + * * @see #isRunning */ public boolean isRunning() { @@ -96,6 +97,7 @@ public class EntityAITempt extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.temptingPlayer = null; this.temptedEntity.getNavigator().clearPathEntity(); @@ -107,6 +109,7 @@ public class EntityAITempt extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.delayTemptCounter > 0) { --this.delayTemptCounter; @@ -125,6 +128,7 @@ public class EntityAITempt extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.targetX = this.temptingPlayer.posX; this.targetY = this.temptingPlayer.posY; @@ -137,6 +141,7 @@ public class EntityAITempt extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.temptedEntity.getLookHelper().setLookPositionWithEntity(this.temptingPlayer, 30.0F, (float) this.temptedEntity.getVerticalFaceSpeed()); @@ -147,4 +152,4 @@ public class EntityAITempt extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAITradePlayer.java b/src/game/java/net/minecraft/entity/ai/EntityAITradePlayer.java index 18ae3f9a..333d9d33 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAITradePlayer.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAITradePlayer.java @@ -7,13 +7,13 @@ import net.minecraft.inventory.Container; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.inventory.Container; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAITradePlayer extends EntityAIBase { private EntityVillager villager; @@ -38,6 +38,7 @@ public class EntityAITradePlayer extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.villager.setCustomer((EntityPlayer) null); } @@ -45,6 +46,7 @@ public class EntityAITradePlayer extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.villager.isEntityAlive()) { return false; @@ -65,7 +67,8 @@ public class EntityAITradePlayer extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.villager.getNavigator().clearPathEntity(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIVillagerInteract.java b/src/game/java/net/minecraft/entity/ai/EntityAIVillagerInteract.java index 3471eaf3..28b09f99 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIVillagerInteract.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIVillagerInteract.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIVillagerInteract extends EntityAIWatchClosest2 { private int interactionDelay; @@ -43,6 +43,7 @@ public class EntityAIVillagerInteract extends EntityAIWatchClosest2 { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { super.startExecuting(); if (this.villager.canAbondonItems() && this.closestEntity instanceof EntityVillager @@ -57,6 +58,7 @@ public class EntityAIVillagerInteract extends EntityAIWatchClosest2 { /** * + Updates the task */ + @Override public void updateTask() { super.updateTask(); if (this.interactionDelay > 0) { @@ -107,4 +109,4 @@ public class EntityAIVillagerInteract extends EntityAIWatchClosest2 { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIVillagerMate.java b/src/game/java/net/minecraft/entity/ai/EntityAIVillagerMate.java index 8213c14a..7919a193 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIVillagerMate.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIVillagerMate.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIVillagerMate extends EntityAIBase { private EntityVillager villagerObj; @@ -54,6 +54,7 @@ public class EntityAIVillagerMate extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return this.matingTimeout >= 0 && this.checkSufficientDoorsPresentForNewVillager() && this.villagerObj.getGrowingAge() == 0 && this.villagerObj.getIsWillingToMate(false); @@ -75,6 +76,7 @@ public class EntityAIVillagerMate extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.villageObj = null; this.mate = null; @@ -84,6 +86,7 @@ public class EntityAIVillagerMate extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.villagerObj.getGrowingAge() != 0) { return false; @@ -111,6 +114,7 @@ public class EntityAIVillagerMate extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.matingTimeout = 300; this.villagerObj.setMating(true); @@ -119,6 +123,7 @@ public class EntityAIVillagerMate extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { --this.matingTimeout; this.villagerObj.getLookHelper().setLookPositionWithEntity(this.mate, 10.0F, 30.0F); @@ -133,4 +138,4 @@ public class EntityAIVillagerMate extends EntityAIBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIWander.java b/src/game/java/net/minecraft/entity/ai/EntityAIWander.java index 227443a1..a720813d 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIWander.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIWander.java @@ -6,13 +6,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIWander extends EntityAIBase { private EntityCreature entity; @@ -49,6 +49,7 @@ public class EntityAIWander extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.entity.getNavigator().noPath(); } @@ -70,6 +71,7 @@ public class EntityAIWander extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (!this.mustUpdate) { if (this.entity.getAge() >= 100) { @@ -96,7 +98,8 @@ public class EntityAIWander extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest.java b/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest.java index 601866c4..6ff3b993 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest.java @@ -7,13 +7,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIWatchClosest extends EntityAIBase { protected EntityLiving theWatcher; @@ -56,6 +56,7 @@ public class EntityAIWatchClosest extends EntityAIBase { /** * + Returns whether an in-progress EntityAIBase should continue executing */ + @Override public boolean continueExecuting() { return !this.closestEntity.isEntityAlive() ? false : (this.theWatcher.getDistanceSqToEntity( @@ -66,6 +67,7 @@ public class EntityAIWatchClosest extends EntityAIBase { /** * + Resets the task */ + @Override public void resetTask() { this.closestEntity = null; } @@ -73,6 +75,7 @@ public class EntityAIWatchClosest extends EntityAIBase { /** * + Returns whether the EntityAIBase should begin execution. */ + @Override public boolean shouldExecute() { if (this.theWatcher.getRNG().nextFloat() >= this.chance) { return false; @@ -98,6 +101,7 @@ public class EntityAIWatchClosest extends EntityAIBase { /** * + Execute a one shot task or start executing a continuous task */ + @Override public void startExecuting() { this.lookTime = 40 + this.theWatcher.getRNG().nextInt(40); } @@ -105,10 +109,11 @@ public class EntityAIWatchClosest extends EntityAIBase { /** * + Updates the task */ + @Override public void updateTask() { this.theWatcher.getLookHelper().setLookPosition(this.closestEntity.posX, this.closestEntity.posY + (double) this.closestEntity.getEyeHeight(), this.closestEntity.posZ, 10.0F, (float) this.theWatcher.getVerticalFaceSpeed()); --this.lookTime; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest2.java b/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest2.java index 54c06fd4..b840b1f0 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest2.java +++ b/src/game/java/net/minecraft/entity/ai/EntityAIWatchClosest2.java @@ -6,13 +6,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityAIWatchClosest2 extends EntityAIWatchClosest { public EntityAIWatchClosest2(EntityLiving entitylivingIn, Class watchTargetClass, @@ -32,4 +32,4 @@ public class EntityAIWatchClosest2 extends EntityAIWatchClosest { super(entitylivingIn, watchTargetClass, maxDistance, chanceIn); this.setMutexBits(3); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityJumpHelper.java b/src/game/java/net/minecraft/entity/ai/EntityJumpHelper.java index 5b690129..7e293a0c 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityJumpHelper.java +++ b/src/game/java/net/minecraft/entity/ai/EntityJumpHelper.java @@ -5,13 +5,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityJumpHelper { private EntityLiving entity; @@ -44,4 +44,4 @@ public class EntityJumpHelper { public void setJumping() { this.isJumping = true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityLookHelper.java b/src/game/java/net/minecraft/entity/ai/EntityLookHelper.java index 3dfb4356..bfa22548 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityLookHelper.java +++ b/src/game/java/net/minecraft/entity/ai/EntityLookHelper.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLookHelper { private EntityLiving entity; @@ -131,4 +131,4 @@ public class EntityLookHelper { return parFloat1 + f; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityMinecartMobSpawner.java b/src/game/java/net/minecraft/entity/ai/EntityMinecartMobSpawner.java index 25dabdd5..144105e6 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityMinecartMobSpawner.java +++ b/src/game/java/net/minecraft/entity/ai/EntityMinecartMobSpawner.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,21 +29,24 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartMobSpawner extends EntityMinecart { /** * + Mob spawner logic for this spawner minecart. */ private final MobSpawnerBaseLogic mobSpawnerLogic = new MobSpawnerBaseLogic() { + @Override public void func_98267_a(int i) { EntityMinecartMobSpawner.this.worldObj.setEntityState(EntityMinecartMobSpawner.this, (byte) i); } + @Override public BlockPos getSpawnerPosition() { return new BlockPos(EntityMinecartMobSpawner.this); } + @Override public World getSpawnerWorld() { return EntityMinecartMobSpawner.this.worldObj; } @@ -61,14 +64,17 @@ public class EntityMinecartMobSpawner extends EntityMinecart { return this.mobSpawnerLogic; } + @Override public IBlockState getDefaultDisplayTile() { return Blocks.mob_spawner.getDefaultState(); } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.SPAWNER; } + @Override public void handleStatusUpdate(byte b0) { this.mobSpawnerLogic.setDelayToMin(b0); } @@ -76,6 +82,7 @@ public class EntityMinecartMobSpawner extends EntityMinecart { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); this.mobSpawnerLogic.updateSpawner(); @@ -84,6 +91,7 @@ public class EntityMinecartMobSpawner extends EntityMinecart { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.mobSpawnerLogic.readFromNBT(nbttagcompound); @@ -92,8 +100,9 @@ public class EntityMinecartMobSpawner extends EntityMinecart { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); this.mobSpawnerLogic.writeToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntityMoveHelper.java b/src/game/java/net/minecraft/entity/ai/EntityMoveHelper.java index 740c3be9..7ff403b1 100644 --- a/src/game/java/net/minecraft/entity/ai/EntityMoveHelper.java +++ b/src/game/java/net/minecraft/entity/ai/EntityMoveHelper.java @@ -7,13 +7,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMoveHelper { protected EntityLiving entity; @@ -117,4 +117,4 @@ public class EntityMoveHelper { this.speed = speedIn; this.update = true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/EntitySenses.java b/src/game/java/net/minecraft/entity/ai/EntitySenses.java index 0d17bc1b..c03e59fe 100644 --- a/src/game/java/net/minecraft/entity/ai/EntitySenses.java +++ b/src/game/java/net/minecraft/entity/ai/EntitySenses.java @@ -10,13 +10,13 @@ import net.minecraft.entity.EntityLiving; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.entity.EntityLiving; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySenses { EntityLiving entityObj; @@ -67,4 +67,4 @@ public class EntitySenses { this.seenEntities.clear(); this.unseenEntities.clear(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/RandomPositionGenerator.java b/src/game/java/net/minecraft/entity/ai/RandomPositionGenerator.java index 6ece1ac8..65e3143b 100644 --- a/src/game/java/net/minecraft/entity/ai/RandomPositionGenerator.java +++ b/src/game/java/net/minecraft/entity/ai/RandomPositionGenerator.java @@ -9,13 +9,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RandomPositionGenerator { /** @@ -145,4 +145,4 @@ public class RandomPositionGenerator { */ return findRandomTargetBlock(entitycreatureIn, xz, y, staticVector); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/AttributeModifier.java b/src/game/java/net/minecraft/entity/ai/attributes/AttributeModifier.java index 92f19038..f7628f91 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/AttributeModifier.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/AttributeModifier.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AttributeModifier { private final double amount; @@ -50,6 +50,7 @@ public class AttributeModifier { this(MathHelper.getRandomUuid(ThreadLocalRandom.current()), nameIn, amountIn, operationIn); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -85,13 +86,14 @@ public class AttributeModifier { return this.operation; } + @Override public int hashCode() { return this.id != null ? this.id.hashCode() : 0; } /** * + - * + * * @see #isSaved */ public boolean isSaved() { @@ -100,7 +102,7 @@ public class AttributeModifier { /** * + - * + * * @see #isSaved */ public AttributeModifier setSaved(boolean saved) { @@ -108,8 +110,9 @@ public class AttributeModifier { return this; } + @Override public String toString() { return "AttributeModifier{amount=" + this.amount + ", operation=" + this.operation + ", name=\'" + this.name + '\'' + ", id=" + this.id + ", serialize=" + this.isSaved + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/BaseAttribute.java b/src/game/java/net/minecraft/entity/ai/attributes/BaseAttribute.java index 128a826f..1b9062c2 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/BaseAttribute.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/BaseAttribute.java @@ -3,13 +3,13 @@ package net.minecraft.entity.ai.attributes; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity.ai.attributes; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BaseAttribute implements IAttribute { private final IAttribute field_180373_a; @@ -38,27 +38,33 @@ public abstract class BaseAttribute implements IAttribute { } } + @Override public boolean equals(Object object) { return object instanceof IAttribute && this.unlocalizedName.equals(((IAttribute) object).getAttributeUnlocalizedName()); } + @Override public IAttribute func_180372_d() { return this.field_180373_a; } + @Override public String getAttributeUnlocalizedName() { return this.unlocalizedName; } + @Override public double getDefaultValue() { return this.defaultValue; } + @Override public boolean getShouldWatch() { return this.shouldWatch; } + @Override public int hashCode() { return this.unlocalizedName.hashCode(); } @@ -67,4 +73,4 @@ public abstract class BaseAttribute implements IAttribute { this.shouldWatch = shouldWatchIn; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/BaseAttributeMap.java b/src/game/java/net/minecraft/entity/ai/attributes/BaseAttributeMap.java index 0ced1660..151e5748 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/BaseAttributeMap.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/BaseAttributeMap.java @@ -13,13 +13,13 @@ import net.minecraft.server.management.LowerStringMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.server.management.LowerStringMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BaseAttributeMap { protected final Map attributes = Maps.newHashMap(); @@ -96,4 +96,4 @@ public abstract class BaseAttributeMap { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/IAttribute.java b/src/game/java/net/minecraft/entity/ai/attributes/IAttribute.java index 34614004..d362c079 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/IAttribute.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/IAttribute.java @@ -3,13 +3,13 @@ package net.minecraft.entity.ai.attributes; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity.ai.attributes; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAttribute { double clampValue(double var1); @@ -33,4 +33,4 @@ public interface IAttribute { double getDefaultValue(); boolean getShouldWatch(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/IAttributeInstance.java b/src/game/java/net/minecraft/entity/ai/attributes/IAttributeInstance.java index de22093e..ec9f5a87 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/IAttributeInstance.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/IAttributeInstance.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAttributeInstance { void applyModifier(AttributeModifier var1); @@ -55,4 +55,4 @@ public interface IAttributeInstance { void removeModifier(AttributeModifier var1); void setBaseValue(double var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java b/src/game/java/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java index 42d787fc..a91a8800 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java @@ -15,13 +15,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ModifiableAttributeInstance implements IAttributeInstance { private final BaseAttributeMap attributeMap; @@ -56,6 +56,7 @@ public class ModifiableAttributeInstance implements IAttributeInstance { } + @Override public void applyModifier(AttributeModifier attributemodifier) { if (this.getModifier(attributemodifier.getID()) != null) { throw new IllegalArgumentException("Modifier is already applied on this attribute!"); @@ -98,6 +99,7 @@ public class ModifiableAttributeInstance implements IAttributeInstance { this.attributeMap.func_180794_a(this); } + @Override public Collection func_111122_c() { HashSet hashset = Sets.newHashSet(); @@ -125,10 +127,12 @@ public class ModifiableAttributeInstance implements IAttributeInstance { /** * + Get the Attribute this is an instance of */ + @Override public IAttribute getAttribute() { return this.genericAttribute; } + @Override public double getAttributeValue() { if (this.needsUpdate) { this.cachedValue = this.computeValue(); @@ -138,6 +142,7 @@ public class ModifiableAttributeInstance implements IAttributeInstance { return this.cachedValue; } + @Override public double getBaseValue() { return this.baseValue; } @@ -145,18 +150,22 @@ public class ModifiableAttributeInstance implements IAttributeInstance { /** * + Returns attribute modifier, if any, by the given UUID */ + @Override public AttributeModifier getModifier(EaglercraftUUID uuid) { return (AttributeModifier) this.mapByUUID.get(uuid); } + @Override public Collection getModifiersByOperation(int i) { return (Collection) this.mapByOperation.get(Integer.valueOf(i)); } + @Override public boolean hasModifier(AttributeModifier attributemodifier) { return this.mapByUUID.get(attributemodifier.getID()) != null; } + @Override public void removeAllModifiers() { Collection collection = this.func_111122_c(); if (collection != null) { @@ -167,6 +176,7 @@ public class ModifiableAttributeInstance implements IAttributeInstance { } } + @Override public void removeModifier(AttributeModifier attributemodifier) { for (int i = 0; i < 3; ++i) { Set set = (Set) this.mapByOperation.get(Integer.valueOf(i)); @@ -185,10 +195,11 @@ public class ModifiableAttributeInstance implements IAttributeInstance { this.flagForUpdate(); } + @Override public void setBaseValue(double d0) { if (d0 != this.getBaseValue()) { this.baseValue = d0; this.flagForUpdate(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/RangedAttribute.java b/src/game/java/net/minecraft/entity/ai/attributes/RangedAttribute.java index ea34b569..780bd256 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/RangedAttribute.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/RangedAttribute.java @@ -5,13 +5,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RangedAttribute extends BaseAttribute { private final double minimumValue; @@ -44,6 +44,7 @@ public class RangedAttribute extends BaseAttribute { } } + @Override public double clampValue(double d0) { d0 = MathHelper.clamp_double(d0, this.minimumValue, this.maximumValue); return d0; @@ -57,4 +58,4 @@ public class RangedAttribute extends BaseAttribute { this.description = descriptionIn; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/ai/attributes/ServersideAttributeMap.java b/src/game/java/net/minecraft/entity/ai/attributes/ServersideAttributeMap.java index c0192bbc..a7d387da 100644 --- a/src/game/java/net/minecraft/entity/ai/attributes/ServersideAttributeMap.java +++ b/src/game/java/net/minecraft/entity/ai/attributes/ServersideAttributeMap.java @@ -12,13 +12,13 @@ import net.minecraft.server.management.LowerStringMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,16 +30,18 @@ import net.minecraft.server.management.LowerStringMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServersideAttributeMap extends BaseAttributeMap { private final Set attributeInstanceSet = Sets.newHashSet(); protected final Map descriptionToAttributeInstanceMap = new LowerStringMap(); + @Override protected IAttributeInstance func_180376_c(IAttribute iattribute) { return new ModifiableAttributeInstance(this, iattribute); } + @Override public void func_180794_a(IAttributeInstance iattributeinstance) { if (iattributeinstance.getAttribute().getShouldWatch()) { this.attributeInstanceSet.add(iattributeinstance); @@ -54,10 +56,12 @@ public class ServersideAttributeMap extends BaseAttributeMap { } + @Override public ModifiableAttributeInstance getAttributeInstance(IAttribute iattribute) { return (ModifiableAttributeInstance) super.getAttributeInstance(iattribute); } + @Override public ModifiableAttributeInstance getAttributeInstanceByName(String s) { IAttributeInstance iattributeinstance = super.getAttributeInstanceByName(s); if (iattributeinstance == null) { @@ -87,6 +91,7 @@ public class ServersideAttributeMap extends BaseAttributeMap { * + Registers an attribute with this AttributeMap, returns a modifiable * AttributeInstance associated with this map */ + @Override public IAttributeInstance registerAttribute(IAttribute iattribute) { IAttributeInstance iattributeinstance = super.registerAttribute(iattribute); if (iattribute instanceof RangedAttribute && ((RangedAttribute) iattribute).getDescription() != null) { @@ -96,4 +101,4 @@ public class ServersideAttributeMap extends BaseAttributeMap { return iattributeinstance; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/boss/BossStatus.java b/src/game/java/net/minecraft/entity/boss/BossStatus.java index 75f0cb75..18b36cf3 100644 --- a/src/game/java/net/minecraft/entity/boss/BossStatus.java +++ b/src/game/java/net/minecraft/entity/boss/BossStatus.java @@ -3,13 +3,13 @@ package net.minecraft.entity.boss; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity.boss; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class BossStatus { public static float healthScale; @@ -35,4 +35,4 @@ public final class BossStatus { bossName = displayData.getDisplayName().getFormattedText(); hasColorModifier = hasColorModifierIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/boss/EntityDragon.java b/src/game/java/net/minecraft/entity/boss/EntityDragon.java index d406aa24..caab2f66 100644 --- a/src/game/java/net/minecraft/entity/boss/EntityDragon.java +++ b/src/game/java/net/minecraft/entity/boss/EntityDragon.java @@ -35,13 +35,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -53,7 +53,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEntityMultiPart, IMob { public double targetX; @@ -103,6 +103,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt this.ignoreFrustumCheck = true; } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(200.0D); @@ -132,6 +133,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (damagesource instanceof EntityDamageSource && ((EntityDamageSource) damagesource).getIsThornsDamage()) { this.attackDragonFrom(damagesource, f); @@ -140,6 +142,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt return false; } + @Override public boolean attackEntityFromPart(EntityDragonPart entitydragonpart, DamageSource damagesource, float f) { if (entitydragonpart != this.dragonPartHead) { f = f / 4.0F + 1.0F; @@ -163,6 +166,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return false; } @@ -224,6 +228,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Makes the entity despawn if requirements are reached */ + @Override protected void despawnEntity() { } @@ -273,6 +278,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt return flag; } + @Override protected void entityInit() { super.entityInit(); } @@ -364,6 +370,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.enderdragon.hit"; } @@ -371,6 +378,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.enderdragon.growl"; } @@ -402,6 +410,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Return the Entity parts making up this Entity (currently only for dragons) */ + @Override public Entity[] getParts() { return this.dragonPartArray; } @@ -409,10 +418,12 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 5.0F; } + @Override public World getWorld() { return this.worldObj; } @@ -420,6 +431,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + handles entity death timer, experience orb and particle creation */ + @Override protected void onDeathUpdate() { ++this.deathTicks; if (this.deathTicks >= 180 && this.deathTicks <= 200) { @@ -471,6 +483,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt /** * + Called by the /kill command. */ + @Override public void onKillCommand() { this.generatePortal(); this.setDead(); @@ -481,6 +494,7 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isRemote) { float f = MathHelper.cos(this.animTime * 3.1415927F * 2.0F); @@ -789,4 +803,4 @@ public class EntityDragon extends EntityLiving implements IBossDisplayData, IEnt } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/boss/EntityDragonPart.java b/src/game/java/net/minecraft/entity/boss/EntityDragonPart.java index 637f6707..bf71ba5c 100644 --- a/src/game/java/net/minecraft/entity/boss/EntityDragonPart.java +++ b/src/game/java/net/minecraft/entity/boss/EntityDragonPart.java @@ -8,13 +8,13 @@ import net.minecraft.util.DamageSource; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.DamageSource; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDragonPart extends Entity { public final IEntityMultiPart entityDragonObj; @@ -42,6 +42,7 @@ public class EntityDragonPart extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { return this.isEntityInvulnerable(damagesource) ? false : this.entityDragonObj.attackEntityFromPart(this, damagesource, f); @@ -51,16 +52,19 @@ public class EntityDragonPart extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return true; } + @Override protected void entityInit() { } /** * + Returns true if Entity argument is equal to this Entity */ + @Override public boolean isEntityEqual(Entity entity) { return this == entity || this.entityDragonObj == entity; } @@ -68,12 +72,14 @@ public class EntityDragonPart extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound var1) { } /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/boss/EntityWither.java b/src/game/java/net/minecraft/entity/boss/EntityWither.java index 0d2b0a66..cd739005 100644 --- a/src/game/java/net/minecraft/entity/boss/EntityWither.java +++ b/src/game/java/net/minecraft/entity/boss/EntityWither.java @@ -42,13 +42,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -60,13 +60,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityWither extends EntityMob implements IBossDisplayData, IRangedAttackMob { /** * + Selector used to determine the entities a wither boss should attack. */ private static final Predicate attackEntitySelector = new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof EntityLivingBase && ((EntityLivingBase) entity).getCreatureAttribute() != EnumCreatureAttribute.UNDEAD; @@ -107,9 +108,11 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + adds a PotionEffect to the entity */ + @Override public void addPotionEffect(PotionEffect var1) { } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(300.0D); @@ -120,6 +123,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -158,6 +162,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Attack the specified entity using a ranged attack. */ + @Override public void attackEntityWithRangedAttack(EntityLivingBase entitylivingbase, float var2) { this.launchWitherSkullToEntity(0, entitylivingbase); } @@ -165,6 +170,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Makes the entity despawn if requirements are reached */ + @Override protected void despawnEntity() { this.entityAge = 0; } @@ -172,6 +178,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int var2) { EntityItem entityitem = this.dropItem(Items.nether_star, 1); if (entityitem != null) { @@ -188,6 +195,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(17, Integer.valueOf(0)); @@ -196,6 +204,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged this.dataWatcher.addObject(20, Integer.valueOf(0)); } + @Override public void fall(float var1, float var2) { } @@ -249,6 +258,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged } } + @Override public int getBrightnessForRender(float var1) { return 15728880; } @@ -256,6 +266,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEAD; } @@ -263,10 +274,12 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.wither.death"; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 1.0f; } @@ -274,6 +287,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.wither.hurt"; } @@ -285,6 +299,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.wither.idle"; } @@ -293,6 +308,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { return 4; } @@ -344,6 +360,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Called when a player mounts an entity. e.g. mounts a pig, mounts a boat. */ + @Override public void mountEntity(Entity var1) { this.ridingEntity = null; } @@ -353,6 +370,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { this.motionY *= 0.6000000238418579D; if (!this.worldObj.isRemote && this.getWatchedTargetId(0) > 0) { @@ -445,6 +463,7 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setInvulTime(nbttagcompound.getInteger("Invul")); @@ -457,9 +476,11 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + Sets the Entity inside a web block. */ + @Override public void setInWeb() { } + @Override protected void updateAITasks() { if (this.getInvulTime() > 0) { int j1 = this.getInvulTime() - 1; @@ -592,8 +613,9 @@ public class EntityWither extends EntityMob implements IBossDisplayData, IRanged /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("Invul", this.getInvulTime()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/boss/IBossDisplayData.java b/src/game/java/net/minecraft/entity/boss/IBossDisplayData.java index df84047a..dfaa297b 100644 --- a/src/game/java/net/minecraft/entity/boss/IBossDisplayData.java +++ b/src/game/java/net/minecraft/entity/boss/IBossDisplayData.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBossDisplayData { /** @@ -35,4 +35,4 @@ public interface IBossDisplayData { float getHealth(); float getMaxHealth(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/effect/EntityLightningBolt.java b/src/game/java/net/minecraft/entity/effect/EntityLightningBolt.java index b8962171..2500f60d 100644 --- a/src/game/java/net/minecraft/entity/effect/EntityLightningBolt.java +++ b/src/game/java/net/minecraft/entity/effect/EntityLightningBolt.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLightningBolt extends EntityWeatherEffect { private int lightningState; @@ -66,12 +66,14 @@ public class EntityLightningBolt extends EntityWeatherEffect { } + @Override protected void entityInit() { } /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.lightningState == 2) { @@ -119,12 +121,14 @@ public class EntityLightningBolt extends EntityWeatherEffect { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound var1) { } /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/effect/EntityWeatherEffect.java b/src/game/java/net/minecraft/entity/effect/EntityWeatherEffect.java index 6a0f2413..c8f66eec 100644 --- a/src/game/java/net/minecraft/entity/effect/EntityWeatherEffect.java +++ b/src/game/java/net/minecraft/entity/effect/EntityWeatherEffect.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,10 +24,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityWeatherEffect extends Entity { public EntityWeatherEffect(World worldIn) { super(worldIn); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityArmorStand.java b/src/game/java/net/minecraft/entity/item/EntityArmorStand.java index af7752d8..b86c526b 100644 --- a/src/game/java/net/minecraft/entity/item/EntityArmorStand.java +++ b/src/game/java/net/minecraft/entity/item/EntityArmorStand.java @@ -27,13 +27,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityArmorStand extends EntityLivingBase { private static final Rotations DEFAULT_HEAD_ROTATION = new Rotations(0.0F, 0.0F, 0.0F); @@ -88,6 +88,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float var2) { if (this.worldObj.isRemote) { return false; @@ -150,6 +151,7 @@ public class EntityArmorStand extends EntityLivingBase { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return super.canBeCollidedWith() && !this.func_181026_s(); } @@ -158,13 +160,16 @@ public class EntityArmorStand extends EntityLivingBase { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return false; } + @Override protected void collideWithEntity(Entity var1) { } + @Override protected void collideWithNearbyEntities() { List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox()); if (list != null && !list.isEmpty()) { @@ -210,6 +215,7 @@ public class EntityArmorStand extends EntityLivingBase { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(10, Byte.valueOf((byte) 0)); @@ -221,6 +227,7 @@ public class EntityArmorStand extends EntityLivingBase { this.dataWatcher.addObject(16, DEFAULT_RIGHTLEG_ROTATION); } + @Override protected float func_110146_f(float var1, float var2) { this.prevRenderYawOffset = this.prevRotationYaw; this.renderYawOffset = this.rotationYaw; @@ -286,6 +293,7 @@ public class EntityArmorStand extends EntityLivingBase { return this.bodyRotation; } + @Override public ItemStack getCurrentArmor(int i) { return this.contents[i + 1]; } @@ -293,10 +301,12 @@ public class EntityArmorStand extends EntityLivingBase { /** * + 0: Tool in Hand; 1-4: Armor */ + @Override public ItemStack getEquipmentInSlot(int i) { return this.contents[i]; } + @Override public float getEyeHeight() { return this.isChild() ? this.height * 0.5F : this.height * 0.9F; } @@ -308,6 +318,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Returns the item that this EntityLiving is holding, if any. */ + @Override public ItemStack getHeldItem() { return this.contents[0]; } @@ -315,6 +326,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + returns the inventory of this entity (only used in EntityPlayerMP it seems) */ + @Override public ItemStack[] getInventory() { return this.contents; } @@ -351,6 +363,7 @@ public class EntityArmorStand extends EntityLivingBase { * + New version of interactWith that includes vector information on where * precisely the player targeted. */ + @Override public boolean interactAt(EntityPlayer entityplayer, Vec3 vec3) { if (this.func_181026_s()) { return false; @@ -425,10 +438,12 @@ public class EntityArmorStand extends EntityLivingBase { /** * + If Animal, checks if the age timer is negative */ + @Override public boolean isChild() { return this.isSmall(); } + @Override public boolean isImmuneToExplosions() { return this.isInvisible(); } @@ -438,6 +453,7 @@ public class EntityArmorStand extends EntityLivingBase { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; if (Double.isNaN(d1) || d1 == 0.0D) { @@ -451,6 +467,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Returns whether the entity is in a server world */ + @Override public boolean isServerWorld() { return super.isServerWorld() && !this.hasNoGravity(); } @@ -462,6 +479,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float f, float f1) { if (!this.hasNoGravity()) { super.moveEntityWithHeading(f, f1); @@ -471,6 +489,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Called by the /kill command. */ + @Override public void onKillCommand() { this.setDead(); } @@ -478,6 +497,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); Rotations rotations = this.dataWatcher.getWatchableObjectRotations(11); @@ -537,6 +557,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("Equipment", 9)) { @@ -589,6 +610,7 @@ public class EntityArmorStand extends EntityLivingBase { return nbttagcompound; } + @Override public boolean replaceItemInInventory(int i, ItemStack itemstack) { int j; if (i == 99) { @@ -618,6 +640,7 @@ public class EntityArmorStand extends EntityLivingBase { * + Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ + @Override public void setCurrentItemOrArmor(int i, ItemStack itemstack) { this.contents[i] = itemstack; } @@ -627,6 +650,7 @@ public class EntityArmorStand extends EntityLivingBase { this.dataWatcher.updateObject(11, parRotations); } + @Override public void setInvisible(boolean flag) { this.canInteract = flag; super.setInvisible(flag); @@ -701,6 +725,7 @@ public class EntityArmorStand extends EntityLivingBase { * Otherwise, updates potion effect color, ambience, and invisibility metadata * values */ + @Override protected void updatePotionMetadata() { this.setInvisible(this.canInteract); } @@ -708,6 +733,7 @@ public class EntityArmorStand extends EntityLivingBase { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); NBTTagList nbttaglist = new NBTTagList(); @@ -787,4 +813,4 @@ public class EntityArmorStand extends EntityLivingBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityBoat.java b/src/game/java/net/minecraft/entity/item/EntityBoat.java index c1ebfb22..615951b0 100644 --- a/src/game/java/net/minecraft/entity/item/EntityBoat.java +++ b/src/game/java/net/minecraft/entity/item/EntityBoat.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBoat extends Entity { private boolean isBoatEmpty; @@ -77,6 +77,7 @@ public class EntityBoat extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -114,6 +115,7 @@ public class EntityBoat extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return !this.isDead; } @@ -122,6 +124,7 @@ public class EntityBoat extends Entity { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return true; } @@ -130,10 +133,12 @@ public class EntityBoat extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObject(17, Integer.valueOf(0)); this.dataWatcher.addObject(18, Integer.valueOf(1)); @@ -143,6 +148,7 @@ public class EntityBoat extends Entity { /** * + Returns the collision bounding box for this entity */ + @Override public AxisAlignedBB getCollisionBoundingBox() { return this.getEntityBoundingBox(); } @@ -152,6 +158,7 @@ public class EntityBoat extends Entity { * blocks. This enables the entity to be pushable on contact, like boats or * minecarts. */ + @Override public AxisAlignedBB getCollisionBox(Entity entity) { return entity.getEntityBoundingBox(); } @@ -174,6 +181,7 @@ public class EntityBoat extends Entity { * + Returns the Y offset from the entity's position for any entity riding this * one. */ + @Override public double getMountedYOffset() { return -0.3D; } @@ -188,6 +196,7 @@ public class EntityBoat extends Entity { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != entityplayer) { @@ -204,6 +213,7 @@ public class EntityBoat extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.getTimeSinceHit() > 0) { @@ -415,6 +425,7 @@ public class EntityBoat extends Entity { * + Setups the entity to do the hurt animation. Only used by packets in * multiplayer. */ + @Override public void performHurtAnimation() { this.setForwardDirection(-this.getForwardDirection()); this.setTimeSinceHit(10); @@ -424,6 +435,7 @@ public class EntityBoat extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound var1) { } @@ -448,6 +460,7 @@ public class EntityBoat extends Entity { this.isBoatEmpty = parFlag; } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float f, float f1, int i, boolean flag) { if (flag && this.riddenByEntity != null) { this.prevPosX = this.posX = d0; @@ -496,12 +509,14 @@ public class EntityBoat extends Entity { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.velocityX = this.motionX = d0; this.velocityY = this.motionY = d1; this.velocityZ = this.motionZ = d2; } + @Override protected void updateFallState(double d0, boolean flag, Block var4, BlockPos var5) { if (flag) { if (this.fallDistance > 3.0F) { @@ -528,6 +543,7 @@ public class EntityBoat extends Entity { } + @Override public void updateRiderPosition() { if (this.riddenByEntity != null) { double d0 = Math.cos((double) this.rotationYaw * 3.141592653589793D / 180.0D) * 0.4D; @@ -540,6 +556,7 @@ public class EntityBoat extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityEnderCrystal.java b/src/game/java/net/minecraft/entity/item/EntityEnderCrystal.java index b2f9a7c0..29c6ca36 100644 --- a/src/game/java/net/minecraft/entity/item/EntityEnderCrystal.java +++ b/src/game/java/net/minecraft/entity/item/EntityEnderCrystal.java @@ -12,13 +12,13 @@ import net.minecraft.world.WorldProviderEnd; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.WorldProviderEnd; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEnderCrystal extends Entity { public int innerRotation; @@ -52,6 +52,7 @@ public class EntityEnderCrystal extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float var2) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -74,6 +75,7 @@ public class EntityEnderCrystal extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return true; } @@ -82,10 +84,12 @@ public class EntityEnderCrystal extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObject(8, Integer.valueOf(this.health)); } @@ -93,6 +97,7 @@ public class EntityEnderCrystal extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -112,12 +117,14 @@ public class EntityEnderCrystal extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound var1) { } /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityEnderEye.java b/src/game/java/net/minecraft/entity/item/EntityEnderEye.java index 3ecd0f77..9c2ef424 100644 --- a/src/game/java/net/minecraft/entity/item/EntityEnderEye.java +++ b/src/game/java/net/minecraft/entity/item/EntityEnderEye.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEnderEye extends Entity { private double targetX; @@ -55,24 +55,29 @@ public class EntityEnderEye extends Entity { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } + @Override protected void entityInit() { } /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float var1) { return 15728880; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 0.5f; } @@ -82,6 +87,7 @@ public class EntityEnderEye extends Entity { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; if (Double.isNaN(d1)) { @@ -116,6 +122,7 @@ public class EntityEnderEye extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.lastTickPosX = this.posX; this.lastTickPosY = this.posY; @@ -202,9 +209,11 @@ public class EntityEnderEye extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound var1) { } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -219,6 +228,7 @@ public class EntityEnderEye extends Entity { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.motionX = d0; this.motionY = d1; @@ -236,6 +246,7 @@ public class EntityEnderEye extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityEnderPearl.java b/src/game/java/net/minecraft/entity/item/EntityEnderPearl.java index fed7ae9d..db0e095d 100644 --- a/src/game/java/net/minecraft/entity/item/EntityEnderPearl.java +++ b/src/game/java/net/minecraft/entity/item/EntityEnderPearl.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEnderPearl extends EntityThrowable { private EntityLivingBase field_181555_c; @@ -53,6 +53,7 @@ public class EntityEnderPearl extends EntityThrowable { /** * + Called when this EntityThrowable hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { EntityLivingBase entitylivingbase = this.getThrower(); if (movingobjectposition.entityHit != null) { @@ -103,6 +104,7 @@ public class EntityEnderPearl extends EntityThrowable { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { EntityLivingBase entitylivingbase = this.getThrower(); if (entitylivingbase != null && entitylivingbase instanceof EntityPlayer && !entitylivingbase.isEntityAlive()) { @@ -112,4 +114,4 @@ public class EntityEnderPearl extends EntityThrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityExpBottle.java b/src/game/java/net/minecraft/entity/item/EntityExpBottle.java index 8a8b103c..d901bc18 100644 --- a/src/game/java/net/minecraft/entity/item/EntityExpBottle.java +++ b/src/game/java/net/minecraft/entity/item/EntityExpBottle.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityExpBottle extends EntityThrowable { public EntityExpBottle(World worldIn) { @@ -45,14 +45,17 @@ public class EntityExpBottle extends EntityThrowable { /** * + Gets the amount of gravity to apply to the thrown entity with each tick. */ + @Override protected float getGravityVelocity() { return 0.07F; } + @Override protected float getInaccuracy() { return -20.0F; } + @Override protected float getVelocity() { return 0.7F; } @@ -60,6 +63,7 @@ public class EntityExpBottle extends EntityThrowable { /** * + Called when this EntityThrowable hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition var1) { if (!this.worldObj.isRemote) { this.worldObj.playAuxSFX(2002, new BlockPos(this), 0); @@ -75,4 +79,4 @@ public class EntityExpBottle extends EntityThrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityFallingBlock.java b/src/game/java/net/minecraft/entity/item/EntityFallingBlock.java index 7f79c7b1..bdc1564b 100644 --- a/src/game/java/net/minecraft/entity/item/EntityFallingBlock.java +++ b/src/game/java/net/minecraft/entity/item/EntityFallingBlock.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFallingBlock extends Entity { private IBlockState fallTile; @@ -75,6 +75,7 @@ public class EntityFallingBlock extends Entity { this.prevPosZ = z; } + @Override public void addEntityCrashInfo(CrashReportCategory crashreportcategory) { super.addEntityCrashInfo(crashreportcategory); if (this.fallTile != null) { @@ -90,6 +91,7 @@ public class EntityFallingBlock extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return !this.isDead; } @@ -97,6 +99,7 @@ public class EntityFallingBlock extends Entity { /** * + Return whether this entity should be rendered as on fire. */ + @Override public boolean canRenderOnFire() { return false; } @@ -105,13 +108,16 @@ public class EntityFallingBlock extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { } + @Override public void fall(float f, float var2) { Block block = this.fallTile.getBlock(); if (this.hurtEntities) { @@ -152,6 +158,7 @@ public class EntityFallingBlock extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { Block block = this.fallTile.getBlock(); if (block.getMaterial() == Material.air) { @@ -230,6 +237,7 @@ public class EntityFallingBlock extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { int i = nbttagcompound.getByte("Data") & 255; if (nbttagcompound.hasKey("Block", 8)) { @@ -271,6 +279,7 @@ public class EntityFallingBlock extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { Block block = this.fallTile != null ? this.fallTile.getBlock() : Blocks.air; ResourceLocation resourcelocation = (ResourceLocation) Block.blockRegistry.getNameForObject(block); @@ -286,4 +295,4 @@ public class EntityFallingBlock extends Entity { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityFireworkRocket.java b/src/game/java/net/minecraft/entity/item/EntityFireworkRocket.java index 25f1c6a5..7e96999d 100644 --- a/src/game/java/net/minecraft/entity/item/EntityFireworkRocket.java +++ b/src/game/java/net/minecraft/entity/item/EntityFireworkRocket.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFireworkRocket extends Entity { private int fireworkAge; @@ -63,10 +63,12 @@ public class EntityFireworkRocket extends Entity { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObjectByDataType(8, 5); } @@ -74,18 +76,22 @@ public class EntityFireworkRocket extends Entity { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float f) { return super.getBrightness(f); } + @Override public int getBrightnessForRender(float f) { return super.getBrightnessForRender(f); } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 1.0f; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 17 && this.worldObj.isRemote) { ItemStack itemstack = this.dataWatcher.getWatchableObjectItemStack(8); @@ -106,6 +112,7 @@ public class EntityFireworkRocket extends Entity { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { return d0 < 4096.0D; } @@ -113,6 +120,7 @@ public class EntityFireworkRocket extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.lastTickPosX = this.posX; this.lastTickPosY = this.posY; @@ -167,6 +175,7 @@ public class EntityFireworkRocket extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.fireworkAge = nbttagcompound.getInteger("Life"); this.lifetime = nbttagcompound.getInteger("LifeTime"); @@ -183,6 +192,7 @@ public class EntityFireworkRocket extends Entity { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.motionX = d0; this.motionY = d1; @@ -200,6 +210,7 @@ public class EntityFireworkRocket extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setInteger("Life", this.fireworkAge); nbttagcompound.setInteger("LifeTime", this.lifetime); @@ -211,4 +222,4 @@ public class EntityFireworkRocket extends Entity { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityItem.java b/src/game/java/net/minecraft/entity/item/EntityItem.java index 00657f3c..813e4190 100644 --- a/src/game/java/net/minecraft/entity/item/EntityItem.java +++ b/src/game/java/net/minecraft/entity/item/EntityItem.java @@ -4,6 +4,7 @@ import java.util.List; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -23,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityItem extends Entity { private static final Logger logger = LogManager.getLogger(); @@ -82,12 +83,16 @@ public class EntityItem extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; } else if (this.getEntityItem() != null && this.getEntityItem().getItem() == Items.nether_star && damagesource.isExplosion()) { return false; + } else if (this.getEntityItem() != null && this.getEntityItem().getItem().isImmuneToFire() + && damagesource.isFireDamage()) { + return false; } else { this.setBeenAttacked(); this.health = (int) ((float) this.health - f); @@ -102,6 +107,7 @@ public class EntityItem extends Entity { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } @@ -114,6 +120,7 @@ public class EntityItem extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } @@ -170,10 +177,14 @@ public class EntityItem extends Entity { * + Will deal the specified amount of damage to the entity if the entity isn't * immune to fire damage. Args: amountDamage */ + @Override protected void dealFireDamage(int i) { - this.attackEntityFrom(DamageSource.inFire, (float) i); + if (!this.isImmuneToFire) { + this.attackEntityFrom(DamageSource.inFire, (float) i); + } } + @Override protected void entityInit() { this.getDataWatcher().addObjectByDataType(10, 5); } @@ -187,6 +198,7 @@ public class EntityItem extends Entity { return this.age; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ItemStack itm = this.getEntityItem(); @@ -221,6 +233,7 @@ public class EntityItem extends Entity { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.getCustomNameTag() : StatCollector.translateToLocal("item." + this.getEntityItem().getUnlocalizedName()); @@ -238,6 +251,7 @@ public class EntityItem extends Entity { * + Returns if this entity is in water and will end up adding the waters * velocity to the entity */ + @Override public boolean handleWaterMovement() { if (this.worldObj.handleMaterialAcceleration(this.getEntityBoundingBox(), Material.water, this)) { if (!this.inWater && !this.firstUpdate) { @@ -255,6 +269,7 @@ public class EntityItem extends Entity { /** * + Called by a player entity when they collide with an entity */ + @Override public void onCollideWithPlayer(EntityPlayer entityplayer) { if (!this.worldObj.isRemote) { ItemStack itemstack = this.getEntityItem(); @@ -306,6 +321,7 @@ public class EntityItem extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (this.getEntityItem() == null) { this.setDead(); @@ -325,11 +341,17 @@ public class EntityItem extends Entity { boolean flag = (int) this.prevPosX != (int) this.posX || (int) this.prevPosY != (int) this.posY || (int) this.prevPosZ != (int) this.posZ; if (flag || this.ticksExisted % 25 == 0) { - if (this.worldObj.getBlockState(new BlockPos(this)).getBlock().getMaterial() == Material.lava) { + Block block = this.worldObj.getBlockState(new BlockPos(this)).getBlock(); + if (block.getMaterial() == Material.lava && !this.isImmuneToFire) { this.motionY = 0.20000000298023224D; this.motionX = (double) ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); this.motionZ = (double) ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); this.playSound("random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } else if ((block.getMaterial() == Material.lava + || block.getBlockState() == Blocks.flowing_lava.getBlockState() + || block.getBlockState() == Blocks.lava.getBlockState()) && this.isImmuneToFire) { + this.motionY = 0.20000000298023224D; + this.motionX = (double) ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.00001D); } if (!this.worldObj.isRemote) { @@ -359,13 +381,13 @@ public class EntityItem extends Entity { if (!this.worldObj.isRemote && this.age >= 6000) { this.setDead(); } - } } /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.health = nbttagcompound.getShort("Health") & 255; this.age = nbttagcompound.getShort("Age"); @@ -389,6 +411,7 @@ public class EntityItem extends Entity { } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -425,6 +448,7 @@ public class EntityItem extends Entity { * + Sets the ItemStack for this entity */ public void setEntityItemStack(ItemStack stack) { + this.isImmuneToFire = stack.getItem().isImmuneToFire(); this.getDataWatcher().updateObject(10, stack); this.getDataWatcher().setObjectWatched(10); } @@ -457,6 +481,7 @@ public class EntityItem extends Entity { * + Teleports the entity to another dimension. Params: Dimension number to * teleport to */ + @Override public void travelToDimension(int i) { super.travelToDimension(i); if (!this.worldObj.isRemote) { @@ -468,6 +493,7 @@ public class EntityItem extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("Health", (short) ((byte) this.health)); nbttagcompound.setShort("Age", (short) this.age); @@ -485,4 +511,4 @@ public class EntityItem extends Entity { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityItemFrame.java b/src/game/java/net/minecraft/entity/item/EntityItemFrame.java index f7a63dc2..aa6be63b 100644 --- a/src/game/java/net/minecraft/entity/item/EntityItemFrame.java +++ b/src/game/java/net/minecraft/entity/item/EntityItemFrame.java @@ -19,13 +19,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityItemFrame extends EntityHanging { /** @@ -59,6 +59,7 @@ public class EntityItemFrame extends EntityHanging { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -98,6 +99,7 @@ public class EntityItemFrame extends EntityHanging { } } + @Override protected void entityInit() { this.getDataWatcher().addObjectByDataType(8, 5); this.getDataWatcher().addObject(9, Byte.valueOf((byte) 0)); @@ -115,6 +117,7 @@ public class EntityItemFrame extends EntityHanging { return this.getDisplayedItem() == null ? 0 : this.getRotation() % 8 + 1; } + @Override public float getCollisionBorderSize() { return 0.0F; } @@ -123,6 +126,7 @@ public class EntityItemFrame extends EntityHanging { return this.getDataWatcher().getWatchableObjectItemStack(8); } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); ItemStack itm = this.getDisplayedItem(); @@ -136,6 +140,7 @@ public class EntityItemFrame extends EntityHanging { return f; } + @Override public int getHeightPixels() { return 12; } @@ -147,6 +152,7 @@ public class EntityItemFrame extends EntityHanging { return this.getDataWatcher().getWatchableObjectByte(9); } + @Override public int getWidthPixels() { return 12; } @@ -154,6 +160,7 @@ public class EntityItemFrame extends EntityHanging { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { if (this.getDisplayedItem() == null) { ItemStack itemstack = entityplayer.getHeldItem(); @@ -176,6 +183,7 @@ public class EntityItemFrame extends EntityHanging { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = 16.0D; d1 = d1 * 64.0D * this.renderDistanceWeight; @@ -185,6 +193,7 @@ public class EntityItemFrame extends EntityHanging { /** * + Called when this entity is broken. Entity parameter may be null. */ + @Override public void onBroken(Entity entity) { this.dropItemOrSelf(entity, true); } @@ -192,6 +201,7 @@ public class EntityItemFrame extends EntityHanging { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("Item"); if (nbttagcompound1 != null && !nbttagcompound1.hasNoTags()) { @@ -224,6 +234,7 @@ public class EntityItemFrame extends EntityHanging { } } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -257,6 +268,7 @@ public class EntityItemFrame extends EntityHanging { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { if (this.getDisplayedItem() != null) { nbttagcompound.setTag("Item", this.getDisplayedItem().writeToNBT(new NBTTagCompound())); @@ -266,4 +278,4 @@ public class EntityItemFrame extends EntityHanging { super.writeEntityToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecart.java b/src/game/java/net/minecraft/entity/item/EntityMinecart.java index 951e7b32..2b5d6bac 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecart.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecart.java @@ -36,13 +36,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -54,7 +54,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityMinecart extends Entity implements IWorldNameable { public static enum EnumMinecartType { @@ -175,6 +175,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Applies a velocity to each of the entities pushing them away from each * other. Args: entity */ + @Override public void applyEntityCollision(Entity entity) { if (!this.worldObj.isRemote) { if (!entity.noClip && !this.noClip) { @@ -259,6 +260,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (!this.worldObj.isRemote && !this.isDead) { if (this.isEntityInvulnerable(damagesource)) { @@ -293,6 +295,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return !this.isDead; } @@ -301,6 +304,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return true; } @@ -309,10 +313,12 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObject(17, Integer.valueOf(0)); this.dataWatcher.addObject(18, Integer.valueOf(1)); @@ -583,6 +589,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Returns the collision bounding box for this entity */ + @Override public AxisAlignedBB getCollisionBoundingBox() { return null; } @@ -592,10 +599,12 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * blocks. This enables the entity to be pushable on contact, like boats or * minecarts. */ + @Override public AxisAlignedBB getCollisionBox(Entity entity) { return entity.canBePushed() ? entity.getEntityBoundingBox() : null; } + @Override public String getCustomNameTag() { return this.entityName; } @@ -620,6 +629,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { if (this.hasCustomName()) { ChatComponentText chatcomponenttext = new ChatComponentText(this.entityName); @@ -635,6 +645,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { } } + @Override public IChatComponent getDisplayNameProfanityFilter() { /** * + Get the formatted ChatComponent that will be used for the sender's username @@ -666,6 +677,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Returns the Y offset from the entity's position for any entity riding this * one. */ + @Override public double getMountedYOffset() { return 0.0D; } @@ -674,10 +686,12 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.entityName != null ? this.entityName : super.getName(); } + @Override public String getNameProfanityFilter() { /** * + Gets the name of this command sender (usually username, but possibly @@ -704,6 +718,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.entityName != null; } @@ -757,6 +772,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (this.getRollingAmplitude() > 0) { this.setRollingAmplitude(this.getRollingAmplitude() - 1); @@ -890,6 +906,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Setups the entity to do the hurt animation. Only used by packets in * multiplayer. */ + @Override public void performHurtAnimation() { this.setRollingDirection(-this.getRollingDirection()); this.setRollingAmplitude(10); @@ -899,6 +916,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { if (nbttagcompound.getBoolean("CustomDisplayTile")) { int i = nbttagcompound.getInteger("DisplayData"); @@ -930,6 +948,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Sets the custom name tag for this entity */ + @Override public void setCustomNameTag(String s) { this.entityName = s; } @@ -945,6 +964,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Will get destroyed next tick. */ + @Override public void setDead() { super.setDead(); } @@ -962,6 +982,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { * + Sets the x,y,z of the entity from the given parameters. Also seems to set * up a bounding box. */ + @Override public void setPosition(double d0, double d1, double d2) { this.posX = d0; this.posY = d1; @@ -972,6 +993,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { d1 + (double) f1, d2 + (double) f)); } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float f, float f1, int i, boolean var10) { this.minecartX = d0; this.minecartY = d1; @@ -1002,6 +1024,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.velocityX = this.motionX = d0; this.velocityY = this.motionY = d1; @@ -1011,6 +1034,7 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { if (this.hasDisplayTile()) { nbttagcompound.setBoolean("CustomDisplayTile", true); @@ -1027,4 +1051,4 @@ public abstract class EntityMinecart extends Entity implements IWorldNameable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartChest.java b/src/game/java/net/minecraft/entity/item/EntityMinecartChest.java index 20524ea1..71a167f5 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartChest.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartChest.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartChest extends EntityMinecartContainer { public EntityMinecartChest(World worldIn) { @@ -44,22 +44,27 @@ public class EntityMinecartChest extends EntityMinecartContainer { super(worldIn, parDouble1, parDouble2, parDouble3); } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { return new ContainerChest(inventoryplayer, this, entityplayer); } + @Override public IBlockState getDefaultDisplayTile() { return Blocks.chest.getDefaultState().withProperty(BlockChest.FACING, EnumFacing.NORTH); } + @Override public int getDefaultDisplayTileOffset() { return 8; } + @Override public String getGuiID() { return "minecraft:chest"; } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.CHEST; } @@ -67,10 +72,12 @@ public class EntityMinecartChest extends EntityMinecartContainer { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 27; } + @Override public void killMinecart(DamageSource damagesource) { super.killMinecart(damagesource); if (this.worldObj.getGameRules().getBoolean("doEntityDrops")) { @@ -78,4 +85,4 @@ public class EntityMinecartChest extends EntityMinecartContainer { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartContainer.java b/src/game/java/net/minecraft/entity/item/EntityMinecartContainer.java index d94e1490..cdb77104 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartContainer.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartContainer.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityMinecartContainer extends EntityMinecart implements ILockableContainer { private ItemStack[] minecartContainerItems = new ItemStack[36]; @@ -51,6 +51,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements super(worldIn, parDouble1, parDouble2, parDouble3); } + @Override protected void applyDrag() { int i = 15 - Container.calcRedstoneFromInventory(this); float f = 0.98F + (float) i * 0.001F; @@ -59,6 +60,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements this.motionZ *= (double) f; } + @Override public void clear() { for (int i = 0; i < this.minecartContainerItems.length; ++i) { this.minecartContainerItems[i] = null; @@ -66,6 +68,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements } + @Override public void closeInventory(EntityPlayer var1) { } @@ -73,6 +76,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.minecartContainerItems[i] != null) { if (this.minecartContainerItems[i].stackSize <= j) { @@ -92,10 +96,12 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements } } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -104,10 +110,12 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } + @Override public LockCode getLockCode() { return LockCode.EMPTY_CODE; } @@ -116,6 +124,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.getCustomNameTag() : "container.minecart"; } @@ -123,6 +132,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.minecartContainerItems[i]; } @@ -130,6 +140,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { if (!this.worldObj.isRemote) { entityplayer.displayGUIChest(this); @@ -142,10 +153,12 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } + @Override public boolean isLocked() { return false; } @@ -154,10 +167,12 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.isDead ? false : entityplayer.getDistanceSqToEntity(this) <= 64.0D; } + @Override public void killMinecart(DamageSource damagesource) { super.killMinecart(damagesource); if (this.worldObj.getGameRules().getBoolean("doEntityDrops")) { @@ -170,15 +185,18 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { } + @Override public void openInventory(EntityPlayer var1) { } /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -197,6 +215,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.minecartContainerItems[i] != null) { ItemStack itemstack = this.minecartContainerItems[i]; @@ -210,6 +229,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements /** * + Will get destroyed next tick. */ + @Override public void setDead() { if (this.dropContentsWhenDead) { InventoryHelper.func_180176_a(this.worldObj, this, this); @@ -218,6 +238,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements super.setDead(); } + @Override public void setField(int var1, int var2) { } @@ -225,6 +246,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.minecartContainerItems[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -233,6 +255,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements } + @Override public void setLockCode(LockCode var1) { } @@ -240,6 +263,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements * + Teleports the entity to another dimension. Params: Dimension number to * teleport to */ + @Override public void travelToDimension(int i) { this.dropContentsWhenDead = false; super.travelToDimension(i); @@ -248,6 +272,7 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); NBTTagList nbttaglist = new NBTTagList(); @@ -263,4 +288,4 @@ public abstract class EntityMinecartContainer extends EntityMinecart implements nbttagcompound.setTag("Items", nbttaglist); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartEmpty.java b/src/game/java/net/minecraft/entity/item/EntityMinecartEmpty.java index d3230f1f..94c4cce0 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartEmpty.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartEmpty.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartEmpty extends EntityMinecart { public EntityMinecartEmpty(World worldIn) { @@ -36,6 +36,7 @@ public class EntityMinecartEmpty extends EntityMinecart { super(worldIn, parDouble1, parDouble2, parDouble3); } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.RIDEABLE; } @@ -43,6 +44,7 @@ public class EntityMinecartEmpty extends EntityMinecart { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != entityplayer) { @@ -62,6 +64,7 @@ public class EntityMinecartEmpty extends EntityMinecart { * + Called every tick the minecart is on an activator rail. Args: x, y, z, is * the rail receiving power */ + @Override public void onActivatorRailPass(int var1, int var2, int var3, boolean flag) { if (flag) { if (this.riddenByEntity != null) { @@ -77,4 +80,4 @@ public class EntityMinecartEmpty extends EntityMinecart { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartFurnace.java b/src/game/java/net/minecraft/entity/item/EntityMinecartFurnace.java index cf4926be..038ac797 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartFurnace.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartFurnace.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartFurnace extends EntityMinecart { private int fuel; @@ -50,6 +50,7 @@ public class EntityMinecartFurnace extends EntityMinecart { super(worldIn, parDouble1, parDouble2, parDouble3); } + @Override protected void applyDrag() { double d0 = this.pushX * this.pushX + this.pushZ * this.pushZ; if (d0 > 1.0E-4D) { @@ -71,11 +72,13 @@ public class EntityMinecartFurnace extends EntityMinecart { super.applyDrag(); } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); } + @Override protected void func_180460_a(BlockPos blockpos, IBlockState iblockstate) { super.func_180460_a(blockpos, iblockstate); double d0 = this.pushX * this.pushX + this.pushZ * this.pushZ; @@ -95,6 +98,7 @@ public class EntityMinecartFurnace extends EntityMinecart { } + @Override public IBlockState getDefaultDisplayTile() { return (this.isMinecartPowered() ? Blocks.lit_furnace : Blocks.furnace).getDefaultState() .withProperty(BlockFurnace.FACING, EnumFacing.NORTH); @@ -103,10 +107,12 @@ public class EntityMinecartFurnace extends EntityMinecart { /** * + Get's the maximum speed for a minecart */ + @Override protected double getMaximumSpeed() { return 0.2D; } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.FURNACE; } @@ -114,6 +120,7 @@ public class EntityMinecartFurnace extends EntityMinecart { /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.coal) { @@ -133,6 +140,7 @@ public class EntityMinecartFurnace extends EntityMinecart { return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; } + @Override public void killMinecart(DamageSource damagesource) { super.killMinecart(damagesource); if (!damagesource.isExplosion() && this.worldObj.getGameRules().getBoolean("doEntityDrops")) { @@ -144,6 +152,7 @@ public class EntityMinecartFurnace extends EntityMinecart { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.fuel > 0) { @@ -165,6 +174,7 @@ public class EntityMinecartFurnace extends EntityMinecart { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.pushX = nbttagcompound.getDouble("PushX"); @@ -184,10 +194,11 @@ public class EntityMinecartFurnace extends EntityMinecart { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setDouble("PushX", this.pushX); nbttagcompound.setDouble("PushZ", this.pushZ); nbttagcompound.setShort("Fuel", (short) this.fuel); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartHopper.java b/src/game/java/net/minecraft/entity/item/EntityMinecartHopper.java index be1fa8de..90efdcca 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartHopper.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartHopper.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartHopper extends EntityMinecartContainer implements IHopper { /** @@ -63,6 +63,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo return this.transferTicker > 0; } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { return new ContainerHopper(inventoryplayer, this, entityplayer); } @@ -88,18 +89,22 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo return this.isBlocked; } + @Override public IBlockState getDefaultDisplayTile() { return Blocks.hopper.getDefaultState(); } + @Override public int getDefaultDisplayTileOffset() { return 1; } + @Override public String getGuiID() { return "minecraft:hopper"; } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.HOPPER; } @@ -107,6 +112,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 5; } @@ -114,6 +120,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Returns the worldObj for this tileEntity. */ + @Override public World getWorld() { return this.worldObj; } @@ -121,6 +128,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Gets the world X position for this hopper entity. */ + @Override public double getXPos() { return this.posX; } @@ -128,6 +136,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Gets the world Y position for this hopper entity. */ + @Override public double getYPos() { return this.posY + 0.5D; } @@ -135,6 +144,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Gets the world Z position for this hopper entity. */ + @Override public double getZPos() { return this.posZ; } @@ -142,6 +152,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + First layer of player interaction */ + @Override public boolean interactFirst(EntityPlayer entityplayer) { if (!this.worldObj.isRemote) { entityplayer.displayGUIChest(this); @@ -150,6 +161,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo return true; } + @Override public void killMinecart(DamageSource damagesource) { super.killMinecart(damagesource); if (this.worldObj.getGameRules().getBoolean("doEntityDrops")) { @@ -162,6 +174,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo * + Called every tick the minecart is on an activator rail. Args: x, y, z, is * the rail receiving power */ + @Override public void onActivatorRailPass(int var1, int var2, int var3, boolean flag) { boolean flag1 = !flag; if (flag1 != this.getBlocked()) { @@ -173,6 +186,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote && this.isEntityAlive() && this.getBlocked()) { @@ -197,6 +211,7 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.transferTicker = nbttagcompound.getInteger("TransferCooldown"); @@ -219,8 +234,9 @@ public class EntityMinecartHopper extends EntityMinecartContainer implements IHo /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("TransferCooldown", this.transferTicker); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityMinecartTNT.java b/src/game/java/net/minecraft/entity/item/EntityMinecartTNT.java index 2aee2e8d..3731c956 100644 --- a/src/game/java/net/minecraft/entity/item/EntityMinecartTNT.java +++ b/src/game/java/net/minecraft/entity/item/EntityMinecartTNT.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMinecartTNT extends EntityMinecart { private int minecartTNTFuse = -1; @@ -51,6 +51,7 @@ public class EntityMinecartTNT extends EntityMinecart { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { Entity entity = damagesource.getSourceOfDamage(); if (entity instanceof EntityArrow) { @@ -81,6 +82,7 @@ public class EntityMinecartTNT extends EntityMinecart { } + @Override public void fall(float f, float f1) { if (f >= 3.0F) { float f2 = f / 10.0F; @@ -90,10 +92,12 @@ public class EntityMinecartTNT extends EntityMinecart { super.fall(f, f1); } + @Override public IBlockState getDefaultDisplayTile() { return Blocks.tnt.getDefaultState(); } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); if (minecartTNTFuse > -1 && minecartTNTFuse / 5 % 2 == 0) { @@ -105,6 +109,7 @@ public class EntityMinecartTNT extends EntityMinecart { /** * + Explosion resistance of a block relative to this entity */ + @Override public float getExplosionResistance(Explosion explosion, World world, BlockPos blockpos, IBlockState iblockstate) { return !this.isIgnited() || !BlockRailBase.isRailBlock(iblockstate) && !BlockRailBase.isRailBlock(world, blockpos.up()) @@ -119,10 +124,12 @@ public class EntityMinecartTNT extends EntityMinecart { return this.minecartTNTFuse; } + @Override public EntityMinecart.EnumMinecartType getMinecartType() { return EntityMinecart.EnumMinecartType.TNT; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 10) { this.ignite(); @@ -153,6 +160,7 @@ public class EntityMinecartTNT extends EntityMinecart { return this.minecartTNTFuse > -1; } + @Override public void killMinecart(DamageSource damagesource) { super.killMinecart(damagesource); double d0 = this.motionX * this.motionX + this.motionZ * this.motionZ; @@ -170,6 +178,7 @@ public class EntityMinecartTNT extends EntityMinecart { * + Called every tick the minecart is on an activator rail. Args: x, y, z, is * the rail receiving power */ + @Override public void onActivatorRailPass(int var1, int var2, int var3, boolean flag) { if (flag && this.minecartTNTFuse < 0) { this.ignite(); @@ -180,6 +189,7 @@ public class EntityMinecartTNT extends EntityMinecart { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.minecartTNTFuse > 0) { @@ -202,6 +212,7 @@ public class EntityMinecartTNT extends EntityMinecart { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("TNTFuse", 99)) { @@ -210,6 +221,7 @@ public class EntityMinecartTNT extends EntityMinecart { } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -221,6 +233,7 @@ public class EntityMinecartTNT extends EntityMinecart { } } + @Override public boolean verifyExplosion(Explosion explosion, World world, BlockPos blockpos, IBlockState iblockstate, float f) { return !this.isIgnited() @@ -232,8 +245,9 @@ public class EntityMinecartTNT extends EntityMinecart { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("TNTFuse", this.minecartTNTFuse); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityPainting.java b/src/game/java/net/minecraft/entity/item/EntityPainting.java index 5ca6f013..3f08f558 100644 --- a/src/game/java/net/minecraft/entity/item/EntityPainting.java +++ b/src/game/java/net/minecraft/entity/item/EntityPainting.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPainting extends EntityHanging { public static enum EnumArt { @@ -109,10 +109,12 @@ public class EntityPainting extends EntityHanging { this.updateFacingWithBoundingBox(facing); } + @Override public int getHeightPixels() { return this.art.sizeY; } + @Override public int getWidthPixels() { return this.art.sizeX; } @@ -120,6 +122,7 @@ public class EntityPainting extends EntityHanging { /** * + Called when this entity is broken. Entity parameter may be null. */ + @Override public void onBroken(Entity entity) { if (this.worldObj.getGameRules().getBoolean("doEntityDrops")) { if (entity instanceof EntityPlayer) { @@ -136,6 +139,7 @@ public class EntityPainting extends EntityHanging { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { String s = nbttagcompound.getString("Motive"); @@ -157,11 +161,13 @@ public class EntityPainting extends EntityHanging { /** * + Sets the location and Yaw/Pitch of an entity in the world */ + @Override public void setLocationAndAngles(double d0, double d1, double d2, float var7, float var8) { BlockPos blockpos = this.hangingPosition.add(d0 - this.posX, d1 - this.posY, d2 - this.posZ); this.setPosition((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ()); } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float var7, float var8, int var9, boolean var10) { BlockPos blockpos = this.hangingPosition.add(d0 - this.posX, d1 - this.posY, d2 - this.posZ); @@ -171,8 +177,9 @@ public class EntityPainting extends EntityHanging { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setString("Motive", this.art.title); super.writeEntityToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityTNTPrimed.java b/src/game/java/net/minecraft/entity/item/EntityTNTPrimed.java index 451aea66..5c0e7cff 100644 --- a/src/game/java/net/minecraft/entity/item/EntityTNTPrimed.java +++ b/src/game/java/net/minecraft/entity/item/EntityTNTPrimed.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityTNTPrimed extends Entity { public int fuse; @@ -59,6 +59,7 @@ public class EntityTNTPrimed extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return !this.isDead; } @@ -67,10 +68,12 @@ public class EntityTNTPrimed extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { } @@ -79,6 +82,7 @@ public class EntityTNTPrimed extends Entity { this.worldObj.createExplosion(this, this.posX, this.posY + (double) (this.height / 16.0F), this.posZ, f, true); } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); if (fuse / 5 % 2 == 0) { @@ -87,6 +91,7 @@ public class EntityTNTPrimed extends Entity { return f; } + @Override public float getEyeHeight() { return 0.0F; } @@ -101,6 +106,7 @@ public class EntityTNTPrimed extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -132,10 +138,12 @@ public class EntityTNTPrimed extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.fuse = nbttagcompound.getByte("Fuse"); } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -150,7 +158,8 @@ public class EntityTNTPrimed extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override protected void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setByte("Fuse", (byte) this.fuse); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/item/EntityXPOrb.java b/src/game/java/net/minecraft/entity/item/EntityXPOrb.java index e8fed248..d5d21911 100644 --- a/src/game/java/net/minecraft/entity/item/EntityXPOrb.java +++ b/src/game/java/net/minecraft/entity/item/EntityXPOrb.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityXPOrb extends Entity { /** @@ -82,6 +82,7 @@ public class EntityXPOrb extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -99,6 +100,7 @@ public class EntityXPOrb extends Entity { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } @@ -107,6 +109,7 @@ public class EntityXPOrb extends Entity { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } @@ -115,13 +118,16 @@ public class EntityXPOrb extends Entity { * + Will deal the specified amount of damage to the entity if the entity isn't * immune to fire damage. Args: amountDamage */ + @Override protected void dealFireDamage(int i) { this.attackEntityFrom(DamageSource.inFire, (float) i); } + @Override protected void entityInit() { } + @Override public int getBrightnessForRender(float f) { float f1 = 0.5F; f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); @@ -136,6 +142,7 @@ public class EntityXPOrb extends Entity { return j | k << 16; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 0.25f; } @@ -168,6 +175,7 @@ public class EntityXPOrb extends Entity { * + Returns if this entity is in water and will end up adding the waters * velocity to the entity */ + @Override public boolean handleWaterMovement() { return this.worldObj.handleMaterialAcceleration(this.getEntityBoundingBox(), Material.water, this); } @@ -175,6 +183,7 @@ public class EntityXPOrb extends Entity { /** * + Called by a player entity when they collide with an entity */ + @Override public void onCollideWithPlayer(EntityPlayer entityplayer) { if (!this.worldObj.isRemote) { if (this.delayBeforeCanPickup == 0 && entityplayer.xpCooldown == 0) { @@ -192,6 +201,7 @@ public class EntityXPOrb extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.delayBeforeCanPickup > 0) { @@ -264,12 +274,14 @@ public class EntityXPOrb extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.xpOrbHealth = nbttagcompound.getShort("Health") & 255; this.xpOrbAge = nbttagcompound.getShort("Age"); this.xpValue = nbttagcompound.getShort("Value"); } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -284,9 +296,10 @@ public class EntityXPOrb extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("Health", (short) ((byte) this.xpOrbHealth)); nbttagcompound.setShort("Age", (short) this.xpOrbAge); nbttagcompound.setShort("Value", (short) this.xpValue); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityBlaze.java b/src/game/java/net/minecraft/entity/monster/EntityBlaze.java index 07056ecf..005848f7 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityBlaze.java +++ b/src/game/java/net/minecraft/entity/monster/EntityBlaze.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBlaze extends EntityMob { static class AIFireballAttack extends EntityAIBase { @@ -54,19 +54,23 @@ public class EntityBlaze extends EntityMob { this.setMutexBits(3); } + @Override public void resetTask() { this.blaze.setOnFire(false); } + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.blaze.getAttackTarget(); return entitylivingbase != null && entitylivingbase.isEntityAlive(); } + @Override public void startExecuting() { this.field_179467_b = 0; } + @Override public void updateTask() { --this.field_179468_c; EntityLivingBase entitylivingbase = this.blaze.getAttackTarget(); @@ -143,6 +147,7 @@ public class EntityBlaze extends EntityMob { this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6.0D); @@ -153,6 +158,7 @@ public class EntityBlaze extends EntityMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean flag, int i) { if (flag) { int j = this.rand.nextInt(2 + i); @@ -164,11 +170,13 @@ public class EntityBlaze extends EntityMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); } + @Override public void fall(float var1, float var2) { } @@ -179,10 +187,12 @@ public class EntityBlaze extends EntityMob { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float var1) { return 15728880; } @@ -190,14 +200,17 @@ public class EntityBlaze extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.blaze.death"; } + @Override protected Item getDropItem() { return Items.blaze_rod; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 1.0f; } @@ -205,6 +218,7 @@ public class EntityBlaze extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.blaze.hit"; } @@ -212,6 +226,7 @@ public class EntityBlaze extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.blaze.breathe"; } @@ -220,6 +235,7 @@ public class EntityBlaze extends EntityMob { * + Returns true if the entity is on fire. Used by render to add the fire * effect on rendering. */ + @Override public boolean isBurning() { return this.func_70845_n(); } @@ -227,6 +243,7 @@ public class EntityBlaze extends EntityMob { /** * + Checks to make sure the light is not too bright where the mob is spawning */ + @Override protected boolean isValidLightLevel() { return true; } @@ -236,6 +253,7 @@ public class EntityBlaze extends EntityMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (!this.onGround && this.motionY < 0.0D) { this.motionY *= 0.6D; @@ -259,6 +277,7 @@ public class EntityBlaze extends EntityMob { super.onLivingUpdate(); } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { float mag = 5.0f; @@ -277,6 +296,7 @@ public class EntityBlaze extends EntityMob { this.dataWatcher.updateObject(16, Byte.valueOf(b0)); } + @Override protected void updateAITasks() { if (this.isWet()) { this.attackEntityFrom(DamageSource.drown, 1.0F); @@ -297,4 +317,4 @@ public class EntityBlaze extends EntityMob { super.updateAITasks(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityCaveSpider.java b/src/game/java/net/minecraft/entity/monster/EntityCaveSpider.java index b2933b22..2d1677c6 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityCaveSpider.java +++ b/src/game/java/net/minecraft/entity/monster/EntityCaveSpider.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCaveSpider extends EntitySpider { public EntityCaveSpider(World worldIn) { @@ -39,11 +39,13 @@ public class EntityCaveSpider extends EntitySpider { this.setSize(0.7F, 0.5F); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(12.0D); } + @Override public boolean attackEntityAsMob(Entity entity) { if (super.attackEntityAsMob(entity)) { if (entity instanceof EntityLivingBase) { @@ -65,6 +67,7 @@ public class EntityCaveSpider extends EntitySpider { } } + @Override public float getEyeHeight() { return 0.45F; } @@ -74,7 +77,8 @@ public class EntityCaveSpider extends EntitySpider { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance var1, IEntityLivingData ientitylivingdata) { return ientitylivingdata; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityCreeper.java b/src/game/java/net/minecraft/entity/monster/EntityCreeper.java index f8c33400..2e68d381 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityCreeper.java +++ b/src/game/java/net/minecraft/entity/monster/EntityCreeper.java @@ -26,13 +26,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCreeper extends EntityMob { private int lastActiveTime; @@ -69,15 +69,18 @@ public class EntityCreeper extends EntityMob { this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); } + @Override public boolean attackEntityAsMob(Entity var1) { return true; } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) -1)); @@ -100,6 +103,7 @@ public class EntityCreeper extends EntityMob { } + @Override public void fall(float f, float f1) { super.fall(f, f1); this.timeSinceIgnited = (int) ((float) this.timeSinceIgnited + f * 1.5F); @@ -132,14 +136,17 @@ public class EntityCreeper extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.creeper.death"; } + @Override protected Item getDropItem() { return Items.gunpowder; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { float f = super.getEaglerDynamicLightsValueSimple(partialTicks); float ff = getCreeperFlashIntensity(partialTicks); @@ -152,6 +159,7 @@ public class EntityCreeper extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.creeper.say"; } @@ -160,6 +168,7 @@ public class EntityCreeper extends EntityMob { * + The maximum height from where the entity is alowed to jump (used in * pathfinder) */ + @Override public int getMaxFallHeight() { return this.getAttackTarget() == null ? 3 : 3 + (int) (this.getHealth() - 1.0F); } @@ -183,6 +192,7 @@ public class EntityCreeper extends EntityMob { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override protected boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.flint_and_steel) { @@ -209,6 +219,7 @@ public class EntityCreeper extends EntityMob { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { super.onDeath(damagesource); if (damagesource.getEntity() instanceof EntitySkeleton) { @@ -228,6 +239,7 @@ public class EntityCreeper extends EntityMob { /** * + Called when a lightning bolt hits the entity. */ + @Override public void onStruckByLightning(EntityLightningBolt entitylightningbolt) { super.onStruckByLightning(entitylightningbolt); this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); @@ -236,6 +248,7 @@ public class EntityCreeper extends EntityMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (this.isEntityAlive()) { this.lastActiveTime = this.timeSinceIgnited; @@ -265,6 +278,7 @@ public class EntityCreeper extends EntityMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.dataWatcher.updateObject(17, Byte.valueOf((byte) (nbttagcompound.getBoolean("powered") ? 1 : 0))); @@ -282,6 +296,7 @@ public class EntityCreeper extends EntityMob { } + @Override protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, @@ -305,6 +320,7 @@ public class EntityCreeper extends EntityMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); if (this.dataWatcher.getWatchableObjectByte(17) == 1) { @@ -315,4 +331,4 @@ public class EntityCreeper extends EntityMob { nbttagcompound.setByte("ExplosionRadius", (byte) this.explosionRadius); nbttagcompound.setBoolean("ignited", this.hasIgnited()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityEnderman.java b/src/game/java/net/minecraft/entity/monster/EntityEnderman.java index 38d16b11..c839d773 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityEnderman.java +++ b/src/game/java/net/minecraft/entity/monster/EntityEnderman.java @@ -44,13 +44,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -62,7 +62,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEnderman extends EntityMob { static class AIFindPlayer extends EntityAINearestAttackableTarget { @@ -76,6 +76,7 @@ public class EntityEnderman extends EntityMob { this.enderman = parEntityEnderman; } + @Override public boolean continueExecuting() { if (this.player != null) { if (!this.enderman.shouldAttackPlayer(this.player)) { @@ -90,6 +91,7 @@ public class EntityEnderman extends EntityMob { } } + @Override public void resetTask() { this.player = null; this.enderman.setScreaming(false); @@ -99,6 +101,7 @@ public class EntityEnderman extends EntityMob { super.resetTask(); } + @Override public boolean shouldExecute() { double d0 = this.getTargetDistance(); List list = this.taskOwner.worldObj.getEntitiesWithinAABB(EntityPlayer.class, @@ -112,11 +115,13 @@ public class EntityEnderman extends EntityMob { } } + @Override public void startExecuting() { this.field_179450_h = 5; this.field_179451_i = 0; } + @Override public void updateTask() { if (this.player != null) { if (--this.field_179450_h <= 0) { @@ -164,12 +169,14 @@ public class EntityEnderman extends EntityMob { : (parBlock3.getMaterial() == Material.air ? false : parBlock3.isFullCube())); } + @Override public boolean shouldExecute() { return !this.enderman.worldObj.getGameRules().getBoolean("mobGriefing") ? false : (this.enderman.getHeldBlockState().getBlock().getMaterial() == Material.air ? false : this.enderman.getRNG().nextInt(2000) == 0); } + @Override public void updateTask() { EaglercraftRandom random = this.enderman.getRNG(); World world = this.enderman.worldObj; @@ -194,12 +201,14 @@ public class EntityEnderman extends EntityMob { this.enderman = parEntityEnderman; } + @Override public boolean shouldExecute() { return !this.enderman.worldObj.getGameRules().getBoolean("mobGriefing") ? false : (this.enderman.getHeldBlockState().getBlock().getMaterial() != Material.air ? false : this.enderman.getRNG().nextInt(20) == 0); } + @Override public void updateTask() { EaglercraftRandom random = this.enderman.getRNG(); World world = this.enderman.worldObj; @@ -259,12 +268,14 @@ public class EntityEnderman extends EntityMob { this.targetTasks.addTask(2, new EntityEnderman.AIFindPlayer(this)); this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityEndermite.class, 10, true, false, new Predicate() { + @Override public boolean apply(EntityEndermite entityendermite) { return entityendermite.isSpawnedByPlayer(); } })); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D); @@ -276,6 +287,7 @@ public class EntityEnderman extends EntityMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -319,6 +331,7 @@ public class EntityEnderman extends EntityMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { Item item = this.getDropItem(); if (item != null) { @@ -331,6 +344,7 @@ public class EntityEnderman extends EntityMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Short.valueOf((short) 0)); @@ -341,14 +355,17 @@ public class EntityEnderman extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.endermen.death"; } + @Override protected Item getDropItem() { return Items.ender_pearl; } + @Override public float getEyeHeight() { return 2.55F; } @@ -363,6 +380,7 @@ public class EntityEnderman extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.endermen.hit"; } @@ -370,6 +388,7 @@ public class EntityEnderman extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return this.isScreaming() ? "mob.endermen.scream" : "mob.endermen.idle"; } @@ -383,6 +402,7 @@ public class EntityEnderman extends EntityMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isRemote) { for (int i = 0; i < 2; ++i) { @@ -402,6 +422,7 @@ public class EntityEnderman extends EntityMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); IBlockState iblockstate; @@ -530,6 +551,7 @@ public class EntityEnderman extends EntityMob { return this.teleportTo(d1, d2, d3); } + @Override protected void updateAITasks() { if (this.isWet()) { this.attackEntityFrom(DamageSource.drown, 1.0F); @@ -556,10 +578,11 @@ public class EntityEnderman extends EntityMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); IBlockState iblockstate = this.getHeldBlockState(); nbttagcompound.setShort("carried", (short) Block.getIdFromBlock(iblockstate.getBlock())); nbttagcompound.setShort("carriedData", (short) iblockstate.getBlock().getMetaFromState(iblockstate)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityEndermite.java b/src/game/java/net/minecraft/entity/monster/EntityEndermite.java index c982717d..9b84cc60 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityEndermite.java +++ b/src/game/java/net/minecraft/entity/monster/EntityEndermite.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEndermite extends EntityMob { private int lifetime = 0; @@ -57,6 +57,7 @@ public class EntityEndermite extends EntityMob { this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(8.0D); @@ -68,6 +69,7 @@ public class EntityEndermite extends EntityMob { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } @@ -76,6 +78,7 @@ public class EntityEndermite extends EntityMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { if (super.getCanSpawnHere()) { EntityPlayer entityplayer = this.worldObj.getClosestPlayerToEntity(this, 5.0D); @@ -88,6 +91,7 @@ public class EntityEndermite extends EntityMob { /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.ARTHROPOD; } @@ -95,14 +99,17 @@ public class EntityEndermite extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.silverfish.kill"; } + @Override protected Item getDropItem() { return null; } + @Override public float getEyeHeight() { return 0.1F; } @@ -110,6 +117,7 @@ public class EntityEndermite extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.silverfish.hit"; } @@ -117,6 +125,7 @@ public class EntityEndermite extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.silverfish.say"; } @@ -128,6 +137,7 @@ public class EntityEndermite extends EntityMob { /** * + Checks to make sure the light is not too bright where the mob is spawning */ + @Override protected boolean isValidLightLevel() { return true; } @@ -137,6 +147,7 @@ public class EntityEndermite extends EntityMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (this.worldObj.isRemote) { @@ -163,11 +174,13 @@ public class EntityEndermite extends EntityMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.renderYawOffset = this.rotationYaw; super.onUpdate(); } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.silverfish.step", 0.15F, 1.0F); } @@ -175,6 +188,7 @@ public class EntityEndermite extends EntityMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.lifetime = nbttagcompound.getInteger("Lifetime"); @@ -191,9 +205,10 @@ public class EntityEndermite extends EntityMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("Lifetime", this.lifetime); nbttagcompound.setBoolean("PlayerSpawned", this.playerSpawned); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityGhast.java b/src/game/java/net/minecraft/entity/monster/EntityGhast.java index a6df9efe..3ae67946 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityGhast.java +++ b/src/game/java/net/minecraft/entity/monster/EntityGhast.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityGhast extends EntityFlying implements IMob { static class AIFireballAttack extends EntityAIBase { @@ -53,18 +53,22 @@ public class EntityGhast extends EntityFlying implements IMob { this.parentEntity = parEntityGhast; } + @Override public void resetTask() { this.parentEntity.setAttacking(false); } + @Override public boolean shouldExecute() { return this.parentEntity.getAttackTarget() != null; } + @Override public void startExecuting() { this.attackTimer = 0; } + @Override public void updateTask() { EntityLivingBase entitylivingbase = this.parentEntity.getAttackTarget(); double d0 = 64.0D; @@ -110,10 +114,12 @@ public class EntityGhast extends EntityFlying implements IMob { this.setMutexBits(2); } + @Override public boolean shouldExecute() { return true; } + @Override public void updateTask() { if (this.parentEntity.getAttackTarget() == null) { this.parentEntity.renderYawOffset = this.parentEntity.rotationYaw = -((float) MathHelper @@ -140,10 +146,12 @@ public class EntityGhast extends EntityFlying implements IMob { this.setMutexBits(1); } + @Override public boolean continueExecuting() { return false; } + @Override public boolean shouldExecute() { EntityMoveHelper entitymovehelper = this.parentEntity.getMoveHelper(); if (!entitymovehelper.isUpdating()) { @@ -157,6 +165,7 @@ public class EntityGhast extends EntityFlying implements IMob { } } + @Override public void startExecuting() { EaglercraftRandom random = this.parentEntity.getRNG(); double d0 = this.parentEntity.posX + (double) ((random.nextFloat() * 2.0F - 1.0F) * 16.0F); @@ -191,6 +200,7 @@ public class EntityGhast extends EntityFlying implements IMob { return true; } + @Override public void onUpdateMoveHelper() { if (this.update) { double d0 = this.posX - this.parentEntity.posX; @@ -230,6 +240,7 @@ public class EntityGhast extends EntityFlying implements IMob { this.targetTasks.addTask(1, new EntityAIFindEntityNearestPlayer(this)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); @@ -239,6 +250,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -255,6 +267,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(2) + this.rand.nextInt(1 + i); @@ -270,6 +283,7 @@ public class EntityGhast extends EntityFlying implements IMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -279,6 +293,7 @@ public class EntityGhast extends EntityFlying implements IMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.rand.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL; @@ -287,14 +302,17 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.ghast.death"; } + @Override protected Item getDropItem() { return Items.gunpowder; } + @Override public float getEyeHeight() { return 2.6F; } @@ -306,6 +324,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.ghast.scream"; } @@ -313,6 +332,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.ghast.moan"; } @@ -320,6 +340,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Will return how many at most can spawn in a chunk at once. */ + @Override public int getMaxSpawnedInChunk() { return 1; } @@ -327,6 +348,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 10.0F; } @@ -338,6 +360,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote && this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL) { @@ -349,6 +372,7 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("ExplosionPower", 99)) { @@ -364,8 +388,9 @@ public class EntityGhast extends EntityFlying implements IMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("ExplosionPower", this.explosionStrength); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityGiantZombie.java b/src/game/java/net/minecraft/entity/monster/EntityGiantZombie.java index 87309586..f5fca2ea 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityGiantZombie.java +++ b/src/game/java/net/minecraft/entity/monster/EntityGiantZombie.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityGiantZombie extends EntityZombie { public EntityGiantZombie(World worldIn) { @@ -34,6 +34,7 @@ public class EntityGiantZombie extends EntityZombie { this.setSize(this.width * 6.0F, this.height * 6.0F); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100.0D); @@ -41,11 +42,13 @@ public class EntityGiantZombie extends EntityZombie { this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(50.0D); } + @Override public float getBlockPathWeight(BlockPos blockpos) { return this.worldObj.getLightBrightness(blockpos) - 0.5F; } + @Override public float getEyeHeight() { return 10.440001F; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityGolem.java b/src/game/java/net/minecraft/entity/monster/EntityGolem.java index 84d26f40..c4fd2aa1 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityGolem.java +++ b/src/game/java/net/minecraft/entity/monster/EntityGolem.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityGolem extends EntityCreature implements IAnimals { public EntityGolem(World worldIn) { @@ -35,16 +35,19 @@ public abstract class EntityGolem extends EntityCreature implements IAnimals { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return false; } + @Override public void fall(float var1, float var2) { } /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "none"; } @@ -52,6 +55,7 @@ public abstract class EntityGolem extends EntityCreature implements IAnimals { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "none"; } @@ -59,6 +63,7 @@ public abstract class EntityGolem extends EntityCreature implements IAnimals { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "none"; } @@ -67,7 +72,8 @@ public abstract class EntityGolem extends EntityCreature implements IAnimals { * + Get number of ticks, at least during which the living entity will be * silent. */ + @Override public int getTalkInterval() { return 120; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityGuardian.java b/src/game/java/net/minecraft/entity/monster/EntityGuardian.java index 229101c5..74337548 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityGuardian.java +++ b/src/game/java/net/minecraft/entity/monster/EntityGuardian.java @@ -43,13 +43,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -61,7 +61,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityGuardian extends EntityMob { static class AIGuardianAttack extends EntityAIBase { @@ -73,22 +73,26 @@ public class EntityGuardian extends EntityMob { this.setMutexBits(3); } + @Override public boolean continueExecuting() { return super.continueExecuting() && (this.theEntity.isElder() || this.theEntity.getDistanceSqToEntity(this.theEntity.getAttackTarget()) > 9.0D); } + @Override public void resetTask() { this.theEntity.setTargetedEntity(0); this.theEntity.setAttackTarget((EntityLivingBase) null); this.theEntity.wander.makeUpdate(); } + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.theEntity.getAttackTarget(); return entitylivingbase != null && entitylivingbase.isEntityAlive(); } + @Override public void startExecuting() { this.tickCounter = -10; this.theEntity.getNavigator().clearPathEntity(); @@ -96,6 +100,7 @@ public class EntityGuardian extends EntityMob { this.theEntity.isAirBorne = true; } + @Override public void updateTask() { EntityLivingBase entitylivingbase = this.theEntity.getAttackTarget(); this.theEntity.getNavigator().clearPathEntity(); @@ -140,6 +145,7 @@ public class EntityGuardian extends EntityMob { this.entityGuardian = parEntityGuardian; } + @Override public void onUpdateMoveHelper() { if (this.update && !this.entityGuardian.getNavigator().noPath()) { double d0 = this.posX - this.entityGuardian.posX; @@ -195,6 +201,7 @@ public class EntityGuardian extends EntityMob { this.parentEntity = parEntityGuardian; } + @Override public boolean apply(EntityLivingBase entitylivingbase) { return (entitylivingbase instanceof EntityPlayer || entitylivingbase instanceof EntitySquid) && entitylivingbase.getDistanceSqToEntity(this.parentEntity) > 9.0D; @@ -236,12 +243,14 @@ public class EntityGuardian extends EntityMob { /** * + Causes this Entity to drop a random item. */ + @Override protected void addRandomDrop() { ItemStack itemstack = ((WeightedRandomFishable) WeightedRandom.getRandomItem(this.rand, EntityFishHook.func_174855_j())).getItemStack(this.rand); this.entityDropItem(itemstack, 1.0F); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6.0D); @@ -253,6 +262,7 @@ public class EntityGuardian extends EntityMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (!this.func_175472_n() && !damagesource.isMagicDamage() && damagesource.getSourceOfDamage() instanceof EntityLivingBase) { @@ -271,6 +281,7 @@ public class EntityGuardian extends EntityMob { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } @@ -278,6 +289,7 @@ public class EntityGuardian extends EntityMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean flag, int i) { int j = this.rand.nextInt(3) + this.rand.nextInt(i + 1); if (j > 0) { @@ -296,6 +308,7 @@ public class EntityGuardian extends EntityMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Integer.valueOf(0)); @@ -326,6 +339,7 @@ public class EntityGuardian extends EntityMob { return ((float) this.field_175479_bo + parFloat1) / (float) this.func_175464_ck(); } + @Override public float getBlockPathWeight(BlockPos blockpos) { return this.worldObj.getBlockState(blockpos).getBlock().getMaterial() == Material.water ? 10.0F + this.worldObj.getLightBrightness(blockpos) - 0.5F @@ -336,6 +350,7 @@ public class EntityGuardian extends EntityMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return (this.rand.nextInt(20) == 0 || !this.worldObj.canBlockSeeSky(new BlockPos(this))) && super.getCanSpawnHere(); @@ -344,11 +359,13 @@ public class EntityGuardian extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return !this.isInWater() ? "mob.guardian.land.death" : (this.isElder() ? "mob.guardian.elder.death" : "mob.guardian.death"); } + @Override public float getEyeHeight() { return this.height * 0.5F; } @@ -356,6 +373,7 @@ public class EntityGuardian extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return !this.isInWater() ? "mob.guardian.land.hit" : (this.isElder() ? "mob.guardian.elder.hit" : "mob.guardian.hit"); @@ -364,6 +382,7 @@ public class EntityGuardian extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return !this.isInWater() ? "mob.guardian.land.idle" : (this.isElder() ? "mob.guardian.elder.idle" : "mob.guardian.idle"); @@ -372,6 +391,7 @@ public class EntityGuardian extends EntityMob { /** * + Returns new PathNavigateGround instance */ + @Override protected PathNavigate getNewNavigator(World world) { return new PathNavigateSwimmer(this, world); } @@ -380,6 +400,7 @@ public class EntityGuardian extends EntityMob { * + Get number of ticks, at least during which the living entity will be * silent. */ + @Override public int getTalkInterval() { return 160; } @@ -408,6 +429,7 @@ public class EntityGuardian extends EntityMob { * + The speed it takes to move the entityliving's rotationPitch through the * faceEntity method. This is only currently use in wolves. */ + @Override public int getVerticalFaceSpeed() { return 180; } @@ -423,6 +445,7 @@ public class EntityGuardian extends EntityMob { /** * + Checks that the entity is not colliding with any blocks / liquids */ + @Override public boolean isNotColliding() { return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty(); @@ -438,6 +461,7 @@ public class EntityGuardian extends EntityMob { /** * + Checks to make sure the light is not too bright where the mob is spawning */ + @Override protected boolean isValidLightLevel() { return true; } @@ -445,6 +469,7 @@ public class EntityGuardian extends EntityMob { /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float f, float f1) { if (this.isServerWorld()) { if (this.isInWater()) { @@ -465,6 +490,7 @@ public class EntityGuardian extends EntityMob { } + @Override public void onDataWatcherUpdate(int i) { super.onDataWatcherUpdate(i); if (i == 16) { @@ -483,6 +509,7 @@ public class EntityGuardian extends EntityMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isRemote) { this.field_175484_c = this.field_175482_b; @@ -577,6 +604,7 @@ public class EntityGuardian extends EntityMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setElder(nbttagcompound.getBoolean("Elder")); @@ -624,6 +652,7 @@ public class EntityGuardian extends EntityMob { this.dataWatcher.updateObject(17, Integer.valueOf(entityId)); } + @Override protected void updateAITasks() { super.updateAITasks(); if (this.isElder()) { @@ -636,6 +665,7 @@ public class EntityGuardian extends EntityMob { List lst = this.worldObj.getPlayers(EntityPlayerMP.class, new Predicate() { + @Override public boolean apply(EntityPlayerMP entityplayermp1) { return EntityGuardian.this.getDistanceSqToEntity(entityplayermp1) < 2500.0D && entityplayermp1.theItemInWorldManager.survivalOrAdventure(); @@ -662,8 +692,9 @@ public class EntityGuardian extends EntityMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("Elder", this.isElder()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityIronGolem.java b/src/game/java/net/minecraft/entity/monster/EntityIronGolem.java index 74e55cf8..ec84ecde 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityIronGolem.java +++ b/src/game/java/net/minecraft/entity/monster/EntityIronGolem.java @@ -38,13 +38,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -56,7 +56,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityIronGolem extends EntityGolem { static class AINearestAttackableTargetNonCreeper @@ -65,6 +65,7 @@ public class EntityIronGolem extends EntityGolem { boolean parFlag, boolean parFlag2, final Predicate parPredicate) { super(creature, classTarget, chance, parFlag, parFlag2, parPredicate); this.targetEntitySelector = new Predicate() { + @Override public boolean apply(T entitylivingbase) { if (parPredicate != null && !parPredicate.apply(entitylivingbase)) { return false; @@ -122,12 +123,14 @@ public class EntityIronGolem extends EntityGolem { 10, false, true, IMob.VISIBLE_MOB_SELECTOR)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); } + @Override public boolean attackEntityAsMob(Entity entity) { this.attackTimer = 10; this.worldObj.setEntityState(this, (byte) 4); @@ -144,11 +147,13 @@ public class EntityIronGolem extends EntityGolem { /** * + Returns true if this entity can attack entities of the specified class. */ + @Override public boolean canAttackClass(Class oclass) { return this.isPlayerCreated() && EntityPlayer.class.isAssignableFrom(oclass) ? false : (oclass == EntityCreeper.class ? false : super.canAttackClass(oclass)); } + @Override protected void collideWithEntity(Entity entity) { if (entity instanceof IMob && !(entity instanceof EntityCreeper) && this.getRNG().nextInt(20) == 0) { this.setAttackTarget((EntityLivingBase) entity); @@ -160,6 +165,7 @@ public class EntityIronGolem extends EntityGolem { /** * + Decrements the entity's air supply when underwater */ + @Override protected int decreaseAirSupply(int i) { return i; } @@ -167,6 +173,7 @@ public class EntityIronGolem extends EntityGolem { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int var2) { int i = this.rand.nextInt(3); @@ -183,6 +190,7 @@ public class EntityIronGolem extends EntityGolem { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -195,6 +203,7 @@ public class EntityIronGolem extends EntityGolem { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.irongolem.death"; } @@ -206,6 +215,7 @@ public class EntityIronGolem extends EntityGolem { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.irongolem.hit"; } @@ -214,6 +224,7 @@ public class EntityIronGolem extends EntityGolem { return this.villageObj; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 4) { this.attackTimer = 10; @@ -233,6 +244,7 @@ public class EntityIronGolem extends EntityGolem { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { if (!this.isPlayerCreated() && this.attackingPlayer != null && this.villageObj != null) { this.villageObj.setReputationForPlayer(this.attackingPlayer.getName(), -5); @@ -246,6 +258,7 @@ public class EntityIronGolem extends EntityGolem { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (this.attackTimer > 0) { @@ -275,6 +288,7 @@ public class EntityIronGolem extends EntityGolem { } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.irongolem.walk", 1.0F, 1.0F); } @@ -282,6 +296,7 @@ public class EntityIronGolem extends EntityGolem { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setPlayerCreated(nbttagcompound.getBoolean("PlayerCreated")); @@ -302,6 +317,7 @@ public class EntityIronGolem extends EntityGolem { } + @Override protected void updateAITasks() { if (--this.homeCheckTimer <= 0) { this.homeCheckTimer = 70 + this.rand.nextInt(50); @@ -320,8 +336,9 @@ public class EntityIronGolem extends EntityGolem { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("PlayerCreated", this.isPlayerCreated()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityMagmaCube.java b/src/game/java/net/minecraft/entity/monster/EntityMagmaCube.java index 2a577c4e..cfc01062 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityMagmaCube.java +++ b/src/game/java/net/minecraft/entity/monster/EntityMagmaCube.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMagmaCube extends EntitySlime { public EntityMagmaCube(World worldIn) { @@ -36,10 +36,12 @@ public class EntityMagmaCube extends EntitySlime { this.isImmuneToFire = true; } + @Override protected void alterSquishAmount() { this.squishAmount *= 0.9F; } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000000298023224D); @@ -49,10 +51,12 @@ public class EntityMagmaCube extends EntitySlime { * + Indicates weather the slime is able to damage the player (based upon the * slime's size) */ + @Override protected boolean canDamagePlayer() { return true; } + @Override protected EntitySlime createInstance() { return new EntityMagmaCube(this.worldObj); } @@ -60,6 +64,7 @@ public class EntityMagmaCube extends EntitySlime { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { Item item = this.getDropItem(); if (item != null && this.getSlimeSize() > 1) { @@ -75,12 +80,14 @@ public class EntityMagmaCube extends EntitySlime { } + @Override public void fall(float var1, float var2) { } /** * + Gets the amount of damage dealt to the player when "attacked" by the slime. */ + @Override protected int getAttackStrength() { return super.getAttackStrength() + 2; } @@ -88,10 +95,12 @@ public class EntityMagmaCube extends EntitySlime { /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float var1) { return 15728880; } @@ -100,14 +109,17 @@ public class EntityMagmaCube extends EntitySlime { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL; } + @Override protected Item getDropItem() { return Items.magma_cream; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 1.0f; } @@ -115,6 +127,7 @@ public class EntityMagmaCube extends EntitySlime { /** * + Gets the amount of time the slime needs to wait between jumps. */ + @Override protected int getJumpDelay() { return super.getJumpDelay() * 4; } @@ -122,10 +135,12 @@ public class EntityMagmaCube extends EntitySlime { /** * + Returns the name of the sound played when the slime jumps. */ + @Override protected String getJumpSound() { return this.getSlimeSize() > 1 ? "mob.magmacube.big" : "mob.magmacube.small"; } + @Override protected EnumParticleTypes getParticleType() { return EnumParticleTypes.FLAME; } @@ -134,10 +149,12 @@ public class EntityMagmaCube extends EntitySlime { * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { return this.getSlimeSize() * 3; } + @Override protected void handleJumpLava() { this.motionY = (double) (0.22F + (float) this.getSlimeSize() * 0.05F); this.isAirBorne = true; @@ -147,6 +164,7 @@ public class EntityMagmaCube extends EntitySlime { * + Returns true if the entity is on fire. Used by render to add the fire * effect on rendering. */ + @Override public boolean isBurning() { return false; } @@ -154,6 +172,7 @@ public class EntityMagmaCube extends EntitySlime { /** * + Checks that the entity is not colliding with any blocks / liquids */ + @Override public boolean isNotColliding() { return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty() @@ -163,6 +182,7 @@ public class EntityMagmaCube extends EntitySlime { /** * + Causes this entity to do an upwards motion (jumping). */ + @Override protected void jump() { this.motionY = (double) (0.42F + (float) this.getSlimeSize() * 0.1F); this.isAirBorne = true; @@ -172,7 +192,8 @@ public class EntityMagmaCube extends EntitySlime { * + Returns true if the slime makes a sound when it lands after a jump (based * upon the slime's size) */ + @Override protected boolean makesSoundOnLand() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityMob.java b/src/game/java/net/minecraft/entity/monster/EntityMob.java index df724c70..6268d2fc 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityMob.java +++ b/src/game/java/net/minecraft/entity/monster/EntityMob.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityMob extends EntityCreature implements IMob { public EntityMob(World worldIn) { @@ -41,11 +41,13 @@ public abstract class EntityMob extends EntityCreature implements IMob { this.experienceValue = 5; } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage); } + @Override public boolean attackEntityAsMob(Entity entity) { float f = (float) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); int i = 0; @@ -79,6 +81,7 @@ public abstract class EntityMob extends EntityCreature implements IMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -93,10 +96,12 @@ public abstract class EntityMob extends EntityCreature implements IMob { /** * + Entity won't drop items or experience points if this returns false */ + @Override protected boolean canDropLoot() { return true; } + @Override public float getBlockPathWeight(BlockPos blockpos) { return 0.5F - this.worldObj.getLightBrightness(blockpos); } @@ -105,6 +110,7 @@ public abstract class EntityMob extends EntityCreature implements IMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && this.isValidLightLevel() && super.getCanSpawnHere(); @@ -113,10 +119,12 @@ public abstract class EntityMob extends EntityCreature implements IMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "game.hostile.die"; } + @Override protected String getFallSoundString(int i) { return i > 4 ? "game.hostile.hurt.fall.big" : "game.hostile.hurt.fall.small"; } @@ -124,14 +132,17 @@ public abstract class EntityMob extends EntityCreature implements IMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "game.hostile.hurt"; } + @Override protected String getSplashSound() { return "game.hostile.swim.splash"; } + @Override protected String getSwimSound() { return "game.hostile.swim"; } @@ -161,6 +172,7 @@ public abstract class EntityMob extends EntityCreature implements IMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { this.updateArmSwingProgress(); float f = this.getBrightness(1.0F); @@ -174,6 +186,7 @@ public abstract class EntityMob extends EntityCreature implements IMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote && this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL) { @@ -181,4 +194,4 @@ public abstract class EntityMob extends EntityCreature implements IMob { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityPigZombie.java b/src/game/java/net/minecraft/entity/monster/EntityPigZombie.java index 6ebc3775..52b0066a 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityPigZombie.java +++ b/src/game/java/net/minecraft/entity/monster/EntityPigZombie.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPigZombie extends EntityZombie { static class AIHurtByAggressor extends EntityAIHurtByTarget { @@ -48,6 +48,7 @@ public class EntityPigZombie extends EntityZombie { super(parEntityPigZombie, true, new Class[0]); } + @Override protected void setEntityAttackTarget(EntityCreature entitycreature, EntityLivingBase entitylivingbase) { super.setEntityAttackTarget(entitycreature, entitylivingbase); if (entitycreature instanceof EntityPigZombie) { @@ -62,6 +63,7 @@ public class EntityPigZombie extends EntityZombie { super(parEntityPigZombie, EntityPlayer.class, true); } + @Override public boolean shouldExecute() { return ((EntityPigZombie) this.taskOwner).isAngry() && super.shouldExecute(); } @@ -85,10 +87,12 @@ public class EntityPigZombie extends EntityZombie { /** * + Causes this Entity to drop a random item. */ + @Override protected void addRandomDrop() { this.dropItem(Items.gold_ingot, 1); } + @Override protected void applyEntityAI() { this.targetTasks.addTask(1, new EntityPigZombie.AIHurtByAggressor(this)); @@ -96,6 +100,7 @@ public class EntityPigZombie extends EntityZombie { } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(reinforcementChance).setBaseValue(0.0D); @@ -106,6 +111,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -135,6 +141,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(2 + i); @@ -154,6 +161,7 @@ public class EntityPigZombie extends EntityZombie { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL; } @@ -161,6 +169,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.zombiepig.zpigdeath"; } @@ -168,6 +177,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.zombiepig.zpighurt"; } @@ -175,6 +185,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.zombiepig.zpig"; } @@ -183,6 +194,7 @@ public class EntityPigZombie extends EntityZombie { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer var1) { return false; } @@ -194,6 +206,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Checks that the entity is not colliding with any blocks / liquids */ + @Override public boolean isNotColliding() { return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty() @@ -205,6 +218,7 @@ public class EntityPigZombie extends EntityZombie { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -215,6 +229,7 @@ public class EntityPigZombie extends EntityZombie { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); } @@ -222,6 +237,7 @@ public class EntityPigZombie extends EntityZombie { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.angerLevel = nbttagcompound.getShort("Anger"); @@ -241,10 +257,12 @@ public class EntityPigZombie extends EntityZombie { /** * + Gives armor or weapon for entity based on given DifficultyInstance */ + @Override protected void setEquipmentBasedOnDifficulty(DifficultyInstance var1) { this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword)); } + @Override public void setRevengeTarget(EntityLivingBase entitylivingbase) { super.setRevengeTarget(entitylivingbase); if (entitylivingbase != null) { @@ -253,6 +271,7 @@ public class EntityPigZombie extends EntityZombie { } + @Override protected void updateAITasks() { IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed); if (this.isAngry()) { @@ -283,6 +302,7 @@ public class EntityPigZombie extends EntityZombie { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setShort("Anger", (short) this.angerLevel); @@ -293,4 +313,4 @@ public class EntityPigZombie extends EntityZombie { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntitySilverfish.java b/src/game/java/net/minecraft/entity/monster/EntitySilverfish.java index 71271e9c..c2f07774 100644 --- a/src/game/java/net/minecraft/entity/monster/EntitySilverfish.java +++ b/src/game/java/net/minecraft/entity/monster/EntitySilverfish.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySilverfish extends EntityMob { static class AIHideInStone extends EntityAIWander { @@ -56,10 +56,12 @@ public class EntitySilverfish extends EntityMob { this.setMutexBits(1); } + @Override public boolean continueExecuting() { return this.field_179484_c ? false : super.continueExecuting(); } + @Override public boolean shouldExecute() { if (this.field_179485_a.getAttackTarget() != null) { return false; @@ -83,6 +85,7 @@ public class EntitySilverfish extends EntityMob { } } + @Override public void startExecuting() { if (!this.field_179484_c) { super.startExecuting(); @@ -117,10 +120,12 @@ public class EntitySilverfish extends EntityMob { } + @Override public boolean shouldExecute() { return this.field_179463_b > 0; } + @Override public void updateTask() { --this.field_179463_b; if (this.field_179463_b <= 0) { @@ -168,6 +173,7 @@ public class EntitySilverfish extends EntityMob { this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(8.0D); @@ -178,6 +184,7 @@ public class EntitySilverfish extends EntityMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -194,10 +201,12 @@ public class EntitySilverfish extends EntityMob { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override public float getBlockPathWeight(BlockPos blockpos) { return this.worldObj.getBlockState(blockpos.down()).getBlock() == Blocks.stone ? 10.0F : super.getBlockPathWeight(blockpos); @@ -207,6 +216,7 @@ public class EntitySilverfish extends EntityMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { if (super.getCanSpawnHere()) { EntityPlayer entityplayer = this.worldObj.getClosestPlayerToEntity(this, 5.0D); @@ -219,6 +229,7 @@ public class EntitySilverfish extends EntityMob { /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.ARTHROPOD; } @@ -226,14 +237,17 @@ public class EntitySilverfish extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.silverfish.kill"; } + @Override protected Item getDropItem() { return null; } + @Override public float getEyeHeight() { return 0.1F; } @@ -241,6 +255,7 @@ public class EntitySilverfish extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.silverfish.hit"; } @@ -248,6 +263,7 @@ public class EntitySilverfish extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.silverfish.say"; } @@ -255,6 +271,7 @@ public class EntitySilverfish extends EntityMob { /** * + Returns the Y Offset of this entity. */ + @Override public double getYOffset() { return 0.2D; } @@ -262,6 +279,7 @@ public class EntitySilverfish extends EntityMob { /** * + Checks to make sure the light is not too bright where the mob is spawning */ + @Override protected boolean isValidLightLevel() { return true; } @@ -269,12 +287,14 @@ public class EntitySilverfish extends EntityMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.renderYawOffset = this.rotationYaw; super.onUpdate(); } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.silverfish.step", 0.15F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntitySkeleton.java b/src/game/java/net/minecraft/entity/monster/EntitySkeleton.java index c27ff7cf..0b15ef6c 100644 --- a/src/game/java/net/minecraft/entity/monster/EntitySkeleton.java +++ b/src/game/java/net/minecraft/entity/monster/EntitySkeleton.java @@ -43,13 +43,13 @@ import net.minecraft.world.WorldProviderHell; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -61,7 +61,7 @@ import net.minecraft.world.WorldProviderHell; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 1.0D, 20, 60, 15.0F); @@ -89,6 +89,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Causes this Entity to drop a random item. */ + @Override protected void addRandomDrop() { if (this.getSkeletonType() == 1) { this.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); @@ -96,11 +97,13 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D); } + @Override public boolean attackEntityAsMob(Entity entity) { if (super.attackEntityAsMob(entity)) { if (this.getSkeletonType() == 1 && entity instanceof EntityLivingBase) { @@ -116,6 +119,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Attack the specified entity using a ranged attack. */ + @Override public void attackEntityWithRangedAttack(EntityLivingBase entitylivingbase, float f) { EntityArrow entityarrow = new EntityArrow(this.worldObj, this, entitylivingbase, 1.6F, (float) (14 - this.worldObj.getDifficulty().getDifficultyId() * 4)); @@ -143,6 +147,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { if (this.getSkeletonType() == 1) { int j = this.rand.nextInt(3 + i) - 1; @@ -166,6 +171,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(13, Byte.valueOf((byte) 0)); @@ -174,6 +180,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEAD; } @@ -181,14 +188,17 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.skeleton.death"; } + @Override protected Item getDropItem() { return Items.arrow; } + @Override public float getEyeHeight() { return this.getSkeletonType() == 1 ? super.getEyeHeight() : 1.74F; } @@ -196,6 +206,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.skeleton.hurt"; } @@ -203,6 +214,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.skeleton.say"; } @@ -217,6 +229,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Returns the Y Offset of this entity. */ + @Override public double getYOffset() { return this.isChild() ? 0.0D : -0.35D; } @@ -224,6 +237,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { super.onDeath(damagesource); if (damagesource.getSourceOfDamage() instanceof EntityArrow @@ -248,6 +262,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -280,6 +295,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isDaytime() && !this.worldObj.isRemote) { float f = this.getBrightness(1.0F); @@ -312,6 +328,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { super.onLivingUpdate(); } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.skeleton.step", 0.15F, 1.0F); } @@ -319,6 +336,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("SkeletonType", 99)) { @@ -348,6 +366,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { * + Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ + @Override public void setCurrentItemOrArmor(int i, ItemStack itemstack) { super.setCurrentItemOrArmor(i, itemstack); if (!this.worldObj.isRemote && i == 0) { @@ -359,6 +378,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Gives armor or weapon for entity based on given DifficultyInstance */ + @Override protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficultyinstance) { super.setEquipmentBasedOnDifficulty(difficultyinstance); this.setCurrentItemOrArmor(0, new ItemStack(Items.bow)); @@ -381,6 +401,7 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + Handles updating while being ridden by an entity */ + @Override public void updateRidden() { super.updateRidden(); if (this.ridingEntity instanceof EntityCreature) { @@ -393,8 +414,9 @@ public class EntitySkeleton extends EntityMob implements IRangedAttackMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setByte("SkeletonType", (byte) this.getSkeletonType()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntitySlime.java b/src/game/java/net/minecraft/entity/monster/EntitySlime.java index 45574867..48ceefb1 100644 --- a/src/game/java/net/minecraft/entity/monster/EntitySlime.java +++ b/src/game/java/net/minecraft/entity/monster/EntitySlime.java @@ -28,13 +28,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySlime extends EntityLiving implements IMob { static class AISlimeAttack extends EntityAIBase { @@ -58,6 +58,7 @@ public class EntitySlime extends EntityLiving implements IMob { this.setMutexBits(2); } + @Override public boolean continueExecuting() { EntityLivingBase entitylivingbase = this.slime.getAttackTarget(); return entitylivingbase == null ? false @@ -67,6 +68,7 @@ public class EntitySlime extends EntityLiving implements IMob { : --this.field_179465_b > 0)); } + @Override public boolean shouldExecute() { EntityLivingBase entitylivingbase = this.slime.getAttackTarget(); return entitylivingbase == null ? false @@ -75,11 +77,13 @@ public class EntitySlime extends EntityLiving implements IMob { || !((EntityPlayer) entitylivingbase).capabilities.disableDamage); } + @Override public void startExecuting() { this.field_179465_b = 300; super.startExecuting(); } + @Override public void updateTask() { this.slime.faceEntity(this.slime.getAttackTarget(), 10.0F, 10.0F); ((EntitySlime.SlimeMoveHelper) this.slime.getMoveHelper()).func_179920_a(this.slime.rotationYaw, @@ -97,11 +101,13 @@ public class EntitySlime extends EntityLiving implements IMob { this.setMutexBits(2); } + @Override public boolean shouldExecute() { return this.slime.getAttackTarget() == null && (this.slime.onGround || this.slime.isInWater() || this.slime.isInLava()); } + @Override public void updateTask() { if (--this.field_179460_c <= 0) { this.field_179460_c = 40 + this.slime.getRNG().nextInt(60); @@ -121,10 +127,12 @@ public class EntitySlime extends EntityLiving implements IMob { ((PathNavigateGround) parEntitySlime.getNavigator()).setCanSwim(true); } + @Override public boolean shouldExecute() { return this.slime.isInWater() || this.slime.isInLava(); } + @Override public void updateTask() { if (this.slime.getRNG().nextFloat() < 0.8F) { this.slime.getJumpHelper().setJumping(); @@ -142,10 +150,12 @@ public class EntitySlime extends EntityLiving implements IMob { this.setMutexBits(5); } + @Override public boolean shouldExecute() { return true; } + @Override public void updateTask() { ((EntitySlime.SlimeMoveHelper) this.slime.getMoveHelper()).setSpeed(1.0D); } @@ -167,6 +177,7 @@ public class EntitySlime extends EntityLiving implements IMob { this.field_179923_j = parFlag; } + @Override public void onUpdateMoveHelper() { this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw, this.field_179922_g, 30.0F); this.entity.rotationYawHead = this.entity.rotationYaw; @@ -235,6 +246,7 @@ public class EntitySlime extends EntityLiving implements IMob { * + Applies a velocity to each of the entities pushing them away from each * other. Args: entity */ + @Override public void applyEntityCollision(Entity entity) { super.applyEntityCollision(entity); if (entity instanceof EntityIronGolem && this.canDamagePlayer()) { @@ -255,6 +267,7 @@ public class EntitySlime extends EntityLiving implements IMob { return new EntitySlime(this.worldObj); } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 1)); @@ -283,6 +296,7 @@ public class EntitySlime extends EntityLiving implements IMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { BlockPos blockpos = new BlockPos(MathHelper.floor_double(this.posX), 0, MathHelper.floor_double(this.posZ)); Chunk chunk = this.worldObj.getChunkFromBlockCoords(blockpos); @@ -311,14 +325,17 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); } + @Override protected Item getDropItem() { return this.getSlimeSize() == 1 ? Items.slime_ball : null; } + @Override public float getEyeHeight() { return 0.625F * this.height; } @@ -326,6 +343,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); } @@ -358,6 +376,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.4F * (float) this.getSlimeSize(); } @@ -366,6 +385,7 @@ public class EntitySlime extends EntityLiving implements IMob { * + The speed it takes to move the entityliving's rotationPitch through the * faceEntity method. This is only currently use in wolves. */ + @Override public int getVerticalFaceSpeed() { return 0; } @@ -373,6 +393,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Causes this entity to do an upwards motion (jumping). */ + @Override protected void jump() { this.motionY = 0.41999998688697815D; this.isAirBorne = true; @@ -397,6 +418,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Called by a player entity when they collide with an entity */ + @Override public void onCollideWithPlayer(EntityPlayer entityplayer) { if (this.canDamagePlayer()) { this.func_175451_e(entityplayer); @@ -404,6 +426,7 @@ public class EntitySlime extends EntityLiving implements IMob { } + @Override public void onDataWatcherUpdate(int i) { if (i == 16) { int j = this.getSlimeSize(); @@ -423,6 +446,7 @@ public class EntitySlime extends EntityLiving implements IMob { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { int i = this.rand.nextInt(3); @@ -438,6 +462,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (!this.worldObj.isRemote && this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL && this.getSlimeSize() > 0) { @@ -480,6 +505,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); int i = nbttagcompound.getInteger("Size"); @@ -494,6 +520,7 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + Will get destroyed next tick. */ + @Override public void setDead() { int i = this.getSlimeSize(); if (!this.worldObj.isRemote && i > 1 && this.getHealth() <= 0.0F) { @@ -535,9 +562,10 @@ public class EntitySlime extends EntityLiving implements IMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("Size", this.getSlimeSize() - 1); nbttagcompound.setBoolean("wasOnGround", this.wasOnGround); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntitySnowman.java b/src/game/java/net/minecraft/entity/monster/EntitySnowman.java index 3688982d..af8b406f 100644 --- a/src/game/java/net/minecraft/entity/monster/EntitySnowman.java +++ b/src/game/java/net/minecraft/entity/monster/EntitySnowman.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { public EntitySnowman(World worldIn) { @@ -57,6 +57,7 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { new EntityAINearestAttackableTarget(this, EntityLiving.class, 10, true, false, IMob.mobSelector)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(4.0D); @@ -66,6 +67,7 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { /** * + Attack the specified entity using a ranged attack. */ + @Override public void attackEntityWithRangedAttack(EntityLivingBase parEntityLivingBase, float parFloat1) { EntitySnowball entitysnowball = new EntitySnowball(this.worldObj, this); double d0 = parEntityLivingBase.posY + (double) parEntityLivingBase.getEyeHeight() - 1.100000023841858D; @@ -81,6 +83,7 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int var2) { int i = this.rand.nextInt(16); @@ -90,10 +93,12 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { } + @Override protected Item getDropItem() { return Items.snowball; } + @Override public float getEyeHeight() { return 1.7F; } @@ -103,6 +108,7 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (!this.worldObj.isRemote) { @@ -133,4 +139,4 @@ public class EntitySnowman extends EntityGolem implements IRangedAttackMob { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntitySpider.java b/src/game/java/net/minecraft/entity/monster/EntitySpider.java index 03898382..bce4419c 100644 --- a/src/game/java/net/minecraft/entity/monster/EntitySpider.java +++ b/src/game/java/net/minecraft/entity/monster/EntitySpider.java @@ -30,13 +30,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySpider extends EntityMob { static class AISpiderAttack extends EntityAIAttackOnCollide { @@ -56,6 +56,7 @@ public class EntitySpider extends EntityMob { super(parEntitySpider, targetClass, 1.0D, true); } + @Override public boolean continueExecuting() { float f = this.attacker.getBrightness(1.0F); if (f >= 0.5F && this.attacker.getRNG().nextInt(100) == 0) { @@ -66,6 +67,7 @@ public class EntitySpider extends EntityMob { } } + @Override protected double func_179512_a(EntityLivingBase entitylivingbase) { return (double) (4.0F + entitylivingbase.width); } @@ -76,6 +78,7 @@ public class EntitySpider extends EntityMob { super(parEntitySpider, classTarget, true); } + @Override public boolean shouldExecute() { float f = this.taskOwner.getBrightness(1.0F); return f >= 0.5F ? false : super.shouldExecute(); @@ -115,6 +118,7 @@ public class EntitySpider extends EntityMob { this.targetTasks.addTask(3, new EntitySpider.AISpiderTarget(this, EntityIronGolem.class)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(16.0D); @@ -124,6 +128,7 @@ public class EntitySpider extends EntityMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean flag, int i) { super.dropFewItems(flag, i); if (flag && (this.rand.nextInt(3) == 0 || this.rand.nextInt(1 + i) > 0)) { @@ -132,6 +137,7 @@ public class EntitySpider extends EntityMob { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -140,6 +146,7 @@ public class EntitySpider extends EntityMob { /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.ARTHROPOD; } @@ -147,14 +154,17 @@ public class EntitySpider extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.spider.death"; } + @Override protected Item getDropItem() { return Items.string; } + @Override public float getEyeHeight() { return 0.65F; } @@ -162,6 +172,7 @@ public class EntitySpider extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.spider.say"; } @@ -169,6 +180,7 @@ public class EntitySpider extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.spider.say"; } @@ -177,6 +189,7 @@ public class EntitySpider extends EntityMob { * + Returns the Y offset from the entity's position for any entity riding this * one. */ + @Override public double getMountedYOffset() { return (double) (this.height * 0.5F); } @@ -184,6 +197,7 @@ public class EntitySpider extends EntityMob { /** * + Returns new PathNavigateGround instance */ + @Override protected PathNavigate getNewNavigator(World world) { return new PathNavigateClimber(this, world); } @@ -199,10 +213,12 @@ public class EntitySpider extends EntityMob { /** * + returns true if this entity is by a ladder, false otherwise */ + @Override public boolean isOnLadder() { return this.isBesideClimbableBlock(); } + @Override public boolean isPotionApplicable(PotionEffect potioneffect) { return potioneffect.getPotionID() == Potion.poison.id ? false : super.isPotionApplicable(potioneffect); } @@ -212,6 +228,7 @@ public class EntitySpider extends EntityMob { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -244,6 +261,7 @@ public class EntitySpider extends EntityMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (!this.worldObj.isRemote) { @@ -252,6 +270,7 @@ public class EntitySpider extends EntityMob { } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.spider.step", 0.15F, 1.0F); } @@ -274,6 +293,7 @@ public class EntitySpider extends EntityMob { /** * + Sets the Entity inside a web block. */ + @Override public void setInWeb() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityWitch.java b/src/game/java/net/minecraft/entity/monster/EntityWitch.java index 71e9df74..f1a5d101 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityWitch.java +++ b/src/game/java/net/minecraft/entity/monster/EntityWitch.java @@ -31,13 +31,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityWitch extends EntityMob implements IRangedAttackMob { private static final EaglercraftUUID MODIFIER_UUID = EaglercraftUUID @@ -75,6 +75,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(26.0D); @@ -84,6 +85,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Reduces damage, depending on potions */ + @Override protected float applyPotionDamageCalculations(DamageSource damagesource, float f) { f = super.applyPotionDamageCalculations(damagesource, f); if (damagesource.getEntity() == this) { @@ -100,6 +102,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Attack the specified entity using a ranged attack. */ + @Override public void attackEntityWithRangedAttack(EntityLivingBase entitylivingbase, float var2) { if (!this.getAggressive()) { EntityPotion entitypotion = new EntityPotion(this.worldObj, this, 32732); @@ -126,6 +129,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(3) + 1; @@ -143,6 +147,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { } + @Override protected void entityInit() { super.entityInit(); this.getDataWatcher().addObject(21, Byte.valueOf((byte) 0)); @@ -158,10 +163,12 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return null; } + @Override public float getEyeHeight() { return 1.62F; } @@ -169,6 +176,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return null; } @@ -176,10 +184,12 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return null; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 15) { for (int i = 0; i < this.rand.nextInt(35) + 10; ++i) { @@ -199,6 +209,7 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (!this.worldObj.isRemote) { if (this.getAggressive()) { @@ -262,4 +273,4 @@ public class EntityWitch extends EntityMob implements IRangedAttackMob { public void setAggressive(boolean aggressive) { this.getDataWatcher().updateObject(21, Byte.valueOf((byte) (aggressive ? 1 : 0))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/EntityZombie.java b/src/game/java/net/minecraft/entity/monster/EntityZombie.java index 6880beab..f3717762 100644 --- a/src/game/java/net/minecraft/entity/monster/EntityZombie.java +++ b/src/game/java/net/minecraft/entity/monster/EntityZombie.java @@ -47,13 +47,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -65,7 +65,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityZombie extends EntityMob { class GroupData implements IEntityLivingData { @@ -117,6 +117,7 @@ public class EntityZombie extends EntityMob { /** * + Causes this Entity to drop a random item. */ + @Override protected void addRandomDrop() { switch (this.rand.nextInt(3)) { case 0: @@ -141,6 +142,7 @@ public class EntityZombie extends EntityMob { this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(35.0D); @@ -150,6 +152,7 @@ public class EntityZombie extends EntityMob { .setBaseValue(this.rand.nextDouble() * 0.10000000149011612D); } + @Override public boolean attackEntityAsMob(Entity entity) { boolean flag = super.attackEntityAsMob(entity); if (flag) { @@ -165,6 +168,7 @@ public class EntityZombie extends EntityMob { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (super.attackEntityFrom(damagesource, f)) { EntityLivingBase entitylivingbase = this.getAttackTarget(); @@ -221,6 +225,7 @@ public class EntityZombie extends EntityMob { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return !this.isConverting(); } @@ -251,6 +256,7 @@ public class EntityZombie extends EntityMob { new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ), 0); } + @Override protected void entityInit() { super.entityInit(); this.getDataWatcher().addObject(12, Byte.valueOf((byte) 0)); @@ -258,6 +264,7 @@ public class EntityZombie extends EntityMob { this.getDataWatcher().addObject(14, Byte.valueOf((byte) 0)); } + @Override protected boolean func_175448_a(ItemStack itemstack) { return itemstack.getItem() == Items.egg && this.isChild() && this.isRiding() ? false : super.func_175448_a(itemstack); @@ -270,7 +277,7 @@ public class EntityZombie extends EntityMob { int i = 1; if (this.rand.nextFloat() < 0.01F) { int j = 0; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = (int) this.posX - 4; k < (int) this.posX + 4 && j < 14; ++k) { for (int l = (int) this.posY - 4; l < (int) this.posY + 4 && j < 14; ++l) { @@ -295,6 +302,7 @@ public class EntityZombie extends EntityMob { /** * + Get this Entity's EnumCreatureAttribute */ + @Override public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEAD; } @@ -302,10 +310,12 @@ public class EntityZombie extends EntityMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.zombie.death"; } + @Override protected Item getDropItem() { return Items.rotten_flesh; } @@ -313,6 +323,7 @@ public class EntityZombie extends EntityMob { /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer entityplayer) { if (this.isChild()) { this.experienceValue = (int) ((float) this.experienceValue * 2.5F); @@ -321,6 +332,7 @@ public class EntityZombie extends EntityMob { return super.getExperiencePoints(entityplayer); } + @Override public float getEyeHeight() { float f = 1.74F; if (this.isChild()) { @@ -333,6 +345,7 @@ public class EntityZombie extends EntityMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.zombie.hurt"; } @@ -340,6 +353,7 @@ public class EntityZombie extends EntityMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.zombie.say"; } @@ -348,6 +362,7 @@ public class EntityZombie extends EntityMob { * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { int i = super.getTotalArmorValue() + 2; if (i > 20) { @@ -360,10 +375,12 @@ public class EntityZombie extends EntityMob { /** * + Returns the Y Offset of this entity. */ + @Override public double getYOffset() { return this.isChild() ? 0.0D : -0.35D; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 16) { if (!this.isSilent()) { @@ -380,6 +397,7 @@ public class EntityZombie extends EntityMob { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.getCurrentEquippedItem(); if (itemstack != null && itemstack.getItem() == Items.golden_apple && itemstack.getMetadata() == 0 @@ -409,6 +427,7 @@ public class EntityZombie extends EntityMob { /** * + If Animal, checks if the age timer is negative */ + @Override public boolean isChild() { return this.getDataWatcher().getWatchableObjectByte(12) == 1; } @@ -437,6 +456,7 @@ public class EntityZombie extends EntityMob { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { super.onDeath(damagesource); if (damagesource.getEntity() instanceof EntityCreeper && !(this instanceof EntityPigZombie) @@ -453,6 +473,7 @@ public class EntityZombie extends EntityMob { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -524,6 +545,7 @@ public class EntityZombie extends EntityMob { /** * + This method gets called when the entity kills another one. */ + @Override public void onKillEntity(EntityLivingBase entitylivingbase) { super.onKillEntity(entitylivingbase); if ((this.worldObj.getDifficulty() == EnumDifficulty.NORMAL @@ -562,6 +584,7 @@ public class EntityZombie extends EntityMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isDaytime() && !this.worldObj.isRemote && !this.isChild()) { float f = this.getBrightness(1.0F); @@ -597,6 +620,7 @@ public class EntityZombie extends EntityMob { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (!this.worldObj.isRemote && this.isConverting()) { int i = this.getConversionTimeBoost(); @@ -609,6 +633,7 @@ public class EntityZombie extends EntityMob { super.onUpdate(); } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.zombie.step", 0.15F, 1.0F); } @@ -616,6 +641,7 @@ public class EntityZombie extends EntityMob { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.getBoolean("IsBaby")) { @@ -674,6 +700,7 @@ public class EntityZombie extends EntityMob { /** * + Gives armor or weapon for entity based on given DifficultyInstance */ + @Override protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficultyinstance) { super.setEquipmentBasedOnDifficulty(difficultyinstance); if (this.rand.nextFloat() < (this.worldObj.getDifficulty() == EnumDifficulty.HARD ? 0.05F : 0.01F)) { @@ -690,6 +717,7 @@ public class EntityZombie extends EntityMob { /** * + Sets the width and height of the entity. Args: width, height */ + @Override protected final void setSize(float f, float f1) { boolean flag = this.zombieWidth > 0.0F && this.zombieHeight > 0.0F; this.zombieWidth = f; @@ -723,6 +751,7 @@ public class EntityZombie extends EntityMob { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); if (this.isChild()) { @@ -736,4 +765,4 @@ public class EntityZombie extends EntityMob { nbttagcompound.setInteger("ConversionTime", this.isConverting() ? this.conversionTime : -1); nbttagcompound.setBoolean("CanBreakDoors", this.isBreakDoorsTaskSet()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/monster/IMob.java b/src/game/java/net/minecraft/entity/monster/IMob.java index 2851a9ff..78e5dfad 100644 --- a/src/game/java/net/minecraft/entity/monster/IMob.java +++ b/src/game/java/net/minecraft/entity/monster/IMob.java @@ -8,13 +8,13 @@ import net.minecraft.entity.passive.IAnimals; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,17 +26,19 @@ import net.minecraft.entity.passive.IAnimals; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IMob extends IAnimals { Predicate mobSelector = new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof IMob; } }; Predicate VISIBLE_MOB_SELECTOR = new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof IMob && !entity.isInvisible(); } }; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityAmbientCreature.java b/src/game/java/net/minecraft/entity/passive/EntityAmbientCreature.java index 90c68a0e..8ca408ee 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityAmbientCreature.java +++ b/src/game/java/net/minecraft/entity/passive/EntityAmbientCreature.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,13 +25,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAmbientCreature extends EntityLiving implements IAnimals { public EntityAmbientCreature(World worldIn) { super(worldIn); } + @Override public boolean allowLeashing() { return false; } @@ -40,7 +41,8 @@ public abstract class EntityAmbientCreature extends EntityLiving implements IAni * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override protected boolean interact(EntityPlayer var1) { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityAnimal.java b/src/game/java/net/minecraft/entity/passive/EntityAnimal.java index 61bc19c7..e9125cc3 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityAnimal.java +++ b/src/game/java/net/minecraft/entity/passive/EntityAnimal.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { protected Block spawnableBlock = Blocks.grass; @@ -48,6 +48,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -60,6 +61,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return false; } @@ -85,6 +87,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { } + @Override public float getBlockPathWeight(BlockPos blockpos) { return this.worldObj.getBlockState(blockpos.down()).getBlock() == Blocks.grass ? 10.0F : this.worldObj.getLightBrightness(blockpos) - 0.5F; @@ -94,6 +97,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { int i = MathHelper.floor_double(this.posX); int j = MathHelper.floor_double(this.getEntityBoundingBox().minY); @@ -106,6 +110,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer var1) { return 1 + this.worldObj.rand.nextInt(3); } @@ -118,10 +123,12 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { * + Get number of ticks, at least during which the living entity will be * silent. */ + @Override public int getTalkInterval() { return 120; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 18) { for (int i = 0; i < 7; ++i) { @@ -144,6 +151,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null) { @@ -183,6 +191,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (this.getGrowingAge() != 0) { @@ -208,6 +217,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.inLove = nbttagcompound.getInteger("InLove"); @@ -223,6 +233,7 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { this.worldObj.setEntityState(this, (byte) 18); } + @Override protected void updateAITasks() { if (this.getGrowingAge() != 0) { this.inLove = 0; @@ -234,8 +245,9 @@ public abstract class EntityAnimal extends EntityAgeable implements IAnimals { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("InLove", this.inLove); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityBat.java b/src/game/java/net/minecraft/entity/passive/EntityBat.java index 473d1d3c..ffaf983c 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityBat.java +++ b/src/game/java/net/minecraft/entity/passive/EntityBat.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityBat extends EntityAmbientCreature { private BlockPos spawnPosition; @@ -44,6 +44,7 @@ public class EntityBat extends EntityAmbientCreature { this.setIsBatHanging(true); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(6.0D); @@ -52,6 +53,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -68,6 +70,7 @@ public class EntityBat extends EntityAmbientCreature { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return false; } @@ -76,13 +79,16 @@ public class EntityBat extends EntityAmbientCreature { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void collideWithEntity(Entity var1) { } + @Override protected void collideWithNearbyEntities() { } @@ -90,15 +96,18 @@ public class EntityBat extends EntityAmbientCreature { * + Return whether this entity should NOT trigger a pressure plate or a * tripwire. */ + @Override public boolean doesEntityNotTriggerPressurePlate() { return true; } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); } + @Override public void fall(float var1, float var2) { } @@ -106,6 +115,7 @@ public class EntityBat extends EntityAmbientCreature { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { BlockPos blockpos = new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ); if (blockpos.getY() >= this.worldObj.func_181545_F()) { @@ -126,10 +136,12 @@ public class EntityBat extends EntityAmbientCreature { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.bat.death"; } + @Override public float getEyeHeight() { return this.height / 2.0F; } @@ -137,6 +149,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.bat.hurt"; } @@ -148,6 +161,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return this.getIsBatHanging() && this.rand.nextInt(4) != 0 ? null : "mob.bat.idle"; } @@ -155,6 +169,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Gets the pitch of living sounds in living entities. */ + @Override protected float getSoundPitch() { return super.getSoundPitch() * 0.95F; } @@ -162,6 +177,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.1F; } @@ -174,6 +190,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.getIsBatHanging()) { @@ -188,6 +205,7 @@ public class EntityBat extends EntityAmbientCreature { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.dataWatcher.updateObject(16, Byte.valueOf(nbttagcompound.getByte("BatFlags"))); @@ -203,6 +221,7 @@ public class EntityBat extends EntityAmbientCreature { } + @Override protected void updateAITasks() { super.updateAITasks(); BlockPos blockpos = new BlockPos(this); @@ -253,14 +272,16 @@ public class EntityBat extends EntityAmbientCreature { } + @Override protected void updateFallState(double var1, boolean var3, Block var4, BlockPos var5) { } /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setByte("BatFlags", this.dataWatcher.getWatchableObjectByte(16)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityChicken.java b/src/game/java/net/minecraft/entity/passive/EntityChicken.java index 6700866a..5cabaf5a 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityChicken.java +++ b/src/game/java/net/minecraft/entity/passive/EntityChicken.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityChicken extends EntityAnimal { public float wingRotation; @@ -67,6 +67,7 @@ public class EntityChicken extends EntityAnimal { this.tasks.addTask(7, new EntityAILookIdle(this)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(4.0D); @@ -76,10 +77,12 @@ public class EntityChicken extends EntityAnimal { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return this.isChickenJockey() && this.riddenByEntity == null; } + @Override public EntityChicken createChild(EntityAgeable var1) { return new EntityChicken(this.worldObj); } @@ -87,6 +90,7 @@ public class EntityChicken extends EntityAnimal { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(3) + this.rand.nextInt(1 + i); @@ -102,16 +106,19 @@ public class EntityChicken extends EntityAnimal { } + @Override public void fall(float var1, float var2) { } /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.chicken.hurt"; } + @Override protected Item getDropItem() { return Items.feather; } @@ -119,10 +126,12 @@ public class EntityChicken extends EntityAnimal { /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer entityplayer) { return this.isChickenJockey() ? 10 : super.getExperiencePoints(entityplayer); } + @Override public float getEyeHeight() { return this.height; } @@ -130,6 +139,7 @@ public class EntityChicken extends EntityAnimal { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.chicken.hurt"; } @@ -137,6 +147,7 @@ public class EntityChicken extends EntityAnimal { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.chicken.say"; } @@ -145,6 +156,7 @@ public class EntityChicken extends EntityAnimal { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack != null && itemstack.getItem() == Items.wheat_seeds; } @@ -161,6 +173,7 @@ public class EntityChicken extends EntityAnimal { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); this.field_70888_h = this.wingRotation; @@ -185,6 +198,7 @@ public class EntityChicken extends EntityAnimal { } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.chicken.step", 0.15F, 1.0F); } @@ -192,6 +206,7 @@ public class EntityChicken extends EntityAnimal { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.chickenJockey = nbttagcompound.getBoolean("IsChickenJockey"); @@ -208,6 +223,7 @@ public class EntityChicken extends EntityAnimal { this.chickenJockey = jockey; } + @Override public void updateRiderPosition() { super.updateRiderPosition(); float f = MathHelper.sin(this.renderYawOffset * 3.1415927F / 180.0F); @@ -226,9 +242,10 @@ public class EntityChicken extends EntityAnimal { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("IsChickenJockey", this.chickenJockey); nbttagcompound.setInteger("EggLayTime", this.timeUntilNextEgg); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityCow.java b/src/game/java/net/minecraft/entity/passive/EntityCow.java index a4444849..299f5cb5 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityCow.java +++ b/src/game/java/net/minecraft/entity/passive/EntityCow.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityCow extends EntityAnimal { public EntityCow(World worldIn) { @@ -57,12 +57,14 @@ public class EntityCow extends EntityAnimal { this.tasks.addTask(7, new EntityAILookIdle(this)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000000298023224D); } + @Override public EntityCow createChild(EntityAgeable var1) { return new EntityCow(this.worldObj); } @@ -70,6 +72,7 @@ public class EntityCow extends EntityAnimal { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(3) + this.rand.nextInt(1 + i); @@ -92,14 +95,17 @@ public class EntityCow extends EntityAnimal { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.cow.hurt"; } + @Override protected Item getDropItem() { return Items.leather; } + @Override public float getEyeHeight() { return this.height; } @@ -107,6 +113,7 @@ public class EntityCow extends EntityAnimal { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.cow.hurt"; } @@ -114,6 +121,7 @@ public class EntityCow extends EntityAnimal { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.cow.say"; } @@ -121,6 +129,7 @@ public class EntityCow extends EntityAnimal { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.4F; } @@ -129,6 +138,7 @@ public class EntityCow extends EntityAnimal { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.bucket && !entityplayer.capabilities.isCreativeMode @@ -146,7 +156,8 @@ public class EntityCow extends EntityAnimal { } } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.cow.step", 0.15F, 1.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityHorse.java b/src/game/java/net/minecraft/entity/passive/EntityHorse.java index 9baeacf8..cc0d9ec2 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityHorse.java +++ b/src/game/java/net/minecraft/entity/passive/EntityHorse.java @@ -46,13 +46,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -64,7 +64,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityHorse extends EntityAnimal implements IInvBasic { public static class GroupData implements IEntityLivingData { @@ -78,6 +78,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } private static final Predicate horseBreedingSelector = new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof EntityHorse && ((EntityHorse) entity).isBreeding(); } @@ -150,10 +151,12 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { this.initHorseChest(); } + @Override public boolean allowLeashing() { return !this.isUndead() && super.allowLeashing(); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().registerAttribute(horseJumpStrength); @@ -164,6 +167,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { Entity entity = damagesource.getEntity(); return this.riddenByEntity != null && this.riddenByEntity.equals(entity) ? false @@ -174,6 +178,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Returns true if this entity should push and be pushed by other entities * when colliding. */ + @Override public boolean canBePushed() { return this.riddenByEntity == null; } @@ -198,6 +203,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Returns true if the mob is currently able to mate with the specified mob. */ + @Override public boolean canMateWith(EntityAnimal entityanimal) { if (entityanimal == this) { return false; @@ -222,6 +228,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { return this.getHorseType() == 0; } + @Override public EntityAgeable createChild(EntityAgeable entityageable) { EntityHorse entityhorse = (EntityHorse) entityageable; EntityHorse entityhorse1 = new EntityHorse(this.worldObj); @@ -296,6 +303,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Integer.valueOf(0)); @@ -305,6 +313,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { this.dataWatcher.addObject(22, Integer.valueOf(0)); } + @Override public void fall(float f, float f1) { if (f > 1.0F) { this.playSound("mob.horse.land", 0.4F, 1.0F); @@ -350,6 +359,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } + @Override protected void func_142017_o(float f) { if (f > 6.0F && this.isEatingHaystack()) { this.setEatingHaystack(false); @@ -372,6 +382,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { this.prepareChunkForSpawn(); return super.getCanSpawnHere(); @@ -406,6 +417,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { this.openHorseMouth(); int i = this.getHorseType(); @@ -414,12 +426,14 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { : (i != 1 && i != 2 ? "mob.horse.death" : "mob.horse.donkey.death")); } + @Override protected Item getDropItem() { boolean flag = this.rand.nextInt(4) == 0; int i = this.getHorseType(); return i == 4 ? Items.bone : (i == 3 ? (flag ? null : Items.rotten_flesh) : Items.leather); } + @Override public float getEyeHeight() { return this.height; } @@ -487,6 +501,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { this.openHorseMouth(); if (this.rand.nextInt(3) == 0) { @@ -501,6 +516,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { this.openHorseMouth(); if (this.rand.nextInt(10) == 0 && !this.isMovementBlocked()) { @@ -516,6 +532,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Will return how many at most can spawn in a chunk at once. */ + @Override public int getMaxSpawnedInChunk() { return 6; } @@ -555,6 +572,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return getNameImpl(false); } @@ -580,6 +598,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } } + @Override public String getNameProfanityFilter() { return getNameImpl(true); } @@ -598,6 +617,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.8F; } @@ -606,6 +626,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Get number of ticks, at least during which the living entity will be * silent. */ + @Override public int getTalkInterval() { return 400; } @@ -618,6 +639,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { return armorValues[this.getHorseArmorIndexSynced()]; } @@ -630,6 +652,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { return this.horseTexturesArray; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 7) { this.spawnHorseParticles(true); @@ -671,6 +694,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.spawn_egg) { @@ -821,6 +845,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack var1) { return false; } @@ -844,6 +869,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Dead and sleeping entities cannot move */ + @Override protected boolean isMovementBlocked() { return this.riddenByEntity != null && this.isHorseSaddled() ? true : this.isEatingHaystack() || this.isRearing(); @@ -852,6 +878,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + returns true if this entity is by a ladder, false otherwise */ + @Override public boolean isOnLadder() { return false; } @@ -911,6 +938,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float f, float f1) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase && this.isHorseSaddled()) { this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw; @@ -982,6 +1010,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { super.onDeath(damagesource); if (!this.worldObj.isRemote) { @@ -995,6 +1024,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -1050,6 +1080,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + Called by InventoryBasic.onInventoryChanged() on a array that is never * filled. */ + @Override public void onInventoryChanged(InventoryBasic var1) { int i = this.getHorseArmorIndexSynced(); boolean flag = this.isHorseSaddled(); @@ -1073,6 +1104,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.rand.nextInt(200) == 0) { this.func_110210_cH(); @@ -1110,6 +1142,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.worldObj.isRemote && this.dataWatcher.hasObjectChanged()) { @@ -1199,6 +1232,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } + @Override protected void playStepSound(BlockPos blockpos, Block block) { Block.SoundType block$soundtype = block.stepSound; if (this.worldObj.getBlockState(blockpos.up()).getBlock() == Blocks.snow_layer) { @@ -1239,6 +1273,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setEatingHaystack(nbttagcompound.getBoolean("EatingHaystack")); @@ -1302,6 +1337,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { this.updateHorseSlots(); } + @Override public boolean replaceItemInInventory(int i, ItemStack itemstack) { if (i == 499 && this.canCarryChest()) { if (itemstack == null && this.isChested()) { @@ -1351,6 +1387,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { this.setHorseWatchableBoolean(8, chested); } + @Override public void setEating(boolean flag) { this.setHorseWatchableBoolean(32, flag); } @@ -1476,6 +1513,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { * + "Sets the scale for an ageable entity according to the boolean parameter, * which says if it's a child." */ + @Override public void setScaleForAge(boolean flag) { if (flag) { this.setScale(this.getHorseSize()); @@ -1528,6 +1566,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } + @Override public void updateRiderPosition() { super.updateRiderPosition(); if (this.prevRearingAmount > 0.0F) { @@ -1548,6 +1587,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("EatingHaystack", this.isEatingHaystack()); @@ -1588,4 +1628,4 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityMooshroom.java b/src/game/java/net/minecraft/entity/passive/EntityMooshroom.java index c968cd0e..55d61ea1 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityMooshroom.java +++ b/src/game/java/net/minecraft/entity/passive/EntityMooshroom.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityMooshroom extends EntityCow { public EntityMooshroom(World worldIn) { @@ -39,6 +39,7 @@ public class EntityMooshroom extends EntityCow { this.spawnableBlock = Blocks.mycelium; } + @Override public EntityMooshroom createChild(EntityAgeable var1) { return new EntityMooshroom(this.worldObj); } @@ -47,6 +48,7 @@ public class EntityMooshroom extends EntityCow { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.bowl && this.getGrowingAge() >= 0) { @@ -92,4 +94,4 @@ public class EntityMooshroom extends EntityCow { return super.interact(entityplayer); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityOcelot.java b/src/game/java/net/minecraft/entity/passive/EntityOcelot.java index e968b922..0a07d268 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityOcelot.java +++ b/src/game/java/net/minecraft/entity/passive/EntityOcelot.java @@ -35,13 +35,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -53,7 +53,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityOcelot extends EntityTameable { private EntityAIAvoidEntity avoidEntity; @@ -76,12 +76,14 @@ public class EntityOcelot extends EntityTameable { this.targetTasks.addTask(1, new EntityAITargetNonTamed(this, EntityChicken.class, false, (Predicate) null)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); } + @Override public boolean attackEntityAsMob(Entity entity) { return entity.attackEntityFrom(DamageSource.causeMobDamage(this), 3.0F); } @@ -89,6 +91,7 @@ public class EntityOcelot extends EntityTameable { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -101,6 +104,7 @@ public class EntityOcelot extends EntityTameable { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return !this.isTamed() && this.ticksExisted > 2400; } @@ -108,6 +112,7 @@ public class EntityOcelot extends EntityTameable { /** * + Returns true if the mob is currently able to mate with the specified mob. */ + @Override public boolean canMateWith(EntityAnimal entityanimal) { if (entityanimal == this) { return false; @@ -121,6 +126,7 @@ public class EntityOcelot extends EntityTameable { } } + @Override public EntityOcelot createChild(EntityAgeable var1) { EntityOcelot entityocelot = new EntityOcelot(this.worldObj); if (this.isTamed()) { @@ -135,14 +141,17 @@ public class EntityOcelot extends EntityTameable { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int var2) { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); } + @Override public void fall(float var1, float var2) { } @@ -150,6 +159,7 @@ public class EntityOcelot extends EntityTameable { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.worldObj.rand.nextInt(3) != 0; } @@ -157,10 +167,12 @@ public class EntityOcelot extends EntityTameable { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.cat.hitt"; } + @Override protected Item getDropItem() { return Items.leather; } @@ -168,6 +180,7 @@ public class EntityOcelot extends EntityTameable { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.cat.hitt"; } @@ -175,6 +188,7 @@ public class EntityOcelot extends EntityTameable { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return this.isTamed() ? (this.isInLove() ? "mob.cat.purr" : (this.rand.nextInt(4) == 0 ? "mob.cat.purreow" : "mob.cat.meow")) @@ -185,6 +199,7 @@ public class EntityOcelot extends EntityTameable { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return getNameImpl(false); } @@ -195,6 +210,7 @@ public class EntityOcelot extends EntityTameable { : (filter ? super.getNameProfanityFilter() : super.getName())); } + @Override public String getNameProfanityFilter() { return getNameImpl(true); } @@ -202,6 +218,7 @@ public class EntityOcelot extends EntityTameable { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.4F; } @@ -214,6 +231,7 @@ public class EntityOcelot extends EntityTameable { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (this.isTamed()) { @@ -254,6 +272,7 @@ public class EntityOcelot extends EntityTameable { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack != null && itemstack.getItem() == Items.fish; } @@ -261,6 +280,7 @@ public class EntityOcelot extends EntityTameable { /** * + Checks that the entity is not colliding with any blocks / liquids */ + @Override public boolean isNotColliding() { if (this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty() @@ -284,6 +304,7 @@ public class EntityOcelot extends EntityTameable { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -302,11 +323,13 @@ public class EntityOcelot extends EntityTameable { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setTameSkin(nbttagcompound.getInteger("CatType")); } + @Override public void setTamed(boolean flag) { super.setTamed(flag); } @@ -315,6 +338,7 @@ public class EntityOcelot extends EntityTameable { this.dataWatcher.updateObject(18, Byte.valueOf((byte) skinId)); } + @Override protected void setupTamedAI() { if (this.avoidEntity == null) { this.avoidEntity = new EntityAIAvoidEntity(this, EntityPlayer.class, 16.0F, 0.8D, 1.33D); @@ -327,6 +351,7 @@ public class EntityOcelot extends EntityTameable { } + @Override public void updateAITasks() { if (this.getMoveHelper().isUpdating()) { double d0 = this.getMoveHelper().getSpeed(); @@ -350,8 +375,9 @@ public class EntityOcelot extends EntityTameable { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("CatType", this.getTameSkin()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityPig.java b/src/game/java/net/minecraft/entity/passive/EntityPig.java index 73c1095a..49b3f834 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityPig.java +++ b/src/game/java/net/minecraft/entity/passive/EntityPig.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPig extends EntityAnimal { private final EntityAIControlledByPlayer aiControlledByPlayer; @@ -66,6 +66,7 @@ public class EntityPig extends EntityAnimal { this.tasks.addTask(8, new EntityAILookIdle(this)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); @@ -77,11 +78,13 @@ public class EntityPig extends EntityAnimal { * pigs, this is true if it is being ridden by a player and the player is * holding a carrot-on-a-stick */ + @Override public boolean canBeSteered() { ItemStack itemstack = ((EntityPlayer) this.riddenByEntity).getHeldItem(); return itemstack != null && itemstack.getItem() == Items.carrot_on_a_stick; } + @Override public EntityPig createChild(EntityAgeable var1) { return new EntityPig(this.worldObj); } @@ -89,6 +92,7 @@ public class EntityPig extends EntityAnimal { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + i); @@ -106,11 +110,13 @@ public class EntityPig extends EntityAnimal { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); } + @Override public void fall(float f, float f1) { super.fall(f, f1); if (f > 5.0F && this.riddenByEntity instanceof EntityPlayer) { @@ -129,10 +135,12 @@ public class EntityPig extends EntityAnimal { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.pig.death"; } + @Override protected Item getDropItem() { return this.isBurning() ? Items.cooked_porkchop : Items.porkchop; } @@ -140,6 +148,7 @@ public class EntityPig extends EntityAnimal { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.pig.say"; } @@ -147,6 +156,7 @@ public class EntityPig extends EntityAnimal { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.pig.say"; } @@ -162,6 +172,7 @@ public class EntityPig extends EntityAnimal { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { if (super.interact(entityplayer)) { return true; @@ -178,6 +189,7 @@ public class EntityPig extends EntityAnimal { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack != null && itemstack.getItem() == Items.carrot; } @@ -185,6 +197,7 @@ public class EntityPig extends EntityAnimal { /** * + Called when a lightning bolt hits the entity. */ + @Override public void onStruckByLightning(EntityLightningBolt var1) { if (!this.worldObj.isRemote && !this.isDead) { EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj); @@ -201,6 +214,7 @@ public class EntityPig extends EntityAnimal { } } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.pig.step", 0.15F, 1.0F); } @@ -208,6 +222,7 @@ public class EntityPig extends EntityAnimal { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setSaddled(nbttagcompound.getBoolean("Saddle")); @@ -228,8 +243,9 @@ public class EntityPig extends EntityAnimal { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("Saddle", this.getSaddled()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityRabbit.java b/src/game/java/net/minecraft/entity/passive/EntityRabbit.java index 8f3d0032..3bdc1362 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityRabbit.java +++ b/src/game/java/net/minecraft/entity/passive/EntityRabbit.java @@ -41,13 +41,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -59,7 +59,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityRabbit extends EntityAnimal { static class AIAvoidEntity extends EntityAIAvoidEntity { @@ -71,6 +71,7 @@ public class EntityRabbit extends EntityAnimal { this.entityInstance = parEntityRabbit; } + @Override public void updateTask() { super.updateTask(); } @@ -81,6 +82,7 @@ public class EntityRabbit extends EntityAnimal { super(parEntityRabbit, EntityLivingBase.class, 1.4D, true); } + @Override protected double func_179512_a(EntityLivingBase entitylivingbase) { return (double) (4.0F + entitylivingbase.width); } @@ -94,6 +96,7 @@ public class EntityRabbit extends EntityAnimal { this.theEntity = parEntityRabbit; } + @Override public void updateTask() { super.updateTask(); this.theEntity.setMovementSpeed(this.speed); @@ -110,14 +113,17 @@ public class EntityRabbit extends EntityAnimal { this.field_179500_c = parEntityRabbit; } + @Override public boolean continueExecuting() { return this.field_179499_e && super.continueExecuting(); } + @Override public void resetTask() { super.resetTask(); } + @Override public boolean shouldExecute() { if (this.runDelay <= 0) { if (!this.field_179500_c.worldObj.getGameRules().getBoolean("mobGriefing")) { @@ -131,6 +137,7 @@ public class EntityRabbit extends EntityAnimal { return super.shouldExecute(); } + @Override protected boolean shouldMoveTo(World world, BlockPos blockpos) { Block block = world.getBlockState(blockpos).getBlock(); if (block == Blocks.farmland) { @@ -147,10 +154,12 @@ public class EntityRabbit extends EntityAnimal { return false; } + @Override public void startExecuting() { super.startExecuting(); } + @Override public void updateTask() { super.updateTask(); this.field_179500_c.getLookHelper().setLookPosition((double) this.destinationBlock.getX() + 0.5D, @@ -217,6 +226,7 @@ public class EntityRabbit extends EntityAnimal { this.theEntity = rabbit; } + @Override public void doJump() { if (this.isJumping) { this.theEntity.doMovementAction(EntityRabbit.EnumMoveType.STEP); @@ -246,6 +256,7 @@ public class EntityRabbit extends EntityAnimal { this.theEntity = parEntityRabbit; } + @Override public void onUpdateMoveHelper() { if (this.theEntity.onGround && !this.theEntity.func_175523_cj()) { this.theEntity.setMovementSpeed(0.0D); @@ -305,16 +316,19 @@ public class EntityRabbit extends EntityAnimal { /** * + Causes this Entity to drop a random item. */ + @Override protected void addRandomDrop() { this.entityDropItem(new ItemStack(Items.rabbit_foot, 1), 0.0F); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); } + @Override public boolean attackEntityAsMob(Entity entity) { if (this.getRabbitType() == 99) { this.playSound("mob.attack", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); @@ -327,6 +341,7 @@ public class EntityRabbit extends EntityAnimal { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { return this.isEntityInvulnerable(damagesource) ? false : super.attackEntityFrom(damagesource, f); } @@ -336,6 +351,7 @@ public class EntityRabbit extends EntityAnimal { / 3.1415927410125732D) - 90.0F; } + @Override public EntityRabbit createChild(EntityAgeable entityageable) { EntityRabbit entityrabbit = new EntityRabbit(this.worldObj); if (entityageable instanceof EntityRabbit) { @@ -364,6 +380,7 @@ public class EntityRabbit extends EntityAnimal { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(2) + this.rand.nextInt(1 + i); @@ -383,6 +400,7 @@ public class EntityRabbit extends EntityAnimal { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); @@ -413,6 +431,7 @@ public class EntityRabbit extends EntityAnimal { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.rabbit.death"; } @@ -420,6 +439,7 @@ public class EntityRabbit extends EntityAnimal { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.rabbit.hurt"; } @@ -428,6 +448,7 @@ public class EntityRabbit extends EntityAnimal { return "mob.rabbit.hop"; } + @Override protected float getJumpUpwardsMotion() { return this.moveHelper.isUpdating() && this.moveHelper.getY() > this.posY + 0.5D ? 0.5F : this.moveType.func_180074_b(); @@ -436,6 +457,7 @@ public class EntityRabbit extends EntityAnimal { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.rabbit.idle"; } @@ -456,10 +478,12 @@ public class EntityRabbit extends EntityAnimal { * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { return this.getRabbitType() == 99 ? 8 : super.getTotalArmorValue(); } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 1) { this.createRunningParticles(); @@ -475,6 +499,7 @@ public class EntityRabbit extends EntityAnimal { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack != null && this.isRabbitBreedingItem(itemstack.getItem()); } @@ -498,6 +523,7 @@ public class EntityRabbit extends EntityAnimal { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -523,6 +549,7 @@ public class EntityRabbit extends EntityAnimal { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (this.field_175540_bm != this.field_175535_bn) { @@ -541,6 +568,7 @@ public class EntityRabbit extends EntityAnimal { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setRabbitType(nbttagcompound.getInteger("RabbitType")); @@ -590,9 +618,11 @@ public class EntityRabbit extends EntityAnimal { * + Attempts to create sprinting particles if the entity is sprinting and not * in water. */ + @Override public void spawnRunningParticles() { } + @Override public void updateAITasks() { if (this.moveHelper.getSpeed() > 0.8D) { this.setMoveType(EntityRabbit.EnumMoveType.SPRINT); @@ -655,9 +685,10 @@ public class EntityRabbit extends EntityAnimal { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("RabbitType", this.getRabbitType()); nbttagcompound.setInteger("MoreCarrotTicks", this.carrotTicks); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntitySheep.java b/src/game/java/net/minecraft/entity/passive/EntitySheep.java index e7d04ec5..7c2173e0 100644 --- a/src/game/java/net/minecraft/entity/passive/EntitySheep.java +++ b/src/game/java/net/minecraft/entity/passive/EntitySheep.java @@ -38,13 +38,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -56,7 +56,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySheep extends EntityAnimal { private static final Map DYE_TO_RGB = Maps.newEnumMap(EnumDyeColor.class); @@ -100,6 +100,7 @@ public class EntitySheep extends EntityAnimal { * corresponding to the fleece color when breeding sheep. */ private final InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container() { + @Override public boolean canInteractWith(EntityPlayer var1) { return false; } @@ -126,12 +127,14 @@ public class EntitySheep extends EntityAnimal { this.inventoryCrafting.setInventorySlotContents(1, new ItemStack(Items.dye, 1, 0)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(8.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23000000417232513D); } + @Override public EntitySheep createChild(EntityAgeable entityageable) { EntitySheep entitysheep = (EntitySheep) entityageable; EntitySheep entitysheep1 = new EntitySheep(this.worldObj); @@ -142,6 +145,7 @@ public class EntitySheep extends EntityAnimal { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { if (!this.getSheared()) { this.entityDropItem( @@ -164,6 +168,7 @@ public class EntitySheep extends EntityAnimal { * + This function applies the benefits of growing back wool and faster growing * up to the acting entity. (This function is used in the AIEatGrass) */ + @Override public void eatGrassBonus() { this.setSheared(false); if (this.isChild()) { @@ -172,6 +177,7 @@ public class EntitySheep extends EntityAnimal { } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -180,10 +186,12 @@ public class EntitySheep extends EntityAnimal { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.sheep.say"; } + @Override protected Item getDropItem() { return Item.getItemFromBlock(Blocks.wool); } @@ -208,6 +216,7 @@ public class EntitySheep extends EntityAnimal { return EnumDyeColor.byDyeDamage(k); } + @Override public float getEyeHeight() { return 0.95F * this.height; } @@ -238,6 +247,7 @@ public class EntitySheep extends EntityAnimal { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.sheep.say"; } @@ -245,6 +255,7 @@ public class EntitySheep extends EntityAnimal { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return "mob.sheep.say"; } @@ -256,6 +267,7 @@ public class EntitySheep extends EntityAnimal { return (this.dataWatcher.getWatchableObjectByte(16) & 16) != 0; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 10) { this.sheepTimer = 40; @@ -269,6 +281,7 @@ public class EntitySheep extends EntityAnimal { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.shears && !this.getSheared() && !this.isChild()) { @@ -298,6 +311,7 @@ public class EntitySheep extends EntityAnimal { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -310,6 +324,7 @@ public class EntitySheep extends EntityAnimal { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.worldObj.isRemote) { this.sheepTimer = Math.max(0, this.sheepTimer - 1); @@ -318,6 +333,7 @@ public class EntitySheep extends EntityAnimal { super.onLivingUpdate(); } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.sheep.step", 0.15F, 1.0F); } @@ -325,6 +341,7 @@ public class EntitySheep extends EntityAnimal { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setSheared(nbttagcompound.getBoolean("Sheared")); @@ -352,6 +369,7 @@ public class EntitySheep extends EntityAnimal { } + @Override protected void updateAITasks() { this.sheepTimer = this.entityAIEatGrass.getEatingGrassTimer(); super.updateAITasks(); @@ -360,9 +378,10 @@ public class EntitySheep extends EntityAnimal { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("Sheared", this.getSheared()); nbttagcompound.setByte("Color", (byte) this.getFleeceColor().getMetadata()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntitySquid.java b/src/game/java/net/minecraft/entity/passive/EntitySquid.java index 0ed7096d..8f8d5b7a 100644 --- a/src/game/java/net/minecraft/entity/passive/EntitySquid.java +++ b/src/game/java/net/minecraft/entity/passive/EntitySquid.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySquid extends EntityWaterMob { static class AIMoveRandom extends EntityAIBase { @@ -41,10 +41,12 @@ public class EntitySquid extends EntityWaterMob { this.squid = parEntitySquid; } + @Override public boolean shouldExecute() { return true; } + @Override public void updateTask() { int i = this.squid.getAge(); if (i > 100) { @@ -84,6 +86,7 @@ public class EntitySquid extends EntityWaterMob { this.tasks.addTask(0, new EntitySquid.AIMoveRandom(this)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D); @@ -93,6 +96,7 @@ public class EntitySquid extends EntityWaterMob { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } @@ -100,6 +104,7 @@ public class EntitySquid extends EntityWaterMob { /** * + Drop 0-2 items of this living's type */ + @Override protected void dropFewItems(boolean var1, int i) { int j = this.rand.nextInt(3 + i) + 1; @@ -123,6 +128,7 @@ public class EntitySquid extends EntityWaterMob { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return this.posY > 45.0D && this.posY < (double) this.worldObj.func_181545_F() && super.getCanSpawnHere(); } @@ -130,14 +136,17 @@ public class EntitySquid extends EntityWaterMob { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return null; } + @Override protected Item getDropItem() { return null; } + @Override public float getEyeHeight() { return this.height * 0.5F; } @@ -145,6 +154,7 @@ public class EntitySquid extends EntityWaterMob { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return null; } @@ -152,6 +162,7 @@ public class EntitySquid extends EntityWaterMob { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return null; } @@ -159,10 +170,12 @@ public class EntitySquid extends EntityWaterMob { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.4F; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 19) { this.squidRotation = 0.0F; @@ -176,6 +189,7 @@ public class EntitySquid extends EntityWaterMob { * + Checks if this entity is inside water (if inWater field is true as a result * of handleWaterMovement() returning true) */ + @Override public boolean isInWater() { return this.worldObj.handleMaterialAcceleration( this.getEntityBoundingBox().expand(0.0D, -0.6000000238418579D, 0.0D), Material.water, this); @@ -184,6 +198,7 @@ public class EntitySquid extends EntityWaterMob { /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float var1, float var2) { this.moveEntity(this.motionX, this.motionY, this.motionZ); } @@ -193,6 +208,7 @@ public class EntitySquid extends EntityWaterMob { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); this.prevSquidPitch = this.squidPitch; @@ -255,4 +271,4 @@ public class EntitySquid extends EntityWaterMob { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityTameable.java b/src/game/java/net/minecraft/entity/passive/EntityTameable.java index 094fd6f3..651ccc04 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityTameable.java +++ b/src/game/java/net/minecraft/entity/passive/EntityTameable.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityTameable extends EntityAnimal implements IEntityOwnable { @@ -46,6 +46,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna this.setupTamedAI(); } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -59,6 +60,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna return this.aiSit; } + @Override public EntityLivingBase getOwner() { String ownerName = this.getOwnerId(); if (StringUtils.isEmpty(ownerName)) { @@ -72,10 +74,12 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna } } + @Override public String getOwnerId() { return this.dataWatcher.getWatchableObjectString(17); } + @Override public Team getTeam() { if (this.isTamed()) { EntityLivingBase entitylivingbase = this.getOwner(); @@ -87,6 +91,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna return super.getTeam(); } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 7) { this.playTameEffect(true); @@ -98,6 +103,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna } + @Override public boolean isOnSameTeam(EntityLivingBase entitylivingbase) { if (this.isTamed()) { EntityLivingBase entitylivingbase1 = this.getOwner(); @@ -128,6 +134,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { if (!this.worldObj.isRemote && this.worldObj.getGameRules().getBoolean("showDeathMessages") && this.hasCustomName() && this.getOwner() instanceof EntityPlayerMP) { @@ -162,6 +169,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); String s = ""; @@ -219,6 +227,7 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); if (worldObj.isRemote && !SingleplayerServerController.isClientInEaglerSingleplayerOrLAN()) { @@ -237,4 +246,4 @@ public abstract class EntityTameable extends EntityAnimal implements IEntityOwna nbttagcompound.setBoolean("Sitting", this.isSitting()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityVillager.java b/src/game/java/net/minecraft/entity/passive/EntityVillager.java index bd1ee510..3c543811 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityVillager.java +++ b/src/game/java/net/minecraft/entity/passive/EntityVillager.java @@ -67,13 +67,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -85,7 +85,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { static class EmeraldForItems implements EntityVillager.ITradeList { @@ -97,6 +97,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.price = priceIn; } + @Override public void modifyMerchantRecipeList(MerchantRecipeList recipeList, EaglercraftRandom random) { int i = 1; if (this.price != null) { @@ -121,6 +122,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.field_179408_d = parPriceInfo2; } + @Override public void modifyMerchantRecipeList(MerchantRecipeList merchantrecipelist, EaglercraftRandom random) { int i = 1; if (this.field_179409_b != null) { @@ -144,6 +146,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { } static class ListEnchantedBookForEmeralds implements EntityVillager.ITradeList { + @Override public void modifyMerchantRecipeList(MerchantRecipeList merchantrecipelist, EaglercraftRandom random) { Enchantment enchantment = Enchantment.enchantmentsBookList[random .nextInt(Enchantment.enchantmentsBookList.length)]; @@ -168,6 +171,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.field_179406_b = parPriceInfo; } + @Override public void modifyMerchantRecipeList(MerchantRecipeList merchantrecipelist, EaglercraftRandom random) { int i = 1; if (this.field_179406_b != null) { @@ -195,6 +199,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.field_179402_b = priceInfo; } + @Override public void modifyMerchantRecipeList(MerchantRecipeList merchantrecipelist, EaglercraftRandom random) { int i = 1; if (this.field_179402_b != null) { @@ -492,10 +497,12 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.setCanPickUpLoot(true); } + @Override public boolean allowLeashing() { return false; } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5D); @@ -513,6 +520,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return false; } @@ -522,6 +530,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { || itemIn == Items.wheat_seeds; } + @Override public EntityVillager createChild(EntityAgeable var1) { EntityVillager entityvillager = new EntityVillager(this.worldObj); entityvillager.onInitialSpawn(this.worldObj.getDifficultyForLocation(new BlockPos(entityvillager)), @@ -529,6 +538,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { return entityvillager; } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Integer.valueOf(0)); @@ -543,6 +553,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { return flag ? !this.hasEnoughItems(5) : !this.hasEnoughItems(1); } + @Override public EntityPlayer getCustomer() { return this.buyingPlayer; } @@ -550,6 +561,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.villager.death"; } @@ -558,6 +570,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return getDisplayNameImpl(false); } @@ -622,10 +635,12 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { } } + @Override public IChatComponent getDisplayNameProfanityFilter() { return getDisplayNameImpl(true); } + @Override public float getEyeHeight() { float f = 1.62F; if (this.isChild()) { @@ -638,6 +653,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.villager.hit"; } @@ -676,6 +692,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return this.isTrading() ? "mob.villager.haggle" : "mob.villager.idle"; } @@ -684,6 +701,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { return Math.max(this.dataWatcher.getWatchableObjectInt(16) % 5, 0); } + @Override public MerchantRecipeList getRecipes(EntityPlayer var1) { if (this.buyingList == null) { this.populateBuyingList(); @@ -696,6 +714,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { return this.villagerInventory; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 12) { this.spawnParticles(EnumParticleTypes.HEART); @@ -737,6 +756,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); boolean flag = itemstack != null && itemstack.getItem() == Items.spawn_egg; @@ -783,6 +803,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { if (this.villageObj != null) { Entity entity = damagesource.getEntity(); @@ -807,6 +828,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * + This is called when Entity's growing age timer reaches 0 (negative values * are considered as a child, positive as an adult) */ + @Override protected void onGrowingAdult() { if (this.getProfession() == 0) { this.tasks.addTask(8, new EntityAIHarvestFarmland(this, 0.6D)); @@ -820,6 +842,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * spawner, natural spawning etc, but not called when entity is reloaded from * nbt. Mainly used for initializing attributes and inventory */ + @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficultyinstance, IEntityLivingData ientitylivingdata) { ientitylivingdata = super.onInitialSpawn(difficultyinstance, ientitylivingdata); @@ -831,6 +854,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + Called when a lightning bolt hits the entity. */ + @Override public void onStruckByLightning(EntityLightningBolt var1) { if (!this.worldObj.isRemote && !this.isDead) { EntityWitch entitywitch = new EntityWitch(this.worldObj); @@ -878,6 +902,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setProfession(nbttagcompound.getInteger("Profession")); @@ -903,6 +928,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.setAdditionalAItasks(); } + @Override public boolean replaceItemInInventory(int i, ItemStack itemstack) { if (super.replaceItemInInventory(i, itemstack)) { return true; @@ -929,6 +955,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { } } + @Override public void setCustomer(EntityPlayer entityplayer) { this.buyingPlayer = entityplayer; } @@ -953,9 +980,11 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { this.dataWatcher.updateObject(16, Integer.valueOf(professionId)); } + @Override public void setRecipes(MerchantRecipeList var1) { } + @Override public void setRevengeTarget(EntityLivingBase entitylivingbase) { super.setRevengeTarget(entitylivingbase); if (this.villageObj != null && entitylivingbase != null) { @@ -989,6 +1018,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { } + @Override protected void updateAITasks() { if (--this.randomTickDivider <= 0) { BlockPos blockpos = new BlockPos(this); @@ -1037,6 +1067,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * + Tests if this entity should pickup a weapon or an armor. Entity drops * current weapon or armor if the new one is better. */ + @Override protected void updateEquipmentIfNeeded(EntityItem entityitem) { ItemStack itemstack = entityitem.getEntityItem(); Item item = itemstack.getItem(); @@ -1051,6 +1082,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { } + @Override public void useRecipe(MerchantRecipe merchantrecipe) { merchantrecipe.incrementToolUses(); this.livingSoundTime = -this.getTalkInterval(); @@ -1084,6 +1116,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { * Usually, this is just a sound byte being played depending if the suggested * itemstack is not null. */ + @Override public void verifySellingItem(ItemStack itemstack) { if (!this.worldObj.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20) { this.livingSoundTime = -this.getTalkInterval(); @@ -1099,6 +1132,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("Profession", this.getProfession()); @@ -1125,4 +1159,4 @@ public class EntityVillager extends EntityAgeable implements IMerchant, INpc { nbttagcompound.setTag("Inventory", nbttaglist); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityWaterMob.java b/src/game/java/net/minecraft/entity/passive/EntityWaterMob.java index a2857d2d..ffabbf6b 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityWaterMob.java +++ b/src/game/java/net/minecraft/entity/passive/EntityWaterMob.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { public EntityWaterMob(World worldIn) { super(worldIn); } + @Override public boolean canBreatheUnderwater() { return true; } @@ -40,6 +41,7 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return true; } @@ -48,6 +50,7 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { * + Checks if the entity's current position is a valid location to spawn this * entity. */ + @Override public boolean getCanSpawnHere() { return true; } @@ -55,6 +58,7 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer var1) { return 1 + this.worldObj.rand.nextInt(3); } @@ -63,6 +67,7 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { * + Get number of ticks, at least during which the living entity will be * silent. */ + @Override public int getTalkInterval() { return 120; } @@ -70,10 +75,12 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { /** * + Checks that the entity is not colliding with any blocks / liquids */ + @Override public boolean isNotColliding() { return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this); } + @Override public boolean isPushedByWater() { return false; } @@ -81,6 +88,7 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { /** * + Gets called every tick from main Entity class */ + @Override public void onEntityUpdate() { int i = this.getAir(); super.onEntityUpdate(); @@ -96,4 +104,4 @@ public abstract class EntityWaterMob extends EntityLiving implements IAnimals { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/EntityWolf.java b/src/game/java/net/minecraft/entity/passive/EntityWolf.java index 4214e13f..c5deb1ee 100644 --- a/src/game/java/net/minecraft/entity/passive/EntityWolf.java +++ b/src/game/java/net/minecraft/entity/passive/EntityWolf.java @@ -42,13 +42,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -60,7 +60,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityWolf extends EntityTameable { private float headRotationCourse; @@ -89,6 +89,7 @@ public class EntityWolf extends EntityTameable { this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true, new Class[0])); this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntityAnimal.class, false, new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof EntitySheep || entity instanceof EntityRabbit; } @@ -97,10 +98,12 @@ public class EntityWolf extends EntityTameable { this.setTamed(false); } + @Override public boolean allowLeashing() { return !this.isAngry() && super.allowLeashing(); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D); @@ -114,6 +117,7 @@ public class EntityWolf extends EntityTameable { this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(2.0D); } + @Override public boolean attackEntityAsMob(Entity entity) { boolean flag = entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) ((int) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue())); @@ -127,6 +131,7 @@ public class EntityWolf extends EntityTameable { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -144,6 +149,7 @@ public class EntityWolf extends EntityTameable { /** * + Determines if an entity can be despawned, used on idle far away entities */ + @Override protected boolean canDespawn() { return !this.isTamed() && this.ticksExisted > 2400; } @@ -151,6 +157,7 @@ public class EntityWolf extends EntityTameable { /** * + Returns true if the mob is currently able to mate with the specified mob. */ + @Override public boolean canMateWith(EntityAnimal entityanimal) { if (entityanimal == this) { return false; @@ -165,6 +172,7 @@ public class EntityWolf extends EntityTameable { } } + @Override public EntityWolf createChild(EntityAgeable var1) { EntityWolf entitywolf = new EntityWolf(this.worldObj); String s = this.getOwnerId(); @@ -176,6 +184,7 @@ public class EntityWolf extends EntityTameable { return entitywolf; } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(18, Float.valueOf(this.getHealth())); @@ -190,14 +199,17 @@ public class EntityWolf extends EntityTameable { /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "mob.wolf.death"; } + @Override protected Item getDropItem() { return Item.getItemById(-1); } + @Override public float getEyeHeight() { return this.height * 0.8F; } @@ -205,6 +217,7 @@ public class EntityWolf extends EntityTameable { /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "mob.wolf.hurt"; } @@ -217,6 +230,7 @@ public class EntityWolf extends EntityTameable { /** * + Returns the sound this mob makes while it's alive. */ + @Override protected String getLivingSound() { return this.isAngry() ? "mob.wolf.growl" : (this.rand.nextInt(3) == 0 @@ -228,6 +242,7 @@ public class EntityWolf extends EntityTameable { /** * + Will return how many at most can spawn in a chunk at once. */ + @Override public int getMaxSpawnedInChunk() { return 8; } @@ -255,6 +270,7 @@ public class EntityWolf extends EntityTameable { /** * + Returns the volume for the sounds this mob makes. */ + @Override protected float getSoundVolume() { return 0.4F; } @@ -270,10 +286,12 @@ public class EntityWolf extends EntityTameable { * + The speed it takes to move the entityliving's rotationPitch through the * faceEntity method. This is only currently use in wolves. */ + @Override public int getVerticalFaceSpeed() { return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 8) { this.isShaking = true; @@ -289,6 +307,7 @@ public class EntityWolf extends EntityTameable { * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets * into the saddle on a pig. */ + @Override public boolean interact(EntityPlayer entityplayer) { ItemStack itemstack = entityplayer.inventory.getCurrentItem(); if (this.isTamed()) { @@ -374,6 +393,7 @@ public class EntityWolf extends EntityTameable { * + Checks if the parameter is an item which this animal can be fed to breed it * (wheat, carrots or seeds depending on the animal type) */ + @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack == null ? false : (!(itemstack.getItem() instanceof ItemFood) ? false @@ -392,6 +412,7 @@ public class EntityWolf extends EntityTameable { * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { super.onLivingUpdate(); if (!this.worldObj.isRemote && this.isWet && !this.isShaking && !this.hasPath() && this.onGround) { @@ -410,6 +431,7 @@ public class EntityWolf extends EntityTameable { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); this.headRotationCourseOld = this.headRotationCourse; @@ -455,6 +477,7 @@ public class EntityWolf extends EntityTameable { } + @Override protected void playStepSound(BlockPos var1, Block var2) { this.playSound("mob.wolf.step", 0.15F, 1.0F); } @@ -462,6 +485,7 @@ public class EntityWolf extends EntityTameable { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.setAngry(nbttagcompound.getBoolean("Angry")); @@ -487,6 +511,7 @@ public class EntityWolf extends EntityTameable { /** * + Sets the active target the Task system uses for tracking */ + @Override public void setAttackTarget(EntityLivingBase entitylivingbase) { super.setAttackTarget(entitylivingbase); if (entitylivingbase == null) { @@ -510,6 +535,7 @@ public class EntityWolf extends EntityTameable { this.dataWatcher.updateObject(20, Byte.valueOf((byte) (collarcolor.getDyeDamage() & 15))); } + @Override public void setTamed(boolean flag) { super.setTamed(flag); if (flag) { @@ -521,6 +547,7 @@ public class EntityWolf extends EntityTameable { this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(4.0D); } + @Override public boolean shouldAttackEntity(EntityLivingBase entitylivingbase, EntityLivingBase entitylivingbase1) { if (!(entitylivingbase instanceof EntityCreeper) && !(entitylivingbase instanceof EntityGhast)) { if (entitylivingbase instanceof EntityWolf) { @@ -538,6 +565,7 @@ public class EntityWolf extends EntityTameable { } } + @Override protected void updateAITasks() { this.dataWatcher.updateObject(18, Float.valueOf(this.getHealth())); } @@ -545,9 +573,10 @@ public class EntityWolf extends EntityTameable { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setBoolean("Angry", this.isAngry()); nbttagcompound.setByte("CollarColor", (byte) this.getCollarColor().getDyeDamage()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/passive/IAnimals.java b/src/game/java/net/minecraft/entity/passive/IAnimals.java index 052bb8c2..3a560d07 100644 --- a/src/game/java/net/minecraft/entity/passive/IAnimals.java +++ b/src/game/java/net/minecraft/entity/passive/IAnimals.java @@ -3,13 +3,13 @@ package net.minecraft.entity.passive; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.entity.passive; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAnimals { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/player/EntityPlayer.java b/src/game/java/net/minecraft/entity/player/EntityPlayer.java index 57678d3e..d9a9ecbc 100644 --- a/src/game/java/net/minecraft/entity/player/EntityPlayer.java +++ b/src/game/java/net/minecraft/entity/player/EntityPlayer.java @@ -81,13 +81,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -99,7 +99,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityPlayer extends EntityLivingBase implements ICommandSender { public static enum EnumChatVisibility { @@ -389,6 +389,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Adds a value to the player score. Currently not actually used and the * entity passed in does nothing. Args: entity, scoreToAdd */ + @Override public void addToPlayerScore(Entity entity, int i) { this.addScore(i); Collection collection = this.getWorldScoreboard() @@ -409,6 +410,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(1.0D); @@ -418,6 +420,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -622,6 +625,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return !this.capabilities.isFlying; } @@ -675,6 +679,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS parEntity.onCollideWithPlayer(this); } + @Override protected void damageArmor(float f) { this.inventory.damageArmor(f); } @@ -684,6 +689,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * from the armor first and then health second with the reduced value. Args: * damageAmount */ + @Override protected void damageEntity(DamageSource damagesource, float f) { if (!this.isEntityInvulnerable(damagesource)) { if (!damagesource.isUnblockable() && this.isBlocking() && f > 0.0F) { @@ -795,6 +801,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return this.dropItem(itemStackIn, false, false); } + @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); @@ -803,6 +810,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS this.dataWatcher.addObject(10, Byte.valueOf((byte) 0)); } + @Override public void fall(float f, float f1) { if (!this.capabilities.allowFlying) { if (f >= 2.0F) { @@ -859,6 +867,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS public void func_175145_a(StatBase var1) { } + @Override public float getAbsorptionAmount() { return this.getDataWatcher().getWatchableObjectFloat(17); } @@ -866,10 +875,12 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + the movespeed used for the new AI system */ + @Override public float getAIMoveSpeed() { return (float) this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue(); } + @Override public boolean getAlwaysRenderNameTagForRender() { return true; } @@ -917,6 +928,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return 0.0F; } + @Override public ItemStack getCurrentArmor(int i) { return this.inventory.armorItemInSlot(i); } @@ -931,6 +943,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Returns the sound this mob makes on death. */ + @Override protected String getDeathSound() { return "game.player.die"; } @@ -939,6 +952,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { ChatComponentText chatcomponenttext = new ChatComponentText( ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getName())); @@ -952,6 +966,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + 0: Tool in Hand; 1-4: Armor */ + @Override public ItemStack getEquipmentInSlot(int i) { return i == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[i - 1]; } @@ -959,6 +974,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Get the experience points the entity currently has. */ + @Override protected int getExperiencePoints(EntityPlayer var1) { if (this.worldObj.getGameRules().getBoolean("keepInventory")) { return 0; @@ -968,6 +984,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS } } + @Override public float getEyeHeight() { float f = 1.62F; if (this.isPlayerSleeping()) { @@ -981,6 +998,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return f; } + @Override protected String getFallSoundString(int i) { return i > 4 ? "game.player.hurt.fall.big" : "game.player.hurt.fall.small"; } @@ -1002,6 +1020,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Returns the item that this EntityLiving is holding, if any. */ + @Override public ItemStack getHeldItem() { return this.inventory.getCurrentItem(); } @@ -1009,6 +1028,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Returns the sound this mob makes when it is hurt. */ + @Override protected String getHurtSound() { return "game.player.hurt"; } @@ -1016,6 +1036,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + returns the inventory of this entity (only used in EntityPlayerMP it seems) */ + @Override public ItemStack[] getInventory() { return this.inventory.armorInventory; } @@ -1061,6 +1082,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Return the amount of time this entity should stay in a portal before being * transported. */ + @Override public int getMaxInPortalTime() { return this.capabilities.disableDamage ? 0 : 80; } @@ -1069,6 +1091,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.gameProfile.getName(); } @@ -1076,6 +1099,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Return the amount of cooldown before this entity can use a portal again. */ + @Override public int getPortalCooldown() { return 10; } @@ -1088,14 +1112,17 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return this.sleepTimer; } + @Override protected String getSplashSound() { return "game.player.swim.splash"; } + @Override protected String getSwimSound() { return "game.player.swim"; } + @Override public Team getTeam() { return this.getWorldScoreboard().getPlayersTeam(this.getName()); } @@ -1153,6 +1180,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Returns the current armor value as determined by a call to * InventoryPlayer.getTotalArmorValue */ + @Override public int getTotalArmorValue() { return this.inventory.getTotalArmorValue(); } @@ -1168,10 +1196,12 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Returns the Y Offset of this entity. */ + @Override public double getYOffset() { return -0.35D; } + @Override public void handleStatusUpdate(byte b0) { if (b0 == 9) { this.onItemUseFinish(); @@ -1254,6 +1284,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Checks if this entity is inside of an opaque block */ + @Override public boolean isEntityInsideOpaqueBlock() { return !this.sleeping && super.isEntityInsideOpaqueBlock(); } @@ -1268,6 +1299,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * invisible.\nFor EntityLivingBase subclasses, returning false when invisible * will render the entity semitransparent. */ + @Override public boolean isInvisibleToPlayer(EntityPlayer entityplayer) { if (!this.isInvisible()) { return false; @@ -1283,6 +1315,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Dead and sleeping entities cannot move */ + @Override protected boolean isMovementBlocked() { return this.getHealth() <= 0.0F || this.isPlayerSleeping(); } @@ -1291,6 +1324,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Only use is to identify if class is an instance of player for experience * dropping */ + @Override protected boolean isPlayer() { return true; } @@ -1305,10 +1339,12 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Returns whether player is sleeping or not */ + @Override public boolean isPlayerSleeping() { return this.sleeping; } + @Override public boolean isPushedByWater() { return !this.capabilities.isFlying; } @@ -1349,6 +1385,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Causes this entity to do an upwards motion (jumping). */ + @Override public void jump() { super.jump(); this.triggerAchievement(StatList.jumpStat); @@ -1363,6 +1400,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Moves the entity based on the specified heading. Args: strafe, forward */ + @Override public void moveEntityWithHeading(float f, float f1) { double d0 = this.posX; double d1 = this.posY; @@ -1391,6 +1429,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource damagesource) { super.onDeath(damagesource); this.setSize(0.2F, 0.2F); @@ -1443,6 +1482,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + This method gets called when the entity kills another one. */ + @Override public void onKillEntity(EntityLivingBase entitylivingbase) { if (entitylivingbase instanceof IMob) { this.triggerAchievement(AchievementList.killEnemy); @@ -1461,6 +1501,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * required. For example, zombies and skeletons use this to react to sunlight * and start to burn. */ + @Override public void onLivingUpdate() { if (this.flyToggleTimer > 0) { --this.flyToggleTimer; @@ -1531,6 +1572,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.noClip = this.isSpectator(); if (this.isSpectator()) { @@ -1647,6 +1689,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS public void openEditSign(TileEntitySign var1) { } + @Override public void playSound(String s, float f, float f1) { this.worldObj.playSoundToNearExcept(this, s, f, f1); } @@ -1656,6 +1699,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * requirements for this entity to be spawned (only actually used on players * though its also on Entity) */ + @Override public void preparePlayerToSpawn() { this.setSize(0.6F, 1.8F); super.preparePlayerToSpawn(); @@ -1666,6 +1710,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); this.entityUniqueID = getUUID(this.gameProfile); @@ -1715,6 +1760,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS this.xpSeed = this.rand.nextInt(); } + @Override public boolean replaceItemInInventory(int i, ItemStack itemstack) { if (i >= 0 && i < this.inventory.mainInventory.length) { this.inventory.setInventorySlotContents(i, itemstack); @@ -1752,6 +1798,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + sets the players height back to normal after doing things like sleeping and * dieing */ + @Override protected void resetHeight() { if (!this.isSpectator()) { super.resetHeight(); @@ -1766,6 +1813,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Returns true if the command sender should be sent feedback about executed * commands */ + @Override public boolean sendCommandFeedback() { return MinecraftServer.getServer().worldServers[0].getGameRules().getBoolean("sendCommandFeedback"); } @@ -1776,6 +1824,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS public void sendPlayerAbilities() { } + @Override public void setAbsorptionAmount(float f) { if (f < 0.0F) { f = 0.0F; @@ -1788,6 +1837,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * + Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is * armor. Params: Item, slot */ + @Override public void setCurrentItemOrArmor(int i, ItemStack itemstack) { this.inventory.armorInventory[i] = itemstack; } @@ -1795,6 +1845,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Will get destroyed next tick. */ + @Override public void setDead() { super.setDead(); this.inventoryContainer.onContainerClosed(this); @@ -1813,6 +1864,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Sets the Entity inside a web block. */ + @Override public void setInWeb() { if (!this.capabilities.isFlying) { super.setInWeb(); @@ -1953,6 +2005,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return EntityPlayer.EnumStatus.OK; } + @Override protected void updateEntityActionState() { super.updateEntityActionState(); this.updateArmSwingProgress(); @@ -2002,6 +2055,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + Handles updating while being ridden by an entity */ + @Override public void updateRidden() { if (!this.worldObj.isRemote && this.isSneaking()) { this.mountEntity((Entity) null); @@ -2058,6 +2112,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); @@ -2095,4 +2150,4 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return this.experienceLevel >= 30 ? 112 + (this.experienceLevel - 30) * 9 : (this.experienceLevel >= 15 ? 37 + (this.experienceLevel - 15) * 5 : 7 + this.experienceLevel * 2); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/game/java/net/minecraft/entity/player/EntityPlayerMP.java index 28625b51..04ae37c4 100644 --- a/src/game/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/game/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -104,13 +104,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -122,7 +122,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPlayerMP extends EntityPlayer implements ICrafting { @@ -212,6 +212,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override public void addChatComponentMessage(IChatComponent ichatcomponent) { this.playerNetServerHandler.sendPacket(new S02PacketChat(ichatcomponent)); } @@ -219,6 +220,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Send a chat message to the CommandSender */ + @Override public void addChatMessage(IChatComponent ichatcomponent) { this.playerNetServerHandler.sendPacket(new S02PacketChat(ichatcomponent)); } @@ -226,6 +228,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Add experience levels to this player. */ + @Override public void addExperienceLevel(int levels) { super.addExperienceLevel(levels); this.lastExperience = -1; @@ -238,6 +241,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Adds a value to a statistic field. */ + @Override public void addStat(StatBase statbase, int i) { if (statbase != null) { this.statsFile.increaseStat(this, statbase, i); @@ -257,6 +261,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float f) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -290,6 +295,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Attacks for the player the targeted entity with the currently equipped * item. The equipped item has hitEntity called on it. Args: targetEntity */ + @Override public void attackTargetEntityWithCurrentItem(Entity targetEntity) { if (this.theItemInWorldManager.getGameType() == WorldSettings.GameType.SPECTATOR) { this.setSpectatingEntity(targetEntity); @@ -299,6 +305,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override public boolean canAttackPlayer(EntityPlayer other) { return !this.canPlayersAttack() ? false : super.canAttackPlayer(other); } @@ -307,6 +314,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Returns {@code true} if the CommandSender is allowed to execute the * command, {@code false} if not */ + @Override public boolean canCommandSenderUseCommand(int i, String s) { if ("seed".equals(s)) { return true; @@ -328,6 +336,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Copies the values from the given player into this player if boolean par2 is * true. Always clones Ender Chest Inventory. */ + @Override public void clonePlayer(EntityPlayer oldPlayer, boolean respawnFromEnd) { super.clonePlayer(oldPlayer, respawnFromEnd); this.lastExperience = -1; @@ -347,11 +356,13 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + set current crafting inventory back to the 2x2 square */ + @Override public void closeScreen() { this.playerNetServerHandler.sendPacket(new S2EPacketCloseWindow(this.openContainer.windowId)); this.closeContainer(); } + @Override public void displayGui(IInteractionObject iinteractionobject) { this.getNextWindowId(); this.playerNetServerHandler.sendPacket(new S2DPacketOpenWindow(this.currentWindowId, @@ -364,6 +375,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Displays the GUI for interacting with a book. */ + @Override public void displayGUIBook(ItemStack itemstack) { Item item = itemstack.getItem(); if (item == Items.written_book) { @@ -377,6 +389,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Displays the GUI for interacting with a chest inventory. Args: * chestInventory */ + @Override public void displayGUIChest(IInventory iinventory) { if (this.openContainer != this.inventoryContainer) { this.closeScreen(); @@ -411,6 +424,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { this.openContainer.onCraftGuiOpened(this); } + @Override public void displayGUIHorse(EntityHorse entityhorse, IInventory iinventory) { if (this.openContainer != this.inventoryContainer) { this.closeScreen(); @@ -424,6 +438,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { this.openContainer.onCraftGuiOpened(this); } + @Override public void displayVillagerTradeGui(IMerchant imerchant) { this.getNextWindowId(); this.openContainer = new ContainerMerchant(this.inventory, imerchant, this.worldObj); @@ -443,6 +458,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override public void func_175145_a(StatBase parStatBase) { if (parStatBase != null) { this.statsFile.unlockAchievement(this, parStatBase, 0); @@ -459,6 +475,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } } + @Override public void func_175173_a(Container container, IInventory iinventory) { for (int i = 0; i < iinventory.getFieldCount(); ++i) { this.playerNetServerHandler @@ -493,6 +510,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Get the position in the world. {@code null} is not allowed! If you * are not an entity in the world, return the coordinates 0, 0, 0 */ + @Override public BlockPos getPosition() { return new BlockPos(this.posX, this.posY + 0.5D, this.posZ); } @@ -549,6 +567,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { super.updateFallState(parDouble1, parFlag, block, blockpos); } + @Override public boolean isSpectatedByPlayer(EntityPlayerMP player) { return player.isSpectator() ? this.getSpectatingEntity() == this : (this.isSpectator() ? false : super.isSpectatedByPlayer(player)); @@ -557,6 +576,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Returns true if the player is in spectator mode. */ + @Override public boolean isSpectator() { return this.theItemInWorldManager.getGameType() == WorldSettings.GameType.SPECTATOR; } @@ -572,6 +592,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Called when a player mounts an entity. e.g. mounts a pig, mounts a boat. */ + @Override public void mountEntity(Entity entity) { Entity entity1 = this.ridingEntity; super.mountEntity(entity); @@ -594,6 +615,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override protected void onChangedPotionEffect(PotionEffect id, boolean parFlag) { super.onChangedPotionEffect(id, parFlag); this.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(this.getEntityId(), id)); @@ -603,6 +625,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Called when the player performs a critical hit on the Entity. Args: entity * that was hit critically */ + @Override public void onCriticalHit(Entity entity) { this.getServerForPlayer().getEntityTracker().func_151248_b(this, new S0BPacketAnimation(entity, 4)); } @@ -610,6 +633,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Called when the mob's health reaches 0. */ + @Override public void onDeath(DamageSource cause) { if (this.worldObj.getGameRules().getBoolean("showDeathMessages")) { Team team = this.getTeam(); @@ -652,10 +676,12 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { this.getCombatTracker().reset(); } + @Override public void onEnchantmentCritical(Entity entity) { this.getServerForPlayer().getEntityTracker().func_151248_b(this, new S0BPacketAnimation(entity, 5)); } + @Override protected void onFinishedPotionEffect(PotionEffect parPotionEffect) { super.onFinishedPotionEffect(parPotionEffect); this.playerNetServerHandler.sendPacket(new S1EPacketRemoveEntityEffect(this.getEntityId(), parPotionEffect)); @@ -665,6 +691,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Called whenever an item is picked up from walking over it. Args: * pickedUpEntity, stackSize */ + @Override public void onItemPickup(Entity parEntity, int parInt1) { super.onItemPickup(parEntity, parInt1); this.openContainer.detectAndSendChanges(); @@ -673,11 +700,13 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Used for when item use count runs out, ie: eating completed */ + @Override protected void onItemUseFinish() { this.playerNetServerHandler.sendPacket(new S19PacketEntityStatus(this, (byte) 9)); super.onItemUseFinish(); } + @Override protected void onNewPotionEffect(PotionEffect id) { super.onNewPotionEffect(id); this.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(this.getEntityId(), id)); @@ -686,6 +715,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.theItemInWorldManager.updateBlockRemoving(); --this.respawnInvulnerabilityTicks; @@ -825,6 +855,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } } + @Override public void openEditSign(TileEntitySign tileentitysign) { tileentitysign.setPlayer(this); this.playerNetServerHandler.sendPacket(new S36PacketSignEditorOpen(tileentitysign.getPos())); @@ -833,6 +864,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("playerGameType", 99)) { @@ -858,6 +890,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override public void removeExperienceLevel(int levels) { super.removeExperienceLevel(levels); this.lastExperience = -1; @@ -870,6 +903,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Sends an END_COMBAT packet to the client */ + @Override public void sendEndCombat() { super.sendEndCombat(); this.playerNetServerHandler @@ -879,6 +913,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Sends an ENTER_COMBAT packet to the client */ + @Override public void sendEnterCombat() { super.sendEnterCombat(); this.playerNetServerHandler @@ -888,6 +923,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Sends the player's abilities to the server (if there is one). */ + @Override public void sendPlayerAbilities() { if (this.playerNetServerHandler != null) { this.playerNetServerHandler.sendPacket(new S39PacketPlayerAbilities(this.capabilities)); @@ -901,6 +937,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * int identifies which variable to update, and the second contains the new * value. Both are truncated to shorts in non-local SMP. */ + @Override public void sendProgressBarUpdate(Container container, int i, int j) { this.playerNetServerHandler.sendPacket(new S31PacketWindowProperty(container.windowId, i, j)); } @@ -910,6 +947,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * doesn't have to match the actual contents of that slot. Args: Container, slot * number, slot contents */ + @Override public void sendSlotContents(Container container, int i, ItemStack itemstack) { if (!(container.getSlot(i) instanceof SlotCrafting)) { if (!this.isChangingQuantityOnly) { @@ -947,6 +985,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Sets the player's game mode and sends it to them. */ + @Override public void setGameType(WorldSettings.GameType gameType) { this.theItemInWorldManager.setGameType(gameType); this.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(3, (float) gameType.getID())); @@ -964,6 +1003,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + sets the itemInUse when the use item button is clicked. Args: itemstack, * int maxItemUseDuration */ + @Override public void setItemInUse(ItemStack stack, int duration) { super.setItemInUse(stack, duration); if (stack != null && stack.getItem() != null && stack.getItem().getItemUseAction(stack) == EnumAction.EAT) { @@ -983,6 +1023,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Sets the position of the entity and updates the 'last' variables */ + @Override public void setPositionAndUpdate(double x, double y, double z) { this.playerNetServerHandler.setPlayerLocation(x, y, z, this.rotationYaw, this.rotationPitch); } @@ -1002,6 +1043,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * + Teleports the entity to another dimension. Params: Dimension number to * teleport to */ + @Override public void travelToDimension(int dimensionId) { if (this.dimension == 1 && dimensionId == 1) { this.triggerAchievement(AchievementList.theEnd2); @@ -1030,6 +1072,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { } + @Override public EntityPlayer.EnumStatus trySleep(BlockPos bedLocation) { EntityPlayer.EnumStatus entityplayer$enumstatus = super.trySleep(bedLocation); if (entityplayer$enumstatus == EntityPlayer.EnumStatus.OK) { @@ -1088,11 +1131,13 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + update the crafting window inventory with the items in the list */ + @Override public void updateCraftingInventory(Container container, List list) { this.playerNetServerHandler.sendPacket(new S30PacketWindowItems(container.windowId, list)); this.playerNetServerHandler.sendPacket(new S2FPacketSetSlot(-1, -1, this.inventory.getItemStack())); } + @Override protected void updateFallState(double y, boolean onGroundIn, Block blockIn, BlockPos pos) { } @@ -1110,6 +1155,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { * Otherwise, updates potion effect color, ambience, and invisibility metadata * values */ + @Override protected void updatePotionMetadata() { if (this.isSpectator()) { this.resetPotionEffectMetadata(); @@ -1124,6 +1170,7 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + Wake up the player if they're sleeping. */ + @Override public void wakeUpPlayer(boolean updateWorldFlag, boolean setSpawn, boolean parFlag3) { if (this.isPlayerSleeping()) { this.getServerForPlayer().getEntityTracker().func_151248_b(this, new S0BPacketAnimation(this, 2)); @@ -1140,8 +1187,9 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("playerGameType", this.theItemInWorldManager.getGameType().getID()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/player/EnumPlayerModelParts.java b/src/game/java/net/minecraft/entity/player/EnumPlayerModelParts.java index 31904df8..e17fdf7c 100644 --- a/src/game/java/net/minecraft/entity/player/EnumPlayerModelParts.java +++ b/src/game/java/net/minecraft/entity/player/EnumPlayerModelParts.java @@ -6,13 +6,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPlayerModelParts { CAPE(0, "cape"), JACKET(1, "jacket"), LEFT_SLEEVE(2, "left_sleeve"), RIGHT_SLEEVE(3, "right_sleeve"), @@ -59,4 +59,4 @@ public enum EnumPlayerModelParts { public String getPartName() { return this.partName; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/player/InventoryPlayer.java b/src/game/java/net/minecraft/entity/player/InventoryPlayer.java index d3bee2bd..6b1f0ebd 100644 --- a/src/game/java/net/minecraft/entity/player/InventoryPlayer.java +++ b/src/game/java/net/minecraft/entity/player/InventoryPlayer.java @@ -20,13 +20,13 @@ import net.minecraft.util.ReportedException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.util.ReportedException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryPlayer implements IInventory { /** @@ -57,6 +57,7 @@ public class InventoryPlayer implements IInventory { * + An array of 4 item stacks containing the currently worn armor pieces. */ public ItemStack[] armorInventory = new ItemStack[4]; + public int currentItem; public EntityPlayer player; private ItemStack itemStack; @@ -110,6 +111,7 @@ public class InventoryPlayer implements IInventory { Integer.valueOf(Item.getIdFromItem(itemStackIn.getItem()))); crashreportcategory.addCrashSection("Item data", Integer.valueOf(itemStackIn.getMetadata())); crashreportcategory.addCrashSectionCallable("Item name", new Callable() { + @Override public String call() throws Exception { return itemStackIn.getDisplayName(); } @@ -160,6 +162,7 @@ public class InventoryPlayer implements IInventory { } + @Override public void clear() { for (int i = 0; i < this.mainInventory.length; ++i) { this.mainInventory[i] = null; @@ -168,7 +171,6 @@ public class InventoryPlayer implements IInventory { for (int j = 0; j < this.armorInventory.length; ++j) { this.armorInventory[j] = null; } - } /** @@ -251,6 +253,7 @@ public class InventoryPlayer implements IInventory { return i; } + @Override public void closeInventory(EntityPlayer var1) { } @@ -282,7 +285,6 @@ public class InventoryPlayer implements IInventory { for (int j = 0; j < this.armorInventory.length; ++j) { this.armorInventory[j] = ItemStack.copyItemStack(playerInventory.armorInventory[j]); } - this.currentItem = playerInventory.currentItem; } @@ -323,8 +325,10 @@ public class InventoryPlayer implements IInventory { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { ItemStack[] aitemstack = this.mainInventory; + if (i >= this.mainInventory.length) { aitemstack = this.armorInventory; i -= this.mainInventory.length; @@ -340,7 +344,6 @@ public class InventoryPlayer implements IInventory { if (aitemstack[i].stackSize == 0) { aitemstack[i] = null; } - return itemstack; } } else { @@ -379,15 +382,18 @@ public class InventoryPlayer implements IInventory { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -430,6 +436,7 @@ public class InventoryPlayer implements IInventory { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -445,6 +452,7 @@ public class InventoryPlayer implements IInventory { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return "container.inventory"; } @@ -452,6 +460,7 @@ public class InventoryPlayer implements IInventory { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.mainInventory.length + 4; } @@ -459,6 +468,7 @@ public class InventoryPlayer implements IInventory { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { ItemStack[] aitemstack = this.mainInventory; if (i >= aitemstack.length) { @@ -498,6 +508,7 @@ public class InventoryPlayer implements IInventory { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return false; } @@ -533,6 +544,7 @@ public class InventoryPlayer implements IInventory { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -541,6 +553,7 @@ public class InventoryPlayer implements IInventory { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.player.isDead ? false : entityplayer.getDistanceSqToEntity(this.player) <= 64.0D; } @@ -549,10 +562,12 @@ public class InventoryPlayer implements IInventory { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { this.inventoryChanged = true; } + @Override public void openInventory(EntityPlayer var1) { } @@ -584,6 +599,7 @@ public class InventoryPlayer implements IInventory { /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { ItemStack[] aitemstack = this.mainInventory; if (i >= this.mainInventory.length) { @@ -630,6 +646,7 @@ public class InventoryPlayer implements IInventory { } } + @Override public void setField(int var1, int var2) { } @@ -637,6 +654,7 @@ public class InventoryPlayer implements IInventory { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { ItemStack[] aitemstack = this.mainInventory; if (i >= aitemstack.length) { @@ -740,4 +758,4 @@ public class InventoryPlayer implements IInventory { return parNBTTagList; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/player/PlayerCapabilities.java b/src/game/java/net/minecraft/entity/player/PlayerCapabilities.java index 0c7dd064..aa8cc6e9 100644 --- a/src/game/java/net/minecraft/entity/player/PlayerCapabilities.java +++ b/src/game/java/net/minecraft/entity/player/PlayerCapabilities.java @@ -5,13 +5,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerCapabilities { public boolean disableDamage; @@ -83,4 +83,4 @@ public class PlayerCapabilities { nbttagcompound.setFloat("walkSpeed", this.walkSpeed); tagCompound.setTag("abilities", nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityArrow.java b/src/game/java/net/minecraft/entity/projectile/EntityArrow.java index 155d3469..e324ea20 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityArrow.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityArrow.java @@ -29,13 +29,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityArrow extends Entity implements IProjectile { private int xTile = -1; @@ -131,6 +131,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + If returns false, the item will not inflict any damage against entities. */ + @Override public boolean canAttackWithItem() { return false; } @@ -139,10 +140,12 @@ public class EntityArrow extends Entity implements IProjectile { * + returns if this entity triggers Block.onEntityWalking on the blocks they * walk on. used for spiders and wolves to prevent them from trampling crops */ + @Override protected boolean canTriggerWalking() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObject(16, Byte.valueOf((byte) 0)); } @@ -151,6 +154,7 @@ public class EntityArrow extends Entity implements IProjectile { return this.damage; } + @Override public float getEyeHeight() { return 0.0F; } @@ -166,6 +170,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + Called by a player entity when they collide with an entity */ + @Override public void onCollideWithPlayer(EntityPlayer entityplayer) { if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0) { boolean flag = this.canBePickedUp == 1 @@ -188,6 +193,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (isChair) { @@ -438,6 +444,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.xTile = nbttagcompound.getShort("xTile"); this.yTile = nbttagcompound.getShort("yTile"); @@ -488,6 +495,7 @@ public class EntityArrow extends Entity implements IProjectile { this.knockbackStrength = knockbackStrengthIn; } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float f, float f1, int var9, boolean var10) { this.setPosition(d0, d1, d2); this.setRotation(f, f1); @@ -497,6 +505,7 @@ public class EntityArrow extends Entity implements IProjectile { * + Similar to setArrowHeading, it's point the throwable entity to a x, y, z * direction. */ + @Override public void setThrowableHeading(double x, double y, double z, float velocity, float inaccuracy) { float f = MathHelper.sqrt_double(x * x + y * y + z * z); x = x / (double) f; @@ -525,6 +534,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.motionX = d0; this.motionY = d1; @@ -546,6 +556,7 @@ public class EntityArrow extends Entity implements IProjectile { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("xTile", (short) this.xTile); nbttagcompound.setShort("yTile", (short) this.yTile); @@ -559,4 +570,4 @@ public class EntityArrow extends Entity implements IProjectile { nbttagcompound.setByte("pickup", (byte) this.canBePickedUp); nbttagcompound.setDouble("damage", this.damage); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityEgg.java b/src/game/java/net/minecraft/entity/projectile/EntityEgg.java index 66e3853c..6a4aa1f9 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityEgg.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityEgg.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityEgg extends EntityThrowable { public EntityEgg(World worldIn) { @@ -48,6 +48,7 @@ public class EntityEgg extends EntityThrowable { /** * + Called when this EntityThrowable hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (movingobjectposition.entityHit != null) { movingobjectposition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), @@ -81,4 +82,4 @@ public class EntityEgg extends EntityThrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityFireball.java b/src/game/java/net/minecraft/entity/projectile/EntityFireball.java index 5af55a30..1fbc5776 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityFireball.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityFireball.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityFireball extends Entity { private int xTile = -1; @@ -96,6 +96,7 @@ public abstract class EntityFireball extends Entity { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource damagesource, float var2) { if (this.isEntityInvulnerable(damagesource)) { return false; @@ -127,28 +128,34 @@ public abstract class EntityFireball extends Entity { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return true; } + @Override protected void entityInit() { } /** * + Gets how bright this entity is. */ + @Override public float getBrightness(float var1) { return 1.0F; } + @Override public int getBrightnessForRender(float var1) { return 15728880; } + @Override public float getCollisionBorderSize() { return 1.0F; } + @Override protected float getEaglerDynamicLightsValueSimple(float partialTicks) { return 1.0f; } @@ -166,6 +173,7 @@ public abstract class EntityFireball extends Entity { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; if (Double.isNaN(d1)) { @@ -181,6 +189,7 @@ public abstract class EntityFireball extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { if (this.worldObj.isRemote || (this.shootingEntity == null || !this.shootingEntity.isDead) && this.worldObj.isBlockLoaded(new BlockPos(this))) { @@ -304,6 +313,7 @@ public abstract class EntityFireball extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.xTile = nbttagcompound.getShort("xTile"); this.yTile = nbttagcompound.getShort("yTile"); @@ -329,6 +339,7 @@ public abstract class EntityFireball extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("xTile", (short) this.xTile); nbttagcompound.setShort("yTile", (short) this.yTile); @@ -339,4 +350,4 @@ public abstract class EntityFireball extends Entity { nbttagcompound.setTag("direction", this.newDoubleNBTList(new double[] { this.motionX, this.motionY, this.motionZ })); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityFishHook.java b/src/game/java/net/minecraft/entity/projectile/EntityFishHook.java index e3fe984f..8ef7c23e 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityFishHook.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityFishHook.java @@ -33,13 +33,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +51,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityFishHook extends Entity { private static final List JUNK = Arrays.asList(new WeightedRandomFishable[] { @@ -151,6 +151,7 @@ public class EntityFishHook extends Entity { this.handleHookCasting(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); } + @Override protected void entityInit() { } @@ -249,6 +250,7 @@ public class EntityFishHook extends Entity { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; if (Double.isNaN(d1)) { @@ -262,6 +264,7 @@ public class EntityFishHook extends Entity { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { super.onUpdate(); if (this.fishPosRotationIncrements > 0) { @@ -536,6 +539,7 @@ public class EntityFishHook extends Entity { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.xTile = nbttagcompound.getShort("xTile"); this.yTile = nbttagcompound.getShort("yTile"); @@ -553,6 +557,7 @@ public class EntityFishHook extends Entity { /** * + Will get destroyed next tick. */ + @Override public void setDead() { super.setDead(); if (this.angler != null) { @@ -561,6 +566,7 @@ public class EntityFishHook extends Entity { } + @Override public void setPositionAndRotation2(double d0, double d1, double d2, float f, float f1, int i, boolean var10) { this.fishX = d0; this.fishY = d1; @@ -576,6 +582,7 @@ public class EntityFishHook extends Entity { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.clientMotionX = this.motionX = d0; this.clientMotionY = this.motionY = d1; @@ -585,6 +592,7 @@ public class EntityFishHook extends Entity { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("xTile", (short) this.xTile); nbttagcompound.setShort("yTile", (short) this.yTile); @@ -594,4 +602,4 @@ public class EntityFishHook extends Entity { nbttagcompound.setByte("shake", (byte) this.shake); nbttagcompound.setByte("inGround", (byte) (this.inGround ? 1 : 0)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityLargeFireball.java b/src/game/java/net/minecraft/entity/projectile/EntityLargeFireball.java index 64aa2721..4cb1d447 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityLargeFireball.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityLargeFireball.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityLargeFireball extends EntityFireball { public int explosionPower = 1; @@ -49,6 +49,7 @@ public class EntityLargeFireball extends EntityFireball { /** * + Called when this EntityFireball hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { if (movingobjectposition.entityHit != null) { @@ -68,6 +69,7 @@ public class EntityLargeFireball extends EntityFireball { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("ExplosionPower", 99)) { @@ -79,8 +81,9 @@ public class EntityLargeFireball extends EntityFireball { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); nbttagcompound.setInteger("ExplosionPower", this.explosionPower); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityPotion.java b/src/game/java/net/minecraft/entity/projectile/EntityPotion.java index f722def0..029844f1 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityPotion.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityPotion.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityPotion extends EntityThrowable { private ItemStack potionDamage; @@ -64,10 +64,12 @@ public class EntityPotion extends EntityThrowable { /** * + Gets the amount of gravity to apply to the thrown entity with each tick. */ + @Override protected float getGravityVelocity() { return 0.05F; } + @Override protected float getInaccuracy() { return -20.0F; } @@ -84,6 +86,7 @@ public class EntityPotion extends EntityThrowable { return this.potionDamage.getMetadata(); } + @Override protected float getVelocity() { return 0.5F; } @@ -91,6 +94,7 @@ public class EntityPotion extends EntityThrowable { /** * + Called when this EntityThrowable hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { List list = Items.potionitem.getEffects(this.potionDamage); @@ -135,6 +139,7 @@ public class EntityPotion extends EntityThrowable { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); if (nbttagcompound.hasKey("Potion", 10)) { @@ -163,6 +168,7 @@ public class EntityPotion extends EntityThrowable { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); if (this.potionDamage != null) { @@ -170,4 +176,4 @@ public class EntityPotion extends EntityThrowable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntitySmallFireball.java b/src/game/java/net/minecraft/entity/projectile/EntitySmallFireball.java index 9498dd16..d2e6416b 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntitySmallFireball.java +++ b/src/game/java/net/minecraft/entity/projectile/EntitySmallFireball.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySmallFireball extends EntityFireball { public EntitySmallFireball(World worldIn) { @@ -51,6 +51,7 @@ public class EntitySmallFireball extends EntityFireball { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource var1, float var2) { return false; } @@ -59,6 +60,7 @@ public class EntitySmallFireball extends EntityFireball { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return false; } @@ -66,6 +68,7 @@ public class EntitySmallFireball extends EntityFireball { /** * + Called when this EntityFireball hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { if (movingobjectposition.entityHit != null) { @@ -95,4 +98,4 @@ public class EntitySmallFireball extends EntityFireball { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntitySnowball.java b/src/game/java/net/minecraft/entity/projectile/EntitySnowball.java index 202f8f36..31a30ef7 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntitySnowball.java +++ b/src/game/java/net/minecraft/entity/projectile/EntitySnowball.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntitySnowball extends EntityThrowable { public EntitySnowball(World worldIn) { @@ -46,6 +46,7 @@ public class EntitySnowball extends EntityThrowable { /** * + Called when this EntityThrowable hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition parMovingObjectPosition) { if (parMovingObjectPosition.entityHit != null) { byte b0 = 0; @@ -66,4 +67,4 @@ public class EntitySnowball extends EntityThrowable { this.setDead(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityThrowable.java b/src/game/java/net/minecraft/entity/projectile/EntityThrowable.java index 3527cf0b..1813e006 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityThrowable.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityThrowable.java @@ -23,13 +23,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EntityThrowable extends Entity implements IProjectile { private int xTile = -1; @@ -87,6 +87,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.getVelocity(), 1.0F); } + @Override protected void entityInit() { } @@ -129,6 +130,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { * and comparing it to its average edge length * 64 * renderDistanceWeight Args: * distance */ + @Override public boolean isInRangeToRenderDist(double d0) { double d1 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; if (Double.isNaN(d1)) { @@ -144,6 +146,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { /** * + Called to update the entity's position/logic. */ + @Override public void onUpdate() { this.lastTickPosX = this.posX; this.lastTickPosY = this.posY; @@ -272,6 +275,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { /** * + (abstract) Protected helper method to read subclass entity data from NBT. */ + @Override public void readEntityFromNBT(NBTTagCompound nbttagcompound) { this.xTile = nbttagcompound.getShort("xTile"); this.yTile = nbttagcompound.getShort("yTile"); @@ -297,6 +301,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { * + Similar to setArrowHeading, it's point the throwable entity to a x, y, z * direction. */ + @Override public void setThrowableHeading(double d0, double d1, double d2, float f, float f1) { float f2 = MathHelper.sqrt_double(d0 * d0 + d1 * d1 + d2 * d2); d0 = d0 / (double) f2; @@ -322,6 +327,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { /** * + Sets the velocity to the args. Args: x, y, z */ + @Override public void setVelocity(double d0, double d1, double d2) { this.motionX = d0; this.motionY = d1; @@ -339,6 +345,7 @@ public abstract class EntityThrowable extends Entity implements IProjectile { /** * + (abstract) Protected helper method to write subclass entity data to NBT. */ + @Override public void writeEntityToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setShort("xTile", (short) this.xTile); nbttagcompound.setShort("yTile", (short) this.yTile); @@ -353,4 +360,4 @@ public abstract class EntityThrowable extends Entity implements IProjectile { nbttagcompound.setString("ownerName", this.throwerName == null ? "" : this.throwerName); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/entity/projectile/EntityWitherSkull.java b/src/game/java/net/minecraft/entity/projectile/EntityWitherSkull.java index 00b678bf..6c7f9c72 100644 --- a/src/game/java/net/minecraft/entity/projectile/EntityWitherSkull.java +++ b/src/game/java/net/minecraft/entity/projectile/EntityWitherSkull.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityWitherSkull extends EntityFireball { public EntityWitherSkull(World worldIn) { @@ -55,6 +55,7 @@ public class EntityWitherSkull extends EntityFireball { /** * + Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource var1, float var2) { return false; } @@ -63,10 +64,12 @@ public class EntityWitherSkull extends EntityFireball { * + Returns true if other Entities should be prevented from moving through this * Entity. */ + @Override public boolean canBeCollidedWith() { return false; } + @Override protected void entityInit() { this.dataWatcher.addObject(10, Byte.valueOf((byte) 0)); } @@ -74,6 +77,7 @@ public class EntityWitherSkull extends EntityFireball { /** * + Explosion resistance of a block relative to this entity */ + @Override public float getExplosionResistance(Explosion explosion, World world, BlockPos blockpos, IBlockState iblockstate) { float f = super.getExplosionResistance(explosion, world, blockpos, iblockstate); Block block = iblockstate.getBlock(); @@ -88,6 +92,7 @@ public class EntityWitherSkull extends EntityFireball { * + Return the motion factor for this projectile. The factor is multiplied by * the original motion. */ + @Override protected float getMotionFactor() { return this.isInvulnerable() ? 0.73F : super.getMotionFactor(); } @@ -96,6 +101,7 @@ public class EntityWitherSkull extends EntityFireball { * + Returns true if the entity is on fire. Used by render to add the fire * effect on rendering. */ + @Override public boolean isBurning() { return false; } @@ -110,6 +116,7 @@ public class EntityWitherSkull extends EntityFireball { /** * + Called when this EntityFireball hits a block or entity. */ + @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { if (movingobjectposition.entityHit != null) { @@ -154,4 +161,4 @@ public class EntityWitherSkull extends EntityFireball { public void setInvulnerable(boolean invulnerable) { this.dataWatcher.updateObject(10, Byte.valueOf((byte) (invulnerable ? 1 : 0))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/event/ClickEvent.java b/src/game/java/net/minecraft/event/ClickEvent.java index b4ce76d7..4c70ba40 100644 --- a/src/game/java/net/minecraft/event/ClickEvent.java +++ b/src/game/java/net/minecraft/event/ClickEvent.java @@ -7,13 +7,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClickEvent { public static enum Action { @@ -73,6 +73,7 @@ public class ClickEvent { this.value = theValue; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -111,13 +112,15 @@ public class ClickEvent { return this.value; } + @Override public int hashCode() { int i = this.action.hashCode(); i = 31 * i + (this.value != null ? this.value.hashCode() : 0); return i; } + @Override public String toString() { return "ClickEvent{action=" + this.action + ", value=\'" + this.value + '\'' + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/event/HoverEvent.java b/src/game/java/net/minecraft/event/HoverEvent.java index 50547fdb..1ae15ef9 100644 --- a/src/game/java/net/minecraft/event/HoverEvent.java +++ b/src/game/java/net/minecraft/event/HoverEvent.java @@ -9,13 +9,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HoverEvent { public static enum Action { @@ -74,6 +74,7 @@ public class HoverEvent { this.value = valueIn; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -112,13 +113,15 @@ public class HoverEvent { return this.value; } + @Override public int hashCode() { int i = this.action.hashCode(); i = 31 * i + (this.value != null ? this.value.hashCode() : 0); return i; } + @Override public String toString() { return "HoverEvent{action=" + this.action + ", value=\'" + this.value + '\'' + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/init/Blocks.java b/src/game/java/net/minecraft/init/Blocks.java index fc16fdfb..d7827283 100644 --- a/src/game/java/net/minecraft/init/Blocks.java +++ b/src/game/java/net/minecraft/init/Blocks.java @@ -37,13 +37,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -55,7 +55,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Blocks { public static Block air; @@ -274,6 +274,13 @@ public class Blocks { public static Block fabricator; //autogeneratevar + public static Block stripped_spruce_log; + public static Block stripped_oak_log; + public static Block stripped_jungle_log; + public static Block stripped_dark_oak_log; + public static Block stripped_birch_log; + public static Block stripped_acacia_log; + public static Block dirt_path; public static Block tuff_tiles; public static Block soul_stone_tiles; public static Block soul_stone; @@ -655,6 +662,13 @@ public class Blocks { fabricator = getRegisteredBlock("starlike:fabricator"); //autogenerateequals + stripped_spruce_log = getRegisteredBlock("starlike:stripped_spruce_log"); + stripped_oak_log = getRegisteredBlock("starlike:stripped_oak_log"); + stripped_jungle_log = getRegisteredBlock("starlike:stripped_jungle_log"); + stripped_dark_oak_log = getRegisteredBlock("starlike:stripped_dark_oak_log"); + stripped_birch_log = getRegisteredBlock("starlike:stripped_birch_log"); + stripped_acacia_log = getRegisteredBlock("starlike:stripped_acacia_log"); + dirt_path = getRegisteredBlock("starlike:dirt_path"); tuff_tiles = getRegisteredBlock("starlike:tuff_tiles"); soul_stone_tiles = getRegisteredBlock("starlike:soul_stone_tiles"); soul_stone = getRegisteredBlock("starlike:soul_stone"); @@ -824,4 +838,4 @@ public class Blocks { return (Block) Block.blockRegistry.getObject(new ResourceLocation(parString1)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/init/Bootstrap.java b/src/game/java/net/minecraft/init/Bootstrap.java index 385da1ca..858c2caf 100644 --- a/src/game/java/net/minecraft/init/Bootstrap.java +++ b/src/game/java/net/minecraft/init/Bootstrap.java @@ -62,13 +62,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -80,7 +80,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Bootstrap { private static final PrintStream SYSOUT = System.out; @@ -137,6 +137,7 @@ public class Bootstrap { static void registerDispenserBehaviors() { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.arrow, new BehaviorProjectileDispense() { + @Override protected IProjectile getProjectileEntity(World world, IPosition iposition) { EntityArrow entityarrow = new EntityArrow(world, iposition.getX(), iposition.getY(), iposition.getZ()); entityarrow.canBePickedUp = 1; @@ -144,24 +145,29 @@ public class Bootstrap { } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.egg, new BehaviorProjectileDispense() { + @Override protected IProjectile getProjectileEntity(World world, IPosition iposition) { return new EntityEgg(world, iposition.getX(), iposition.getY(), iposition.getZ()); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.snowball, new BehaviorProjectileDispense() { + @Override protected IProjectile getProjectileEntity(World world, IPosition iposition) { return new EntitySnowball(world, iposition.getX(), iposition.getY(), iposition.getZ()); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.experience_bottle, new BehaviorProjectileDispense() { + @Override protected float func_82498_a() { return super.func_82498_a() * 0.5F; } + @Override protected float func_82500_b() { return super.func_82500_b() * 1.25F; } + @Override protected IProjectile getProjectileEntity(World world, IPosition iposition) { return new EntityExpBottle(world, iposition.getX(), iposition.getY(), iposition.getZ()); } @@ -169,16 +175,20 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.potionitem, new IBehaviorDispenseItem() { private final BehaviorDefaultDispenseItem field_150843_b = new BehaviorDefaultDispenseItem(); + @Override public ItemStack dispense(IBlockSource iblocksource, final ItemStack itemstack) { return ItemPotion.isSplash(itemstack.getMetadata()) ? (new BehaviorProjectileDispense() { + @Override protected float func_82498_a() { return super.func_82498_a() * 0.5F; } + @Override protected float func_82500_b() { return super.func_82500_b() * 1.25F; } + @Override protected IProjectile getProjectileEntity(World world, IPosition iposition) { return new EntityPotion(world, iposition.getX(), iposition.getY(), iposition.getZ(), itemstack.copy()); @@ -187,6 +197,7 @@ public class Bootstrap { } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.spawn_egg, new BehaviorDefaultDispenseItem() { + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { EnumFacing enumfacing = BlockDispenser.getFacing(iblocksource.getBlockMetadata()); double d0 = iblocksource.getX() + (double) enumfacing.getFrontOffsetX(); @@ -203,6 +214,7 @@ public class Bootstrap { } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.fireworks, new BehaviorDefaultDispenseItem() { + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { EnumFacing enumfacing = BlockDispenser.getFacing(iblocksource.getBlockMetadata()); double d0 = iblocksource.getX() + (double) enumfacing.getFrontOffsetX(); @@ -215,11 +227,13 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { iblocksource.getWorld().playAuxSFX(1002, iblocksource.getBlockPos(), 0); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.fire_charge, new BehaviorDefaultDispenseItem() { + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { EnumFacing enumfacing = BlockDispenser.getFacing(iblocksource.getBlockMetadata()); IPosition iposition = BlockDispenser.getDispensePosition(iblocksource); @@ -236,6 +250,7 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { iblocksource.getWorld().playAuxSFX(1009, iblocksource.getBlockPos(), 0); } @@ -243,6 +258,7 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.boat, new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150842_b = new BehaviorDefaultDispenseItem(); + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { EnumFacing enumfacing = BlockDispenser.getFacing(iblocksource.getBlockMetadata()); World world = iblocksource.getWorld(); @@ -269,6 +285,7 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { iblocksource.getWorld().playAuxSFX(1000, iblocksource.getBlockPos(), 0); } @@ -276,6 +293,7 @@ public class Bootstrap { BehaviorDefaultDispenseItem behaviordefaultdispenseitem = new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150841_b = new BehaviorDefaultDispenseItem(); + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { ItemBucket itembucket = (ItemBucket) itemstack.getItem(); BlockPos blockpos = iblocksource.getBlockPos() @@ -294,6 +312,7 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.bucket, new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150840_b = new BehaviorDefaultDispenseItem(); + @Override public ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); BlockPos blockpos = iblocksource.getBlockPos() @@ -329,6 +348,7 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.flint_and_steel, new BehaviorDefaultDispenseItem() { private boolean field_150839_b = true; + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); BlockPos blockpos = iblocksource.getBlockPos() @@ -349,6 +369,7 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { if (this.field_150839_b) { iblocksource.getWorld().playAuxSFX(1000, iblocksource.getBlockPos(), 0); @@ -361,6 +382,7 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.dye, new BehaviorDefaultDispenseItem() { private boolean field_150838_b = true; + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { if (EnumDyeColor.WHITE == EnumDyeColor.byDyeDamage(itemstack.getMetadata())) { World world = iblocksource.getWorld(); @@ -378,6 +400,7 @@ public class Bootstrap { } } + @Override protected void playDispenseSound(IBlockSource iblocksource) { if (this.field_150838_b) { iblocksource.getWorld().playAuxSFX(1000, iblocksource.getBlockPos(), 0); @@ -389,6 +412,7 @@ public class Bootstrap { }); BlockDispenser.dispenseBehaviorRegistry.putObject(Item.getItemFromBlock(Blocks.tnt), new BehaviorDefaultDispenseItem() { + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); BlockPos blockpos = iblocksource.getBlockPos() @@ -404,6 +428,7 @@ public class Bootstrap { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.skull, new BehaviorDefaultDispenseItem() { private boolean field_179240_b = true; + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); EnumFacing enumfacing = BlockDispenser.getFacing(iblocksource.getBlockMetadata()); @@ -449,6 +474,7 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { if (this.field_179240_b) { iblocksource.getWorld().playAuxSFX(1000, iblocksource.getBlockPos(), 0); @@ -462,6 +488,7 @@ public class Bootstrap { new BehaviorDefaultDispenseItem() { private boolean field_179241_b = true; + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { World world = iblocksource.getWorld(); BlockPos blockpos = iblocksource.getBlockPos() @@ -477,6 +504,7 @@ public class Bootstrap { return itemstack; } + @Override protected void playDispenseSound(IBlockSource iblocksource) { if (this.field_179241_b) { iblocksource.getWorld().playAuxSFX(1000, iblocksource.getBlockPos(), 0); @@ -487,4 +515,4 @@ public class Bootstrap { } }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/init/Items.java b/src/game/java/net/minecraft/init/Items.java index e119af1d..9640b750 100644 --- a/src/game/java/net/minecraft/init/Items.java +++ b/src/game/java/net/minecraft/init/Items.java @@ -13,17 +13,18 @@ import net.minecraft.item.ItemShears; import net.minecraft.util.ResourceLocation; import net.starlikeclient.minecraft.items.ItemBackpack; import net.starlikeclient.minecraft.items.ItemChisel; +import net.starlikeclient.minecraft.items.ItemEnderBackpack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +36,7 @@ import net.starlikeclient.minecraft.items.ItemChisel; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Items { public static Item iron_shovel; @@ -254,9 +255,13 @@ public class Items { public static ItemArmor netherite_chestplate; public static ItemArmor netherite_leggings; public static ItemArmor netherite_boots; - public static ItemChisel chisel; - //public static ItemBackpack leather_backpack; - + public static ItemChisel chisel; + public static Item amber; + public static ItemBow ambered_bow; + public static ItemBackpack leather_backpack; + public static ItemBackpack iron_backpack; + public static ItemBackpack diamond_backpack; + public static ItemEnderBackpack ender_backpack; static void doBootstrap() { if (!Bootstrap.isRegistered()) { @@ -480,12 +485,16 @@ public class Items { netherite_leggings = (ItemArmor) getRegisteredItem("starlike:netherite_leggings"); netherite_boots = (ItemArmor) getRegisteredItem("starlike:netherite_boots"); chisel = (ItemChisel) getRegisteredItem("starlike:chisel"); - //leather_backpack = (ItemBackpack) getRegisteredItem("starlike:leather_backpack"); - + amber = getRegisteredItem("starlike:amber"); + leather_backpack = (ItemBackpack) getRegisteredItem("starlike:leather_backpack"); + iron_backpack = (ItemBackpack) getRegisteredItem("starlike:iron_backpack"); + // ambered_bow = (ItemBow) getRegisteredItem("starlike:ambered_bow"); + diamond_backpack = (ItemBackpack) getRegisteredItem("starlike:diamond_backpack"); + ender_backpack = (ItemEnderBackpack) getRegisteredItem("starlike:ender_backpack"); } } private static Item getRegisteredItem(String name) { return (Item) Item.itemRegistry.getObject(new ResourceLocation(name)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/AnimalChest.java b/src/game/java/net/minecraft/inventory/AnimalChest.java index 4410324b..b452743d 100644 --- a/src/game/java/net/minecraft/inventory/AnimalChest.java +++ b/src/game/java/net/minecraft/inventory/AnimalChest.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AnimalChest extends InventoryBasic { public AnimalChest(IChatComponent invTitle, int slotCount) { @@ -33,4 +33,4 @@ public class AnimalChest extends InventoryBasic { public AnimalChest(String inventoryName, int slotCount) { super(inventoryName, false, slotCount); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/Container.java b/src/game/java/net/minecraft/inventory/Container.java index ffa81699..5dded239 100644 --- a/src/game/java/net/minecraft/inventory/Container.java +++ b/src/game/java/net/minecraft/inventory/Container.java @@ -19,13 +19,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Container { /** @@ -265,6 +265,8 @@ public abstract class Container { * container/player inventor between minIndex (included) and maxIndex * (excluded). Args : stack, minIndex, maxIndex, negativDirection. /!\ the * Container implementation do not check if the item is valid for the slot + * + * + Starlike: added isItemValid check */ protected boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverseDirection) { boolean flag = false; @@ -277,7 +279,7 @@ public abstract class Container { while (stack.stackSize > 0 && (!reverseDirection && i < endIndex || reverseDirection && i >= startIndex)) { Slot slot = (Slot) this.inventorySlots.get(i); ItemStack itemstack = slot.getStack(); - if (itemstack != null && itemstack.getItem() == stack.getItem() + if (itemstack != null && slot.isItemValid(stack) && itemstack.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == itemstack.getMetadata()) && ItemStack.areItemStackTagsEqual(stack, itemstack)) { int j = itemstack.stackSize + stack.stackSize; @@ -312,7 +314,7 @@ public abstract class Container { while (!reverseDirection && i < endIndex || reverseDirection && i >= startIndex) { Slot slot1 = (Slot) this.inventorySlots.get(i); ItemStack itemstack1 = slot1.getStack(); - if (itemstack1 == null) { + if (itemstack1 == null && slot1.isItemValid(stack)) { slot1.putStack(stack.copy()); slot1.onSlotChanged(); stack.stackSize = 0; @@ -690,4 +692,4 @@ public abstract class Container { public void updateProgressBar(int id, int data) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerBeacon.java b/src/game/java/net/minecraft/inventory/ContainerBeacon.java index 012c61f6..60b76456 100644 --- a/src/game/java/net/minecraft/inventory/ContainerBeacon.java +++ b/src/game/java/net/minecraft/inventory/ContainerBeacon.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.server.S30PacketWindowItems; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.server.S30PacketWindowItems; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerBeacon extends Container { class BeaconSlot extends Slot { @@ -35,10 +35,12 @@ public class ContainerBeacon extends Container { super(parIInventory, parInt1, parInt2, parInt3); } + @Override public int getSlotStackLimit() { return 1; } + @Override public boolean isItemValid(ItemStack itemstack) { return itemstack == null ? false : itemstack.getItem() == Items.netherite_ingot || itemstack.getItem() == Items.emerald @@ -69,6 +71,7 @@ public class ContainerBeacon extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.tileBeacon.isUseableByPlayer(entityplayer); } @@ -80,6 +83,7 @@ public class ContainerBeacon extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); if (entityplayer != null && !entityplayer.worldObj.isRemote) { @@ -94,6 +98,7 @@ public class ContainerBeacon extends Container { } } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); icrafting.func_175173_a(this, this.tileBeacon); @@ -102,6 +107,7 @@ public class ContainerBeacon extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -147,7 +153,8 @@ public class ContainerBeacon extends Container { return itemstack; } + @Override public void updateProgressBar(int i, int j) { this.tileBeacon.setField(i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerBrewingStand.java b/src/game/java/net/minecraft/inventory/ContainerBrewingStand.java index add07c5e..3bf5acc3 100644 --- a/src/game/java/net/minecraft/inventory/ContainerBrewingStand.java +++ b/src/game/java/net/minecraft/inventory/ContainerBrewingStand.java @@ -9,13 +9,13 @@ import net.minecraft.stats.AchievementList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.stats.AchievementList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerBrewingStand extends Container { class Ingredient extends Slot { @@ -35,10 +35,12 @@ public class ContainerBrewingStand extends Container { super(inventoryIn, index, xPosition, yPosition); } + @Override public int getSlotStackLimit() { return 64; } + @Override public boolean isItemValid(ItemStack itemstack) { return itemstack != null ? itemstack.getItem().isPotionIngredient(itemstack) : false; } @@ -57,14 +59,17 @@ public class ContainerBrewingStand extends Container { this.player = playerIn; } + @Override public int getSlotStackLimit() { return 1; } + @Override public boolean isItemValid(ItemStack itemstack) { return canHoldPotion(itemstack); } + @Override public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack itemstack) { if (itemstack.getItem() == Items.potionitem && itemstack.getMetadata() > 0) { this.player.triggerAchievement(AchievementList.potion); @@ -102,6 +107,7 @@ public class ContainerBrewingStand extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.tileBrewingStand.isUseableByPlayer(entityplayer); } @@ -109,6 +115,7 @@ public class ContainerBrewingStand extends Container { /** * + Looks for changes made in the container, sends them to every listener. */ + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); @@ -122,6 +129,7 @@ public class ContainerBrewingStand extends Container { this.brewTime = this.tileBrewingStand.getField(0); } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); icrafting.func_175173_a(this, this.tileBrewingStand); @@ -130,6 +138,7 @@ public class ContainerBrewingStand extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -180,7 +189,8 @@ public class ContainerBrewingStand extends Container { return itemstack; } + @Override public void updateProgressBar(int i, int j) { this.tileBrewingStand.setField(i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerChest.java b/src/game/java/net/minecraft/inventory/ContainerChest.java index efe43d48..622e40c6 100644 --- a/src/game/java/net/minecraft/inventory/ContainerChest.java +++ b/src/game/java/net/minecraft/inventory/ContainerChest.java @@ -6,13 +6,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerChest extends Container { private IInventory lowerChestInventory; @@ -54,6 +54,7 @@ public class ContainerChest extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.lowerChestInventory.isUseableByPlayer(entityplayer); } @@ -68,6 +69,7 @@ public class ContainerChest extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); this.lowerChestInventory.closeInventory(entityplayer); @@ -76,6 +78,7 @@ public class ContainerChest extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer var1, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -99,4 +102,4 @@ public class ContainerChest extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerDispenser.java b/src/game/java/net/minecraft/inventory/ContainerDispenser.java index 55342f5c..431c3004 100644 --- a/src/game/java/net/minecraft/inventory/ContainerDispenser.java +++ b/src/game/java/net/minecraft/inventory/ContainerDispenser.java @@ -6,13 +6,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerDispenser extends Container { private IInventory dispenserInventory; @@ -50,6 +50,7 @@ public class ContainerDispenser extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.dispenserInventory.isUseableByPlayer(entityplayer); } @@ -57,6 +58,7 @@ public class ContainerDispenser extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -86,4 +88,4 @@ public class ContainerDispenser extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerEnchantment.java b/src/game/java/net/minecraft/inventory/ContainerEnchantment.java index 783d3a87..6765f535 100644 --- a/src/game/java/net/minecraft/inventory/ContainerEnchantment.java +++ b/src/game/java/net/minecraft/inventory/ContainerEnchantment.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerEnchantment extends Container { public IInventory tableInventory; @@ -55,10 +55,12 @@ public class ContainerEnchantment extends Container { public ContainerEnchantment(InventoryPlayer playerInv, World worldIn, BlockPos pos) { this.tableInventory = new InventoryBasic("Enchant", true, 2) { + @Override public int getInventoryStackLimit() { return 64; } + @Override public void markDirty() { super.markDirty(); ContainerEnchantment.this.onCraftMatrixChanged(this); @@ -71,15 +73,18 @@ public class ContainerEnchantment extends Container { this.position = pos; this.xpSeed = playerInv.player.getXPSeed(); this.addSlotToContainer(new Slot(this.tableInventory, 0, 15, 47) { + @Override public int getSlotStackLimit() { return 1; } + @Override public boolean isItemValid(ItemStack var1) { return true; } }); this.addSlotToContainer(new Slot(this.tableInventory, 1, 35, 47) { + @Override public boolean isItemValid(ItemStack itemstack) { return itemstack.getItem() == Items.dye && EnumDyeColor.byDyeDamage(itemstack.getMetadata()) == EnumDyeColor.BLUE; @@ -98,6 +103,7 @@ public class ContainerEnchantment extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.worldPointer.getBlockState(this.position).getBlock() != Blocks.enchanting_table ? false : entityplayer.getDistanceSq((double) this.position.getX() + 0.5D, (double) this.position.getY() + 0.5D, @@ -107,6 +113,7 @@ public class ContainerEnchantment extends Container { /** * + Looks for changes made in the container, sends them to every listener. */ + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); @@ -127,6 +134,7 @@ public class ContainerEnchantment extends Container { * + Handles the given Button-click on the server, currently only used by * enchanting. Name is for legacy. */ + @Override public boolean enchantItem(EntityPlayer entityplayer, int i) { ItemStack itemstack = this.tableInventory.getStackInSlot(0); ItemStack itemstack1 = this.tableInventory.getStackInSlot(1); @@ -192,6 +200,7 @@ public class ContainerEnchantment extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); if (!this.worldPointer.isRemote) { @@ -208,6 +217,7 @@ public class ContainerEnchantment extends Container { } } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); icrafting.sendProgressBarUpdate(this, 0, this.enchantLevels[0]); @@ -222,6 +232,7 @@ public class ContainerEnchantment extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory iinventory) { if (iinventory == this.tableInventory) { ItemStack itemstack = iinventory.getStackInSlot(0); @@ -306,6 +317,7 @@ public class ContainerEnchantment extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -357,6 +369,7 @@ public class ContainerEnchantment extends Container { return itemstack; } + @Override public void updateProgressBar(int i, int j) { if (i >= 0 && i <= 2) { this.enchantLevels[i] = j; @@ -369,4 +382,4 @@ public class ContainerEnchantment extends Container { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerFurnace.java b/src/game/java/net/minecraft/inventory/ContainerFurnace.java index 3b3ba130..30367345 100644 --- a/src/game/java/net/minecraft/inventory/ContainerFurnace.java +++ b/src/game/java/net/minecraft/inventory/ContainerFurnace.java @@ -9,13 +9,13 @@ import net.minecraft.tileentity.TileEntityFurnace; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.tileentity.TileEntityFurnace; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerFurnace extends Container { private final IInventory tileFurnace; @@ -54,6 +54,7 @@ public class ContainerFurnace extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.tileFurnace.isUseableByPlayer(entityplayer); } @@ -61,6 +62,7 @@ public class ContainerFurnace extends Container { /** * + Looks for changes made in the container, sends them to every listener. */ + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); @@ -89,6 +91,7 @@ public class ContainerFurnace extends Container { this.field_178153_g = this.tileFurnace.getField(3); } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); icrafting.func_175173_a(this, this.tileFurnace); @@ -97,6 +100,7 @@ public class ContainerFurnace extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -145,7 +149,8 @@ public class ContainerFurnace extends Container { return itemstack; } + @Override public void updateProgressBar(int i, int j) { this.tileFurnace.setField(i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerHopper.java b/src/game/java/net/minecraft/inventory/ContainerHopper.java index d39c5edf..44e8944b 100644 --- a/src/game/java/net/minecraft/inventory/ContainerHopper.java +++ b/src/game/java/net/minecraft/inventory/ContainerHopper.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerHopper extends Container { private final IInventory hopperInventory; @@ -51,6 +51,7 @@ public class ContainerHopper extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.hopperInventory.isUseableByPlayer(entityplayer); } @@ -58,6 +59,7 @@ public class ContainerHopper extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); this.hopperInventory.closeInventory(entityplayer); @@ -66,6 +68,7 @@ public class ContainerHopper extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer var1, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -90,4 +93,4 @@ public class ContainerHopper extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerHorseInventory.java b/src/game/java/net/minecraft/inventory/ContainerHorseInventory.java index 3e72285b..b29b3a96 100644 --- a/src/game/java/net/minecraft/inventory/ContainerHorseInventory.java +++ b/src/game/java/net/minecraft/inventory/ContainerHorseInventory.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerHorseInventory extends Container { private IInventory horseInventory; @@ -40,15 +40,18 @@ public class ContainerHorseInventory extends Container { horseInventoryIn.openInventory(player); int i = (b0 - 4) * 18; this.addSlotToContainer(new Slot(horseInventoryIn, 0, 8, 18) { + @Override public boolean isItemValid(ItemStack itemstack) { return super.isItemValid(itemstack) && itemstack.getItem() == Items.saddle && !this.getHasStack(); } }); this.addSlotToContainer(new Slot(horseInventoryIn, 1, 8, 36) { + @Override public boolean canBeHovered() { return horse.canWearArmor(); } + @Override public boolean isItemValid(ItemStack itemstack) { return super.isItemValid(itemstack) && horse.canWearArmor() && EntityHorse.isArmorItem(itemstack.getItem()); @@ -74,6 +77,7 @@ public class ContainerHorseInventory extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.horseInventory.isUseableByPlayer(entityplayer) && this.theHorse.isEntityAlive() && this.theHorse.getDistanceToEntity(entityplayer) < 8.0F; @@ -82,6 +86,7 @@ public class ContainerHorseInventory extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); this.horseInventory.closeInventory(entityplayer); @@ -90,6 +95,7 @@ public class ContainerHorseInventory extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer var1, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -123,4 +129,4 @@ public class ContainerHorseInventory extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerMerchant.java b/src/game/java/net/minecraft/inventory/ContainerMerchant.java index a75a0b50..df617e19 100644 --- a/src/game/java/net/minecraft/inventory/ContainerMerchant.java +++ b/src/game/java/net/minecraft/inventory/ContainerMerchant.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerMerchant extends Container { private IMerchant theMerchant; @@ -57,6 +57,7 @@ public class ContainerMerchant extends Container { } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.theMerchant.getCustomer() == entityplayer; } @@ -64,6 +65,7 @@ public class ContainerMerchant extends Container { /** * + Looks for changes made in the container, sends them to every listener. */ + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); } @@ -75,6 +77,7 @@ public class ContainerMerchant extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); this.theMerchant.setCustomer((EntityPlayer) null); @@ -99,6 +102,7 @@ public class ContainerMerchant extends Container { } } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); } @@ -106,6 +110,7 @@ public class ContainerMerchant extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory iinventory) { this.merchantInventory.resetRecipeAndSlots(); super.onCraftMatrixChanged(iinventory); @@ -118,6 +123,7 @@ public class ContainerMerchant extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -158,6 +164,7 @@ public class ContainerMerchant extends Container { return itemstack; } + @Override public void updateProgressBar(int var1, int var2) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerPlayer.java b/src/game/java/net/minecraft/inventory/ContainerPlayer.java index 369c5b21..58840911 100644 --- a/src/game/java/net/minecraft/inventory/ContainerPlayer.java +++ b/src/game/java/net/minecraft/inventory/ContainerPlayer.java @@ -14,13 +14,13 @@ import net.minecraft.network.play.server.S30PacketWindowItems; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.network.play.server.S30PacketWindowItems; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerPlayer extends Container { /** @@ -59,14 +59,17 @@ public class ContainerPlayer extends Container { final int k2 = k; this.addSlotToContainer( new Slot(playerInventory, playerInventory.getSizeInventory() - 1 - k, 8, 8 + k * 18) { + @Override public int getSlotStackLimit() { return 1; } + @Override public String getSlotTexture() { return ItemArmor.EMPTY_SLOT_NAMES[k2]; } + @Override public boolean isItemValid(ItemStack itemstack) { return itemstack == null ? false : (itemstack.getItem() instanceof ItemArmor @@ -90,6 +93,7 @@ public class ContainerPlayer extends Container { this.onCraftMatrixChanged(this.craftMatrix); } + @Override public boolean canInteractWith(EntityPlayer var1) { return true; } @@ -99,6 +103,7 @@ public class ContainerPlayer extends Container { * (double-click) code. The stack passed in is null for the initial slot that * was double-clicked. */ + @Override public boolean canMergeSlot(ItemStack itemstack, Slot slot) { return slot.inventory != this.craftResult && super.canMergeSlot(itemstack, slot); } @@ -106,6 +111,7 @@ public class ContainerPlayer extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); @@ -129,6 +135,7 @@ public class ContainerPlayer extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory var1) { this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.thePlayer.worldObj)); @@ -137,6 +144,7 @@ public class ContainerPlayer extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -191,4 +199,4 @@ public class ContainerPlayer extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerRepair.java b/src/game/java/net/minecraft/inventory/ContainerRepair.java index 9a893ec2..f81e45a8 100644 --- a/src/game/java/net/minecraft/inventory/ContainerRepair.java +++ b/src/game/java/net/minecraft/inventory/ContainerRepair.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerRepair extends Container { private static final Logger logger = LogManager.getLogger(); @@ -59,6 +59,7 @@ public class ContainerRepair extends Container { EntityPlayer player) { this.outputSlot = new InventoryCraftResult(); this.inputSlots = new InventoryBasic("Repair", true, 2) { + @Override public void markDirty() { super.markDirty(); ContainerRepair.this.onCraftMatrixChanged(this); @@ -70,16 +71,19 @@ public class ContainerRepair extends Container { this.addSlotToContainer(new Slot(this.inputSlots, 0, 27, 47)); this.addSlotToContainer(new Slot(this.inputSlots, 1, 76, 47)); this.addSlotToContainer(new Slot(this.outputSlot, 2, 134, 47) { + @Override public boolean canTakeStack(EntityPlayer playerIn) { return (playerIn.capabilities.isCreativeMode || playerIn.experienceLevel >= ContainerRepair.this.maximumCost) && ContainerRepair.this.maximumCost > 0 && this.getHasStack(); } + @Override public boolean isItemValid(ItemStack var1) { return false; } + @Override public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack var2) { if (!entityplayer.capabilities.isCreativeMode) { entityplayer.addExperienceLevel(-ContainerRepair.this.maximumCost); @@ -135,6 +139,7 @@ public class ContainerRepair extends Container { this(playerInventory, worldIn, BlockPos.ORIGIN, player); } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.theWorld.getBlockState(this.selfPosition).getBlock() != Blocks.anvil ? false : entityplayer.getDistanceSq((double) this.selfPosition.getX() + 0.5D, @@ -144,6 +149,7 @@ public class ContainerRepair extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); if (!this.theWorld.isRemote) { @@ -160,6 +166,7 @@ public class ContainerRepair extends Container { } } + @Override public void onCraftGuiOpened(ICrafting icrafting) { super.onCraftGuiOpened(icrafting); icrafting.sendProgressBarUpdate(this, 0, this.maximumCost); @@ -168,6 +175,7 @@ public class ContainerRepair extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory iinventory) { super.onCraftMatrixChanged(iinventory); if (iinventory == this.inputSlots) { @@ -179,6 +187,7 @@ public class ContainerRepair extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -232,6 +241,7 @@ public class ContainerRepair extends Container { this.updateRepairOutput(); } + @Override public void updateProgressBar(int i, int j) { if (i == 0) { this.maximumCost = j; @@ -425,4 +435,4 @@ public class ContainerRepair extends Container { this.detectAndSendChanges(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ContainerWorkbench.java b/src/game/java/net/minecraft/inventory/ContainerWorkbench.java index 9f6ee874..6ba043fd 100644 --- a/src/game/java/net/minecraft/inventory/ContainerWorkbench.java +++ b/src/game/java/net/minecraft/inventory/ContainerWorkbench.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ContainerWorkbench extends Container { /** @@ -67,6 +67,7 @@ public class ContainerWorkbench extends Container { this.onCraftMatrixChanged(this.craftMatrix); } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.worldObj.getBlockState(this.pos).getBlock() != Blocks.crafting_table ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, @@ -78,6 +79,7 @@ public class ContainerWorkbench extends Container { * (double-click) code. The stack passed in is null for the initial slot that * was double-clicked. */ + @Override public boolean canMergeSlot(ItemStack itemstack, Slot slot) { return slot.inventory != this.craftResult && super.canMergeSlot(itemstack, slot); } @@ -85,6 +87,7 @@ public class ContainerWorkbench extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); if (!this.worldObj.isRemote) { @@ -104,6 +107,7 @@ public class ContainerWorkbench extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory var1) { this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.worldObj)); @@ -112,6 +116,7 @@ public class ContainerWorkbench extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(i); @@ -151,4 +156,4 @@ public class ContainerWorkbench extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ICrafting.java b/src/game/java/net/minecraft/inventory/ICrafting.java index ec206154..34290d4f 100644 --- a/src/game/java/net/minecraft/inventory/ICrafting.java +++ b/src/game/java/net/minecraft/inventory/ICrafting.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ICrafting { void func_175173_a(Container var1, IInventory var2); @@ -49,4 +49,4 @@ public interface ICrafting { * + update the crafting window inventory with the items in the list */ void updateCraftingInventory(Container var1, List var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/IInvBasic.java b/src/game/java/net/minecraft/inventory/IInvBasic.java index 16765735..f0c60b9b 100644 --- a/src/game/java/net/minecraft/inventory/IInvBasic.java +++ b/src/game/java/net/minecraft/inventory/IInvBasic.java @@ -3,13 +3,13 @@ package net.minecraft.inventory; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.inventory; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IInvBasic { /** @@ -29,4 +29,4 @@ public interface IInvBasic { * filled. */ void onInventoryChanged(InventoryBasic var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/IInventory.java b/src/game/java/net/minecraft/inventory/IInventory.java index 0e0a14ba..d8ca530e 100644 --- a/src/game/java/net/minecraft/inventory/IInventory.java +++ b/src/game/java/net/minecraft/inventory/IInventory.java @@ -7,13 +7,13 @@ import net.minecraft.world.IWorldNameable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.IWorldNameable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IInventory extends IWorldNameable { void clear(); @@ -90,4 +90,4 @@ public interface IInventory extends IWorldNameable { * crafting or armor sections). */ void setInventorySlotContents(int var1, ItemStack var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/ISidedInventory.java b/src/game/java/net/minecraft/inventory/ISidedInventory.java index 91f5318b..f8f9e468 100644 --- a/src/game/java/net/minecraft/inventory/ISidedInventory.java +++ b/src/game/java/net/minecraft/inventory/ISidedInventory.java @@ -6,13 +6,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISidedInventory extends IInventory { /** @@ -40,4 +40,4 @@ public interface ISidedInventory extends IInventory { boolean canInsertItem(int var1, ItemStack var2, EnumFacing var3); int[] getSlotsForFace(EnumFacing var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryBasic.java b/src/game/java/net/minecraft/inventory/InventoryBasic.java index 977bc95c..d2c7e334 100644 --- a/src/game/java/net/minecraft/inventory/InventoryBasic.java +++ b/src/game/java/net/minecraft/inventory/InventoryBasic.java @@ -13,13 +13,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryBasic implements IInventory { private String inventoryTitle; @@ -51,6 +51,7 @@ public class InventoryBasic implements IInventory { this.inventoryContents = new ItemStack[slotCount]; } + @Override public void clear() { for (int i = 0; i < this.inventoryContents.length; ++i) { this.inventoryContents[i] = null; @@ -58,6 +59,7 @@ public class InventoryBasic implements IInventory { } + @Override public void closeInventory(EntityPlayer var1) { } @@ -65,6 +67,7 @@ public class InventoryBasic implements IInventory { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.inventoryContents[i] != null) { if (this.inventoryContents[i].stackSize <= j) { @@ -134,15 +137,18 @@ public class InventoryBasic implements IInventory { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -151,6 +157,7 @@ public class InventoryBasic implements IInventory { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -159,6 +166,7 @@ public class InventoryBasic implements IInventory { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.inventoryTitle; } @@ -166,6 +174,7 @@ public class InventoryBasic implements IInventory { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.slotsCount; } @@ -173,6 +182,7 @@ public class InventoryBasic implements IInventory { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return i >= 0 && i < this.inventoryContents.length ? this.inventoryContents[i] : null; } @@ -180,6 +190,7 @@ public class InventoryBasic implements IInventory { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.hasCustomName; } @@ -188,6 +199,7 @@ public class InventoryBasic implements IInventory { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -196,6 +208,7 @@ public class InventoryBasic implements IInventory { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer var1) { return true; } @@ -204,6 +217,7 @@ public class InventoryBasic implements IInventory { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { if (this.field_70480_d != null) { for (int i = 0; i < this.field_70480_d.size(); ++i) { @@ -213,12 +227,14 @@ public class InventoryBasic implements IInventory { } + @Override public void openInventory(EntityPlayer var1) { } /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.inventoryContents[i] != null) { ItemStack itemstack = this.inventoryContents[i]; @@ -238,6 +254,7 @@ public class InventoryBasic implements IInventory { this.inventoryTitle = inventoryTitleIn; } + @Override public void setField(int var1, int var2) { } @@ -245,6 +262,7 @@ public class InventoryBasic implements IInventory { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.inventoryContents[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -253,4 +271,4 @@ public class InventoryBasic implements IInventory { this.markDirty(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryCraftResult.java b/src/game/java/net/minecraft/inventory/InventoryCraftResult.java index 53143d6c..8f0019e3 100644 --- a/src/game/java/net/minecraft/inventory/InventoryCraftResult.java +++ b/src/game/java/net/minecraft/inventory/InventoryCraftResult.java @@ -9,13 +9,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryCraftResult implements IInventory { /** @@ -35,6 +35,7 @@ public class InventoryCraftResult implements IInventory { */ private ItemStack[] stackResult = new ItemStack[1]; + @Override public void clear() { for (int i = 0; i < this.stackResult.length; ++i) { this.stackResult[i] = null; @@ -42,6 +43,7 @@ public class InventoryCraftResult implements IInventory { } + @Override public void closeInventory(EntityPlayer var1) { } @@ -49,6 +51,7 @@ public class InventoryCraftResult implements IInventory { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int var1, int var2) { if (this.stackResult[0] != null) { ItemStack itemstack = this.stackResult[0]; @@ -63,15 +66,18 @@ public class InventoryCraftResult implements IInventory { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -80,6 +86,7 @@ public class InventoryCraftResult implements IInventory { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -88,6 +95,7 @@ public class InventoryCraftResult implements IInventory { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return "Result"; } @@ -95,6 +103,7 @@ public class InventoryCraftResult implements IInventory { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 1; } @@ -102,6 +111,7 @@ public class InventoryCraftResult implements IInventory { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int var1) { return this.stackResult[0]; } @@ -109,6 +119,7 @@ public class InventoryCraftResult implements IInventory { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return false; } @@ -117,6 +128,7 @@ public class InventoryCraftResult implements IInventory { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -125,6 +137,7 @@ public class InventoryCraftResult implements IInventory { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer var1) { return true; } @@ -133,15 +146,18 @@ public class InventoryCraftResult implements IInventory { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { } + @Override public void openInventory(EntityPlayer var1) { } /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int var1) { if (this.stackResult[0] != null) { ItemStack itemstack = this.stackResult[0]; @@ -152,6 +168,7 @@ public class InventoryCraftResult implements IInventory { } } + @Override public void setField(int var1, int var2) { } @@ -159,7 +176,8 @@ public class InventoryCraftResult implements IInventory { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int var1, ItemStack itemstack) { this.stackResult[0] = itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryCrafting.java b/src/game/java/net/minecraft/inventory/InventoryCrafting.java index f31df8f0..6d18c0e0 100644 --- a/src/game/java/net/minecraft/inventory/InventoryCrafting.java +++ b/src/game/java/net/minecraft/inventory/InventoryCrafting.java @@ -9,13 +9,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryCrafting implements IInventory { private final ItemStack[] stackList; @@ -43,6 +43,7 @@ public class InventoryCrafting implements IInventory { this.inventoryHeight = height; } + @Override public void clear() { for (int i = 0; i < this.stackList.length; ++i) { this.stackList[i] = null; @@ -50,6 +51,7 @@ public class InventoryCrafting implements IInventory { } + @Override public void closeInventory(EntityPlayer var1) { } @@ -57,6 +59,7 @@ public class InventoryCrafting implements IInventory { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.stackList[i] != null) { if (this.stackList[i].stackSize <= j) { @@ -82,15 +85,18 @@ public class InventoryCrafting implements IInventory { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -103,6 +109,7 @@ public class InventoryCrafting implements IInventory { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -111,6 +118,7 @@ public class InventoryCrafting implements IInventory { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return "container.crafting"; } @@ -118,6 +126,7 @@ public class InventoryCrafting implements IInventory { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.stackList.length; } @@ -135,6 +144,7 @@ public class InventoryCrafting implements IInventory { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return i >= this.getSizeInventory() ? null : this.stackList[i]; } @@ -146,6 +156,7 @@ public class InventoryCrafting implements IInventory { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return false; } @@ -154,6 +165,7 @@ public class InventoryCrafting implements IInventory { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -162,6 +174,7 @@ public class InventoryCrafting implements IInventory { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer var1) { return true; } @@ -170,15 +183,18 @@ public class InventoryCrafting implements IInventory { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { } + @Override public void openInventory(EntityPlayer var1) { } /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.stackList[i] != null) { ItemStack itemstack = this.stackList[i]; @@ -189,6 +205,7 @@ public class InventoryCrafting implements IInventory { } } + @Override public void setField(int var1, int var2) { } @@ -196,8 +213,9 @@ public class InventoryCrafting implements IInventory { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.stackList[i] = itemstack; this.eventHandler.onCraftMatrixChanged(this); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryEnderChest.java b/src/game/java/net/minecraft/inventory/InventoryEnderChest.java index 2e3b001c..6376a53f 100644 --- a/src/game/java/net/minecraft/inventory/InventoryEnderChest.java +++ b/src/game/java/net/minecraft/inventory/InventoryEnderChest.java @@ -9,13 +9,13 @@ import net.minecraft.tileentity.TileEntityEnderChest; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.tileentity.TileEntityEnderChest; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryEnderChest extends InventoryBasic { private TileEntityEnderChest associatedChest; @@ -36,6 +36,7 @@ public class InventoryEnderChest extends InventoryBasic { super("container.enderchest", false, 27); } + @Override public void closeInventory(EntityPlayer entityplayer) { if (this.associatedChest != null) { this.associatedChest.closeChest(); @@ -49,6 +50,7 @@ public class InventoryEnderChest extends InventoryBasic { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.associatedChest != null && !this.associatedChest.canBeUsed(entityplayer) ? false : super.isUseableByPlayer(entityplayer); @@ -69,6 +71,7 @@ public class InventoryEnderChest extends InventoryBasic { } + @Override public void openInventory(EntityPlayer entityplayer) { if (this.associatedChest != null) { this.associatedChest.openChest(); @@ -96,4 +99,4 @@ public class InventoryEnderChest extends InventoryBasic { public void setChestTileEntity(TileEntityEnderChest chestTileEntity) { this.associatedChest = chestTileEntity; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryHelper.java b/src/game/java/net/minecraft/inventory/InventoryHelper.java index 48b905ca..bcd1a959 100644 --- a/src/game/java/net/minecraft/inventory/InventoryHelper.java +++ b/src/game/java/net/minecraft/inventory/InventoryHelper.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryHelper { private static final EaglercraftRandom RANDOM = new EaglercraftRandom(); @@ -78,4 +78,4 @@ public class InventoryHelper { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryLargeChest.java b/src/game/java/net/minecraft/inventory/InventoryLargeChest.java index e15aa5ab..45f56906 100644 --- a/src/game/java/net/minecraft/inventory/InventoryLargeChest.java +++ b/src/game/java/net/minecraft/inventory/InventoryLargeChest.java @@ -12,13 +12,13 @@ import net.minecraft.world.LockCode; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.LockCode; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryLargeChest implements ILockableContainer { private String name; @@ -57,16 +57,19 @@ public class InventoryLargeChest implements ILockableContainer { } + @Override public void clear() { this.upperChest.clear(); this.lowerChest.clear(); } + @Override public void closeInventory(EntityPlayer entityplayer) { this.upperChest.closeInventory(entityplayer); this.lowerChest.closeInventory(entityplayer); } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { return new ContainerChest(inventoryplayer, this, entityplayer); } @@ -75,6 +78,7 @@ public class InventoryLargeChest implements ILockableContainer { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { return i >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(i - this.upperChest.getSizeInventory(), j) @@ -85,19 +89,23 @@ public class InventoryLargeChest implements ILockableContainer { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } + @Override public String getGuiID() { return this.upperChest.getGuiID(); } @@ -106,10 +114,12 @@ public class InventoryLargeChest implements ILockableContainer { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return this.upperChest.getInventoryStackLimit(); } + @Override public LockCode getLockCode() { return this.upperChest.getLockCode(); } @@ -118,6 +128,7 @@ public class InventoryLargeChest implements ILockableContainer { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.upperChest.hasCustomName() ? this.upperChest.getName() : (this.lowerChest.hasCustomName() ? this.lowerChest.getName() : this.name); @@ -126,6 +137,7 @@ public class InventoryLargeChest implements ILockableContainer { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); } @@ -133,6 +145,7 @@ public class InventoryLargeChest implements ILockableContainer { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return i >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(i - this.upperChest.getSizeInventory()) @@ -142,6 +155,7 @@ public class InventoryLargeChest implements ILockableContainer { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.upperChest.hasCustomName() || this.lowerChest.hasCustomName(); } @@ -150,10 +164,12 @@ public class InventoryLargeChest implements ILockableContainer { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } + @Override public boolean isLocked() { return this.upperChest.isLocked() || this.lowerChest.isLocked(); } @@ -169,6 +185,7 @@ public class InventoryLargeChest implements ILockableContainer { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.upperChest.isUseableByPlayer(entityplayer) && this.lowerChest.isUseableByPlayer(entityplayer); } @@ -177,11 +194,13 @@ public class InventoryLargeChest implements ILockableContainer { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { this.upperChest.markDirty(); this.lowerChest.markDirty(); } + @Override public void openInventory(EntityPlayer entityplayer) { this.upperChest.openInventory(entityplayer); this.lowerChest.openInventory(entityplayer); @@ -190,12 +209,14 @@ public class InventoryLargeChest implements ILockableContainer { /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { return i >= this.upperChest.getSizeInventory() ? this.lowerChest.removeStackFromSlot(i - this.upperChest.getSizeInventory()) : this.upperChest.removeStackFromSlot(i); } + @Override public void setField(int var1, int var2) { } @@ -203,6 +224,7 @@ public class InventoryLargeChest implements ILockableContainer { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { if (i >= this.upperChest.getSizeInventory()) { this.lowerChest.setInventorySlotContents(i - this.upperChest.getSizeInventory(), itemstack); @@ -212,8 +234,9 @@ public class InventoryLargeChest implements ILockableContainer { } + @Override public void setLockCode(LockCode lockcode) { this.upperChest.setLockCode(lockcode); this.lowerChest.setLockCode(lockcode); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/InventoryMerchant.java b/src/game/java/net/minecraft/inventory/InventoryMerchant.java index 07465ba5..585212cb 100644 --- a/src/game/java/net/minecraft/inventory/InventoryMerchant.java +++ b/src/game/java/net/minecraft/inventory/InventoryMerchant.java @@ -12,13 +12,13 @@ import net.minecraft.village.MerchantRecipeList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.village.MerchantRecipeList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InventoryMerchant implements IInventory { private final IMerchant theMerchant; @@ -44,6 +44,7 @@ public class InventoryMerchant implements IInventory { this.theMerchant = theMerchantIn; } + @Override public void clear() { for (int i = 0; i < this.theInventory.length; ++i) { this.theInventory[i] = null; @@ -51,6 +52,7 @@ public class InventoryMerchant implements IInventory { } + @Override public void closeInventory(EntityPlayer var1) { } @@ -58,6 +60,7 @@ public class InventoryMerchant implements IInventory { * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.theInventory[i] != null) { if (i == 2) { @@ -97,15 +100,18 @@ public class InventoryMerchant implements IInventory { * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } @@ -114,6 +120,7 @@ public class InventoryMerchant implements IInventory { * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -122,6 +129,7 @@ public class InventoryMerchant implements IInventory { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return "mob.villager"; } @@ -129,6 +137,7 @@ public class InventoryMerchant implements IInventory { /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.theInventory.length; } @@ -136,6 +145,7 @@ public class InventoryMerchant implements IInventory { /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.theInventory[i]; } @@ -143,6 +153,7 @@ public class InventoryMerchant implements IInventory { /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return false; } @@ -158,6 +169,7 @@ public class InventoryMerchant implements IInventory { * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -166,6 +178,7 @@ public class InventoryMerchant implements IInventory { * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.theMerchant.getCustomer() == entityplayer; } @@ -174,16 +187,19 @@ public class InventoryMerchant implements IInventory { * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { this.resetRecipeAndSlots(); } + @Override public void openInventory(EntityPlayer var1) { } /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.theInventory[i] != null) { ItemStack itemstack = this.theInventory[i]; @@ -235,6 +251,7 @@ public class InventoryMerchant implements IInventory { this.resetRecipeAndSlots(); } + @Override public void setField(int var1, int var2) { } @@ -242,6 +259,7 @@ public class InventoryMerchant implements IInventory { * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.theInventory[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -253,4 +271,4 @@ public class InventoryMerchant implements IInventory { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/Slot.java b/src/game/java/net/minecraft/inventory/Slot.java index 77c3e238..7587c49a 100644 --- a/src/game/java/net/minecraft/inventory/Slot.java +++ b/src/game/java/net/minecraft/inventory/Slot.java @@ -6,13 +6,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Slot { private final int slotIndex; @@ -75,6 +75,14 @@ public class Slot { return this.getSlotStackLimit(); } + /** + * + Retrieves the index in the inventory for this slot, this value should + * typically not be used, but can be useful for some occasions. + */ + public int getSlotIndex() { + return this.slotIndex; + } + /** * + Returns the maximum stack size for a given slot (usually the same as * getInventoryStackLimit(), but 1 in the case of armor slots) @@ -158,4 +166,4 @@ public class Slot { this.inventory.setInventorySlotContents(this.slotIndex, itemstack); this.onSlotChanged(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/SlotCrafting.java b/src/game/java/net/minecraft/inventory/SlotCrafting.java index 9bb92279..edda704e 100644 --- a/src/game/java/net/minecraft/inventory/SlotCrafting.java +++ b/src/game/java/net/minecraft/inventory/SlotCrafting.java @@ -14,13 +14,13 @@ import net.minecraft.stats.AchievementList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.stats.AchievementList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SlotCrafting extends Slot { private final InventoryCrafting craftMatrix; @@ -50,6 +50,7 @@ public class SlotCrafting extends Slot { * + Decrease the size of the stack in slot (first int arg) by the amount of the * second int arg. Returns the new stack. */ + @Override public ItemStack decrStackSize(int i) { if (this.getHasStack()) { this.amountCrafted += Math.min(i, this.getStack().stackSize); @@ -62,6 +63,7 @@ public class SlotCrafting extends Slot { * + Check if the stack is a valid item for this slot. Always true beside for * the armor slots. */ + @Override public boolean isItemValid(ItemStack var1) { return false; } @@ -71,6 +73,7 @@ public class SlotCrafting extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack itemstack) { if (this.amountCrafted > 0) { itemstack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.amountCrafted); @@ -129,11 +132,13 @@ public class SlotCrafting extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack itemstack, int i) { this.amountCrafted += i; this.onCrafting(itemstack); } + @Override public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack itemstack) { this.onCrafting(itemstack); ItemStack[] aitemstack = CraftingManager.getInstance().func_180303_b(this.craftMatrix, entityplayer.worldObj); @@ -155,4 +160,4 @@ public class SlotCrafting extends Slot { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/SlotFurnaceFuel.java b/src/game/java/net/minecraft/inventory/SlotFurnaceFuel.java index 2f442862..61df2718 100644 --- a/src/game/java/net/minecraft/inventory/SlotFurnaceFuel.java +++ b/src/game/java/net/minecraft/inventory/SlotFurnaceFuel.java @@ -7,13 +7,13 @@ import net.minecraft.tileentity.TileEntityFurnace; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.tileentity.TileEntityFurnace; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SlotFurnaceFuel extends Slot { public static boolean isBucket(ItemStack parItemStack) { @@ -36,6 +36,7 @@ public class SlotFurnaceFuel extends Slot { super(inventoryIn, slotIndex, xPosition, yPosition); } + @Override public int getItemStackLimit(ItemStack itemstack) { return isBucket(itemstack) ? 1 : super.getItemStackLimit(itemstack); } @@ -44,7 +45,8 @@ public class SlotFurnaceFuel extends Slot { * + Check if the stack is a valid item for this slot. Always true beside for * the armor slots. */ + @Override public boolean isItemValid(ItemStack itemstack) { return TileEntityFurnace.isItemFuel(itemstack) || isBucket(itemstack); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/SlotFurnaceOutput.java b/src/game/java/net/minecraft/inventory/SlotFurnaceOutput.java index 785510d7..8b15ce17 100644 --- a/src/game/java/net/minecraft/inventory/SlotFurnaceOutput.java +++ b/src/game/java/net/minecraft/inventory/SlotFurnaceOutput.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SlotFurnaceOutput extends Slot { private EntityPlayer thePlayer; @@ -44,6 +44,7 @@ public class SlotFurnaceOutput extends Slot { * + Decrease the size of the stack in slot (first int arg) by the amount of the * second int arg. Returns the new stack. */ + @Override public ItemStack decrStackSize(int i) { if (this.getHasStack()) { this.field_75228_b += Math.min(i, this.getStack().stackSize); @@ -56,6 +57,7 @@ public class SlotFurnaceOutput extends Slot { * + Check if the stack is a valid item for this slot. Always true beside for * the armor slots. */ + @Override public boolean isItemValid(ItemStack var1) { return false; } @@ -65,6 +67,7 @@ public class SlotFurnaceOutput extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack stack) { stack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b); if (!this.thePlayer.worldObj.isRemote) { @@ -106,13 +109,15 @@ public class SlotFurnaceOutput extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack stack, int amount) { this.field_75228_b += amount; this.onCrafting(stack); } + @Override public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack itemstack) { this.onCrafting(itemstack); super.onPickupFromSlot(entityplayer, itemstack); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/inventory/SlotMerchantResult.java b/src/game/java/net/minecraft/inventory/SlotMerchantResult.java index a956c705..8e0990d9 100644 --- a/src/game/java/net/minecraft/inventory/SlotMerchantResult.java +++ b/src/game/java/net/minecraft/inventory/SlotMerchantResult.java @@ -9,13 +9,13 @@ import net.minecraft.village.MerchantRecipe; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.village.MerchantRecipe; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SlotMerchantResult extends Slot { private final InventoryMerchant theMerchantInventory; @@ -47,6 +47,7 @@ public class SlotMerchantResult extends Slot { * + Decrease the size of the stack in slot (first int arg) by the amount of the * second int arg. Returns the new stack. */ + @Override public ItemStack decrStackSize(int i) { if (this.getHasStack()) { this.field_75231_g += Math.min(i, this.getStack().stackSize); @@ -78,6 +79,7 @@ public class SlotMerchantResult extends Slot { * + Check if the stack is a valid item for this slot. Always true beside for * the armor slots. */ + @Override public boolean isItemValid(ItemStack var1) { return false; } @@ -87,6 +89,7 @@ public class SlotMerchantResult extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack itemstack) { itemstack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75231_g); this.field_75231_g = 0; @@ -97,11 +100,13 @@ public class SlotMerchantResult extends Slot { * ore and wood. Typically increases an internal count then calls * onCrafting(item). */ + @Override protected void onCrafting(ItemStack itemstack, int i) { this.field_75231_g += i; this.onCrafting(itemstack); } + @Override public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack itemstack) { this.onCrafting(itemstack); MerchantRecipe merchantrecipe = this.theMerchantInventory.getCurrentRecipe(); @@ -126,4 +131,4 @@ public class SlotMerchantResult extends Slot { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/EnumAction.java b/src/game/java/net/minecraft/item/EnumAction.java index 092d4d32..6d3dbfd4 100644 --- a/src/game/java/net/minecraft/item/EnumAction.java +++ b/src/game/java/net/minecraft/item/EnumAction.java @@ -3,13 +3,13 @@ package net.minecraft.item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumAction { NONE, EAT, DRINK, BLOCK, BOW, CHISEL; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/EnumDyeColor.java b/src/game/java/net/minecraft/item/EnumDyeColor.java index 8601d823..46daa92e 100644 --- a/src/game/java/net/minecraft/item/EnumDyeColor.java +++ b/src/game/java/net/minecraft/item/EnumDyeColor.java @@ -7,13 +7,13 @@ import net.minecraft.util.IStringSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.IStringSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumDyeColor implements IStringSerializable { WHITE(0, 15, "white", "white", MapColor.snowColor, EnumChatFormatting.WHITE), @@ -105,6 +105,7 @@ public enum EnumDyeColor implements IStringSerializable { return this.meta; } + @Override public String getName() { return this.name; } @@ -113,7 +114,8 @@ public enum EnumDyeColor implements IStringSerializable { return this.unlocalizedName; } + @Override public String toString() { return this.unlocalizedName; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/EnumRarity.java b/src/game/java/net/minecraft/item/EnumRarity.java index 5470d626..a7f3ef9e 100644 --- a/src/game/java/net/minecraft/item/EnumRarity.java +++ b/src/game/java/net/minecraft/item/EnumRarity.java @@ -5,13 +5,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumRarity { COMMON(EnumChatFormatting.WHITE, "Common"), UNCOMMON(EnumChatFormatting.YELLOW, "Uncommon"), @@ -36,4 +36,4 @@ public enum EnumRarity { this.rarityColor = color; this.rarityName = name; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/Item.java b/src/game/java/net/minecraft/item/Item.java index b9f8c5b0..0f2fd37b 100644 --- a/src/game/java/net/minecraft/item/Item.java +++ b/src/game/java/net/minecraft/item/Item.java @@ -50,13 +50,13 @@ import net.starlikeclient.minecraft.init.ItemsStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -68,17 +68,17 @@ import net.starlikeclient.minecraft.init.ItemsStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Item { public static enum ToolMaterial { // MATERIAL(HARVEST_LEVEL, DURABILITY, EFFICIENCY, DAMAGE, ENCHANTABILITY) - WOOD(0, 59, 2.0F, 0.0F, 15), STONE(1, 131, 4.0F, 1.0F, 5), IRON(2, 250, 6.0F, 2.0F, 14), - DIAMOND(3, 1561, 8.0F, 3.0F, 10), GOLD(0, 32, 12.0F, 0.0F, 22), NETHERITE(4, 2031, 9.0F, 4.0F, 15), - PLATINUM(5, 2031, 10.0F, 5.0F, 13), PLATINUM_DRILL(5, 2500, 50.0F, 4.0F, 14), - TITANIUM_DRILL(6, 4750, 70.0F, 6.0F, 18), SPEED_DRILL(6, 7500, 200.0F, 6.0F, 18), - POWER_DRILL(7, 8500, 50.0F, 6.0F, 18), LATE_GAME_DRILL(8, 8000, 300.0F, 7.0F, 24), - OP_DRILL(9, 15000, 500.0F, 8.0F, 30); + ZERO(0, 0, 0.0F, 0.0F, 0), WOOD(0, 59, 2.0F, 0.0F, 15), STONE(1, 131, 4.0F, 1.0F, 5), + IRON(2, 250, 6.0F, 2.0F, 14), DIAMOND(3, 1561, 8.0F, 3.0F, 10), GOLD(0, 32, 12.0F, 0.0F, 22), + NETHERITE(4, 2031, 9.0F, 4.0F, 15), PLATINUM(5, 2031, 10.0F, 5.0F, 13), + PLATINUM_DRILL(5, 2500, 50.0F, 4.0F, 14), TITANIUM_DRILL(6, 4750, 70.0F, 6.0F, 18), + SPEED_DRILL(6, 7500, 200.0F, 6.0F, 18), POWER_DRILL(7, 8500, 50.0F, 6.0F, 18), + LATE_GAME_DRILL(8, 8000, 300.0F, 7.0F, 24), OP_DRILL(9, 15000, 500.0F, 8.0F, 30); private final int harvestLevel; private final int maxUses; @@ -117,6 +117,8 @@ public class Item { public Item getRepairItem() { switch (this) { + case ZERO: + return null; case WOOD: return Item.getItemFromBlock(Blocks.planks); case STONE: @@ -193,22 +195,24 @@ public class Item { /** * + Register the given Item as the ItemBlock for the given Block. */ - public static void registerItemBlock(Block blockIn) { - registerItemBlock(blockIn, new ItemBlock(blockIn)); + public static Item registerItemBlock(Block blockIn) { + return registerItemBlock(blockIn, new ItemBlock(blockIn)); } /** * + Register the given Item as the ItemBlock for the given Block. */ - public static void registerItemBlock(Block blockIn, Item itemIn) { + public static Item registerItemBlock(Block blockIn, Item itemIn) { registerItem(Block.getIdFromBlock(blockIn), (ResourceLocation) Block.blockRegistry.getNameForObject(blockIn), itemIn); BLOCK_TO_ITEM.put(blockIn, itemIn); + return itemIn; } public static void registerItems() { registerItemBlock(Blocks.stone, (new ItemMultiTexture(Blocks.stone, Blocks.stone, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockStone.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -216,6 +220,7 @@ public class Item { registerItemBlock(Blocks.grass, new ItemColored(Blocks.grass, false)); registerItemBlock(Blocks.dirt, (new ItemMultiTexture(Blocks.dirt, Blocks.dirt, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockDirt.DirtType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -223,12 +228,14 @@ public class Item { registerItemBlock(Blocks.cobblestone); registerItemBlock(Blocks.planks, (new ItemMultiTexture(Blocks.planks, Blocks.planks, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockPlanks.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } })).setUnlocalizedName("wood")); registerItemBlock(Blocks.sapling, (new ItemMultiTexture(Blocks.sapling, Blocks.sapling, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockPlanks.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -236,6 +243,7 @@ public class Item { registerItemBlock(Blocks.bedrock); registerItemBlock(Blocks.sand, (new ItemMultiTexture(Blocks.sand, Blocks.sand, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockSand.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -245,12 +253,14 @@ public class Item { registerItemBlock(Blocks.iron_ore); registerItemBlock(Blocks.coal_ore); registerItemBlock(Blocks.log, (new ItemMultiTexture(Blocks.log, Blocks.log, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockPlanks.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } })).setUnlocalizedName("log")); registerItemBlock(Blocks.log2, (new ItemMultiTexture(Blocks.log2, Blocks.log2, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockPlanks.EnumType.byMetadata(itemstack.getMetadata() + 4).getUnlocalizedName(); } @@ -259,6 +269,7 @@ public class Item { registerItemBlock(Blocks.leaves2, (new ItemLeaves(Blocks.leaves2)).setUnlocalizedName("leaves")); registerItemBlock(Blocks.sponge, (new ItemMultiTexture(Blocks.sponge, Blocks.sponge, new Function() { + @Override public String apply(ItemStack itemstack) { return (itemstack.getMetadata() & 1) == 1 ? "wet" : "dry"; } @@ -269,6 +280,7 @@ public class Item { registerItemBlock(Blocks.dispenser); registerItemBlock(Blocks.sandstone, (new ItemMultiTexture(Blocks.sandstone, Blocks.sandstone, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockSandStone.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -285,6 +297,7 @@ public class Item { registerItemBlock(Blocks.wool, (new ItemCloth(Blocks.wool)).setUnlocalizedName("cloth")); registerItemBlock(Blocks.yellow_flower, (new ItemMultiTexture(Blocks.yellow_flower, Blocks.yellow_flower, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockFlower.EnumFlowerType .getType(BlockFlower.EnumFlowerColor.YELLOW, itemstack.getMetadata()) @@ -293,6 +306,7 @@ public class Item { })).setUnlocalizedName("flower")); registerItemBlock(Blocks.red_flower, (new ItemMultiTexture(Blocks.red_flower, Blocks.red_flower, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockFlower.EnumFlowerType .getType(BlockFlower.EnumFlowerColor.RED, itemstack.getMetadata()).getUnlocalizedName(); @@ -350,12 +364,14 @@ public class Item { registerItemBlock(Blocks.trapdoor); registerItemBlock(Blocks.monster_egg, (new ItemMultiTexture(Blocks.monster_egg, Blocks.monster_egg, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockSilverfish.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } })).setUnlocalizedName("monsterStoneEgg")); registerItemBlock(Blocks.stonebrick, (new ItemMultiTexture(Blocks.stonebrick, Blocks.stonebrick, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockStoneBrick.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -399,6 +415,7 @@ public class Item { registerItemBlock(Blocks.beacon); registerItemBlock(Blocks.cobblestone_wall, (new ItemMultiTexture(Blocks.cobblestone_wall, Blocks.cobblestone_wall, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockWall.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -431,6 +448,7 @@ public class Item { registerItemBlock(Blocks.slime_block); registerItemBlock(Blocks.double_plant, (new ItemDoublePlant(Blocks.double_plant, Blocks.double_plant, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockDoublePlant.EnumPlantType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -441,6 +459,7 @@ public class Item { (new ItemCloth(Blocks.stained_glass_pane)).setUnlocalizedName("stainedGlassPane")); registerItemBlock(Blocks.prismarine, (new ItemMultiTexture(Blocks.prismarine, Blocks.prismarine, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockPrismarine.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -448,6 +467,7 @@ public class Item { registerItemBlock(Blocks.sea_lantern); registerItemBlock(Blocks.red_sandstone, (new ItemMultiTexture(Blocks.red_sandstone, Blocks.red_sandstone, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockRedSandstone.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } @@ -792,6 +812,8 @@ public class Item { private String unlocalizedName; + private boolean isImmuneToFire = false; + /** * + allows items to add custom lines of information to the mouseover * description @@ -1002,6 +1024,10 @@ public class Item { return this.bFull3D; } + public boolean isImmuneToFire() { + return this.isImmuneToFire; + } + /** * + Checks isDamagable and if it cannot be stacked */ @@ -1107,6 +1133,11 @@ public class Item { return this; } + public Item setIsImmuneToFire(boolean isImmuneToFire) { + this.isImmuneToFire = isImmuneToFire; + return this; + } + /** * + set max damage of an Item */ diff --git a/src/game/java/net/minecraft/item/ItemAnvilBlock.java b/src/game/java/net/minecraft/item/ItemAnvilBlock.java index 1dac3986..c5cce6ab 100644 --- a/src/game/java/net/minecraft/item/ItemAnvilBlock.java +++ b/src/game/java/net/minecraft/item/ItemAnvilBlock.java @@ -5,13 +5,13 @@ import net.minecraft.block.Block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.block.Block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemAnvilBlock extends ItemMultiTexture { public ItemAnvilBlock(Block block) { @@ -35,7 +35,8 @@ public class ItemAnvilBlock extends ItemMultiTexture { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i << 2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemAppleGold.java b/src/game/java/net/minecraft/item/ItemAppleGold.java index f7ca4c2c..b116b2f6 100644 --- a/src/game/java/net/minecraft/item/ItemAppleGold.java +++ b/src/game/java/net/minecraft/item/ItemAppleGold.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemAppleGold extends ItemFood { public ItemAppleGold(int amount, float saturation, boolean isWolfFood) { @@ -40,6 +40,7 @@ public class ItemAppleGold extends ItemFood { /** * + Return an item rarity from EnumRarity */ + @Override public EnumRarity getRarity(ItemStack itemstack) { return itemstack.getMetadata() == 0 ? EnumRarity.RARE : EnumRarity.EPIC; } @@ -48,15 +49,18 @@ public class ItemAppleGold extends ItemFood { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, 0)); list.add(new ItemStack(item, 1, 1)); } + @Override public boolean hasEffect(ItemStack itemstack) { return itemstack.getMetadata() > 0; } + @Override protected void onFoodEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!world.isRemote) { entityplayer.addPotionEffect(new PotionEffect(Potion.absorption.id, 2400, 0)); @@ -73,4 +77,4 @@ public class ItemAppleGold extends ItemFood { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemArmor.java b/src/game/java/net/minecraft/item/ItemArmor.java index 3919b383..55a9ef86 100644 --- a/src/game/java/net/minecraft/item/ItemArmor.java +++ b/src/game/java/net/minecraft/item/ItemArmor.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemArmor extends Item { public static enum ArmorMaterial { @@ -96,6 +96,7 @@ public class ItemArmor extends Item { "minecraft:items/empty_armor_slot_chestplate", "minecraft:items/empty_armor_slot_leggings", "minecraft:items/empty_armor_slot_boots" }; private static final IBehaviorDispenseItem dispenserBehavior = new BehaviorDefaultDispenseItem() { + @Override protected ItemStack dispenseStack(IBlockSource iblocksource, ItemStack itemstack) { BlockPos blockpos = iblocksource.getBlockPos() .offset(BlockDispenser.getFacing(iblocksource.getBlockMetadata())); @@ -167,6 +168,7 @@ public class ItemArmor extends Item { } } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { if (i > 0) { return 16777215; @@ -183,6 +185,7 @@ public class ItemArmor extends Item { /** * + Return whether this item is repairable in an anvil. */ + @Override public boolean getIsRepairable(ItemStack itemstack, ItemStack itemstack1) { return this.material.getRepairItem() == itemstack1.getItem() ? true : super.getIsRepairable(itemstack, itemstack1); @@ -192,6 +195,7 @@ public class ItemArmor extends Item { * + Return the enchantability factor of the item, most of the time is based on * material. */ + @Override public int getItemEnchantability() { return this.material.getEnchantability(); } @@ -210,6 +214,7 @@ public class ItemArmor extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { int i = EntityLiving.getArmorPosition(itemstack) - 1; ItemStack itemstack1 = entityplayer.getCurrentArmor(i); @@ -258,4 +263,4 @@ public class ItemArmor extends Item { nbttagcompound1.setInteger("color", color); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemArmorStand.java b/src/game/java/net/minecraft/item/ItemArmorStand.java index b4002786..eeb904c7 100644 --- a/src/game/java/net/minecraft/item/ItemArmorStand.java +++ b/src/game/java/net/minecraft/item/ItemArmorStand.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemArmorStand extends Item { public ItemArmorStand() { @@ -58,6 +58,7 @@ public class ItemArmorStand extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing == EnumFacing.DOWN) { @@ -112,4 +113,4 @@ public class ItemArmorStand extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemAxe.java b/src/game/java/net/minecraft/item/ItemAxe.java index 0f6413f5..5e5049cd 100644 --- a/src/game/java/net/minecraft/item/ItemAxe.java +++ b/src/game/java/net/minecraft/item/ItemAxe.java @@ -11,13 +11,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemAxe extends ItemTool { private static Set EFFECTIVE_ON; @@ -43,9 +43,10 @@ public class ItemAxe extends ItemTool { super(3.0F, material, EFFECTIVE_ON); } + @Override public float getStrVsBlock(ItemStack itemstack, Block block) { return block.getMaterial() != Material.wood && block.getMaterial() != Material.plants && block.getMaterial() != Material.vine ? super.getStrVsBlock(itemstack, block) : this.efficiencyOnProperMaterial; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBanner.java b/src/game/java/net/minecraft/item/ItemBanner.java index af43d3c8..e4913d1e 100644 --- a/src/game/java/net/minecraft/item/ItemBanner.java +++ b/src/game/java/net/minecraft/item/ItemBanner.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBanner extends ItemBlock { public ItemBanner() { @@ -53,6 +53,7 @@ public class ItemBanner extends ItemBlock { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer var2, List list, boolean var4) { NBTTagCompound nbttagcompound = itemstack.getSubCompound("BlockEntityTag", false); if (nbttagcompound != null && nbttagcompound.hasKey("Patterns")) { @@ -85,6 +86,7 @@ public class ItemBanner extends ItemBlock { return enumdyecolor; } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { if (i == 0) { return 16777215; @@ -97,10 +99,12 @@ public class ItemBanner extends ItemBlock { /** * + gets the CreativeTab this item is displayed on */ + @Override public CreativeTabs getCreativeTab() { return CreativeTabs.tabDecorations; } + @Override public String getItemStackDisplayName(ItemStack itemstack) { String s = "item.banner."; EnumDyeColor enumdyecolor = this.getBaseColor(itemstack); @@ -112,6 +116,7 @@ public class ItemBanner extends ItemBlock { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { EnumDyeColor[] colors = EnumDyeColor.META_LOOKUP; for (int i = 0; i < colors.length; ++i) { @@ -130,6 +135,7 @@ public class ItemBanner extends ItemBlock { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing == EnumFacing.DOWN) { @@ -165,4 +171,4 @@ public class ItemBanner extends ItemBlock { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBed.java b/src/game/java/net/minecraft/item/ItemBed.java index 7c985d94..0aef2550 100644 --- a/src/game/java/net/minecraft/item/ItemBed.java +++ b/src/game/java/net/minecraft/item/ItemBed.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBed extends Item { public ItemBed() { @@ -42,6 +42,7 @@ public class ItemBed extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (world.isRemote) { @@ -85,4 +86,4 @@ public class ItemBed extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBlock.java b/src/game/java/net/minecraft/item/ItemBlock.java index 6734d0fa..059ab245 100644 --- a/src/game/java/net/minecraft/item/ItemBlock.java +++ b/src/game/java/net/minecraft/item/ItemBlock.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBlock extends Item { public static boolean setTileEntityNBT(World worldIn, EntityPlayer pos, BlockPos stack, ItemStack parItemStack) { @@ -98,10 +98,12 @@ public class ItemBlock extends Item { /** * + gets the CreativeTab this item is displayed on */ + @Override public CreativeTabs getCreativeTab() { return this.block.getCreativeTabToDisplayOn(); } + @Override public float getHeldItemBrightnessEagler(ItemStack itemStack) { return this.block.getLightValue() * 0.06667f; } @@ -110,6 +112,7 @@ public class ItemBlock extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs creativetabs, List list) { this.block.getSubBlocks(item, creativetabs, list); } @@ -117,6 +120,7 @@ public class ItemBlock extends Item { /** * + Returns the unlocalized name of this item. */ + @Override public String getUnlocalizedName() { return this.block.getUnlocalizedName(); } @@ -124,6 +128,7 @@ public class ItemBlock extends Item { /** * + Returns the unlocalized name of this item. */ + @Override public String getUnlocalizedName(ItemStack var1) { return this.block.getUnlocalizedName(); } @@ -131,6 +136,7 @@ public class ItemBlock extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2) { IBlockState iblockstate = world.getBlockState(blockpos); @@ -171,8 +177,9 @@ public class ItemBlock extends Item { * + Sets the unlocalized name of this item to the string passed as the * parameter, prefixed by "item." */ + @Override public ItemBlock setUnlocalizedName(String unlocalizedName) { super.setUnlocalizedName(unlocalizedName); return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBoat.java b/src/game/java/net/minecraft/item/ItemBoat.java index ace262e8..b3d644ae 100644 --- a/src/game/java/net/minecraft/item/ItemBoat.java +++ b/src/game/java/net/minecraft/item/ItemBoat.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBoat extends Item { public ItemBoat() { @@ -48,6 +48,7 @@ public class ItemBoat extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { float f = 1.0F; float f1 = entityplayer.prevRotationPitch + (entityplayer.rotationPitch - entityplayer.prevRotationPitch) * f; @@ -122,4 +123,4 @@ public class ItemBoat extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBook.java b/src/game/java/net/minecraft/item/ItemBook.java index e049997a..3322cc0e 100644 --- a/src/game/java/net/minecraft/item/ItemBook.java +++ b/src/game/java/net/minecraft/item/ItemBook.java @@ -3,13 +3,13 @@ package net.minecraft.item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,13 +21,14 @@ package net.minecraft.item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBook extends Item { /** * + Return the enchantability factor of the item, most of the time is based on * material. */ + @Override public int getItemEnchantability() { return 1; } @@ -35,7 +36,8 @@ public class ItemBook extends Item { /** * + Checks isDamagable and if it cannot be stacked */ + @Override public boolean isItemTool(ItemStack stack) { return stack.stackSize == 1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBow.java b/src/game/java/net/minecraft/item/ItemBow.java index 335bc2e0..e6ca9f8a 100644 --- a/src/game/java/net/minecraft/item/ItemBow.java +++ b/src/game/java/net/minecraft/item/ItemBow.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,21 +30,35 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBow extends Item { public static final String[] bowPullIconNameArray = new String[] { "pulling_0", "pulling_1", "pulling_2" }; + public double basePower = 1; + public int maxDamage = 384; public ItemBow() { this.maxStackSize = 1; - this.setMaxDamage(384); + this.setMaxDamage(maxDamage); this.setCreativeTab(CreativeTabs.tabCombat); + + } + + public ItemBow(double power, int maxDam) { + this.maxStackSize = 1; + maxDamage = maxDam; + this.setMaxDamage(maxDamage); + this.setCreativeTab(CreativeTabs.tabStarlike); + + basePower = power; + } /** - * + Return the enchantability factor of the item, most of the time is based on - * material. + * + Return the enchantabpuility factor of the item, most of the time is based + * on material. */ + @Override public int getItemEnchantability() { return 1; } @@ -53,6 +67,7 @@ public class ItemBow extends Item { * + returns the action that specifies what animation to play when the items is * being used */ + @Override public EnumAction getItemUseAction(ItemStack var1) { return EnumAction.BOW; } @@ -60,6 +75,7 @@ public class ItemBow extends Item { /** * + How long it takes to use or consume an item */ + @Override public int getMaxItemUseDuration(ItemStack var1) { return 72000; } @@ -68,6 +84,7 @@ public class ItemBow extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { if (entityplayer.capabilities.isCreativeMode || entityplayer.inventory.hasItem(Items.arrow)) { entityplayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack)); @@ -81,6 +98,7 @@ public class ItemBow extends Item { * Not called when the player stops using the Item before the action is * complete. */ + @Override public ItemStack onItemUseFinish(ItemStack itemstack, World var2, EntityPlayer var3) { return itemstack; } @@ -89,6 +107,7 @@ public class ItemBow extends Item { * + Called when the player stops using an Item (stops holding the right mouse * button). */ + @Override public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; @@ -136,7 +155,10 @@ public class ItemBow extends Item { if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } + // modifier + entityarrow.setDamage((entityarrow.getDamage() * basePower)); + } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBucket.java b/src/game/java/net/minecraft/item/ItemBucket.java index ee0b6c8a..bc6770c7 100644 --- a/src/game/java/net/minecraft/item/ItemBucket.java +++ b/src/game/java/net/minecraft/item/ItemBucket.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBucket extends Item { private Block isFull; @@ -64,6 +64,7 @@ public class ItemBucket extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { boolean flag = this.isFull == Blocks.air; MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityplayer, flag); @@ -151,4 +152,4 @@ public class ItemBucket extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemBucketMilk.java b/src/game/java/net/minecraft/item/ItemBucketMilk.java index 264da848..eb97584b 100644 --- a/src/game/java/net/minecraft/item/ItemBucketMilk.java +++ b/src/game/java/net/minecraft/item/ItemBucketMilk.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemBucketMilk extends Item { public ItemBucketMilk() { @@ -39,6 +39,7 @@ public class ItemBucketMilk extends Item { * + returns the action that specifies what animation to play when the items is * being used */ + @Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.DRINK; } @@ -46,6 +47,7 @@ public class ItemBucketMilk extends Item { /** * + How long it takes to use or consume an item */ + @Override public int getMaxItemUseDuration(ItemStack stack) { return 32; } @@ -54,6 +56,7 @@ public class ItemBucketMilk extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) { playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn)); return itemStackIn; @@ -64,6 +67,7 @@ public class ItemBucketMilk extends Item { * Not called when the player stops using the Item before the action is * complete. */ + @Override public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn) { if (!playerIn.capabilities.isCreativeMode) { --stack.stackSize; @@ -76,4 +80,4 @@ public class ItemBucketMilk extends Item { playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); return stack.stackSize <= 0 ? new ItemStack(Items.bucket) : stack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemCarrotOnAStick.java b/src/game/java/net/minecraft/item/ItemCarrotOnAStick.java index b9cca53b..c3b6f061 100644 --- a/src/game/java/net/minecraft/item/ItemCarrotOnAStick.java +++ b/src/game/java/net/minecraft/item/ItemCarrotOnAStick.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemCarrotOnAStick extends Item { public ItemCarrotOnAStick() { @@ -40,6 +40,7 @@ public class ItemCarrotOnAStick extends Item { /** * + Returns True is the item is renderer in full 3D when hold. */ + @Override public boolean isFull3D() { return true; } @@ -48,6 +49,7 @@ public class ItemCarrotOnAStick extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { if (entityplayer.isRiding() && entityplayer.ridingEntity instanceof EntityPig) { EntityPig entitypig = (EntityPig) entityplayer.ridingEntity; @@ -71,7 +73,8 @@ public class ItemCarrotOnAStick extends Item { * + Returns true if this item should be rotated by 180 degrees around the Y * axis when being held in an entities hands. */ + @Override public boolean shouldRotateAroundWhenRendering() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemCloth.java b/src/game/java/net/minecraft/item/ItemCloth.java index d189dad6..8551dca7 100644 --- a/src/game/java/net/minecraft/item/ItemCloth.java +++ b/src/game/java/net/minecraft/item/ItemCloth.java @@ -5,13 +5,13 @@ import net.minecraft.block.Block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.block.Block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemCloth extends ItemBlock { public ItemCloth(Block block) { @@ -37,6 +37,7 @@ public class ItemCloth extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -46,7 +47,8 @@ public class ItemCloth extends ItemBlock { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { return super.getUnlocalizedName() + "." + EnumDyeColor.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemCoal.java b/src/game/java/net/minecraft/item/ItemCoal.java index 2d420e57..885f8dd6 100644 --- a/src/game/java/net/minecraft/item/ItemCoal.java +++ b/src/game/java/net/minecraft/item/ItemCoal.java @@ -7,13 +7,13 @@ import net.minecraft.creativetab.CreativeTabs; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.creativetab.CreativeTabs; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemCoal extends Item { public ItemCoal() { @@ -38,6 +38,7 @@ public class ItemCoal extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { list.add(new ItemStack(item, 1, 0)); list.add(new ItemStack(item, 1, 1)); @@ -48,7 +49,8 @@ public class ItemCoal extends Item { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { return itemstack.getMetadata() == 1 ? "item.charcoal" : "item.coal"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemColored.java b/src/game/java/net/minecraft/item/ItemColored.java index f6496799..c29a6dec 100644 --- a/src/game/java/net/minecraft/item/ItemColored.java +++ b/src/game/java/net/minecraft/item/ItemColored.java @@ -5,13 +5,13 @@ import net.minecraft.block.Block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.block.Block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemColored extends ItemBlock { private final Block coloredBlock; @@ -39,6 +39,7 @@ public class ItemColored extends ItemBlock { } + @Override public int getColorFromItemStack(ItemStack itemstack, int var2) { return this.coloredBlock.getRenderColor(this.coloredBlock.getStateFromMeta(itemstack.getMetadata())); } @@ -48,6 +49,7 @@ public class ItemColored extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -57,6 +59,7 @@ public class ItemColored extends ItemBlock { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { if (this.subtypeNames == null) { return super.getUnlocalizedName(itemstack); @@ -72,4 +75,4 @@ public class ItemColored extends ItemBlock { this.subtypeNames = names; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemDoor.java b/src/game/java/net/minecraft/item/ItemDoor.java index 17656f24..65b67bb1 100644 --- a/src/game/java/net/minecraft/item/ItemDoor.java +++ b/src/game/java/net/minecraft/item/ItemDoor.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemDoor extends Item { public static void placeDoor(World worldIn, BlockPos pos, EnumFacing facing, Block door) { @@ -68,6 +68,7 @@ public class ItemDoor extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing != EnumFacing.UP) { @@ -90,4 +91,4 @@ public class ItemDoor extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemDoublePlant.java b/src/game/java/net/minecraft/item/ItemDoublePlant.java index 5016e819..6d5134bd 100644 --- a/src/game/java/net/minecraft/item/ItemDoublePlant.java +++ b/src/game/java/net/minecraft/item/ItemDoublePlant.java @@ -9,13 +9,13 @@ import net.minecraft.world.ColorizerGrass; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.world.ColorizerGrass; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemDoublePlant extends ItemMultiTexture { public ItemDoublePlant(Block block, Block block2, Function nameFunction) { super(block, block2, nameFunction); } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType .byMetadata(itemstack.getMetadata()); @@ -42,4 +43,4 @@ public class ItemDoublePlant extends ItemMultiTexture { ? super.getColorFromItemStack(itemstack, i) : ColorizerGrass.getGrassColor(0.5D, 1.0D); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemDye.java b/src/game/java/net/minecraft/item/ItemDye.java index 8ce61402..171d428c 100644 --- a/src/game/java/net/minecraft/item/ItemDye.java +++ b/src/game/java/net/minecraft/item/ItemDye.java @@ -20,13 +20,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemDye extends Item { public static final int[] dyeColors = new int[] { 1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, @@ -96,6 +96,7 @@ public class ItemDye extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { for (int i = 0; i < 16; ++i) { list.add(new ItemStack(item, 1, i)); @@ -108,6 +109,7 @@ public class ItemDye extends Item { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { int i = itemstack.getMetadata(); return super.getUnlocalizedName() + "." + EnumDyeColor.byDyeDamage(i).getUnlocalizedName(); @@ -117,6 +119,7 @@ public class ItemDye extends Item { * + Returns true if the item can be used on the given entity, e.g. shears on * sheep. */ + @Override public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer var2, EntityLivingBase entitylivingbase) { if (entitylivingbase instanceof EntitySheep) { EntitySheep entitysheep = (EntitySheep) entitylivingbase; @@ -135,6 +138,7 @@ public class ItemDye extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2) { if (!entityplayer.canPlayerEdit(blockpos.offset(enumfacing), enumfacing, itemstack)) { @@ -178,4 +182,4 @@ public class ItemDye extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEditableBook.java b/src/game/java/net/minecraft/item/ItemEditableBook.java index 5c7d3830..d15bd876 100644 --- a/src/game/java/net/minecraft/item/ItemEditableBook.java +++ b/src/game/java/net/minecraft/item/ItemEditableBook.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEditableBook extends Item { /** @@ -68,6 +68,7 @@ public class ItemEditableBook extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer var2, List list, boolean var4) { if (itemstack.hasTagCompound()) { NBTTagCompound nbttagcompound = itemstack.getTagCompound(); @@ -83,6 +84,7 @@ public class ItemEditableBook extends Item { } + @Override public String getItemStackDisplayName(ItemStack itemstack) { if (itemstack.hasTagCompound()) { NBTTagCompound nbttagcompound = itemstack.getTagCompound(); @@ -95,6 +97,7 @@ public class ItemEditableBook extends Item { return super.getItemStackDisplayName(itemstack); } + @Override public boolean hasEffect(ItemStack var1) { return true; } @@ -103,6 +106,7 @@ public class ItemEditableBook extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!world.isRemote) { this.resolveContents(itemstack, entityplayer); @@ -147,4 +151,4 @@ public class ItemEditableBook extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEgg.java b/src/game/java/net/minecraft/item/ItemEgg.java index e4bb6190..1808b74a 100644 --- a/src/game/java/net/minecraft/item/ItemEgg.java +++ b/src/game/java/net/minecraft/item/ItemEgg.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEgg extends Item { public ItemEgg() { @@ -39,6 +39,7 @@ public class ItemEgg extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!entityplayer.capabilities.isCreativeMode) { --itemstack.stackSize; @@ -53,7 +54,8 @@ public class ItemEgg extends Item { return itemstack; } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEmptyMap.java b/src/game/java/net/minecraft/item/ItemEmptyMap.java index fb919402..f3c5054e 100644 --- a/src/game/java/net/minecraft/item/ItemEmptyMap.java +++ b/src/game/java/net/minecraft/item/ItemEmptyMap.java @@ -10,13 +10,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEmptyMap extends ItemMapBase { protected ItemEmptyMap() { @@ -39,6 +39,7 @@ public class ItemEmptyMap extends ItemMapBase { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { ItemStack itemstack1 = new ItemStack(Items.filled_map, 1, world.getUniqueDataId("map")); String s = "map_" + itemstack1.getMetadata(); @@ -60,4 +61,4 @@ public class ItemEmptyMap extends ItemMapBase { return itemstack; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEnchantedBook.java b/src/game/java/net/minecraft/item/ItemEnchantedBook.java index 5a7d9e3d..54a9e309 100644 --- a/src/game/java/net/minecraft/item/ItemEnchantedBook.java +++ b/src/game/java/net/minecraft/item/ItemEnchantedBook.java @@ -15,13 +15,13 @@ import net.minecraft.util.WeightedRandomChestContent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.WeightedRandomChestContent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEnchantedBook extends Item { /** @@ -73,6 +73,7 @@ public class ItemEnchantedBook extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { super.addInformation(itemstack, entityplayer, list, flag); NBTTagList nbttaglist = this.getEnchantments(itemstack); @@ -124,10 +125,12 @@ public class ItemEnchantedBook extends Item { /** * + Return an item rarity from EnumRarity */ + @Override public EnumRarity getRarity(ItemStack itemstack) { return this.getEnchantments(itemstack).tagCount() > 0 ? EnumRarity.UNCOMMON : super.getRarity(itemstack); } + @Override public boolean hasEffect(ItemStack var1) { return true; } @@ -135,7 +138,8 @@ public class ItemEnchantedBook extends Item { /** * + Checks isDamagable and if it cannot be stacked */ + @Override public boolean isItemTool(ItemStack var1) { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEnderEye.java b/src/game/java/net/minecraft/item/ItemEnderEye.java index 7fe58661..7bf32f8f 100644 --- a/src/game/java/net/minecraft/item/ItemEnderEye.java +++ b/src/game/java/net/minecraft/item/ItemEnderEye.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEnderEye extends Item { public ItemEnderEye() { @@ -45,6 +45,7 @@ public class ItemEnderEye extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityplayer, false); if (movingobjectposition != null @@ -77,6 +78,7 @@ public class ItemEnderEye extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { IBlockState iblockstate = world.getBlockState(blockpos); @@ -171,7 +173,8 @@ public class ItemEnderEye extends Item { } } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemEnderPearl.java b/src/game/java/net/minecraft/item/ItemEnderPearl.java index 77485999..d948f5f3 100644 --- a/src/game/java/net/minecraft/item/ItemEnderPearl.java +++ b/src/game/java/net/minecraft/item/ItemEnderPearl.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemEnderPearl extends Item { public ItemEnderPearl() { @@ -40,6 +40,7 @@ public class ItemEnderPearl extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (entityplayer.capabilities.isCreativeMode && world.isRemote && !SingleplayerServerController.isClientInEaglerSingleplayerOrLAN()) { @@ -58,7 +59,8 @@ public class ItemEnderPearl extends Item { } } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemExpBottle.java b/src/game/java/net/minecraft/item/ItemExpBottle.java index 48df0628..00a11ab5 100644 --- a/src/game/java/net/minecraft/item/ItemExpBottle.java +++ b/src/game/java/net/minecraft/item/ItemExpBottle.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,13 +27,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemExpBottle extends Item { public ItemExpBottle() { this.setCreativeTab(CreativeTabs.tabMisc); } + @Override public boolean hasEffect(ItemStack var1) { return true; } @@ -42,6 +43,7 @@ public class ItemExpBottle extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!entityplayer.capabilities.isCreativeMode) { --itemstack.stackSize; @@ -56,7 +58,8 @@ public class ItemExpBottle extends Item { return itemstack; } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFireball.java b/src/game/java/net/minecraft/item/ItemFireball.java index 0a35d3b1..7a19bc40 100644 --- a/src/game/java/net/minecraft/item/ItemFireball.java +++ b/src/game/java/net/minecraft/item/ItemFireball.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFireball extends Item { public ItemFireball() { @@ -39,6 +39,7 @@ public class ItemFireball extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (world.isRemote) { @@ -63,4 +64,4 @@ public class ItemFireball extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFirework.java b/src/game/java/net/minecraft/item/ItemFirework.java index dd2f8ad4..08ecbe2c 100644 --- a/src/game/java/net/minecraft/item/ItemFirework.java +++ b/src/game/java/net/minecraft/item/ItemFirework.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFirework extends Item { @@ -43,6 +43,7 @@ public class ItemFirework extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer var2, List list, boolean var4) { if (itemstack.hasTagCompound()) { NBTTagCompound nbttagcompound = itemstack.getTagCompound().getCompoundTag("Fireworks"); @@ -75,6 +76,7 @@ public class ItemFirework extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing var5, float f, float f1, float f2) { if (!world.isRemote) { @@ -92,7 +94,8 @@ public class ItemFirework extends Item { } } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFireworkCharge.java b/src/game/java/net/minecraft/item/ItemFireworkCharge.java index 77a1d507..791bcd8f 100644 --- a/src/game/java/net/minecraft/item/ItemFireworkCharge.java +++ b/src/game/java/net/minecraft/item/ItemFireworkCharge.java @@ -11,13 +11,13 @@ import net.minecraft.util.StatCollector; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.StatCollector; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFireworkCharge extends Item { public static void addExplosionInfo(NBTTagCompound nbt, List tooltip) { @@ -129,6 +129,7 @@ public class ItemFireworkCharge extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer var2, List list, boolean var4) { if (itemstack.hasTagCompound()) { NBTTagCompound nbttagcompound = itemstack.getTagCompound().getCompoundTag("Explosion"); @@ -139,6 +140,7 @@ public class ItemFireworkCharge extends Item { } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { if (i != 1) { return super.getColorFromItemStack(itemstack, i); @@ -171,4 +173,4 @@ public class ItemFireworkCharge extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFishFood.java b/src/game/java/net/minecraft/item/ItemFishFood.java index 0ae57c54..1e9ac820 100644 --- a/src/game/java/net/minecraft/item/ItemFishFood.java +++ b/src/game/java/net/minecraft/item/ItemFishFood.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFishFood extends ItemFood { public static enum FishType { @@ -132,18 +132,21 @@ public class ItemFishFood extends ItemFood { this.cooked = cooked; } + @Override public int getHealAmount(ItemStack stack) { ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); return this.cooked && itemfishfood$fishtype.canCook() ? itemfishfood$fishtype.getCookedHealAmount() : itemfishfood$fishtype.getUncookedHealAmount(); } + @Override public String getPotionEffect(ItemStack stack) { return ItemFishFood.FishType.byItemStack(stack) == ItemFishFood.FishType.PUFFERFISH ? PotionHelper.pufferfishEffect : null; } + @Override public float getSaturationModifier(ItemStack stack) { ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); return this.cooked && itemfishfood$fishtype.canCook() ? itemfishfood$fishtype.getCookedSaturationModifier() @@ -154,6 +157,7 @@ public class ItemFishFood extends ItemFood { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item var1, CreativeTabs var2, List list) { ItemFishFood.FishType[] types = ItemFishFood.FishType.values(); for (int i = 0; i < types.length; ++i) { @@ -170,12 +174,14 @@ public class ItemFishFood extends ItemFood { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(itemstack); return this.getUnlocalizedName() + "." + itemfishfood$fishtype.getUnlocalizedName() + "." + (this.cooked && itemfishfood$fishtype.canCook() ? "cooked" : "raw"); } + @Override protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player) { ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); if (itemfishfood$fishtype == ItemFishFood.FishType.PUFFERFISH) { @@ -186,4 +192,4 @@ public class ItemFishFood extends ItemFood { super.onFoodEaten(stack, worldIn, player); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFishingRod.java b/src/game/java/net/minecraft/item/ItemFishingRod.java index 066332fa..03006581 100644 --- a/src/game/java/net/minecraft/item/ItemFishingRod.java +++ b/src/game/java/net/minecraft/item/ItemFishingRod.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFishingRod extends Item { public ItemFishingRod() { @@ -40,6 +40,7 @@ public class ItemFishingRod extends Item { * + Return the enchantability factor of the item, most of the time is based on * material. */ + @Override public int getItemEnchantability() { return 1; } @@ -47,6 +48,7 @@ public class ItemFishingRod extends Item { /** * + Returns True is the item is renderer in full 3D when hold. */ + @Override public boolean isFull3D() { return true; } @@ -54,6 +56,7 @@ public class ItemFishingRod extends Item { /** * + Checks isDamagable and if it cannot be stacked */ + @Override public boolean isItemTool(ItemStack itemstack) { return super.isItemTool(itemstack); } @@ -62,6 +65,7 @@ public class ItemFishingRod extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (entityplayer.fishEntity != null) { int i = entityplayer.fishEntity.handleHookRetraction(); @@ -84,7 +88,8 @@ public class ItemFishingRod extends Item { * + Returns true if this item should be rotated by 180 degrees around the Y * axis when being held in an entities hands. */ + @Override public boolean shouldRotateAroundWhenRendering() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFlintAndSteel.java b/src/game/java/net/minecraft/item/ItemFlintAndSteel.java index d35a3335..01876eaf 100644 --- a/src/game/java/net/minecraft/item/ItemFlintAndSteel.java +++ b/src/game/java/net/minecraft/item/ItemFlintAndSteel.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFlintAndSteel extends Item { public ItemFlintAndSteel() { @@ -41,6 +41,7 @@ public class ItemFlintAndSteel extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { blockpos = blockpos.offset(enumfacing); @@ -57,4 +58,4 @@ public class ItemFlintAndSteel extends Item { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemFood.java b/src/game/java/net/minecraft/item/ItemFood.java index e49d4d53..ddbdce62 100644 --- a/src/game/java/net/minecraft/item/ItemFood.java +++ b/src/game/java/net/minecraft/item/ItemFood.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemFood extends Item { public final int itemUseDuration; @@ -60,6 +60,7 @@ public class ItemFood extends Item { * + returns the action that specifies what animation to play when the items is * being used */ + @Override public EnumAction getItemUseAction(ItemStack var1) { return EnumAction.EAT; } @@ -67,6 +68,7 @@ public class ItemFood extends Item { /** * + How long it takes to use or consume an item */ + @Override public int getMaxItemUseDuration(ItemStack var1) { return 32; } @@ -94,6 +96,7 @@ public class ItemFood extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { if (entityplayer.canEat(this.alwaysEdible)) { entityplayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack)); @@ -107,6 +110,7 @@ public class ItemFood extends Item { * Not called when the player stops using the Item before the action is * complete. */ + @Override public ItemStack onItemUseFinish(ItemStack itemstack, World world, EntityPlayer entityplayer) { --itemstack.stackSize; entityplayer.getFoodStats().addStats(this, itemstack); @@ -136,4 +140,4 @@ public class ItemFood extends Item { this.potionEffectProbability = probability; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemGlassBottle.java b/src/game/java/net/minecraft/item/ItemGlassBottle.java index 4a1fb44d..065a2bc1 100644 --- a/src/game/java/net/minecraft/item/ItemGlassBottle.java +++ b/src/game/java/net/minecraft/item/ItemGlassBottle.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemGlassBottle extends Item { public ItemGlassBottle() { @@ -41,6 +41,7 @@ public class ItemGlassBottle extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityplayer, true); if (movingobjectposition == null) { @@ -73,4 +74,4 @@ public class ItemGlassBottle extends Item { return itemstack; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemHangingEntity.java b/src/game/java/net/minecraft/item/ItemHangingEntity.java index a0205c2d..d43d0527 100644 --- a/src/game/java/net/minecraft/item/ItemHangingEntity.java +++ b/src/game/java/net/minecraft/item/ItemHangingEntity.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemHangingEntity extends Item { private final Class hangingEntityClass; @@ -50,6 +50,7 @@ public class ItemHangingEntity extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing == EnumFacing.DOWN) { @@ -73,4 +74,4 @@ public class ItemHangingEntity extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemHoe.java b/src/game/java/net/minecraft/item/ItemHoe.java index 58026492..c49a9d67 100644 --- a/src/game/java/net/minecraft/item/ItemHoe.java +++ b/src/game/java/net/minecraft/item/ItemHoe.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemHoe extends Item { protected Item.ToolMaterial theToolMaterial; @@ -55,6 +55,7 @@ public class ItemHoe extends Item { /** * + Returns True is the item is renderer in full 3D when hold. */ + @Override public boolean isFull3D() { return true; } @@ -62,6 +63,7 @@ public class ItemHoe extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (!entityplayer.canPlayerEdit(blockpos.offset(enumfacing), enumfacing, itemstack)) { @@ -104,4 +106,4 @@ public class ItemHoe extends Item { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemLead.java b/src/game/java/net/minecraft/item/ItemLead.java index 32c04e45..27853f64 100644 --- a/src/game/java/net/minecraft/item/ItemLead.java +++ b/src/game/java/net/minecraft/item/ItemLead.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemLead extends Item { public static boolean attachToFence(EntityPlayer player, World worldIn, BlockPos fence) { @@ -69,6 +69,7 @@ public class ItemLead extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack var1, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing var5, float var6, float var7, float var8) { Block block = world.getBlockState(blockpos).getBlock(); @@ -83,4 +84,4 @@ public class ItemLead extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemLeaves.java b/src/game/java/net/minecraft/item/ItemLeaves.java index 5facbce5..8f1b6267 100644 --- a/src/game/java/net/minecraft/item/ItemLeaves.java +++ b/src/game/java/net/minecraft/item/ItemLeaves.java @@ -5,13 +5,13 @@ import net.minecraft.block.BlockLeaves; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.block.BlockLeaves; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemLeaves extends ItemBlock { private final BlockLeaves leaves; @@ -35,6 +35,7 @@ public class ItemLeaves extends ItemBlock { this.setHasSubtypes(true); } + @Override public int getColorFromItemStack(ItemStack stack, int renderPass) { return this.leaves.getRenderColor(this.leaves.getStateFromMeta(stack.getMetadata())); } @@ -44,6 +45,7 @@ public class ItemLeaves extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int damage) { return damage | 4; } @@ -53,7 +55,8 @@ public class ItemLeaves extends ItemBlock { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack stack) { return super.getUnlocalizedName() + "." + this.leaves.getWoodType(stack.getMetadata()).getUnlocalizedName(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemLilyPad.java b/src/game/java/net/minecraft/item/ItemLilyPad.java index 06bc1fd2..fbf84901 100644 --- a/src/game/java/net/minecraft/item/ItemLilyPad.java +++ b/src/game/java/net/minecraft/item/ItemLilyPad.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,13 +32,14 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemLilyPad extends ItemColored { public ItemLilyPad(Block block) { super(block, false); } + @Override public int getColorFromItemStack(ItemStack itemstack, int var2) { return Blocks.waterlily.getRenderColor(Blocks.waterlily.getStateFromMeta(itemstack.getMetadata())); } @@ -47,6 +48,7 @@ public class ItemLilyPad extends ItemColored { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityplayer, true); if (movingobjectposition == null) { @@ -80,4 +82,4 @@ public class ItemLilyPad extends ItemColored { return itemstack; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemMap.java b/src/game/java/net/minecraft/item/ItemMap.java index a6f58941..5a101be5 100644 --- a/src/game/java/net/minecraft/item/ItemMap.java +++ b/src/game/java/net/minecraft/item/ItemMap.java @@ -25,13 +25,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemMap extends ItemMapBase { public static MapData loadMapData(int mapId, World worldIn) { @@ -65,6 +65,7 @@ public class ItemMap extends ItemMapBase { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { MapData mapdata = this.getMapData(stack, playerIn.worldObj); if (advanced) { @@ -78,6 +79,7 @@ public class ItemMap extends ItemMapBase { } + @Override public Packet createMapDataPacket(ItemStack stack, World worldIn, EntityPlayer player) { return this.getMapData(stack, worldIn).getMapPacket(stack, worldIn, player); } @@ -103,6 +105,7 @@ public class ItemMap extends ItemMapBase { /** * + Called when item is crafted/smelted. Used only by maps so far. */ + @Override public void onCreated(ItemStack stack, World worldIn, EntityPlayer playerIn) { if (stack.hasTagCompound() && stack.getTagCompound().getBoolean("map_is_scaling")) { MapData mapdata = Items.filled_map.getMapData(stack, worldIn); @@ -125,6 +128,7 @@ public class ItemMap extends ItemMapBase { * + Called each tick as long the item is on a player inventory. Uses by maps to * check if is on a player hand and update it's contents. */ + @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { if (!worldIn.isRemote) { MapData mapdata = this.getMapData(stack, worldIn); @@ -190,7 +194,7 @@ public class ItemMap extends ItemMapBase { d1 = 100.0D; } else { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i4 = 0; i4 < i; ++i4) { for (int j4 = 0; j4 < i; ++j4) { @@ -273,4 +277,4 @@ public class ItemMap extends ItemMapBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemMapBase.java b/src/game/java/net/minecraft/item/ItemMapBase.java index 690774dc..7a9f7fa3 100644 --- a/src/game/java/net/minecraft/item/ItemMapBase.java +++ b/src/game/java/net/minecraft/item/ItemMapBase.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemMapBase extends Item { public Packet createMapDataPacket(ItemStack var1, World var2, EntityPlayer var3) { @@ -35,7 +35,8 @@ public class ItemMapBase extends Item { /** * + false for all Items except sub-classes of ItemMapBase */ + @Override public boolean isMap() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemMinecart.java b/src/game/java/net/minecraft/item/ItemMinecart.java index 10c3b805..82ec0c90 100644 --- a/src/game/java/net/minecraft/item/ItemMinecart.java +++ b/src/game/java/net/minecraft/item/ItemMinecart.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,12 +35,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemMinecart extends Item { private static final IBehaviorDispenseItem dispenserMinecartBehavior = new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem behaviourDefaultDispenseItem = new BehaviorDefaultDispenseItem(); + @Override public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { EnumFacing enumfacing = BlockDispenser.getFacing(source.getBlockMetadata()); World world = source.getWorld(); @@ -91,6 +92,7 @@ public class ItemMinecart extends Item { return stack; } + @Override protected void playDispenseSound(IBlockSource source) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } @@ -107,6 +109,7 @@ public class ItemMinecart extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { IBlockState iblockstate = worldIn.getBlockState(pos); @@ -137,4 +140,4 @@ public class ItemMinecart extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemMonsterPlacer.java b/src/game/java/net/minecraft/item/ItemMonsterPlacer.java index 5bd24e91..1b63855c 100644 --- a/src/game/java/net/minecraft/item/ItemMonsterPlacer.java +++ b/src/game/java/net/minecraft/item/ItemMonsterPlacer.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemMonsterPlacer extends Item { /** @@ -82,6 +82,7 @@ public class ItemMonsterPlacer extends Item { this.setCreativeTab(CreativeTabs.tabMisc); } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { EntityList.EntityEggInfo entitylist$entityegginfo = (EntityList.EntityEggInfo) EntityList.entityEggs .get(Integer.valueOf(itemstack.getMetadata())); @@ -90,6 +91,7 @@ public class ItemMonsterPlacer extends Item { : 16777215; } + @Override public String getItemStackDisplayName(ItemStack itemstack) { String s = ("" + StatCollector.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); String s1 = EntityList.getStringFromID(itemstack.getMetadata()); @@ -104,6 +106,7 @@ public class ItemMonsterPlacer extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { for (EntityList.EntityEggInfo entitylist$entityegginfo : EntityList.entityEggs.values()) { list.add(new ItemStack(item, 1, entitylist$entityegginfo.spawnedID)); @@ -115,6 +118,7 @@ public class ItemMonsterPlacer extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (world.isRemote) { return itemstack; @@ -159,6 +163,7 @@ public class ItemMonsterPlacer extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (world.isRemote) { @@ -203,4 +208,4 @@ public class ItemMonsterPlacer extends Item { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemMultiTexture.java b/src/game/java/net/minecraft/item/ItemMultiTexture.java index 166ae03c..128c2b0d 100644 --- a/src/game/java/net/minecraft/item/ItemMultiTexture.java +++ b/src/game/java/net/minecraft/item/ItemMultiTexture.java @@ -7,13 +7,13 @@ import net.minecraft.block.Block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.block.Block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemMultiTexture extends ItemBlock { protected final Block theBlock; @@ -41,6 +41,7 @@ public class ItemMultiTexture extends ItemBlock { public ItemMultiTexture(Block block, Block block2, final String[] namesByMeta) { this(block, block2, new Function() { + @Override public String apply(ItemStack parItemStack) { int i = parItemStack.getMetadata(); if (i < 0 || i >= namesByMeta.length) { @@ -57,6 +58,7 @@ public class ItemMultiTexture extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -66,7 +68,8 @@ public class ItemMultiTexture extends ItemBlock { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { return super.getUnlocalizedName() + "." + (String) this.nameFunction.apply(itemstack); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemNameTag.java b/src/game/java/net/minecraft/item/ItemNameTag.java index 4a8e00a3..6d81b3e9 100644 --- a/src/game/java/net/minecraft/item/ItemNameTag.java +++ b/src/game/java/net/minecraft/item/ItemNameTag.java @@ -8,13 +8,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemNameTag extends Item { public ItemNameTag() { @@ -37,6 +37,7 @@ public class ItemNameTag extends Item { * + Returns true if the item can be used on the given entity, e.g. shears on * sheep. */ + @Override public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) { if (!stack.hasDisplayName()) { return false; @@ -50,4 +51,4 @@ public class ItemNameTag extends Item { return super.itemInteractionForEntity(stack, playerIn, target); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemPickaxe.java b/src/game/java/net/minecraft/item/ItemPickaxe.java index 57a33e96..212bdfc1 100644 --- a/src/game/java/net/minecraft/item/ItemPickaxe.java +++ b/src/game/java/net/minecraft/item/ItemPickaxe.java @@ -11,13 +11,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemPickaxe extends ItemTool { private static Set EFFECTIVE_ON; @@ -54,6 +54,7 @@ public class ItemPickaxe extends ItemTool { /** * + Check whether this Item can harvest the given Block */ + @Override public boolean canHarvestBlock(Block blockIn) { if (blockIn == Blocks.titanium_block || blockIn == Blocks.titanium_ore || blockIn == Blocks.uranium_block || blockIn == Blocks.uranium_ore) { @@ -77,9 +78,10 @@ public class ItemPickaxe extends ItemTool { } } + @Override public float getStrVsBlock(ItemStack stack, Block block) { return block.getMaterial() != Material.iron && block.getMaterial() != Material.anvil && block.getMaterial() != Material.rock ? super.getStrVsBlock(stack, block) : this.efficiencyOnProperMaterial; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemPiston.java b/src/game/java/net/minecraft/item/ItemPiston.java index f834847d..08fc5b41 100644 --- a/src/game/java/net/minecraft/item/ItemPiston.java +++ b/src/game/java/net/minecraft/item/ItemPiston.java @@ -5,13 +5,13 @@ import net.minecraft.block.Block; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.block.Block; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemPiston extends ItemBlock { public ItemPiston(Block block) { @@ -35,7 +35,8 @@ public class ItemPiston extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int var1) { return 7; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemPotion.java b/src/game/java/net/minecraft/item/ItemPotion.java index 40159fa3..68518078 100644 --- a/src/game/java/net/minecraft/item/ItemPotion.java +++ b/src/game/java/net/minecraft/item/ItemPotion.java @@ -30,13 +30,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemPotion extends Item { private static final Map, Integer> SUB_ITEMS_CACHE = Maps.newLinkedHashMap(); @@ -74,6 +74,7 @@ public class ItemPotion extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack itemstack, EntityPlayer var2, List list, boolean var4) { if (itemstack.getMetadata() != 0) { List list1 = Items.potionitem.getEffects(itemstack); @@ -151,6 +152,7 @@ public class ItemPotion extends Item { return PotionHelper.getLiquidColor(meta, false); } + @Override public int getColorFromItemStack(ItemStack itemstack, int i) { return i > 0 ? 16777215 : this.getColorFromDamage(itemstack.getMetadata()); } @@ -196,6 +198,7 @@ public class ItemPotion extends Item { } } + @Override public String getItemStackDisplayName(ItemStack stack) { if (stack.getMetadata() == 0) { return StatCollector.translateToLocal("item.emptyPotion.name").trim(); @@ -221,6 +224,7 @@ public class ItemPotion extends Item { * + returns the action that specifies what animation to play when the items is * being used */ + @Override public EnumAction getItemUseAction(ItemStack var1) { return EnumAction.DRINK; } @@ -228,6 +232,7 @@ public class ItemPotion extends Item { /** * + How long it takes to use or consume an item */ + @Override public int getMaxItemUseDuration(ItemStack var1) { return 32; } @@ -236,6 +241,7 @@ public class ItemPotion extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item itemIn, CreativeTabs tab, List subItems) { super.getSubItems(itemIn, tab, subItems); if (SUB_ITEMS_CACHE.isEmpty()) { @@ -276,6 +282,7 @@ public class ItemPotion extends Item { } + @Override public boolean hasEffect(ItemStack stack) { List list = this.getEffects(stack); return list != null && !list.isEmpty(); @@ -300,6 +307,7 @@ public class ItemPotion extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (isSplash(itemstack.getMetadata())) { if (!entityplayer.capabilities.isCreativeMode) { @@ -324,6 +332,7 @@ public class ItemPotion extends Item { * Not called when the player stops using the Item before the action is * complete. */ + @Override public ItemStack onItemUseFinish(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!entityplayer.capabilities.isCreativeMode) { --itemstack.stackSize; @@ -349,4 +358,4 @@ public class ItemPotion extends Item { return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemRecord.java b/src/game/java/net/minecraft/item/ItemRecord.java index 9e95fda4..dec65221 100644 --- a/src/game/java/net/minecraft/item/ItemRecord.java +++ b/src/game/java/net/minecraft/item/ItemRecord.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemRecord extends Item { private static final Map RECORDS = Maps.newHashMap(); @@ -62,6 +62,7 @@ public class ItemRecord extends Item { * + allows items to add custom lines of information to the mouseover * description */ + @Override public void addInformation(ItemStack var1, EntityPlayer var2, List list, boolean var4) { list.add(this.getRecordNameLocal()); } @@ -69,6 +70,7 @@ public class ItemRecord extends Item { /** * + Return an item rarity from EnumRarity */ + @Override public EnumRarity getRarity(ItemStack stack) { return EnumRarity.RARE; } @@ -80,6 +82,7 @@ public class ItemRecord extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing var5, float var6, float var7, float var8) { IBlockState iblockstate = world.getBlockState(blockpos); @@ -98,4 +101,4 @@ public class ItemRecord extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemRedstone.java b/src/game/java/net/minecraft/item/ItemRedstone.java index 9da39ed0..12746a84 100644 --- a/src/game/java/net/minecraft/item/ItemRedstone.java +++ b/src/game/java/net/minecraft/item/ItemRedstone.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemRedstone extends Item { public ItemRedstone() { @@ -40,6 +40,7 @@ public class ItemRedstone extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { boolean flag = world.getBlockState(blockpos).getBlock().isReplaceable(world, blockpos); @@ -59,4 +60,4 @@ public class ItemRedstone extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemReed.java b/src/game/java/net/minecraft/item/ItemReed.java index 07f2029f..038ef144 100644 --- a/src/game/java/net/minecraft/item/ItemReed.java +++ b/src/game/java/net/minecraft/item/ItemReed.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemReed extends Item { private Block block; @@ -43,6 +43,7 @@ public class ItemReed extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2) { IBlockState iblockstate = world.getBlockState(blockpos); @@ -80,4 +81,4 @@ public class ItemReed extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSaddle.java b/src/game/java/net/minecraft/item/ItemSaddle.java index edad2400..2d810457 100644 --- a/src/game/java/net/minecraft/item/ItemSaddle.java +++ b/src/game/java/net/minecraft/item/ItemSaddle.java @@ -8,13 +8,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSaddle extends Item { public ItemSaddle() { @@ -38,6 +38,7 @@ public class ItemSaddle extends Item { * + Current implementations of this method in child classes do not use the * entry argument beside ev. They just raise the damage on the stack. */ + @Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { this.itemInteractionForEntity(stack, (EntityPlayer) null, target); return true; @@ -47,6 +48,7 @@ public class ItemSaddle extends Item { * + Returns true if the item can be used on the given entity, e.g. shears on * sheep. */ + @Override public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer var2, EntityLivingBase entitylivingbase) { if (entitylivingbase instanceof EntityPig) { EntityPig entitypig = (EntityPig) entitylivingbase; @@ -61,4 +63,4 @@ public class ItemSaddle extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSeedFood.java b/src/game/java/net/minecraft/item/ItemSeedFood.java index 8389ce1d..ca4c56bf 100644 --- a/src/game/java/net/minecraft/item/ItemSeedFood.java +++ b/src/game/java/net/minecraft/item/ItemSeedFood.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSeedFood extends ItemFood { private Block crops; @@ -42,6 +42,7 @@ public class ItemSeedFood extends ItemFood { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing != EnumFacing.UP) { @@ -56,4 +57,4 @@ public class ItemSeedFood extends ItemFood { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSeeds.java b/src/game/java/net/minecraft/item/ItemSeeds.java index b793416f..89eae718 100644 --- a/src/game/java/net/minecraft/item/ItemSeeds.java +++ b/src/game/java/net/minecraft/item/ItemSeeds.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSeeds extends Item { private Block crops; @@ -43,6 +43,7 @@ public class ItemSeeds extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing != EnumFacing.UP) { @@ -57,4 +58,4 @@ public class ItemSeeds extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemShears.java b/src/game/java/net/minecraft/item/ItemShears.java index 432b51f2..af8a92d0 100644 --- a/src/game/java/net/minecraft/item/ItemShears.java +++ b/src/game/java/net/minecraft/item/ItemShears.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemShears extends Item { public ItemShears() { @@ -41,10 +41,12 @@ public class ItemShears extends Item { /** * + Check whether this Item can harvest the given Block */ + @Override public boolean canHarvestBlock(Block block) { return block == Blocks.web || block == Blocks.redstone_wire || block == Blocks.tripwire; } + @Override public float getStrVsBlock(ItemStack itemstack, Block block) { return block != Blocks.web && block.getMaterial() != Material.leaves ? (block == Blocks.wool ? 5.0F : super.getStrVsBlock(itemstack, block)) @@ -55,6 +57,7 @@ public class ItemShears extends Item { * + Called when a Block is destroyed using this Item. Return true to trigger * the "Use Item" statistic. */ + @Override public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) { if (blockIn.getMaterial() != Material.leaves && blockIn != Blocks.web && blockIn != Blocks.tallgrass @@ -65,4 +68,4 @@ public class ItemShears extends Item { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSign.java b/src/game/java/net/minecraft/item/ItemSign.java index 8761713b..5e6b5f6b 100644 --- a/src/game/java/net/minecraft/item/ItemSign.java +++ b/src/game/java/net/minecraft/item/ItemSign.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSign extends Item { public ItemSign() { @@ -44,6 +44,7 @@ public class ItemSign extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing == EnumFacing.DOWN) { @@ -80,4 +81,4 @@ public class ItemSign extends Item { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSimpleFoiled.java b/src/game/java/net/minecraft/item/ItemSimpleFoiled.java index e95a669e..1b8f1e9f 100644 --- a/src/game/java/net/minecraft/item/ItemSimpleFoiled.java +++ b/src/game/java/net/minecraft/item/ItemSimpleFoiled.java @@ -3,13 +3,13 @@ package net.minecraft.item; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,11 @@ package net.minecraft.item; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSimpleFoiled extends Item { + @Override public boolean hasEffect(ItemStack var1) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSkull.java b/src/game/java/net/minecraft/item/ItemSkull.java index 091ba5c4..2b69ba47 100644 --- a/src/game/java/net/minecraft/item/ItemSkull.java +++ b/src/game/java/net/minecraft/item/ItemSkull.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSkull extends Item { private static final String[] skullTypes = new String[] { "skeleton", "wither", "zombie", "char", "creeper" }; @@ -52,6 +52,7 @@ public class ItemSkull extends Item { this.setHasSubtypes(true); } + @Override public String getItemStackDisplayName(ItemStack itemstack) { if (itemstack.getMetadata() == 3 && itemstack.hasTagCompound()) { if (itemstack.getTagCompound().hasKey("SkullOwner", 8)) { @@ -76,6 +77,7 @@ public class ItemSkull extends Item { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -84,6 +86,7 @@ public class ItemSkull extends Item { * + returns a list of items with the same ID, but different meta (eg: dye * returns 16 items) */ + @Override public void getSubItems(Item item, CreativeTabs var2, List list) { for (int i = 0; i < skullTypes.length; ++i) { list.add(new ItemStack(item, 1, i)); @@ -96,6 +99,7 @@ public class ItemSkull extends Item { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { int i = itemstack.getMetadata(); if (i < 0 || i >= skullTypes.length) { @@ -108,6 +112,7 @@ public class ItemSkull extends Item { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float var6, float var7, float var8) { if (enumfacing == EnumFacing.DOWN) { @@ -175,6 +180,7 @@ public class ItemSkull extends Item { * + Called when an ItemStack with NBT data is read to potentially that * ItemStack's NBT data */ + @Override public boolean updateItemStackNBT(NBTTagCompound nbt) { super.updateItemStackNBT(nbt); if (nbt.hasKey("SkullOwner", 8) && nbt.getString("SkullOwner").length() > 0) { @@ -186,4 +192,4 @@ public class ItemSkull extends Item { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSlab.java b/src/game/java/net/minecraft/item/ItemSlab.java index 1bc37683..de655e00 100644 --- a/src/game/java/net/minecraft/item/ItemSlab.java +++ b/src/game/java/net/minecraft/item/ItemSlab.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSlab extends ItemBlock { private final BlockSlab singleSlab; @@ -44,6 +44,7 @@ public class ItemSlab extends ItemBlock { this.setHasSubtypes(true); } + @Override public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) { BlockPos blockpos = pos; @@ -69,6 +70,7 @@ public class ItemSlab extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -78,6 +80,7 @@ public class ItemSlab extends ItemBlock { * ItemStack so different stacks can have different names based on their damage * or NBT. */ + @Override public String getUnlocalizedName(ItemStack itemstack) { return this.singleSlab.getUnlocalizedName(itemstack.getMetadata()); } @@ -85,6 +88,7 @@ public class ItemSlab extends ItemBlock { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2) { if (itemstack.stackSize == 0) { @@ -145,4 +149,4 @@ public class ItemSlab extends ItemBlock { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSnow.java b/src/game/java/net/minecraft/item/ItemSnow.java index d3c4a1d3..325a5f38 100644 --- a/src/game/java/net/minecraft/item/ItemSnow.java +++ b/src/game/java/net/minecraft/item/ItemSnow.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSnow extends ItemBlock { public ItemSnow(Block block) { @@ -44,6 +44,7 @@ public class ItemSnow extends ItemBlock { * placed in the world when this Item is placed as a Block (mostly used with * ItemBlocks). */ + @Override public int getMetadata(int i) { return i; } @@ -51,6 +52,7 @@ public class ItemSnow extends ItemBlock { /** * + Called when a Block is right-clicked with this Item */ + @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, BlockPos blockpos, EnumFacing enumfacing, float f, float f1, float f2) { if (itemstack.stackSize == 0) { @@ -87,4 +89,4 @@ public class ItemSnow extends ItemBlock { return super.onItemUse(itemstack, entityplayer, world, blockpos1, enumfacing, f, f1, f2); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSnowball.java b/src/game/java/net/minecraft/item/ItemSnowball.java index a3b0bb49..a5ce52ef 100644 --- a/src/game/java/net/minecraft/item/ItemSnowball.java +++ b/src/game/java/net/minecraft/item/ItemSnowball.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSnowball extends Item { public ItemSnowball() { @@ -39,6 +39,7 @@ public class ItemSnowball extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!entityplayer.capabilities.isCreativeMode) { --itemstack.stackSize; @@ -53,7 +54,8 @@ public class ItemSnowball extends Item { return itemstack; } + @Override public boolean shouldUseOnTouchEagler(ItemStack itemStack) { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSoup.java b/src/game/java/net/minecraft/item/ItemSoup.java index 669396d2..63fc0318 100644 --- a/src/game/java/net/minecraft/item/ItemSoup.java +++ b/src/game/java/net/minecraft/item/ItemSoup.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSoup extends ItemFood { public ItemSoup(int healAmount) { @@ -38,8 +38,9 @@ public class ItemSoup extends ItemFood { * Not called when the player stops using the Item before the action is * complete. */ + @Override public ItemStack onItemUseFinish(ItemStack itemstack, World world, EntityPlayer entityplayer) { super.onItemUseFinish(itemstack, world, entityplayer); return new ItemStack(Items.bowl); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSpade.java b/src/game/java/net/minecraft/item/ItemSpade.java index ed0a1cd7..707a8999 100644 --- a/src/game/java/net/minecraft/item/ItemSpade.java +++ b/src/game/java/net/minecraft/item/ItemSpade.java @@ -10,13 +10,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSpade extends ItemTool { private static Set EFFECTIVE_ON; @@ -45,7 +45,8 @@ public class ItemSpade extends ItemTool { /** * + Check whether this Item can harvest the given Block */ + @Override public boolean canHarvestBlock(Block block) { return block == Blocks.snow_layer ? true : block == Blocks.snow; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemStack.java b/src/game/java/net/minecraft/item/ItemStack.java index 388eb9e6..0629bc36 100644 --- a/src/game/java/net/minecraft/item/ItemStack.java +++ b/src/game/java/net/minecraft/item/ItemStack.java @@ -43,13 +43,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -61,7 +61,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class ItemStack { public static final DecimalFormat DECIMALFORMAT = new DecimalFormat("#.###"); @@ -928,6 +928,7 @@ public final class ItemStack { return itemstack; } + @Override public String toString() { return this.stackSize + "x" + this.item.getUnlocalizedName() + "@" + this.itemDamage; } @@ -966,4 +967,4 @@ public final class ItemStack { return nbt; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemSword.java b/src/game/java/net/minecraft/item/ItemSword.java index 29e8cfd1..0ff0d520 100644 --- a/src/game/java/net/minecraft/item/ItemSword.java +++ b/src/game/java/net/minecraft/item/ItemSword.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemSword extends Item { private float attackDamage; @@ -51,6 +51,7 @@ public class ItemSword extends Item { /** * + Check whether this Item can harvest the given Block */ + @Override public boolean canHarvestBlock(Block block) { return block == Blocks.web; } @@ -66,10 +67,12 @@ public class ItemSword extends Item { /** * + Return whether this item is repairable in an anvil. */ + @Override public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { return this.material.getRepairItem() == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); } + @Override public Multimap getItemAttributeModifiers() { Multimap multimap = super.getItemAttributeModifiers(); multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), @@ -81,6 +84,7 @@ public class ItemSword extends Item { * + Return the enchantability factor of the item, most of the time is based on * material. */ + @Override public int getItemEnchantability() { return this.material.getEnchantability(); } @@ -89,6 +93,7 @@ public class ItemSword extends Item { * + returns the action that specifies what animation to play when the items is * being used */ + @Override public EnumAction getItemUseAction(ItemStack var1) { return EnumAction.BLOCK; } @@ -96,10 +101,12 @@ public class ItemSword extends Item { /** * + How long it takes to use or consume an item */ + @Override public int getMaxItemUseDuration(ItemStack var1) { return 72000; } + @Override public float getStrVsBlock(ItemStack var1, Block block) { if (block == Blocks.web) { return 15.0F; @@ -121,6 +128,7 @@ public class ItemSword extends Item { * + Current implementations of this method in child classes do not use the * entry argument beside ev. They just raise the damage on the stack. */ + @Override public boolean hitEntity(ItemStack itemstack, EntityLivingBase var2, EntityLivingBase entitylivingbase) { itemstack.damageItem(1, entitylivingbase); return true; @@ -129,6 +137,7 @@ public class ItemSword extends Item { /** * + Returns True is the item is renderer in full 3D when hold. */ + @Override public boolean isFull3D() { return true; } @@ -137,6 +146,7 @@ public class ItemSword extends Item { * + Called when a Block is destroyed using this Item. Return true to trigger * the "Use Item" statistic. */ + @Override public boolean onBlockDestroyed(ItemStack itemstack, World world, Block block, BlockPos blockpos, EntityLivingBase entitylivingbase) { if ((double) block.getBlockHardness(world, blockpos) != 0.0D) { @@ -150,8 +160,9 @@ public class ItemSword extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { entityplayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack)); return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemTool.java b/src/game/java/net/minecraft/item/ItemTool.java index a4cfd699..7fe48041 100644 --- a/src/game/java/net/minecraft/item/ItemTool.java +++ b/src/game/java/net/minecraft/item/ItemTool.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemTool extends Item { private Set effectiveBlocks; @@ -54,11 +54,13 @@ public class ItemTool extends Item { /** * + Return whether this item is repairable in an anvil. */ + @Override public boolean getIsRepairable(ItemStack itemstack, ItemStack itemstack1) { return this.toolMaterial.getRepairItem() == itemstack1.getItem() ? true : super.getIsRepairable(itemstack, itemstack1); } + @Override public Multimap getItemAttributeModifiers() { Multimap multimap = super.getItemAttributeModifiers(); multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), @@ -70,10 +72,12 @@ public class ItemTool extends Item { * + Return the enchantability factor of the item, most of the time is based on * material. */ + @Override public int getItemEnchantability() { return this.toolMaterial.getEnchantability(); } + @Override public float getStrVsBlock(ItemStack var1, Block block) { return this.effectiveBlocks.contains(block) ? this.efficiencyOnProperMaterial : 1.0F; } @@ -93,6 +97,7 @@ public class ItemTool extends Item { * + Current implementations of this method in child classes do not use the * entry argument beside ev. They just raise the damage on the stack. */ + @Override public boolean hitEntity(ItemStack itemstack, EntityLivingBase var2, EntityLivingBase entitylivingbase) { itemstack.damageItem(2, entitylivingbase); return true; @@ -101,6 +106,7 @@ public class ItemTool extends Item { /** * + Returns True is the item is renderer in full 3D when hold. */ + @Override public boolean isFull3D() { return true; } @@ -109,6 +115,7 @@ public class ItemTool extends Item { * + Called when a Block is destroyed using this Item. Return true to trigger * the "Use Item" statistic. */ + @Override public boolean onBlockDestroyed(ItemStack itemstack, World world, Block block, BlockPos blockpos, EntityLivingBase entitylivingbase) { if ((double) block.getBlockHardness(world, blockpos) != 0.0D) { @@ -117,4 +124,4 @@ public class ItemTool extends Item { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/ItemWritableBook.java b/src/game/java/net/minecraft/item/ItemWritableBook.java index a97d3350..eb11b2d0 100644 --- a/src/game/java/net/minecraft/item/ItemWritableBook.java +++ b/src/game/java/net/minecraft/item/ItemWritableBook.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemWritableBook extends Item { /** @@ -64,9 +64,10 @@ public class ItemWritableBook extends Item { * + Called whenever this item is equipped and the right mouse button is * pressed. Args: itemStack, world, entityPlayer */ + @Override public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) { entityplayer.displayGUIBook(itemstack); entityplayer.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); return itemstack; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/CraftingManager.java b/src/game/java/net/minecraft/item/crafting/CraftingManager.java index 3fa3373f..02255004 100644 --- a/src/game/java/net/minecraft/item/crafting/CraftingManager.java +++ b/src/game/java/net/minecraft/item/crafting/CraftingManager.java @@ -27,13 +27,13 @@ import net.starlikeclient.minecraft.init.RecipesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.starlikeclient.minecraft.init.RecipesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CraftingManager { private static CraftingManager instance; @@ -73,13 +73,13 @@ public class CraftingManager { (new RecipesCrafting()).addRecipes(this); (new RecipesArmor()).addRecipes(this); (new RecipesDyes()).addRecipes(this); - this.recipes.add(new RecipesArmorDyes()); - this.recipes.add(new RecipeBookCloning()); - this.recipes.add(new RecipesMapCloning()); - this.recipes.add(new RecipesMapExtending()); - this.recipes.add(new RecipeFireworks()); - this.recipes.add(new RecipeRepairItem()); (new RecipesBanners()).addRecipes(this); + this.addRecipe(new RecipesArmorDyes()); + this.addRecipe(new RecipeBookCloning()); + this.addRecipe(new RecipesMapCloning()); + this.addRecipe(new RecipesMapExtending()); + this.addRecipe(new RecipeFireworks()); + this.addRecipe(new RecipeRepairItem()); this.addRecipe(new ItemStack(Items.paper, 3), new Object[] { "###", Character.valueOf('#'), Items.reeds }); this.addShapelessRecipe(new ItemStack(Items.book, 1), new Object[] { Items.paper, Items.paper, Items.paper, Items.leather }); @@ -381,6 +381,7 @@ public class CraftingManager { RecipesStarlike.addCraftingRecipes(this); Collections.sort(this.recipes, new Comparator() { + @Override public int compare(IRecipe parIRecipe, IRecipe parIRecipe2) { return parIRecipe instanceof ShapelessRecipes && parIRecipe2 instanceof ShapedRecipes ? 1 : (parIRecipe2 instanceof ShapelessRecipes && parIRecipe instanceof ShapedRecipes ? -1 @@ -516,4 +517,4 @@ public class CraftingManager { public List getRecipeList() { return this.recipes; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/FurnaceRecipes.java b/src/game/java/net/minecraft/item/crafting/FurnaceRecipes.java index 07450930..d1cbb820 100644 --- a/src/game/java/net/minecraft/item/crafting/FurnaceRecipes.java +++ b/src/game/java/net/minecraft/item/crafting/FurnaceRecipes.java @@ -18,13 +18,13 @@ import net.starlikeclient.minecraft.init.RecipesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.starlikeclient.minecraft.init.RecipesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FurnaceRecipes { private static FurnaceRecipes smeltingBase; @@ -148,4 +148,4 @@ public class FurnaceRecipes { return null; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/IRecipe.java b/src/game/java/net/minecraft/item/crafting/IRecipe.java index 7730404d..3a34dd13 100644 --- a/src/game/java/net/minecraft/item/crafting/IRecipe.java +++ b/src/game/java/net/minecraft/item/crafting/IRecipe.java @@ -7,13 +7,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRecipe { /** @@ -46,4 +46,4 @@ public interface IRecipe { * + Used to check if a recipe matches current crafting inventory */ boolean matches(InventoryCrafting var1, World var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipeBookCloning.java b/src/game/java/net/minecraft/item/crafting/RecipeBookCloning.java index 667f4134..020f0920 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipeBookCloning.java +++ b/src/game/java/net/minecraft/item/crafting/RecipeBookCloning.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,12 +28,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipeBookCloning implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { int i = 0; ItemStack itemstack = null; @@ -71,6 +72,7 @@ public class RecipeBookCloning implements IRecipe { } } + @Override public ItemStack getRecipeOutput() { return null; } @@ -78,10 +80,12 @@ public class RecipeBookCloning implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return 9; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -99,6 +103,7 @@ public class RecipeBookCloning implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { int i = 0; ItemStack itemstack = null; @@ -124,4 +129,4 @@ public class RecipeBookCloning implements IRecipe { return itemstack != null && i > 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipeFireworks.java b/src/game/java/net/minecraft/item/crafting/RecipeFireworks.java index e675255b..465a9d34 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipeFireworks.java +++ b/src/game/java/net/minecraft/item/crafting/RecipeFireworks.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipeFireworks implements IRecipe { private ItemStack field_92102_a; @@ -41,10 +41,12 @@ public class RecipeFireworks implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting var1) { return this.field_92102_a.copy(); } + @Override public ItemStack getRecipeOutput() { return this.field_92102_a; } @@ -52,10 +54,12 @@ public class RecipeFireworks implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return 10; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -72,6 +76,7 @@ public class RecipeFireworks implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { this.field_92102_a = null; int i = 0; @@ -214,4 +219,4 @@ public class RecipeFireworks implements IRecipe { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipeRepairItem.java b/src/game/java/net/minecraft/item/crafting/RecipeRepairItem.java index c4555093..006e111e 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipeRepairItem.java +++ b/src/game/java/net/minecraft/item/crafting/RecipeRepairItem.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,12 +30,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipeRepairItem implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { ArrayList arraylist = Lists.newArrayList(); @@ -74,6 +75,7 @@ public class RecipeRepairItem implements IRecipe { return null; } + @Override public ItemStack getRecipeOutput() { return null; } @@ -81,10 +83,12 @@ public class RecipeRepairItem implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return 4; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -101,6 +105,7 @@ public class RecipeRepairItem implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { ArrayList arraylist = Lists.newArrayList(); @@ -120,4 +125,4 @@ public class RecipeRepairItem implements IRecipe { return arraylist.size() == 2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesArmor.java b/src/game/java/net/minecraft/item/crafting/RecipesArmor.java index 46d5840e..73c53d2f 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesArmor.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesArmor.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesArmor { private String[][] recipePatterns = new String[][] { { "XXX", "X X" }, { "X X", "XXX", "XXX" }, @@ -51,4 +51,4 @@ public class RecipesArmor { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesArmorDyes.java b/src/game/java/net/minecraft/item/crafting/RecipesArmorDyes.java index 20525c84..4e01ad44 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesArmorDyes.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesArmorDyes.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,12 +33,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesArmorDyes implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inv) { ItemStack itemstack = null; int[] aint = new int[3]; @@ -104,6 +105,7 @@ public class RecipesArmorDyes implements IRecipe { } } + @Override public ItemStack getRecipeOutput() { return null; } @@ -111,10 +113,12 @@ public class RecipesArmorDyes implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return 10; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inv) { ItemStack[] aitemstack = new ItemStack[inv.getSizeInventory()]; @@ -131,6 +135,7 @@ public class RecipesArmorDyes implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inv, World worldIn) { ItemStack itemstack = null; ArrayList arraylist = Lists.newArrayList(); @@ -157,4 +162,4 @@ public class RecipesArmorDyes implements IRecipe { return itemstack != null && !arraylist.isEmpty(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesBanners.java b/src/game/java/net/minecraft/item/crafting/RecipesBanners.java index b9cbfca8..656d9ef5 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesBanners.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesBanners.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesBanners { static class RecipeAddPattern implements IRecipe { @@ -117,6 +117,7 @@ public class RecipesBanners { return null; } + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { ItemStack itemstack = null; @@ -160,14 +161,17 @@ public class RecipesBanners { return itemstack; } + @Override public ItemStack getRecipeOutput() { return null; } + @Override public int getRecipeSize() { return 10; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -181,6 +185,7 @@ public class RecipesBanners { return aitemstack; } + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { boolean flag = false; @@ -211,6 +216,7 @@ public class RecipesBanners { private RecipeDuplicatePattern() { } + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { for (int i = 0; i < inventorycrafting.getSizeInventory(); ++i) { ItemStack itemstack = inventorycrafting.getStackInSlot(i); @@ -224,14 +230,17 @@ public class RecipesBanners { return null; } + @Override public ItemStack getRecipeOutput() { return null; } + @Override public int getRecipeSize() { return 2; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -250,6 +259,7 @@ public class RecipesBanners { return aitemstack; } + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { ItemStack itemstack = null; ItemStack itemstack1 = null; @@ -315,4 +325,4 @@ public class RecipesBanners { parCraftingManager.addRecipe(new RecipesBanners.RecipeDuplicatePattern()); parCraftingManager.addRecipe(new RecipesBanners.RecipeAddPattern()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesCrafting.java b/src/game/java/net/minecraft/item/crafting/RecipesCrafting.java index 5ff0c95e..6cebc3e6 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesCrafting.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesCrafting.java @@ -18,13 +18,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesCrafting { /** diff --git a/src/game/java/net/minecraft/item/crafting/RecipesDyes.java b/src/game/java/net/minecraft/item/crafting/RecipesDyes.java index 276817ed..f1907eac 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesDyes.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesDyes.java @@ -11,13 +11,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesDyes { /** @@ -131,4 +131,4 @@ public class RecipesDyes { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesFood.java b/src/game/java/net/minecraft/item/crafting/RecipesFood.java index 9fe35e8d..e2eff26b 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesFood.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesFood.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesFood { /** @@ -59,4 +59,4 @@ public class RecipesFood { parCraftingManager.addShapelessRecipe(new ItemStack(Items.magma_cream), new Object[] { Items.blaze_powder, Items.slime_ball }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesIngots.java b/src/game/java/net/minecraft/item/crafting/RecipesIngots.java index 69f1ecef..a7cd8b6e 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesIngots.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesIngots.java @@ -9,13 +9,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesIngots { private Object[][] recipeItems; @@ -58,4 +58,4 @@ public class RecipesIngots { parCraftingManager.addRecipe(new ItemStack(Items.gold_nugget, 9), new Object[] { "#", Character.valueOf('#'), Items.gold_ingot }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesMapCloning.java b/src/game/java/net/minecraft/item/crafting/RecipesMapCloning.java index 1aedf63b..5d1c00c8 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesMapCloning.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesMapCloning.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,12 +26,13 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesMapCloning implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { int i = 0; ItemStack itemstack = null; @@ -67,6 +68,7 @@ public class RecipesMapCloning implements IRecipe { } } + @Override public ItemStack getRecipeOutput() { return null; } @@ -74,10 +76,12 @@ public class RecipesMapCloning implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return 9; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -94,6 +98,7 @@ public class RecipesMapCloning implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { int i = 0; ItemStack itemstack = null; @@ -119,4 +124,4 @@ public class RecipesMapCloning implements IRecipe { return itemstack != null && i > 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesMapExtending.java b/src/game/java/net/minecraft/item/crafting/RecipesMapExtending.java index 1fc0fc18..9609551d 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesMapExtending.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesMapExtending.java @@ -10,13 +10,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesMapExtending extends ShapedRecipes { public RecipesMapExtending() { @@ -43,6 +43,7 @@ public class RecipesMapExtending extends ShapedRecipes { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { ItemStack itemstack = null; @@ -66,6 +67,7 @@ public class RecipesMapExtending extends ShapedRecipes { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World world) { if (!super.matches(inventorycrafting, world)) { return false; @@ -87,4 +89,4 @@ public class RecipesMapExtending extends ShapedRecipes { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesTools.java b/src/game/java/net/minecraft/item/crafting/RecipesTools.java index 3a5c6a1e..0b784c99 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesTools.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesTools.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesTools { private String[][] recipePatterns = new String[][] { { "XXX", " # ", " # " }, { "X", "#", "#" }, @@ -58,4 +58,4 @@ public class RecipesTools { parCraftingManager.addRecipe(new ItemStack(Items.shears), new Object[] { " #", "# ", Character.valueOf('#'), Items.iron_ingot }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/RecipesWeapons.java b/src/game/java/net/minecraft/item/crafting/RecipesWeapons.java index 2938b32a..f349cc4d 100644 --- a/src/game/java/net/minecraft/item/crafting/RecipesWeapons.java +++ b/src/game/java/net/minecraft/item/crafting/RecipesWeapons.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RecipesWeapons { private String[][] recipePatterns = new String[][] { { "X", "X", "#" } }; @@ -55,4 +55,4 @@ public class RecipesWeapons { new Object[] { "X", "#", "Y", Character.valueOf('Y'), Items.feather, Character.valueOf('X'), Items.flint, Character.valueOf('#'), Items.stick }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/ShapedRecipes.java b/src/game/java/net/minecraft/item/crafting/ShapedRecipes.java index 3f1bb570..65552dd0 100644 --- a/src/game/java/net/minecraft/item/crafting/ShapedRecipes.java +++ b/src/game/java/net/minecraft/item/crafting/ShapedRecipes.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShapedRecipes implements IRecipe { private final int recipeWidth; @@ -82,6 +82,7 @@ public class ShapedRecipes implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { ItemStack itemstack = this.getRecipeOutput().copy(); if (this.copyIngredientNBT) { @@ -96,6 +97,7 @@ public class ShapedRecipes implements IRecipe { return itemstack; } + @Override public ItemStack getRecipeOutput() { return this.recipeOutput; } @@ -103,10 +105,12 @@ public class ShapedRecipes implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return this.recipeWidth * this.recipeHeight; } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -123,6 +127,7 @@ public class ShapedRecipes implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { for (int i = 0; i <= 3 - this.recipeWidth; ++i) { for (int j = 0; j <= 3 - this.recipeHeight; ++j) { @@ -138,4 +143,4 @@ public class ShapedRecipes implements IRecipe { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/item/crafting/ShapelessRecipes.java b/src/game/java/net/minecraft/item/crafting/ShapelessRecipes.java index c057ab95..0c626a20 100644 --- a/src/game/java/net/minecraft/item/crafting/ShapelessRecipes.java +++ b/src/game/java/net/minecraft/item/crafting/ShapelessRecipes.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShapelessRecipes implements IRecipe { private final ItemStack recipeOutput; @@ -44,10 +44,12 @@ public class ShapelessRecipes implements IRecipe { /** * + Returns an Item that is the result of this recipe */ + @Override public ItemStack getCraftingResult(InventoryCrafting var1) { return this.recipeOutput.copy(); } + @Override public ItemStack getRecipeOutput() { return this.recipeOutput; } @@ -55,10 +57,12 @@ public class ShapelessRecipes implements IRecipe { /** * + Returns the size of the recipe area */ + @Override public int getRecipeSize() { return this.recipeItems.size(); } + @Override public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; @@ -75,6 +79,7 @@ public class ShapelessRecipes implements IRecipe { /** * + Used to check if a recipe matches current crafting inventory */ + @Override public boolean matches(InventoryCrafting inventorycrafting, World var2) { ArrayList arraylist = Lists.newArrayList(this.recipeItems); @@ -103,4 +108,4 @@ public class ShapelessRecipes implements IRecipe { return arraylist.isEmpty(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/CompressedStreamTools.java b/src/game/java/net/minecraft/nbt/CompressedStreamTools.java index 98bfdabd..801ffe39 100644 --- a/src/game/java/net/minecraft/nbt/CompressedStreamTools.java +++ b/src/game/java/net/minecraft/nbt/CompressedStreamTools.java @@ -18,13 +18,13 @@ import net.minecraft.util.ReportedException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ReportedException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CompressedStreamTools { private static NBTBase func_152455_a(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) @@ -129,4 +129,4 @@ public class CompressedStreamTools { parNBTBase.write(parDataOutput); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/JsonToNBT.java b/src/game/java/net/minecraft/nbt/JsonToNBT.java index a5115e5f..915a2157 100644 --- a/src/game/java/net/minecraft/nbt/JsonToNBT.java +++ b/src/game/java/net/minecraft/nbt/JsonToNBT.java @@ -13,13 +13,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JsonToNBT { abstract static class Any { @@ -47,6 +47,7 @@ public class JsonToNBT { this.json = parString1; } + @Override public NBTBase parse() throws NBTException { NBTTagCompound nbttagcompound = new NBTTagCompound(); @@ -66,6 +67,7 @@ public class JsonToNBT { this.json = json; } + @Override public NBTBase parse() throws NBTException { NBTTagList nbttaglist = new NBTTagList(); @@ -93,6 +95,7 @@ public class JsonToNBT { this.jsonValue = parString2; } + @Override public NBTBase parse() throws NBTException { try { if (DOUBLE.matcher(this.jsonValue).matches()) { @@ -435,4 +438,4 @@ public class JsonToNBT { return (NBTTagCompound) func_150316_a("tag", jsonString).parse(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTBase.java b/src/game/java/net/minecraft/nbt/NBTBase.java index b64a75bd..7d5b6878 100644 --- a/src/game/java/net/minecraft/nbt/NBTBase.java +++ b/src/game/java/net/minecraft/nbt/NBTBase.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class NBTBase { public abstract static class NBTPrimitive extends NBTBase { @@ -43,7 +43,7 @@ public abstract class NBTBase { } public static final String[] NBT_TYPES = new String[] { "END", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", - "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]" }; + "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]", "LONG[]" }; /** * + Creates a new NBTBase object that corresponds with the passed in id. @@ -74,6 +74,8 @@ public abstract class NBTBase { return new NBTTagCompound(); case 11: return new NBTTagIntArray(); + case 12: + return new NBTTagLongArray(); default: return null; } @@ -81,6 +83,7 @@ public abstract class NBTBase { public abstract NBTBase copy(); + @Override public boolean equals(Object object) { if (!(object instanceof NBTBase)) { return false; @@ -96,6 +99,7 @@ public abstract class NBTBase { return this.toString(); } + @Override public int hashCode() { return this.getId(); } @@ -109,7 +113,8 @@ public abstract class NBTBase { abstract void read(DataInput var1, int var2, NBTSizeTracker var3) throws IOException; + @Override public abstract String toString(); abstract void write(DataOutput var1) throws IOException; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTException.java b/src/game/java/net/minecraft/nbt/NBTException.java index 4cda66ae..661a3397 100644 --- a/src/game/java/net/minecraft/nbt/NBTException.java +++ b/src/game/java/net/minecraft/nbt/NBTException.java @@ -3,13 +3,13 @@ package net.minecraft.nbt; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.nbt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTException extends Exception { public NBTException(String parString1) { super(parString1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTSizeTracker.java b/src/game/java/net/minecraft/nbt/NBTSizeTracker.java index 40511aab..bc5b3fa6 100644 --- a/src/game/java/net/minecraft/nbt/NBTSizeTracker.java +++ b/src/game/java/net/minecraft/nbt/NBTSizeTracker.java @@ -3,13 +3,13 @@ package net.minecraft.nbt; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,13 +21,14 @@ package net.minecraft.nbt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTSizeTracker { public static final NBTSizeTracker INFINITE = new NBTSizeTracker(0L) { /** * + Tracks the reading of the given amount of bits(!) */ + @Override public void read(long bits) { } }; @@ -48,4 +49,4 @@ public class NBTSizeTracker { + "bytes where max allowed: " + this.max); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagByte.java b/src/game/java/net/minecraft/nbt/NBTTagByte.java index 96bfcc94..0b61a760 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagByte.java +++ b/src/game/java/net/minecraft/nbt/NBTTagByte.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagByte extends NBTBase.NBTPrimitive { private byte data; @@ -40,10 +40,12 @@ public class NBTTagByte extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagByte(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagByte nbttagbyte = (NBTTagByte) object; @@ -53,14 +55,17 @@ public class NBTTagByte extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return this.data; } + @Override public double getDouble() { return (double) this.data; } + @Override public float getFloat() { return (float) this.data; } @@ -68,31 +73,38 @@ public class NBTTagByte extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 1; } + @Override public int getInt() { return this.data; } + @Override public long getLong() { return (long) this.data; } + @Override public short getShort() { return (short) this.data; } + @Override public int hashCode() { return super.hashCode() ^ this.data; } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(72L); this.data = parDataInput.readByte(); } + @Override public String toString() { return "" + this.data + "b"; } @@ -101,7 +113,8 @@ public class NBTTagByte extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeByte(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagByteArray.java b/src/game/java/net/minecraft/nbt/NBTTagByteArray.java index 15aea213..442c98af 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagByteArray.java +++ b/src/game/java/net/minecraft/nbt/NBTTagByteArray.java @@ -8,13 +8,13 @@ import java.util.Arrays; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagByteArray extends NBTBase { private byte[] data; @@ -41,12 +41,14 @@ public class NBTTagByteArray extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { byte[] abyte = new byte[this.data.length]; System.arraycopy(this.data, 0, abyte, 0, this.data.length); return new NBTTagByteArray(abyte); } + @Override public boolean equals(Object object) { return super.equals(object) ? Arrays.equals(this.data, ((NBTTagByteArray) object).data) : false; } @@ -58,14 +60,17 @@ public class NBTTagByteArray extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 7; } + @Override public int hashCode() { return super.hashCode() ^ Arrays.hashCode(this.data); } + @Override void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException { sizeTracker.read(192L); int i = input.readInt(); @@ -74,6 +79,7 @@ public class NBTTagByteArray extends NBTBase { input.readFully(this.data); } + @Override public String toString() { return "[" + this.data.length + " bytes]"; } @@ -82,8 +88,9 @@ public class NBTTagByteArray extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput output) throws IOException { output.writeInt(this.data.length); output.write(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagCompound.java b/src/game/java/net/minecraft/nbt/NBTTagCompound.java index c6cf652c..974e754a 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagCompound.java +++ b/src/game/java/net/minecraft/nbt/NBTTagCompound.java @@ -17,13 +17,13 @@ import net.minecraft.util.ReportedException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ReportedException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagCompound extends NBTBase { private static String readKey(DataInput input, NBTSizeTracker sizeTracker) throws IOException { @@ -75,6 +75,7 @@ public class NBTTagCompound extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { NBTTagCompound nbttagcompound = new NBTTagCompound(); @@ -92,11 +93,13 @@ public class NBTTagCompound extends NBTBase { CrashReport crashreport = CrashReport.makeCrashReport(ex, "Reading NBT data"); CrashReportCategory crashreportcategory = crashreport.makeCategoryDepth("Corrupt NBT tag", 1); crashreportcategory.addCrashSectionCallable("Tag type found", new Callable() { + @Override public String call() throws Exception { return NBTBase.NBT_TYPES[((NBTBase) NBTTagCompound.this.tagMap.get(key)).getId()]; } }); crashreportcategory.addCrashSectionCallable("Tag type expected", new Callable() { + @Override public String call() throws Exception { return NBTBase.NBT_TYPES[expectedType]; } @@ -105,6 +108,7 @@ public class NBTTagCompound extends NBTBase { return crashreport; } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagCompound nbttagcompound = (NBTTagCompound) object; @@ -185,6 +189,7 @@ public class NBTTagCompound extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 10; } @@ -232,6 +237,18 @@ public class NBTTagCompound extends NBTBase { } } + /** + * + Retrieves an long array using the specified key, or a zero-length array if + * no such key was stored. + */ + public long[] getLongArray(String key) { + try { + return !this.hasKey(key, 12) ? new long[0] : ((NBTTagLongArray) this.tagMap.get(key)).getLongArray(); + } catch (ClassCastException classcastexception) { + throw new ReportedException(this.createCrashReport(key, 12, classcastexception)); + } + } + /** * + Retrieves a short value using the specified key, or 0 if no such key was * stored. @@ -287,6 +304,7 @@ public class NBTTagCompound extends NBTBase { } } + @Override public int hashCode() { return super.hashCode() ^ this.tagMap.hashCode(); } @@ -321,6 +339,7 @@ public class NBTTagCompound extends NBTBase { /** * + Return whether this compound has no tags. */ + @Override public boolean hasNoTags() { return this.tagMap.isEmpty(); } @@ -347,6 +366,7 @@ public class NBTTagCompound extends NBTBase { } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(384L); if (parInt1 > 512) { @@ -438,6 +458,14 @@ public class NBTTagCompound extends NBTBase { this.tagMap.put(key, new NBTTagLong(value)); } + /** + * + Stores a new NBTTagLongArray with the given array as data into the map with + * the given string key. + */ + public void setLongArray(String key, long[] value) { + this.tagMap.put(key, new NBTTagLongArray(value)); + } + /** * + Stores a new NBTTagShort with the given short value into the map with the * given string key. @@ -462,6 +490,7 @@ public class NBTTagCompound extends NBTBase { this.tagMap.put(key, value); } + @Override public String toString() { StringBuilder stringbuilder = new StringBuilder("{"); @@ -480,6 +509,7 @@ public class NBTTagCompound extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { for (String s : this.tagMap.keySet()) { NBTBase nbtbase = (NBTBase) this.tagMap.get(s); @@ -488,4 +518,4 @@ public class NBTTagCompound extends NBTBase { parDataOutput.writeByte(0); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagDouble.java b/src/game/java/net/minecraft/nbt/NBTTagDouble.java index 81d0cc2e..51edf80d 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagDouble.java +++ b/src/game/java/net/minecraft/nbt/NBTTagDouble.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagDouble extends NBTBase.NBTPrimitive { private double data; @@ -42,10 +42,12 @@ public class NBTTagDouble extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagDouble(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagDouble nbttagdouble = (NBTTagDouble) object; @@ -55,14 +57,17 @@ public class NBTTagDouble extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return (byte) (MathHelper.floor_double(this.data) & 255); } + @Override public double getDouble() { return this.data; } + @Override public float getFloat() { return (float) this.data; } @@ -70,32 +75,39 @@ public class NBTTagDouble extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 6; } + @Override public int getInt() { return MathHelper.floor_double(this.data); } + @Override public long getLong() { return (long) Math.floor(this.data); } + @Override public short getShort() { return (short) (MathHelper.floor_double(this.data) & '\uffff'); } + @Override public int hashCode() { long i = Double.doubleToLongBits(this.data); return super.hashCode() ^ (int) (i ^ i >>> 32); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(128L); this.data = parDataInput.readDouble(); } + @Override public String toString() { return "" + this.data + "d"; } @@ -104,7 +116,8 @@ public class NBTTagDouble extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeDouble(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagEnd.java b/src/game/java/net/minecraft/nbt/NBTTagEnd.java index 1a8b661c..86c7f4de 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagEnd.java +++ b/src/game/java/net/minecraft/nbt/NBTTagEnd.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,12 +25,13 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagEnd extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagEnd(); } @@ -38,14 +39,17 @@ public class NBTTagEnd extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 0; } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(64L); } + @Override public String toString() { return "END"; } @@ -54,6 +58,7 @@ public class NBTTagEnd extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagFloat.java b/src/game/java/net/minecraft/nbt/NBTTagFloat.java index d241133c..98c08c85 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagFloat.java +++ b/src/game/java/net/minecraft/nbt/NBTTagFloat.java @@ -9,13 +9,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagFloat extends NBTBase.NBTPrimitive { private float data; @@ -42,10 +42,12 @@ public class NBTTagFloat extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagFloat(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagFloat nbttagfloat = (NBTTagFloat) object; @@ -55,14 +57,17 @@ public class NBTTagFloat extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return (byte) (MathHelper.floor_float(this.data) & 255); } + @Override public double getDouble() { return (double) this.data; } + @Override public float getFloat() { return this.data; } @@ -70,31 +75,38 @@ public class NBTTagFloat extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 5; } + @Override public int getInt() { return MathHelper.floor_float(this.data); } + @Override public long getLong() { return (long) this.data; } + @Override public short getShort() { return (short) (MathHelper.floor_float(this.data) & '\uffff'); } + @Override public int hashCode() { return super.hashCode() ^ Float.floatToIntBits(this.data); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(96L); this.data = parDataInput.readFloat(); } + @Override public String toString() { return "" + this.data + "f"; } @@ -103,7 +115,8 @@ public class NBTTagFloat extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeFloat(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagInt.java b/src/game/java/net/minecraft/nbt/NBTTagInt.java index 8bc1fa02..a7ee66c9 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagInt.java +++ b/src/game/java/net/minecraft/nbt/NBTTagInt.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagInt extends NBTBase.NBTPrimitive { private int data; @@ -40,10 +40,12 @@ public class NBTTagInt extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagInt(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagInt nbttagint = (NBTTagInt) object; @@ -53,14 +55,17 @@ public class NBTTagInt extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return (byte) (this.data & 255); } + @Override public double getDouble() { return (double) this.data; } + @Override public float getFloat() { return (float) this.data; } @@ -68,31 +73,38 @@ public class NBTTagInt extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 3; } + @Override public int getInt() { return this.data; } + @Override public long getLong() { return (long) this.data; } + @Override public short getShort() { return (short) (this.data & '\uffff'); } + @Override public int hashCode() { return super.hashCode() ^ this.data; } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(96L); this.data = parDataInput.readInt(); } + @Override public String toString() { return "" + this.data; } @@ -101,7 +113,8 @@ public class NBTTagInt extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeInt(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagIntArray.java b/src/game/java/net/minecraft/nbt/NBTTagIntArray.java index 8afe2808..0cfeb782 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagIntArray.java +++ b/src/game/java/net/minecraft/nbt/NBTTagIntArray.java @@ -8,13 +8,13 @@ import java.util.Arrays; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagIntArray extends NBTBase { private int[] intArray; @@ -41,12 +41,14 @@ public class NBTTagIntArray extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { int[] aint = new int[this.intArray.length]; System.arraycopy(this.intArray, 0, aint, 0, this.intArray.length); return new NBTTagIntArray(aint); } + @Override public boolean equals(Object object) { return super.equals(object) ? Arrays.equals(this.intArray, ((NBTTagIntArray) object).intArray) : false; } @@ -54,6 +56,7 @@ public class NBTTagIntArray extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 11; } @@ -62,10 +65,12 @@ public class NBTTagIntArray extends NBTBase { return this.intArray; } + @Override public int hashCode() { return super.hashCode() ^ Arrays.hashCode(this.intArray); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(192L); int i = parDataInput.readInt(); @@ -78,6 +83,7 @@ public class NBTTagIntArray extends NBTBase { } + @Override public String toString() { String s = "["; @@ -92,6 +98,7 @@ public class NBTTagIntArray extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeInt(this.intArray.length); @@ -100,4 +107,4 @@ public class NBTTagIntArray extends NBTBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagList.java b/src/game/java/net/minecraft/nbt/NBTTagList.java index 8eab9738..9bf5732a 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagList.java +++ b/src/game/java/net/minecraft/nbt/NBTTagList.java @@ -13,13 +13,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagList extends NBTBase { private static final Logger LOGGER = LogManager.getLogger(); @@ -66,6 +66,7 @@ public class NBTTagList extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { NBTTagList nbttaglist = new NBTTagList(); nbttaglist.tagType = this.tagType; @@ -78,6 +79,7 @@ public class NBTTagList extends NBTBase { return nbttaglist; } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagList nbttaglist = (NBTTagList) object; @@ -129,6 +131,7 @@ public class NBTTagList extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 9; } @@ -158,6 +161,7 @@ public class NBTTagList extends NBTBase { return this.tagType; } + @Override public int hashCode() { return super.hashCode() ^ this.tagList.hashCode(); } @@ -165,10 +169,12 @@ public class NBTTagList extends NBTBase { /** * + Return whether this compound has no tags. */ + @Override public boolean hasNoTags() { return this.tagList.isEmpty(); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(296L); if (parInt1 > 512) { @@ -226,6 +232,7 @@ public class NBTTagList extends NBTBase { return this.tagList.size(); } + @Override public String toString() { StringBuilder stringbuilder = new StringBuilder("["); @@ -244,6 +251,7 @@ public class NBTTagList extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { if (!this.tagList.isEmpty()) { this.tagType = ((NBTBase) this.tagList.get(0)).getId(); @@ -259,4 +267,4 @@ public class NBTTagList extends NBTBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagLong.java b/src/game/java/net/minecraft/nbt/NBTTagLong.java index 3f8f5aca..9e5bec67 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagLong.java +++ b/src/game/java/net/minecraft/nbt/NBTTagLong.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagLong extends NBTBase.NBTPrimitive { private long data; @@ -40,10 +40,12 @@ public class NBTTagLong extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagLong(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagLong nbttaglong = (NBTTagLong) object; @@ -53,14 +55,17 @@ public class NBTTagLong extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return (byte) ((int) (this.data & 255L)); } + @Override public double getDouble() { return (double) this.data; } + @Override public float getFloat() { return (float) this.data; } @@ -68,31 +73,38 @@ public class NBTTagLong extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 4; } + @Override public int getInt() { return (int) (this.data & -1L); } + @Override public long getLong() { return this.data; } + @Override public short getShort() { return (short) ((int) (this.data & 65535L)); } + @Override public int hashCode() { return super.hashCode() ^ (int) (this.data ^ this.data >>> 32); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(128L); this.data = parDataInput.readLong(); } + @Override public String toString() { return "" + this.data + "L"; } @@ -101,7 +113,8 @@ public class NBTTagLong extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeLong(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagLongArray.java b/src/game/java/net/minecraft/nbt/NBTTagLongArray.java new file mode 100644 index 00000000..5197378a --- /dev/null +++ b/src/game/java/net/minecraft/nbt/NBTTagLongArray.java @@ -0,0 +1,110 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; + +/** + * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source + * code. + * + * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod + * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team + * + * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights + * Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class NBTTagLongArray extends NBTBase { + private long[] longArray; + + NBTTagLongArray() { + } + + public NBTTagLongArray(long[] parArrayOfLong) { + this.longArray = parArrayOfLong; + } + + /** + * + Creates a clone of the tag. + */ + @Override + public NBTBase copy() { + long[] along = new long[this.longArray.length]; + System.arraycopy(this.longArray, 0, along, 0, this.longArray.length); + return new NBTTagLongArray(along); + } + + @Override + public boolean equals(Object object) { + return super.equals(object) ? Arrays.equals(this.longArray, ((NBTTagLongArray) object).longArray) : false; + } + + /** + * + Gets the type byte for the tag. + */ + @Override + public byte getId() { + return (byte) 12; + } + + public long[] getLongArray() { + return this.longArray; + } + + @Override + public int hashCode() { + return super.hashCode() ^ Arrays.hashCode(this.longArray); + } + + @Override + void read(DataInput parDataInput, int parLong1, NBTSizeTracker parNBTSizeTracker) throws IOException { + parNBTSizeTracker.read(192L); + int i = parDataInput.readInt(); + parNBTSizeTracker.read((long) (32 * i)); + this.longArray = new long[i]; + + for (int j = 0; j < i; ++j) { + this.longArray[j] = parDataInput.readLong(); + } + + } + + @Override + public String toString() { + String s = "["; + + for (int i = 0; i < this.longArray.length; ++i) { + s = s + this.longArray[i] + ","; + } + + return s + "]"; + } + + /** + * + Write the actual data contents of the tag, implemented in NBT extension + * classes + */ + @Override + void write(DataOutput parDataOutput) throws IOException { + parDataOutput.writeInt(this.longArray.length); + + for (int i = 0; i < this.longArray.length; ++i) { + parDataOutput.writeLong(this.longArray[i]); + } + + } +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagShort.java b/src/game/java/net/minecraft/nbt/NBTTagShort.java index bccdec1c..144ca59a 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagShort.java +++ b/src/game/java/net/minecraft/nbt/NBTTagShort.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagShort extends NBTBase.NBTPrimitive { private short data; @@ -40,10 +40,12 @@ public class NBTTagShort extends NBTBase.NBTPrimitive { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagShort(this.data); } + @Override public boolean equals(Object object) { if (super.equals(object)) { NBTTagShort nbttagshort = (NBTTagShort) object; @@ -53,14 +55,17 @@ public class NBTTagShort extends NBTBase.NBTPrimitive { } } + @Override public byte getByte() { return (byte) (this.data & 255); } + @Override public double getDouble() { return (double) this.data; } + @Override public float getFloat() { return (float) this.data; } @@ -68,31 +73,38 @@ public class NBTTagShort extends NBTBase.NBTPrimitive { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 2; } + @Override public int getInt() { return this.data; } + @Override public long getLong() { return (long) this.data; } + @Override public short getShort() { return this.data; } + @Override public int hashCode() { return super.hashCode() ^ this.data; } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(80L); this.data = parDataInput.readShort(); } + @Override public String toString() { return "" + this.data + "s"; } @@ -101,7 +113,8 @@ public class NBTTagShort extends NBTBase.NBTPrimitive { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeShort(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTTagString.java b/src/game/java/net/minecraft/nbt/NBTTagString.java index 9a39742e..c118bab6 100644 --- a/src/game/java/net/minecraft/nbt/NBTTagString.java +++ b/src/game/java/net/minecraft/nbt/NBTTagString.java @@ -7,13 +7,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NBTTagString extends NBTBase { private String data; @@ -44,10 +44,12 @@ public class NBTTagString extends NBTBase { /** * + Creates a clone of the tag. */ + @Override public NBTBase copy() { return new NBTTagString(this.data); } + @Override public boolean equals(Object object) { if (!super.equals(object)) { return false; @@ -61,14 +63,17 @@ public class NBTTagString extends NBTBase { /** * + Gets the type byte for the tag. */ + @Override public byte getId() { return (byte) 8; } + @Override public String getString() { return this.data; } + @Override public int hashCode() { return super.hashCode() ^ this.data.hashCode(); } @@ -76,16 +81,19 @@ public class NBTTagString extends NBTBase { /** * + Return whether this compound has no tags. */ + @Override public boolean hasNoTags() { return this.data.isEmpty(); } + @Override void read(DataInput parDataInput, int parInt1, NBTSizeTracker parNBTSizeTracker) throws IOException { parNBTSizeTracker.read(288L); this.data = parDataInput.readUTF(); parNBTSizeTracker.read((long) (16 * this.data.length())); } + @Override public String toString() { return "\"" + this.data.replace("\"", "\\\"") + "\""; } @@ -94,7 +102,8 @@ public class NBTTagString extends NBTBase { * + Write the actual data contents of the tag, implemented in NBT extension * classes */ + @Override void write(DataOutput parDataOutput) throws IOException { parDataOutput.writeUTF(this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/nbt/NBTUtil.java b/src/game/java/net/minecraft/nbt/NBTUtil.java index e5ca1414..9e753780 100644 --- a/src/game/java/net/minecraft/nbt/NBTUtil.java +++ b/src/game/java/net/minecraft/nbt/NBTUtil.java @@ -11,13 +11,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class NBTUtil { public static boolean func_181123_a(NBTBase parNBTBase, NBTBase parNBTBase2, boolean parFlag) { @@ -166,4 +166,4 @@ public final class NBTUtil { return tagCompound; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/EnumConnectionState.java b/src/game/java/net/minecraft/network/EnumConnectionState.java index 2150e8d9..c31b9055 100644 --- a/src/game/java/net/minecraft/network/EnumConnectionState.java +++ b/src/game/java/net/minecraft/network/EnumConnectionState.java @@ -114,13 +114,13 @@ import net.minecraft.network.play.server.S49PacketUpdateEntityNBT; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -132,7 +132,7 @@ import net.minecraft.network.play.server.S49PacketUpdateEntityNBT; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumConnectionState { HANDSHAKING(-1) { @@ -401,4 +401,4 @@ public enum EnumConnectionState { return this; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/EnumPacketDirection.java b/src/game/java/net/minecraft/network/EnumPacketDirection.java index e1ce8aca..fed04efb 100644 --- a/src/game/java/net/minecraft/network/EnumPacketDirection.java +++ b/src/game/java/net/minecraft/network/EnumPacketDirection.java @@ -3,13 +3,13 @@ package net.minecraft.network; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.network; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPacketDirection { SERVERBOUND, CLIENTBOUND; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/INetHandler.java b/src/game/java/net/minecraft/network/INetHandler.java index 67578d4c..2e1461ef 100644 --- a/src/game/java/net/minecraft/network/INetHandler.java +++ b/src/game/java/net/minecraft/network/INetHandler.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface INetHandler { /** @@ -31,4 +31,4 @@ public interface INetHandler { * reason for termination */ void onDisconnect(IChatComponent var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/NetHandlerPlayServer.java b/src/game/java/net/minecraft/network/NetHandlerPlayServer.java index d2d6b673..a6b45efd 100644 --- a/src/game/java/net/minecraft/network/NetHandlerPlayServer.java +++ b/src/game/java/net/minecraft/network/NetHandlerPlayServer.java @@ -101,13 +101,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -119,7 +119,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { @@ -176,11 +176,13 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { return this.netManager; } + @Override public void handleAnimation(C0APacketAnimation c0apacketanimation) { this.playerEntity.markPlayerActive(); this.playerEntity.swingItem(); } + @Override public void handleResourcePackStatus(C19PacketResourcePackStatus var1) { } @@ -191,6 +193,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { this.serverController.getCommandManager().executeCommand(this.playerEntity, command); } + @Override public void handleSpectate(C18PacketSpectate c18packetspectate) { if (this.playerEntity.isSpectator()) { Entity entity = null; @@ -254,6 +257,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Invoked when disconnecting, the parameter is a ChatComponent describing the * reason for termination */ + @Override public void onDisconnect(IChatComponent ichatcomponent) { if (!hasDisconnected) { hasDisconnected = true; @@ -275,6 +279,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Process chat messages (broadcast back to clients) and commands (executes) */ + @Override public void processChatMessage(C01PacketChatMessage c01packetchatmessage) { if (this.playerEntity.getChatVisibility() == EntityPlayer.EnumChatVisibility.HIDDEN) { ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("chat.cannotSend", @@ -320,6 +325,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * and prevents further manipulation by the player until he confirms that it has * the same open container/inventory */ + @Override public void processClickWindow(C0EPacketClickWindow c0epacketclickwindow) { this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == c0epacketclickwindow.getWindowId() @@ -365,6 +371,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Updates serverside copy of client settings: language, render distance, chat * visibility, chat colours, difficulty, and whether to show the cape */ + @Override public void processClientSettings(C15PacketClientSettings c15packetclientsettings) { this.playerEntity.handleClientSettings(c15packetclientsettings); } @@ -373,6 +380,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Processes the client status updates: respawn attempt from player, opening * statistics or achievements, or acquiring 'open inventory' achievement */ + @Override public void processClientStatus(C16PacketClientStatus c16packetclientstatus) { this.playerEntity.markPlayerActive(); C16PacketClientStatus.EnumState c16packetclientstatus$enumstate = c16packetclientstatus.getStatus(); @@ -412,6 +420,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Processes the client closing windows (container) */ + @Override public void processCloseWindow(C0DPacketCloseWindow c0dpacketclosewindow) { this.playerEntity.closeContainer(); } @@ -422,6 +431,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * container-slot manipulation. It will unlock the player's ability to * manipulate the container contents */ + @Override public void processConfirmTransaction(C0FPacketConfirmTransaction c0fpacketconfirmtransaction) { Short oshort = (Short) this.field_147372_n.lookup(this.playerEntity.openContainer.windowId); if (oshort != null && c0fpacketconfirmtransaction.getUid() == oshort.shortValue() @@ -436,6 +446,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Update the server with an ItemStack in a slot. */ + @Override public void processCreativeInventoryAction(C10PacketCreativeInventoryAction c10packetcreativeinventoryaction) { if (this.playerEntity.theItemInWorldManager.isCreative()) { boolean flag = c10packetcreativeinventoryaction.getSlotId() < 0; @@ -488,6 +499,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Enchants the item identified by the packet given some convoluted conditions * (matching window, which should/shouldn't be in use?) */ + @Override public void processEnchantItem(C11PacketEnchantItem c11packetenchantitem) { this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == c11packetenchantitem.getWindowId() @@ -503,6 +515,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * opening the inventory or setting jump height of the horse the player is * riding */ + @Override public void processEntityAction(C0BPacketEntityAction c0bpacketentityaction) { this.playerEntity.markPlayerActive(); switch (c0bpacketentityaction.getAction()) { @@ -541,6 +554,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Updates which quickbar slot is selected */ + @Override public void processHeldItemChange(C09PacketHeldItemChange c09packethelditemchange) { if (c09packethelditemchange.getSlotId() >= 0 && c09packethelditemchange.getSlotId() < InventoryPlayer.getHotbarSize()) { @@ -555,6 +569,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Processes player movement input. Includes walking, strafing, jumping, * sneaking; excludes riding and toggling flying/sprinting */ + @Override public void processInput(C0CPacketInput c0cpacketinput) { this.playerEntity.setEntityActionState(c0cpacketinput.getStrafeSpeed(), c0cpacketinput.getForwardSpeed(), c0cpacketinput.isJumping(), c0cpacketinput.isSneaking()); @@ -563,6 +578,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Updates a players' ping statistics */ + @Override public void processKeepAlive(C00PacketKeepAlive c00packetkeepalive) { if (c00packetkeepalive.getKey() == this.field_147378_h) { int i = (int) (this.currentTimeMillis() - this.lastPingTime); @@ -574,6 +590,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Processes clients perspective on player positioning and/or orientation */ + @Override public void processPlayer(C03PacketPlayer c03packetplayer) { if (this.func_183006_b(c03packetplayer)) { this.kickPlayerFromServer("Invalid move packet received"); @@ -768,6 +785,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Processes a player starting/stopping flying */ + @Override public void processPlayerAbilities(C13PacketPlayerAbilities c13packetplayerabilities) { this.playerEntity.capabilities.isFlying = c13packetplayerabilities.isFlying() && this.playerEntity.capabilities.allowFlying; @@ -776,6 +794,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Processes block placement and block activation (anvil, furnace, etc.) */ + @Override public void processPlayerBlockPlacement(C08PacketPlayerBlockPlacement c08packetplayerblockplacement) { WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); ItemStack itemstack = this.playerEntity.inventory.getCurrentItem(); @@ -846,6 +865,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * drop item (respectively without or with player control), 5: stopped; x,y,z, * side clicked on;) */ + @Override public void processPlayerDigging(C07PacketPlayerDigging c07packetplayerdigging) { WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); BlockPos blockpos = c07packetplayerdigging.getPosition(); @@ -912,6 +932,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Retrieves possible tab completions for the requested command string and * sends them to the client */ + @Override public void processTabComplete(C14PacketTabComplete c14packettabcomplete) { List lst = this.serverController.getTabCompletions(this.playerEntity, c14packettabcomplete.getMessage(), c14packettabcomplete.getTargetBlock()); @@ -923,6 +944,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { this.playerEntity.playerNetServerHandler.sendPacket(new S3APacketTabComplete(fuckOff)); } + @Override public void processUpdateSign(C12PacketUpdateSign c12packetupdatesign) { this.playerEntity.markPlayerActive(); WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); @@ -961,6 +983,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { * + Processes interactions ((un)leashing, opening command block GUI) and * attacks on an entity with players currently equipped item */ + @Override public void processUseEntity(C02PacketUseEntity c02packetuseentity) { WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); Entity entity = c02packetuseentity.getEntityFromWorld(worldserver); @@ -996,6 +1019,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Synchronizes serverside and clientside book contents and signing */ + @Override public void processVanilla250Packet(C17PacketCustomPayload c17packetcustompayload) { if ("MC|BEdit".equals(c17packetcustompayload.getChannelName())) { PacketBuffer packetbuffer3 = c17packetcustompayload.getBufferData(); @@ -1198,6 +1222,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Sending packet"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Packet being sent"); crashreportcategory.addCrashSectionCallable("Packet class", new Callable() { + @Override public String call() throws Exception { return packetIn.getClass().getCanonicalName(); } @@ -1250,6 +1275,7 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { this.field_147366_g = false; ++this.networkTickCount; @@ -1278,4 +1304,4 @@ public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable { this.eaglerMessageController.flush(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/Packet.java b/src/game/java/net/minecraft/network/Packet.java index b26c0f26..6a483e9e 100644 --- a/src/game/java/net/minecraft/network/Packet.java +++ b/src/game/java/net/minecraft/network/Packet.java @@ -5,13 +5,13 @@ import java.io.IOException; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface Packet { /** @@ -40,4 +40,4 @@ public interface Packet { * + Writes the raw packet data to the data stream. */ void writePacketData(PacketBuffer var1) throws IOException; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/PacketBuffer.java b/src/game/java/net/minecraft/network/PacketBuffer.java index 48aa0e0b..531de1ba 100644 --- a/src/game/java/net/minecraft/network/PacketBuffer.java +++ b/src/game/java/net/minecraft/network/PacketBuffer.java @@ -26,13 +26,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PacketBuffer extends ByteBuf { /** @@ -67,90 +67,112 @@ public class PacketBuffer extends ByteBuf { this.buf = wrapped; } + @Override public byte[] array() { return this.buf.array(); } + @Override public int arrayOffset() { return this.buf.arrayOffset(); } + @Override public int bytesBefore(byte parByte1) { return this.buf.bytesBefore(parByte1); } + @Override public int bytesBefore(int i, byte b0) { return this.buf.bytesBefore(i, b0); } + @Override public int bytesBefore(int i, int j, byte b0) { return this.buf.bytesBefore(i, j, b0); } + @Override public int capacity() { return this.buf.capacity(); } + @Override public ByteBuf capacity(int i) { return this.buf.capacity(i); } + @Override public ByteBuf clear() { return this.buf.clear(); } + @Override public int compareTo(ByteBuf bytebuf) { return this.buf.compareTo(bytebuf); } + @Override public ByteBuf copy() { return this.buf.copy(); } + @Override public ByteBuf copy(int i, int j) { return this.buf.copy(i, j); } + @Override public ByteBuf discardReadBytes() { return this.buf.discardReadBytes(); } + @Override public ByteBuf discardSomeReadBytes() { return this.buf.discardSomeReadBytes(); } + @Override public ByteBuf duplicate() { return this.buf.duplicate(); } + @Override public ByteBuf ensureWritable(int parInt1) { return this.buf.ensureWritable(parInt1); } + @Override public int ensureWritable(int i, boolean flag) { return this.buf.ensureWritable(i, flag); } + @Override public boolean equals(Object object) { return this.buf.equals(object); } + @Override public boolean getBoolean(int parInt1) { return this.buf.getBoolean(parInt1); } + @Override public byte getByte(int parInt1) { return this.buf.getByte(parInt1); } + @Override public ByteBuf getBytes(int i, byte[] abyte) { return this.buf.getBytes(i, abyte); } + @Override public ByteBuf getBytes(int i, byte[] abyte, int j, int k) { return this.buf.getBytes(i, abyte, j, k); } + @Override public ByteBuf getBytes(int parInt1, ByteBuf parByteBuf) { if (parByteBuf instanceof PacketBuffer) { return this.buf.getBytes(parInt1, ((PacketBuffer) parByteBuf).buf); @@ -159,6 +181,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf getBytes(int i, ByteBuf bytebuf, int j) { if (bytebuf instanceof PacketBuffer) { return this.buf.getBytes(i, ((PacketBuffer) bytebuf).buf, j); @@ -167,6 +190,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf getBytes(int i, ByteBuf bytebuf, int j, int k) { if (bytebuf instanceof PacketBuffer) { return this.buf.getBytes(i, ((PacketBuffer) bytebuf).buf, j, k); @@ -175,146 +199,182 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf getBytes(int i, ByteBuffer bytebuffer) { return this.buf.getBytes(i, bytebuffer); } + @Override public ByteBuf getBytes(int parInt1, OutputStream parOutputStream, int parInt2) throws IOException { return this.buf.getBytes(parInt1, parOutputStream, parInt2); } + @Override public char getChar(int parInt1) { return this.buf.getChar(parInt1); } + @Override public double getDouble(int parInt1) { return this.buf.getDouble(parInt1); } + @Override public float getFloat(int parInt1) { return this.buf.getFloat(parInt1); } + @Override public int getInt(int parInt1) { return this.buf.getInt(parInt1); } + @Override public long getLong(int parInt1) { return this.buf.getLong(parInt1); } + @Override public int getMedium(int parInt1) { return this.buf.getMedium(parInt1); } + @Override public short getShort(int parInt1) { return this.buf.getShort(parInt1); } + @Override public short getUnsignedByte(int parInt1) { return this.buf.getUnsignedByte(parInt1); } + @Override public long getUnsignedInt(int parInt1) { return this.buf.getUnsignedInt(parInt1); } + @Override public int getUnsignedMedium(int parInt1) { return this.buf.getUnsignedMedium(parInt1); } + @Override public int getUnsignedShort(int parInt1) { return this.buf.getUnsignedShort(parInt1); } + @Override public boolean hasArray() { return this.buf.hasArray(); } + @Override public int hashCode() { return this.buf.hashCode(); } + @Override public boolean hasMemoryAddress() { return this.buf.hasMemoryAddress(); } + @Override public int indexOf(int parInt1, int parInt2, byte parByte1) { return this.buf.indexOf(parInt1, parInt2, parByte1); } + @Override public ByteBuffer internalNioBuffer(int parInt1, int parInt2) { return this.buf.internalNioBuffer(parInt1, parInt2); } + @Override public boolean isDirect() { return this.buf.isDirect(); } + @Override public boolean isReadable() { return this.buf.isReadable(); } + @Override public boolean isReadable(int i) { return this.buf.isReadable(i); } + @Override public boolean isWritable() { return this.buf.isWritable(); } + @Override public boolean isWritable(int i) { return this.buf.isWritable(i); } + @Override public ByteBuf markReaderIndex() { return this.buf.markReaderIndex(); } + @Override public ByteBuf markWriterIndex() { return this.buf.markWriterIndex(); } + @Override public int maxCapacity() { return this.buf.maxCapacity(); } + @Override public int maxWritableBytes() { return this.buf.maxWritableBytes(); } + @Override public long memoryAddress() { return this.buf.memoryAddress(); } + @Override public ByteBuffer nioBuffer() { return this.buf.nioBuffer(); } + @Override public ByteBuffer nioBuffer(int i, int j) { return this.buf.nioBuffer(i, j); } + @Override public int nioBufferCount() { return this.buf.nioBufferCount(); } + @Override public ByteBuffer[] nioBuffers() { return this.buf.nioBuffers(); } + @Override public ByteBuffer[] nioBuffers(int i, int j) { return this.buf.nioBuffers(i, j); } + @Override public ByteOrder order() { return this.buf.order(); } + @Override public ByteBuf order(ByteOrder byteorder) { return this.buf.order(byteorder); } + @Override public int readableBytes() { return this.buf.readableBytes(); } @@ -323,10 +383,12 @@ public class PacketBuffer extends ByteBuf { return BlockPos.fromLong(this.readLong()); } + @Override public boolean readBoolean() { return this.buf.readBoolean(); } + @Override public byte readByte() { return this.buf.readByte(); } @@ -337,14 +399,17 @@ public class PacketBuffer extends ByteBuf { return abyte; } + @Override public ByteBuf readBytes(byte[] abyte) { return this.buf.readBytes(abyte); } + @Override public ByteBuf readBytes(byte[] abyte, int i, int j) { return this.buf.readBytes(abyte, i, j); } + @Override public ByteBuf readBytes(ByteBuf bytebuf) { if (bytebuf instanceof PacketBuffer) { return this.buf.readBytes(((PacketBuffer) bytebuf).buf); @@ -353,6 +418,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf readBytes(ByteBuf bytebuf, int i) { if (bytebuf instanceof PacketBuffer) { return this.buf.readBytes(((PacketBuffer) bytebuf).buf, i); @@ -361,6 +427,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf readBytes(ByteBuf bytebuf, int i, int j) { if (bytebuf instanceof PacketBuffer) { return this.buf.readBytes(((PacketBuffer) bytebuf).buf, i, j); @@ -369,18 +436,22 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf readBytes(ByteBuffer bytebuffer) { return this.buf.readBytes(bytebuffer); } + @Override public ByteBuf readBytes(int parInt1) { return this.buf.readBytes(parInt1); } + @Override public ByteBuf readBytes(OutputStream parOutputStream, int parInt1) throws IOException { return this.buf.readBytes(parOutputStream, parInt1); } + @Override public char readChar() { return this.buf.readChar(); } @@ -389,6 +460,7 @@ public class PacketBuffer extends ByteBuf { return IChatComponent.Serializer.jsonToComponent(this.readStringFromBuffer(32767)); } + @Override public double readDouble() { return this.buf.readDouble(); } @@ -397,18 +469,22 @@ public class PacketBuffer extends ByteBuf { return (T) ((Enum[]) enumClass.getEnumConstants())[this.readVarIntFromBuffer()]; } + @Override public int readerIndex() { return this.buf.readerIndex(); } + @Override public ByteBuf readerIndex(int i) { return this.buf.readerIndex(i); } + @Override public float readFloat() { return this.buf.readFloat(); } + @Override public int readInt() { return this.buf.readInt(); } @@ -429,10 +505,12 @@ public class PacketBuffer extends ByteBuf { return itemstack; } + @Override public long readLong() { return this.buf.readLong(); } + @Override public int readMedium() { return this.buf.readMedium(); } @@ -451,10 +529,12 @@ public class PacketBuffer extends ByteBuf { } } + @Override public short readShort() { return this.buf.readShort(); } + @Override public ByteBuf readSlice(int parInt1) { return this.buf.readSlice(parInt1); } @@ -481,18 +561,22 @@ public class PacketBuffer extends ByteBuf { } } + @Override public short readUnsignedByte() { return this.buf.readUnsignedByte(); } + @Override public long readUnsignedInt() { return this.buf.readUnsignedInt(); } + @Override public int readUnsignedMedium() { return this.buf.readUnsignedMedium(); } + @Override public int readUnsignedShort() { return this.buf.readUnsignedShort(); } @@ -544,34 +628,42 @@ public class PacketBuffer extends ByteBuf { return i; } + @Override public ByteBuf resetReaderIndex() { return this.buf.resetReaderIndex(); } + @Override public ByteBuf resetWriterIndex() { return this.buf.resetWriterIndex(); } + @Override public ByteBuf setBoolean(int parInt1, boolean parFlag) { return this.buf.setBoolean(parInt1, parFlag); } + @Override public ByteBuf setByte(int parInt1, int parInt2) { return this.buf.setByte(parInt1, parInt2); } + @Override public ByteBuf setBytes(int i, byte[] abyte) { return this.buf.setBytes(i, abyte); } + @Override public ByteBuf setBytes(int i, byte[] abyte, int j, int k) { return this.buf.setBytes(i, abyte, j, k); } + @Override public ByteBuf setBytes(int parInt1, ByteBuf parByteBuf) { return this.buf.setBytes(parInt1, parByteBuf); } + @Override public ByteBuf setBytes(int i, ByteBuf bytebuf, int j) { if (bytebuf instanceof PacketBuffer) { return this.buf.setBytes(i, ((PacketBuffer) bytebuf).buf, j); @@ -580,6 +672,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf setBytes(int i, ByteBuf bytebuf, int j, int k) { if (bytebuf instanceof PacketBuffer) { return this.buf.setBytes(i, ((PacketBuffer) bytebuf).buf, j, k); @@ -588,78 +681,97 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf setBytes(int i, ByteBuffer bytebuffer) { return this.buf.setBytes(i, bytebuffer); } + @Override public int setBytes(int parInt1, InputStream parInputStream, int parInt2) throws IOException { return this.buf.setBytes(parInt1, parInputStream, parInt2); } + @Override public ByteBuf setChar(int parInt1, int parInt2) { return this.buf.setChar(parInt1, parInt2); } + @Override public ByteBuf setDouble(int parInt1, double parDouble1) { return this.buf.setDouble(parInt1, parDouble1); } + @Override public ByteBuf setFloat(int parInt1, float parFloat1) { return this.buf.setFloat(parInt1, parFloat1); } + @Override public ByteBuf setIndex(int parInt1, int parInt2) { return this.buf.setIndex(parInt1, parInt2); } + @Override public ByteBuf setInt(int parInt1, int parInt2) { return this.buf.setInt(parInt1, parInt2); } + @Override public ByteBuf setLong(int parInt1, long parLong1) { return this.buf.setLong(parInt1, parLong1); } + @Override public ByteBuf setMedium(int parInt1, int parInt2) { return this.buf.setMedium(parInt1, parInt2); } + @Override public ByteBuf setShort(int parInt1, int parInt2) { return this.buf.setShort(parInt1, parInt2); } + @Override public ByteBuf setZero(int parInt1, int parInt2) { return this.buf.setZero(parInt1, parInt2); } + @Override public ByteBuf skipBytes(int parInt1) { return this.buf.skipBytes(parInt1); } + @Override public ByteBuf slice() { return this.buf.slice(); } + @Override public ByteBuf slice(int i, int j) { return this.buf.slice(i, j); } + @Override public String toString() { return this.buf.toString(); } + @Override public String toString(Charset charset) { return this.buf.toString(charset); } + @Override public String toString(int i, int j, Charset charset) { return this.buf.toString(i, j, charset); } + @Override public ByteBuf unwrap() { return this.buf.unwrap(); } + @Override public int writableBytes() { return this.buf.writableBytes(); } @@ -668,10 +780,12 @@ public class PacketBuffer extends ByteBuf { this.writeLong(pos.toLong()); } + @Override public ByteBuf writeBoolean(boolean parFlag) { return this.buf.writeBoolean(parFlag); } + @Override public ByteBuf writeByte(int parInt1) { return this.buf.writeByte(parInt1); } @@ -681,14 +795,17 @@ public class PacketBuffer extends ByteBuf { this.writeBytes(array); } + @Override public ByteBuf writeBytes(byte[] abyte) { return this.buf.writeBytes(abyte); } + @Override public ByteBuf writeBytes(byte[] abyte, int i, int j) { return this.buf.writeBytes(abyte, i, j); } + @Override public ByteBuf writeBytes(ByteBuf parByteBuf) { if (parByteBuf instanceof PacketBuffer) { return this.buf.writeBytes(((PacketBuffer) parByteBuf).buf); @@ -697,6 +814,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf writeBytes(ByteBuf bytebuf, int i) { if (bytebuf instanceof PacketBuffer) { return this.buf.writeBytes(((PacketBuffer) bytebuf).buf, i); @@ -705,6 +823,7 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf writeBytes(ByteBuf bytebuf, int i, int j) { if (bytebuf instanceof PacketBuffer) { return this.buf.writeBytes(((PacketBuffer) bytebuf).buf, i, j); @@ -713,14 +832,17 @@ public class PacketBuffer extends ByteBuf { } } + @Override public ByteBuf writeBytes(ByteBuffer bytebuffer) { return this.buf.writeBytes(bytebuffer); } + @Override public int writeBytes(InputStream parInputStream, int parInt1) throws IOException { return this.buf.writeBytes(parInputStream, parInt1); } + @Override public ByteBuf writeChar(int parInt1) { return this.buf.writeChar(parInt1); } @@ -729,6 +851,7 @@ public class PacketBuffer extends ByteBuf { this.writeString(IChatComponent.Serializer.componentToJson(component)); } + @Override public ByteBuf writeDouble(double parDouble1) { return this.buf.writeDouble(parDouble1); } @@ -737,10 +860,12 @@ public class PacketBuffer extends ByteBuf { this.writeVarIntToBuffer(value.ordinal()); } + @Override public ByteBuf writeFloat(float parFloat1) { return this.buf.writeFloat(parFloat1); } + @Override public ByteBuf writeInt(int parInt1) { return this.buf.writeInt(parInt1); } @@ -765,10 +890,12 @@ public class PacketBuffer extends ByteBuf { } + @Override public ByteBuf writeLong(long parLong1) { return this.buf.writeLong(parLong1); } + @Override public ByteBuf writeMedium(int parInt1) { return this.buf.writeMedium(parInt1); } @@ -789,14 +916,17 @@ public class PacketBuffer extends ByteBuf { } + @Override public int writerIndex() { return this.buf.writerIndex(); } + @Override public ByteBuf writerIndex(int i) { return this.buf.writerIndex(i); } + @Override public ByteBuf writeShort(int parInt1) { return this.buf.writeShort(parInt1); } @@ -842,8 +972,9 @@ public class PacketBuffer extends ByteBuf { this.writeByte((int) value); } + @Override public ByteBuf writeZero(int parInt1) { return this.buf.writeZero(parInt1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/ServerStatusResponse.java b/src/game/java/net/minecraft/network/ServerStatusResponse.java index 273f5096..6d3409b4 100644 --- a/src/game/java/net/minecraft/network/ServerStatusResponse.java +++ b/src/game/java/net/minecraft/network/ServerStatusResponse.java @@ -13,13 +13,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,18 +31,20 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerStatusResponse { public static class MinecraftProtocolVersionIdentifier { public static class Serializer implements JSONTypeCodec { + @Override public ServerStatusResponse.MinecraftProtocolVersionIdentifier deserialize(JSONObject jsonobject) throws JSONException { return new ServerStatusResponse.MinecraftProtocolVersionIdentifier(jsonobject.getString("name"), jsonobject.getInt("protocol")); } + @Override public JSONObject serialize( ServerStatusResponse.MinecraftProtocolVersionIdentifier serverstatusresponse$minecraftprotocolversionidentifier) { JSONObject jsonobject = new JSONObject(); @@ -73,6 +75,7 @@ public class ServerStatusResponse { public static class PlayerCountData { public static class Serializer implements JSONTypeCodec { + @Override public ServerStatusResponse.PlayerCountData deserialize(JSONObject jsonobject) throws JSONException { ServerStatusResponse.PlayerCountData serverstatusresponse$playercountdata = new ServerStatusResponse.PlayerCountData( jsonobject.getInt("max"), jsonobject.getInt("online")); @@ -95,6 +98,7 @@ public class ServerStatusResponse { return serverstatusresponse$playercountdata; } + @Override public JSONObject serialize(ServerStatusResponse.PlayerCountData serverstatusresponse$playercountdata) throws JSONException { JSONObject jsonobject = new JSONObject(); @@ -147,6 +151,7 @@ public class ServerStatusResponse { } public static class Serializer implements JSONTypeCodec { + @Override public ServerStatusResponse deserialize(JSONObject jsonobject) throws JSONException { ServerStatusResponse serverstatusresponse = new ServerStatusResponse(); if (jsonobject.has("description")) { @@ -173,6 +178,7 @@ public class ServerStatusResponse { return serverstatusresponse; } + @Override public JSONObject serialize(ServerStatusResponse serverstatusresponse) { JSONObject jsonobject = new JSONObject(); if (serverstatusresponse.getServerDescription() != null) { @@ -237,4 +243,4 @@ public class ServerStatusResponse { public void setServerDescription(IChatComponent motd) { this.serverMotd = motd; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/handshake/INetHandlerHandshakeServer.java b/src/game/java/net/minecraft/network/handshake/INetHandlerHandshakeServer.java index de13febd..b13b0263 100644 --- a/src/game/java/net/minecraft/network/handshake/INetHandlerHandshakeServer.java +++ b/src/game/java/net/minecraft/network/handshake/INetHandlerHandshakeServer.java @@ -6,13 +6,13 @@ import net.minecraft.network.handshake.client.C00Handshake; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.network.handshake.client.C00Handshake; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface INetHandlerHandshakeServer extends INetHandler { /** @@ -34,4 +34,4 @@ public interface INetHandlerHandshakeServer extends INetHandler { * must pass a versioncheck or receive a disconnect otherwise */ void processHandshake(C00Handshake var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/handshake/client/C00Handshake.java b/src/game/java/net/minecraft/network/handshake/client/C00Handshake.java index 7c02c0a9..102c33d8 100644 --- a/src/game/java/net/minecraft/network/handshake/client/C00Handshake.java +++ b/src/game/java/net/minecraft/network/handshake/client/C00Handshake.java @@ -10,13 +10,13 @@ import net.minecraft.network.handshake.INetHandlerHandshakeServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.handshake.INetHandlerHandshakeServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C00Handshake implements Packet { private int protocolVersion; @@ -57,6 +57,7 @@ public class C00Handshake implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerHandshakeServer inethandlerhandshakeserver) { inethandlerhandshakeserver.processHandshake(this); } @@ -64,6 +65,7 @@ public class C00Handshake implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.protocolVersion = parPacketBuffer.readVarIntFromBuffer(); this.ip = parPacketBuffer.readStringFromBuffer(255); @@ -74,10 +76,11 @@ public class C00Handshake implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.protocolVersion); parPacketBuffer.writeString(this.ip); parPacketBuffer.writeShort(this.port); parPacketBuffer.writeVarIntToBuffer(this.requestedState.getId()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/INetHandlerLoginClient.java b/src/game/java/net/minecraft/network/login/INetHandlerLoginClient.java index 42593385..2c1d43f3 100644 --- a/src/game/java/net/minecraft/network/login/INetHandlerLoginClient.java +++ b/src/game/java/net/minecraft/network/login/INetHandlerLoginClient.java @@ -9,13 +9,13 @@ import net.minecraft.network.login.server.S03PacketEnableCompression; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.login.server.S03PacketEnableCompression; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface INetHandlerLoginClient extends INetHandler { void handleDisconnect(S00PacketDisconnect var1); @@ -37,4 +37,4 @@ public interface INetHandlerLoginClient extends INetHandler { void handleEncryptionRequest(S01PacketEncryptionRequest var1); void handleLoginSuccess(S02PacketLoginSuccess var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/INetHandlerLoginServer.java b/src/game/java/net/minecraft/network/login/INetHandlerLoginServer.java index 3d48e50b..54e60ac2 100644 --- a/src/game/java/net/minecraft/network/login/INetHandlerLoginServer.java +++ b/src/game/java/net/minecraft/network/login/INetHandlerLoginServer.java @@ -7,13 +7,13 @@ import net.minecraft.network.login.client.C01PacketEncryptionResponse; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,10 @@ import net.minecraft.network.login.client.C01PacketEncryptionResponse; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface INetHandlerLoginServer extends INetHandler { void processEncryptionResponse(C01PacketEncryptionResponse var1); void processLoginStart(C00PacketLoginStart var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/client/C00PacketLoginStart.java b/src/game/java/net/minecraft/network/login/client/C00PacketLoginStart.java index f1c9cc48..6e3de17e 100644 --- a/src/game/java/net/minecraft/network/login/client/C00PacketLoginStart.java +++ b/src/game/java/net/minecraft/network/login/client/C00PacketLoginStart.java @@ -11,13 +11,13 @@ import net.minecraft.network.login.INetHandlerLoginServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.network.login.INetHandlerLoginServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C00PacketLoginStart implements Packet { private GameProfile profile; @@ -73,6 +73,7 @@ public class C00PacketLoginStart implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerLoginServer inethandlerloginserver) { inethandlerloginserver.processLoginStart(this); } @@ -80,6 +81,7 @@ public class C00PacketLoginStart implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.profile = new GameProfile((EaglercraftUUID) null, parPacketBuffer.readStringFromBuffer(16)); this.skin = parPacketBuffer.readByteArray(); @@ -91,6 +93,7 @@ public class C00PacketLoginStart implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.profile.getName()); parPacketBuffer.writeByteArray(this.skin); @@ -98,4 +101,4 @@ public class C00PacketLoginStart implements Packet { parPacketBuffer.writeByteArray(this.protocols); parPacketBuffer.writeUuid(brandUUID); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/client/C01PacketEncryptionResponse.java b/src/game/java/net/minecraft/network/login/client/C01PacketEncryptionResponse.java index 4ae24eda..62e5b5e1 100644 --- a/src/game/java/net/minecraft/network/login/client/C01PacketEncryptionResponse.java +++ b/src/game/java/net/minecraft/network/login/client/C01PacketEncryptionResponse.java @@ -9,13 +9,13 @@ import net.minecraft.network.login.INetHandlerLoginServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.login.INetHandlerLoginServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C01PacketEncryptionResponse implements Packet { private byte[] secretKeyEncrypted = new byte[0]; @@ -44,6 +44,7 @@ public class C01PacketEncryptionResponse implements Packet { private IChatComponent reason; @@ -47,6 +47,7 @@ public class S00PacketDisconnect implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerLoginClient inethandlerloginclient) { inethandlerloginclient.handleDisconnect(this); } @@ -54,6 +55,7 @@ public class S00PacketDisconnect implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.reason = parPacketBuffer.readChatComponent(); } @@ -61,7 +63,8 @@ public class S00PacketDisconnect implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeChatComponent(this.reason); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/server/S01PacketEncryptionRequest.java b/src/game/java/net/minecraft/network/login/server/S01PacketEncryptionRequest.java index deba074c..ccb07881 100644 --- a/src/game/java/net/minecraft/network/login/server/S01PacketEncryptionRequest.java +++ b/src/game/java/net/minecraft/network/login/server/S01PacketEncryptionRequest.java @@ -9,13 +9,13 @@ import net.minecraft.network.login.INetHandlerLoginClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.login.INetHandlerLoginClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S01PacketEncryptionRequest implements Packet { private String hashedServerId; @@ -54,6 +54,7 @@ public class S01PacketEncryptionRequest implements Packet { private GameProfile profile; @@ -54,6 +54,7 @@ public class S02PacketLoginSuccess implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerLoginClient inethandlerloginclient) { inethandlerloginclient.handleLoginSuccess(this); } @@ -61,6 +62,7 @@ public class S02PacketLoginSuccess implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { String s = parPacketBuffer.readStringFromBuffer(36); String s1 = parPacketBuffer.readStringFromBuffer(16); @@ -72,6 +74,7 @@ public class S02PacketLoginSuccess implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { EaglercraftUUID uuid = this.profile.getId(); parPacketBuffer.writeString(uuid == null ? "" : uuid.toString()); @@ -80,4 +83,4 @@ public class S02PacketLoginSuccess implements Packet { parPacketBuffer.writeShort(selectedProtocol); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/login/server/S03PacketEnableCompression.java b/src/game/java/net/minecraft/network/login/server/S03PacketEnableCompression.java index a32b4cf2..9a003ad6 100644 --- a/src/game/java/net/minecraft/network/login/server/S03PacketEnableCompression.java +++ b/src/game/java/net/minecraft/network/login/server/S03PacketEnableCompression.java @@ -9,13 +9,13 @@ import net.minecraft.network.login.INetHandlerLoginClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.login.INetHandlerLoginClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S03PacketEnableCompression implements Packet { private int compressionTreshold; @@ -46,6 +46,7 @@ public class S03PacketEnableCompression implements Packet { private int key; @@ -46,6 +46,7 @@ public class C00PacketKeepAlive implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processKeepAlive(this); } @@ -53,6 +54,7 @@ public class C00PacketKeepAlive implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.key = parPacketBuffer.readVarIntFromBuffer(); } @@ -60,7 +62,8 @@ public class C00PacketKeepAlive implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.key); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C01PacketChatMessage.java b/src/game/java/net/minecraft/network/play/client/C01PacketChatMessage.java index 7c6ee1ec..ff7c5809 100644 --- a/src/game/java/net/minecraft/network/play/client/C01PacketChatMessage.java +++ b/src/game/java/net/minecraft/network/play/client/C01PacketChatMessage.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C01PacketChatMessage implements Packet { private String message; @@ -50,6 +50,7 @@ public class C01PacketChatMessage implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processChatMessage(this); } @@ -57,6 +58,7 @@ public class C01PacketChatMessage implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.message = parPacketBuffer.readStringFromBuffer(100); } @@ -64,7 +66,8 @@ public class C01PacketChatMessage implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.message); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C02PacketUseEntity.java b/src/game/java/net/minecraft/network/play/client/C02PacketUseEntity.java index ae2e610b..35983472 100644 --- a/src/game/java/net/minecraft/network/play/client/C02PacketUseEntity.java +++ b/src/game/java/net/minecraft/network/play/client/C02PacketUseEntity.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C02PacketUseEntity implements Packet { public static enum Action { @@ -70,6 +70,7 @@ public class C02PacketUseEntity implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processUseEntity(this); } @@ -77,6 +78,7 @@ public class C02PacketUseEntity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.action = (C02PacketUseEntity.Action) parPacketBuffer.readEnumValue(C02PacketUseEntity.Action.class); @@ -90,6 +92,7 @@ public class C02PacketUseEntity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeEnumValue(this.action); @@ -100,4 +103,4 @@ public class C02PacketUseEntity implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C03PacketPlayer.java b/src/game/java/net/minecraft/network/play/client/C03PacketPlayer.java index 9a2bd551..e7b8b9ce 100644 --- a/src/game/java/net/minecraft/network/play/client/C03PacketPlayer.java +++ b/src/game/java/net/minecraft/network/play/client/C03PacketPlayer.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C03PacketPlayer implements Packet { public static class C04PacketPlayerPosition extends C03PacketPlayer { @@ -46,6 +46,7 @@ public class C03PacketPlayer implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.x = parPacketBuffer.readDouble(); this.y = parPacketBuffer.readDouble(); @@ -56,6 +57,7 @@ public class C03PacketPlayer implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeDouble(this.x); parPacketBuffer.writeDouble(this.y); @@ -79,6 +81,7 @@ public class C03PacketPlayer implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.yaw = parPacketBuffer.readFloat(); this.pitch = parPacketBuffer.readFloat(); @@ -88,6 +91,7 @@ public class C03PacketPlayer implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeFloat(this.yaw); parPacketBuffer.writeFloat(this.pitch); @@ -116,6 +120,7 @@ public class C03PacketPlayer implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.x = parPacketBuffer.readDouble(); this.y = parPacketBuffer.readDouble(); @@ -128,6 +133,7 @@ public class C03PacketPlayer implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeDouble(this.x); parPacketBuffer.writeDouble(this.y); @@ -192,6 +198,7 @@ public class C03PacketPlayer implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processPlayer(this); } @@ -199,6 +206,7 @@ public class C03PacketPlayer implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.onGround = parPacketBuffer.readUnsignedByte() != 0; } @@ -210,7 +218,8 @@ public class C03PacketPlayer implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.onGround ? 1 : 0); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C07PacketPlayerDigging.java b/src/game/java/net/minecraft/network/play/client/C07PacketPlayerDigging.java index e59c73d7..12e3e018 100644 --- a/src/game/java/net/minecraft/network/play/client/C07PacketPlayerDigging.java +++ b/src/game/java/net/minecraft/network/play/client/C07PacketPlayerDigging.java @@ -11,13 +11,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C07PacketPlayerDigging implements Packet { public static enum Action { @@ -65,6 +65,7 @@ public class C07PacketPlayerDigging implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processPlayerDigging(this); } @@ -72,6 +73,7 @@ public class C07PacketPlayerDigging implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.status = (C07PacketPlayerDigging.Action) parPacketBuffer .readEnumValue(C07PacketPlayerDigging.Action.class); @@ -82,9 +84,10 @@ public class C07PacketPlayerDigging implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.status); parPacketBuffer.writeBlockPos(this.position); parPacketBuffer.writeByte(this.facing.getIndex()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C08PacketPlayerBlockPlacement.java b/src/game/java/net/minecraft/network/play/client/C08PacketPlayerBlockPlacement.java index 36a15aa5..f47226c1 100644 --- a/src/game/java/net/minecraft/network/play/client/C08PacketPlayerBlockPlacement.java +++ b/src/game/java/net/minecraft/network/play/client/C08PacketPlayerBlockPlacement.java @@ -11,13 +11,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C08PacketPlayerBlockPlacement implements Packet { private static final BlockPos field_179726_a = new BlockPos(-1, -1, -1); @@ -93,6 +93,7 @@ public class C08PacketPlayerBlockPlacement implements Packet { private int slotId; @@ -46,6 +46,7 @@ public class C09PacketHeldItemChange implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processHeldItemChange(this); } @@ -53,6 +54,7 @@ public class C09PacketHeldItemChange implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.slotId = parPacketBuffer.readShort(); } @@ -60,7 +62,8 @@ public class C09PacketHeldItemChange implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeShort(this.slotId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0APacketAnimation.java b/src/game/java/net/minecraft/network/play/client/C0APacketAnimation.java index ac896f56..a1f371a0 100644 --- a/src/game/java/net/minecraft/network/play/client/C0APacketAnimation.java +++ b/src/game/java/net/minecraft/network/play/client/C0APacketAnimation.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,12 +27,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0APacketAnimation implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.handleAnimation(this); } @@ -40,12 +41,14 @@ public class C0APacketAnimation implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { } /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0BPacketEntityAction.java b/src/game/java/net/minecraft/network/play/client/C0BPacketEntityAction.java index 08a6ae7f..57cddf6e 100644 --- a/src/game/java/net/minecraft/network/play/client/C0BPacketEntityAction.java +++ b/src/game/java/net/minecraft/network/play/client/C0BPacketEntityAction.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0BPacketEntityAction implements Packet { public static enum Action { @@ -64,6 +64,7 @@ public class C0BPacketEntityAction implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processEntityAction(this); } @@ -71,6 +72,7 @@ public class C0BPacketEntityAction implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityID = parPacketBuffer.readVarIntFromBuffer(); this.action = (C0BPacketEntityAction.Action) parPacketBuffer.readEnumValue(C0BPacketEntityAction.Action.class); @@ -80,9 +82,10 @@ public class C0BPacketEntityAction implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityID); parPacketBuffer.writeEnumValue(this.action); parPacketBuffer.writeVarIntToBuffer(this.auxData); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0CPacketInput.java b/src/game/java/net/minecraft/network/play/client/C0CPacketInput.java index f606dd6f..b87ae76c 100644 --- a/src/game/java/net/minecraft/network/play/client/C0CPacketInput.java +++ b/src/game/java/net/minecraft/network/play/client/C0CPacketInput.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0CPacketInput implements Packet { private float strafeSpeed; @@ -64,6 +64,7 @@ public class C0CPacketInput implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processInput(this); } @@ -71,6 +72,7 @@ public class C0CPacketInput implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.strafeSpeed = parPacketBuffer.readFloat(); this.forwardSpeed = parPacketBuffer.readFloat(); @@ -82,6 +84,7 @@ public class C0CPacketInput implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeFloat(this.strafeSpeed); parPacketBuffer.writeFloat(this.forwardSpeed); @@ -96,4 +99,4 @@ public class C0CPacketInput implements Packet { parPacketBuffer.writeByte(b0); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0DPacketCloseWindow.java b/src/game/java/net/minecraft/network/play/client/C0DPacketCloseWindow.java index 49647190..a1608a33 100644 --- a/src/game/java/net/minecraft/network/play/client/C0DPacketCloseWindow.java +++ b/src/game/java/net/minecraft/network/play/client/C0DPacketCloseWindow.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0DPacketCloseWindow implements Packet { private int windowId; @@ -42,6 +42,7 @@ public class C0DPacketCloseWindow implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processCloseWindow(this); } @@ -49,6 +50,7 @@ public class C0DPacketCloseWindow implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readByte(); } @@ -56,7 +58,8 @@ public class C0DPacketCloseWindow implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0EPacketClickWindow.java b/src/game/java/net/minecraft/network/play/client/C0EPacketClickWindow.java index 91b2ad78..4432d482 100644 --- a/src/game/java/net/minecraft/network/play/client/C0EPacketClickWindow.java +++ b/src/game/java/net/minecraft/network/play/client/C0EPacketClickWindow.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0EPacketClickWindow implements Packet { private int windowId; @@ -78,6 +78,7 @@ public class C0EPacketClickWindow implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processClickWindow(this); } @@ -85,6 +86,7 @@ public class C0EPacketClickWindow implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readByte(); this.slotId = parPacketBuffer.readShort(); @@ -97,6 +99,7 @@ public class C0EPacketClickWindow implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeShort(this.slotId); @@ -105,4 +108,4 @@ public class C0EPacketClickWindow implements Packet { parPacketBuffer.writeByte(this.mode); parPacketBuffer.writeItemStackToBuffer(this.clickedItem); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C0FPacketConfirmTransaction.java b/src/game/java/net/minecraft/network/play/client/C0FPacketConfirmTransaction.java index dc4d4c5d..951e09b5 100644 --- a/src/game/java/net/minecraft/network/play/client/C0FPacketConfirmTransaction.java +++ b/src/game/java/net/minecraft/network/play/client/C0FPacketConfirmTransaction.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C0FPacketConfirmTransaction implements Packet { private int windowId; @@ -54,6 +54,7 @@ public class C0FPacketConfirmTransaction implements Packet { private int slotId; @@ -53,6 +53,7 @@ public class C10PacketCreativeInventoryAction implements Packet { private int windowId; @@ -52,6 +52,7 @@ public class C11PacketEnchantItem implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processEnchantItem(this); } @@ -59,6 +60,7 @@ public class C11PacketEnchantItem implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readByte(); this.button = parPacketBuffer.readByte(); @@ -67,8 +69,9 @@ public class C11PacketEnchantItem implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeByte(this.button); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C12PacketUpdateSign.java b/src/game/java/net/minecraft/network/play/client/C12PacketUpdateSign.java index 5aa4ac6d..62c33c4e 100644 --- a/src/game/java/net/minecraft/network/play/client/C12PacketUpdateSign.java +++ b/src/game/java/net/minecraft/network/play/client/C12PacketUpdateSign.java @@ -11,13 +11,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C12PacketUpdateSign implements Packet { private BlockPos pos; @@ -54,6 +54,7 @@ public class C12PacketUpdateSign implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processUpdateSign(this); } @@ -61,6 +62,7 @@ public class C12PacketUpdateSign implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.pos = parPacketBuffer.readBlockPos(); this.lines = new IChatComponent[4]; @@ -76,6 +78,7 @@ public class C12PacketUpdateSign implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.pos); @@ -86,4 +89,4 @@ public class C12PacketUpdateSign implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C13PacketPlayerAbilities.java b/src/game/java/net/minecraft/network/play/client/C13PacketPlayerAbilities.java index 9a2276e3..550f2571 100644 --- a/src/game/java/net/minecraft/network/play/client/C13PacketPlayerAbilities.java +++ b/src/game/java/net/minecraft/network/play/client/C13PacketPlayerAbilities.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C13PacketPlayerAbilities implements Packet { private boolean invulnerable; @@ -69,6 +69,7 @@ public class C13PacketPlayerAbilities implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processPlayerAbilities(this); } @@ -76,6 +77,7 @@ public class C13PacketPlayerAbilities implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { byte b0 = parPacketBuffer.readByte(); this.setInvulnerable((b0 & 1) > 0); @@ -113,6 +115,7 @@ public class C13PacketPlayerAbilities implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { byte b0 = 0; if (this.isInvulnerable()) { @@ -135,4 +138,4 @@ public class C13PacketPlayerAbilities implements Packet { parPacketBuffer.writeFloat(this.flySpeed); parPacketBuffer.writeFloat(this.walkSpeed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C14PacketTabComplete.java b/src/game/java/net/minecraft/network/play/client/C14PacketTabComplete.java index 38104da3..6c43bcb2 100644 --- a/src/game/java/net/minecraft/network/play/client/C14PacketTabComplete.java +++ b/src/game/java/net/minecraft/network/play/client/C14PacketTabComplete.java @@ -12,13 +12,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C14PacketTabComplete implements Packet { private String message; @@ -59,6 +59,7 @@ public class C14PacketTabComplete implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processTabComplete(this); } @@ -66,6 +67,7 @@ public class C14PacketTabComplete implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.message = parPacketBuffer.readStringFromBuffer(32767); boolean flag = parPacketBuffer.readBoolean(); @@ -78,6 +80,7 @@ public class C14PacketTabComplete implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(StringUtils.substring(this.message, 0, 32767)); boolean flag = this.targetBlock != null; @@ -87,4 +90,4 @@ public class C14PacketTabComplete implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C15PacketClientSettings.java b/src/game/java/net/minecraft/network/play/client/C15PacketClientSettings.java index c131b89c..a5608de7 100644 --- a/src/game/java/net/minecraft/network/play/client/C15PacketClientSettings.java +++ b/src/game/java/net/minecraft/network/play/client/C15PacketClientSettings.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C15PacketClientSettings implements Packet { private String lang; @@ -72,6 +72,7 @@ public class C15PacketClientSettings implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processClientSettings(this); } @@ -79,6 +80,7 @@ public class C15PacketClientSettings implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.lang = parPacketBuffer.readStringFromBuffer(7); this.view = parPacketBuffer.readByte(); @@ -90,6 +92,7 @@ public class C15PacketClientSettings implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.lang); parPacketBuffer.writeByte(this.view); @@ -97,4 +100,4 @@ public class C15PacketClientSettings implements Packet { parPacketBuffer.writeBoolean(this.enableColors); parPacketBuffer.writeByte(this.modelPartFlags); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C16PacketClientStatus.java b/src/game/java/net/minecraft/network/play/client/C16PacketClientStatus.java index 2c636d70..467bfec4 100644 --- a/src/game/java/net/minecraft/network/play/client/C16PacketClientStatus.java +++ b/src/game/java/net/minecraft/network/play/client/C16PacketClientStatus.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C16PacketClientStatus implements Packet { public static enum EnumState { @@ -50,6 +50,7 @@ public class C16PacketClientStatus implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processClientStatus(this); } @@ -57,6 +58,7 @@ public class C16PacketClientStatus implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.status = (C16PacketClientStatus.EnumState) parPacketBuffer .readEnumValue(C16PacketClientStatus.EnumState.class); @@ -65,7 +67,8 @@ public class C16PacketClientStatus implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.status); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C17PacketCustomPayload.java b/src/game/java/net/minecraft/network/play/client/C17PacketCustomPayload.java index ea3bd318..3785e52f 100644 --- a/src/game/java/net/minecraft/network/play/client/C17PacketCustomPayload.java +++ b/src/game/java/net/minecraft/network/play/client/C17PacketCustomPayload.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C17PacketCustomPayload implements Packet { private String channel; @@ -56,6 +56,7 @@ public class C17PacketCustomPayload implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.processVanilla250Packet(this); } @@ -63,6 +64,7 @@ public class C17PacketCustomPayload implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.channel = parPacketBuffer.readStringFromBuffer(20); int i = parPacketBuffer.readableBytes(); @@ -76,8 +78,9 @@ public class C17PacketCustomPayload implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.channel); parPacketBuffer.writeBytes((ByteBuf) this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C18PacketSpectate.java b/src/game/java/net/minecraft/network/play/client/C18PacketSpectate.java index 6a96dcee..ab8dc8ae 100644 --- a/src/game/java/net/minecraft/network/play/client/C18PacketSpectate.java +++ b/src/game/java/net/minecraft/network/play/client/C18PacketSpectate.java @@ -12,13 +12,13 @@ import net.minecraft.world.WorldServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.WorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C18PacketSpectate implements Packet { private EaglercraftUUID id; @@ -49,6 +49,7 @@ public class C18PacketSpectate implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayServer inethandlerplayserver) { inethandlerplayserver.handleSpectate(this); } @@ -56,6 +57,7 @@ public class C18PacketSpectate implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.id = parPacketBuffer.readUuid(); } @@ -63,7 +65,8 @@ public class C18PacketSpectate implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeUuid(this.id); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/client/C19PacketResourcePackStatus.java b/src/game/java/net/minecraft/network/play/client/C19PacketResourcePackStatus.java index 1c1a3b8e..e6cd5954 100644 --- a/src/game/java/net/minecraft/network/play/client/C19PacketResourcePackStatus.java +++ b/src/game/java/net/minecraft/network/play/client/C19PacketResourcePackStatus.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class C19PacketResourcePackStatus implements Packet { public static enum Action { @@ -53,6 +53,7 @@ public class C19PacketResourcePackStatus implements Packet { private int id; @@ -46,6 +46,7 @@ public class S00PacketKeepAlive implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleKeepAlive(this); } @@ -53,6 +54,7 @@ public class S00PacketKeepAlive implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.id = parPacketBuffer.readVarIntFromBuffer(); } @@ -60,7 +62,8 @@ public class S00PacketKeepAlive implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.id); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S01PacketJoinGame.java b/src/game/java/net/minecraft/network/play/server/S01PacketJoinGame.java index 64e51a2e..291046bd 100644 --- a/src/game/java/net/minecraft/network/play/server/S01PacketJoinGame.java +++ b/src/game/java/net/minecraft/network/play/server/S01PacketJoinGame.java @@ -12,13 +12,13 @@ import net.minecraft.world.WorldType; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.WorldType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S01PacketJoinGame implements Packet { private int entityId; @@ -92,6 +92,7 @@ public class S01PacketJoinGame implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleJoinGame(this); } @@ -99,6 +100,7 @@ public class S01PacketJoinGame implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readInt(); int i = parPacketBuffer.readUnsignedByte(); @@ -119,6 +121,7 @@ public class S01PacketJoinGame implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.entityId); int i = this.gameType.getID(); @@ -133,4 +136,4 @@ public class S01PacketJoinGame implements Packet { parPacketBuffer.writeString(this.worldType.getWorldTypeName()); parPacketBuffer.writeBoolean(this.reducedDebugInfo); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S02PacketChat.java b/src/game/java/net/minecraft/network/play/server/S02PacketChat.java index a434c04b..9b99801b 100644 --- a/src/game/java/net/minecraft/network/play/server/S02PacketChat.java +++ b/src/game/java/net/minecraft/network/play/server/S02PacketChat.java @@ -10,13 +10,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S02PacketChat implements Packet { private IChatComponent chatComponent; @@ -65,6 +65,7 @@ public class S02PacketChat implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleChat(this); } @@ -72,6 +73,7 @@ public class S02PacketChat implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.chatComponent = parPacketBuffer.readChatComponent(); this.type = parPacketBuffer.readByte(); @@ -80,8 +82,9 @@ public class S02PacketChat implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeChatComponent(this.chatComponent); parPacketBuffer.writeByte(this.type); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S03PacketTimeUpdate.java b/src/game/java/net/minecraft/network/play/server/S03PacketTimeUpdate.java index 6f48013a..4cb3f903 100644 --- a/src/game/java/net/minecraft/network/play/server/S03PacketTimeUpdate.java +++ b/src/game/java/net/minecraft/network/play/server/S03PacketTimeUpdate.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S03PacketTimeUpdate implements Packet { private long totalWorldTime; @@ -59,6 +59,7 @@ public class S03PacketTimeUpdate implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleTimeUpdate(this); } @@ -66,6 +67,7 @@ public class S03PacketTimeUpdate implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.totalWorldTime = parPacketBuffer.readLong(); this.worldTime = parPacketBuffer.readLong(); @@ -74,8 +76,9 @@ public class S03PacketTimeUpdate implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeLong(this.totalWorldTime); parPacketBuffer.writeLong(this.worldTime); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S04PacketEntityEquipment.java b/src/game/java/net/minecraft/network/play/server/S04PacketEntityEquipment.java index 83d7a4b7..d88b95a7 100644 --- a/src/game/java/net/minecraft/network/play/server/S04PacketEntityEquipment.java +++ b/src/game/java/net/minecraft/network/play/server/S04PacketEntityEquipment.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S04PacketEntityEquipment implements Packet { private int entityID; @@ -59,6 +59,7 @@ public class S04PacketEntityEquipment implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityEquipment(this); } @@ -66,6 +67,7 @@ public class S04PacketEntityEquipment implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityID = parPacketBuffer.readVarIntFromBuffer(); this.equipmentSlot = parPacketBuffer.readShort(); @@ -75,9 +77,10 @@ public class S04PacketEntityEquipment implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityID); parPacketBuffer.writeShort(this.equipmentSlot); parPacketBuffer.writeItemStackToBuffer(this.itemStack); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S05PacketSpawnPosition.java b/src/game/java/net/minecraft/network/play/server/S05PacketSpawnPosition.java index f55c426c..57ccdddd 100644 --- a/src/game/java/net/minecraft/network/play/server/S05PacketSpawnPosition.java +++ b/src/game/java/net/minecraft/network/play/server/S05PacketSpawnPosition.java @@ -10,13 +10,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S05PacketSpawnPosition implements Packet { private BlockPos spawnBlockPos; @@ -47,6 +47,7 @@ public class S05PacketSpawnPosition implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnPosition(this); } @@ -54,6 +55,7 @@ public class S05PacketSpawnPosition implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.spawnBlockPos = parPacketBuffer.readBlockPos(); } @@ -61,7 +63,8 @@ public class S05PacketSpawnPosition implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.spawnBlockPos); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S06PacketUpdateHealth.java b/src/game/java/net/minecraft/network/play/server/S06PacketUpdateHealth.java index 9daeef71..920f5bed 100644 --- a/src/game/java/net/minecraft/network/play/server/S06PacketUpdateHealth.java +++ b/src/game/java/net/minecraft/network/play/server/S06PacketUpdateHealth.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S06PacketUpdateHealth implements Packet { private float health; @@ -58,6 +58,7 @@ public class S06PacketUpdateHealth implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleUpdateHealth(this); } @@ -65,6 +66,7 @@ public class S06PacketUpdateHealth implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.health = parPacketBuffer.readFloat(); this.foodLevel = parPacketBuffer.readVarIntFromBuffer(); @@ -74,9 +76,10 @@ public class S06PacketUpdateHealth implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeFloat(this.health); parPacketBuffer.writeVarIntToBuffer(this.foodLevel); parPacketBuffer.writeFloat(this.saturationLevel); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S07PacketRespawn.java b/src/game/java/net/minecraft/network/play/server/S07PacketRespawn.java index 6b464838..91c42f3c 100644 --- a/src/game/java/net/minecraft/network/play/server/S07PacketRespawn.java +++ b/src/game/java/net/minecraft/network/play/server/S07PacketRespawn.java @@ -12,13 +12,13 @@ import net.minecraft.world.WorldType; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.WorldType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S07PacketRespawn implements Packet { private int dimensionID; @@ -68,6 +68,7 @@ public class S07PacketRespawn implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleRespawn(this); } @@ -75,6 +76,7 @@ public class S07PacketRespawn implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.dimensionID = parPacketBuffer.readInt(); this.difficulty = EnumDifficulty.getDifficultyEnum(parPacketBuffer.readUnsignedByte()); @@ -89,10 +91,11 @@ public class S07PacketRespawn implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.dimensionID); parPacketBuffer.writeByte(this.difficulty.getDifficultyId()); parPacketBuffer.writeByte(this.gameType.getID()); parPacketBuffer.writeString(this.worldType.getWorldTypeName()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S08PacketPlayerPosLook.java b/src/game/java/net/minecraft/network/play/server/S08PacketPlayerPosLook.java index 92b7d93e..1df431bb 100644 --- a/src/game/java/net/minecraft/network/play/server/S08PacketPlayerPosLook.java +++ b/src/game/java/net/minecraft/network/play/server/S08PacketPlayerPosLook.java @@ -11,13 +11,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S08PacketPlayerPosLook implements Packet { public static enum EnumFlags { @@ -122,6 +122,7 @@ public class S08PacketPlayerPosLook implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handlePlayerPosLook(this); } @@ -129,6 +130,7 @@ public class S08PacketPlayerPosLook implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.x = parPacketBuffer.readDouble(); this.y = parPacketBuffer.readDouble(); @@ -141,6 +143,7 @@ public class S08PacketPlayerPosLook implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeDouble(this.x); parPacketBuffer.writeDouble(this.y); @@ -149,4 +152,4 @@ public class S08PacketPlayerPosLook implements Packet { parPacketBuffer.writeFloat(this.pitch); parPacketBuffer.writeByte(S08PacketPlayerPosLook.EnumFlags.func_180056_a(this.field_179835_f)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S09PacketHeldItemChange.java b/src/game/java/net/minecraft/network/play/server/S09PacketHeldItemChange.java index fd4afe8c..c1465168 100644 --- a/src/game/java/net/minecraft/network/play/server/S09PacketHeldItemChange.java +++ b/src/game/java/net/minecraft/network/play/server/S09PacketHeldItemChange.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S09PacketHeldItemChange implements Packet { private int heldItemHotbarIndex; @@ -46,6 +46,7 @@ public class S09PacketHeldItemChange implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleHeldItemChange(this); } @@ -53,6 +54,7 @@ public class S09PacketHeldItemChange implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.heldItemHotbarIndex = parPacketBuffer.readByte(); } @@ -60,7 +62,8 @@ public class S09PacketHeldItemChange implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.heldItemHotbarIndex); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0APacketUseBed.java b/src/game/java/net/minecraft/network/play/server/S0APacketUseBed.java index b4ee2bf2..ccf7f4b1 100644 --- a/src/game/java/net/minecraft/network/play/server/S0APacketUseBed.java +++ b/src/game/java/net/minecraft/network/play/server/S0APacketUseBed.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0APacketUseBed implements Packet { private int playerID; @@ -55,6 +55,7 @@ public class S0APacketUseBed implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleUseBed(this); } @@ -62,6 +63,7 @@ public class S0APacketUseBed implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.playerID = parPacketBuffer.readVarIntFromBuffer(); this.bedPos = parPacketBuffer.readBlockPos(); @@ -70,8 +72,9 @@ public class S0APacketUseBed implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.playerID); parPacketBuffer.writeBlockPos(this.bedPos); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0BPacketAnimation.java b/src/game/java/net/minecraft/network/play/server/S0BPacketAnimation.java index 0a39d6b9..82668804 100644 --- a/src/game/java/net/minecraft/network/play/server/S0BPacketAnimation.java +++ b/src/game/java/net/minecraft/network/play/server/S0BPacketAnimation.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0BPacketAnimation implements Packet { private int entityId; @@ -53,6 +53,7 @@ public class S0BPacketAnimation implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleAnimation(this); } @@ -60,6 +61,7 @@ public class S0BPacketAnimation implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.type = parPacketBuffer.readUnsignedByte(); @@ -68,8 +70,9 @@ public class S0BPacketAnimation implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.type); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0CPacketSpawnPlayer.java b/src/game/java/net/minecraft/network/play/server/S0CPacketSpawnPlayer.java index 5891dac2..46d04c6e 100644 --- a/src/game/java/net/minecraft/network/play/server/S0CPacketSpawnPlayer.java +++ b/src/game/java/net/minecraft/network/play/server/S0CPacketSpawnPlayer.java @@ -16,13 +16,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0CPacketSpawnPlayer implements Packet { private int entityId; @@ -107,6 +107,7 @@ public class S0CPacketSpawnPlayer implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnPlayer(this); } @@ -114,6 +115,7 @@ public class S0CPacketSpawnPlayer implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.playerId = parPacketBuffer.readUuid(); @@ -129,6 +131,7 @@ public class S0CPacketSpawnPlayer implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeUuid(this.playerId); @@ -140,4 +143,4 @@ public class S0CPacketSpawnPlayer implements Packet { parPacketBuffer.writeShort(this.currentItem); this.watcher.writeTo(parPacketBuffer); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0DPacketCollectItem.java b/src/game/java/net/minecraft/network/play/server/S0DPacketCollectItem.java index 055e6496..a6994b3d 100644 --- a/src/game/java/net/minecraft/network/play/server/S0DPacketCollectItem.java +++ b/src/game/java/net/minecraft/network/play/server/S0DPacketCollectItem.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0DPacketCollectItem implements Packet { private int collectedItemEntityId; @@ -52,6 +52,7 @@ public class S0DPacketCollectItem implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleCollectItem(this); } @@ -59,6 +60,7 @@ public class S0DPacketCollectItem implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.collectedItemEntityId = parPacketBuffer.readVarIntFromBuffer(); this.entityId = parPacketBuffer.readVarIntFromBuffer(); @@ -67,8 +69,9 @@ public class S0DPacketCollectItem implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.collectedItemEntityId); parPacketBuffer.writeVarIntToBuffer(this.entityId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0EPacketSpawnObject.java b/src/game/java/net/minecraft/network/play/server/S0EPacketSpawnObject.java index a2105384..8b12abd4 100644 --- a/src/game/java/net/minecraft/network/play/server/S0EPacketSpawnObject.java +++ b/src/game/java/net/minecraft/network/play/server/S0EPacketSpawnObject.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0EPacketSpawnObject implements Packet { private int entityId; @@ -147,6 +147,7 @@ public class S0EPacketSpawnObject implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnObject(this); } @@ -154,6 +155,7 @@ public class S0EPacketSpawnObject implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.type = parPacketBuffer.readByte(); @@ -198,6 +200,7 @@ public class S0EPacketSpawnObject implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.type); @@ -214,4 +217,4 @@ public class S0EPacketSpawnObject implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S0FPacketSpawnMob.java b/src/game/java/net/minecraft/network/play/server/S0FPacketSpawnMob.java index 7b04c1c2..49e8a2f9 100644 --- a/src/game/java/net/minecraft/network/play/server/S0FPacketSpawnMob.java +++ b/src/game/java/net/minecraft/network/play/server/S0FPacketSpawnMob.java @@ -14,13 +14,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S0FPacketSpawnMob implements Packet { private int entityId; @@ -150,6 +150,7 @@ public class S0FPacketSpawnMob implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnMob(this); } @@ -157,6 +158,7 @@ public class S0FPacketSpawnMob implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.type = parPacketBuffer.readByte() & 255; @@ -175,6 +177,7 @@ public class S0FPacketSpawnMob implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.type & 255); @@ -189,4 +192,4 @@ public class S0FPacketSpawnMob implements Packet { parPacketBuffer.writeShort(this.velocityZ); this.field_149043_l.writeTo(parPacketBuffer); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S10PacketSpawnPainting.java b/src/game/java/net/minecraft/network/play/server/S10PacketSpawnPainting.java index a2d96026..0f18ff7a 100644 --- a/src/game/java/net/minecraft/network/play/server/S10PacketSpawnPainting.java +++ b/src/game/java/net/minecraft/network/play/server/S10PacketSpawnPainting.java @@ -12,13 +12,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S10PacketSpawnPainting implements Packet { private int entityID; @@ -67,6 +67,7 @@ public class S10PacketSpawnPainting implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnPainting(this); } @@ -74,6 +75,7 @@ public class S10PacketSpawnPainting implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityID = parPacketBuffer.readVarIntFromBuffer(); this.title = parPacketBuffer.readStringFromBuffer(EntityPainting.EnumArt.field_180001_A); @@ -84,10 +86,11 @@ public class S10PacketSpawnPainting implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityID); parPacketBuffer.writeString(this.title); parPacketBuffer.writeBlockPos(this.position); parPacketBuffer.writeByte(this.facing.getHorizontalIndex()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S11PacketSpawnExperienceOrb.java b/src/game/java/net/minecraft/network/play/server/S11PacketSpawnExperienceOrb.java index 4888cda1..3a170399 100644 --- a/src/game/java/net/minecraft/network/play/server/S11PacketSpawnExperienceOrb.java +++ b/src/game/java/net/minecraft/network/play/server/S11PacketSpawnExperienceOrb.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S11PacketSpawnExperienceOrb implements Packet { private int entityID; @@ -72,6 +72,7 @@ public class S11PacketSpawnExperienceOrb implements Packet { private int entityID; @@ -94,6 +94,7 @@ public class S12PacketEntityVelocity implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityVelocity(this); } @@ -101,6 +102,7 @@ public class S12PacketEntityVelocity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityID = parPacketBuffer.readVarIntFromBuffer(); this.motionX = parPacketBuffer.readShort(); @@ -111,10 +113,11 @@ public class S12PacketEntityVelocity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityID); parPacketBuffer.writeShort(this.motionX); parPacketBuffer.writeShort(this.motionY); parPacketBuffer.writeShort(this.motionZ); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S13PacketDestroyEntities.java b/src/game/java/net/minecraft/network/play/server/S13PacketDestroyEntities.java index 489b9f8d..f5928685 100644 --- a/src/game/java/net/minecraft/network/play/server/S13PacketDestroyEntities.java +++ b/src/game/java/net/minecraft/network/play/server/S13PacketDestroyEntities.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S13PacketDestroyEntities implements Packet { private int[] entityIDs; @@ -46,6 +46,7 @@ public class S13PacketDestroyEntities implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleDestroyEntities(this); } @@ -53,6 +54,7 @@ public class S13PacketDestroyEntities implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityIDs = new int[parPacketBuffer.readVarIntFromBuffer()]; @@ -65,6 +67,7 @@ public class S13PacketDestroyEntities implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityIDs.length); @@ -73,4 +76,4 @@ public class S13PacketDestroyEntities implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S14PacketEntity.java b/src/game/java/net/minecraft/network/play/server/S14PacketEntity.java index 46b8ea4d..1ffbbc6f 100644 --- a/src/game/java/net/minecraft/network/play/server/S14PacketEntity.java +++ b/src/game/java/net/minecraft/network/play/server/S14PacketEntity.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S14PacketEntity implements Packet { public static class S15PacketEntityRelMove extends S14PacketEntity { @@ -47,6 +47,7 @@ public class S14PacketEntity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { super.readPacketData(parPacketBuffer); this.posX = parPacketBuffer.readByte(); @@ -58,6 +59,7 @@ public class S14PacketEntity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { super.writePacketData(parPacketBuffer); parPacketBuffer.writeByte(this.posX); @@ -83,6 +85,7 @@ public class S14PacketEntity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { super.readPacketData(parPacketBuffer); this.yaw = parPacketBuffer.readByte(); @@ -93,6 +96,7 @@ public class S14PacketEntity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { super.writePacketData(parPacketBuffer); parPacketBuffer.writeByte(this.yaw); @@ -121,6 +125,7 @@ public class S14PacketEntity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { super.readPacketData(parPacketBuffer); this.posX = parPacketBuffer.readByte(); @@ -134,6 +139,7 @@ public class S14PacketEntity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { super.writePacketData(parPacketBuffer); parPacketBuffer.writeByte(this.posX); @@ -199,6 +205,7 @@ public class S14PacketEntity implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityMovement(this); } @@ -206,10 +213,12 @@ public class S14PacketEntity implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); } + @Override public String toString() { return "Entity_" + super.toString(); } @@ -217,7 +226,8 @@ public class S14PacketEntity implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S18PacketEntityTeleport.java b/src/game/java/net/minecraft/network/play/server/S18PacketEntityTeleport.java index 0c1eb37b..b41912c9 100644 --- a/src/game/java/net/minecraft/network/play/server/S18PacketEntityTeleport.java +++ b/src/game/java/net/minecraft/network/play/server/S18PacketEntityTeleport.java @@ -11,13 +11,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S18PacketEntityTeleport implements Packet { private int entityId; @@ -95,6 +95,7 @@ public class S18PacketEntityTeleport implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityTeleport(this); } @@ -102,6 +103,7 @@ public class S18PacketEntityTeleport implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.posX = parPacketBuffer.readInt(); @@ -115,6 +117,7 @@ public class S18PacketEntityTeleport implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeInt(this.posX); @@ -124,4 +127,4 @@ public class S18PacketEntityTeleport implements Packet { parPacketBuffer.writeByte(this.pitch); parPacketBuffer.writeBoolean(this.onGround); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S19PacketEntityHeadLook.java b/src/game/java/net/minecraft/network/play/server/S19PacketEntityHeadLook.java index cbf41431..fc69c940 100644 --- a/src/game/java/net/minecraft/network/play/server/S19PacketEntityHeadLook.java +++ b/src/game/java/net/minecraft/network/play/server/S19PacketEntityHeadLook.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S19PacketEntityHeadLook implements Packet { private int entityId; @@ -54,6 +54,7 @@ public class S19PacketEntityHeadLook implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityHeadLook(this); } @@ -61,6 +62,7 @@ public class S19PacketEntityHeadLook implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.yaw = parPacketBuffer.readByte(); @@ -69,8 +71,9 @@ public class S19PacketEntityHeadLook implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.yaw); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S19PacketEntityStatus.java b/src/game/java/net/minecraft/network/play/server/S19PacketEntityStatus.java index dd25d128..6512789c 100644 --- a/src/game/java/net/minecraft/network/play/server/S19PacketEntityStatus.java +++ b/src/game/java/net/minecraft/network/play/server/S19PacketEntityStatus.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S19PacketEntityStatus implements Packet { private int entityId; @@ -54,6 +54,7 @@ public class S19PacketEntityStatus implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityStatus(this); } @@ -61,6 +62,7 @@ public class S19PacketEntityStatus implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readInt(); this.logicOpcode = parPacketBuffer.readByte(); @@ -69,8 +71,9 @@ public class S19PacketEntityStatus implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.entityId); parPacketBuffer.writeByte(this.logicOpcode); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S1BPacketEntityAttach.java b/src/game/java/net/minecraft/network/play/server/S1BPacketEntityAttach.java index 3709715b..6f1cfa5c 100644 --- a/src/game/java/net/minecraft/network/play/server/S1BPacketEntityAttach.java +++ b/src/game/java/net/minecraft/network/play/server/S1BPacketEntityAttach.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S1BPacketEntityAttach implements Packet { private int leash; @@ -59,6 +59,7 @@ public class S1BPacketEntityAttach implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityAttach(this); } @@ -66,6 +67,7 @@ public class S1BPacketEntityAttach implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readInt(); this.vehicleEntityId = parPacketBuffer.readInt(); @@ -75,9 +77,10 @@ public class S1BPacketEntityAttach implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.entityId); parPacketBuffer.writeInt(this.vehicleEntityId); parPacketBuffer.writeByte(this.leash); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S1CPacketEntityMetadata.java b/src/game/java/net/minecraft/network/play/server/S1CPacketEntityMetadata.java index 68e5ab70..e090b299 100644 --- a/src/game/java/net/minecraft/network/play/server/S1CPacketEntityMetadata.java +++ b/src/game/java/net/minecraft/network/play/server/S1CPacketEntityMetadata.java @@ -11,13 +11,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S1CPacketEntityMetadata implements Packet { private int entityId; @@ -59,6 +59,7 @@ public class S1CPacketEntityMetadata implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityMetadata(this); } @@ -66,6 +67,7 @@ public class S1CPacketEntityMetadata implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.field_149378_b = DataWatcher.readWatchedListFromPacketBuffer(parPacketBuffer); @@ -74,8 +76,9 @@ public class S1CPacketEntityMetadata implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); DataWatcher.writeWatchedListToPacketBuffer(this.field_149378_b, parPacketBuffer); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S1DPacketEntityEffect.java b/src/game/java/net/minecraft/network/play/server/S1DPacketEntityEffect.java index 496370ef..cd5ab1a8 100644 --- a/src/game/java/net/minecraft/network/play/server/S1DPacketEntityEffect.java +++ b/src/game/java/net/minecraft/network/play/server/S1DPacketEntityEffect.java @@ -10,13 +10,13 @@ import net.minecraft.potion.PotionEffect; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.potion.PotionEffect; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S1DPacketEntityEffect implements Packet { private int entityId; @@ -80,6 +80,7 @@ public class S1DPacketEntityEffect implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityEffect(this); } @@ -87,6 +88,7 @@ public class S1DPacketEntityEffect implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.effectId = parPacketBuffer.readByte(); @@ -98,6 +100,7 @@ public class S1DPacketEntityEffect implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.effectId); @@ -105,4 +108,4 @@ public class S1DPacketEntityEffect implements Packet { parPacketBuffer.writeVarIntToBuffer(this.duration); parPacketBuffer.writeByte(this.hideParticles); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S1EPacketRemoveEntityEffect.java b/src/game/java/net/minecraft/network/play/server/S1EPacketRemoveEntityEffect.java index c11d8aeb..4d830a30 100644 --- a/src/game/java/net/minecraft/network/play/server/S1EPacketRemoveEntityEffect.java +++ b/src/game/java/net/minecraft/network/play/server/S1EPacketRemoveEntityEffect.java @@ -10,13 +10,13 @@ import net.minecraft.potion.PotionEffect; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.potion.PotionEffect; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S1EPacketRemoveEntityEffect implements Packet { private int entityId; @@ -53,6 +53,7 @@ public class S1EPacketRemoveEntityEffect implements Packet { private float field_149401_a; @@ -58,6 +58,7 @@ public class S1FPacketSetExperience implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSetExperience(this); } @@ -65,6 +66,7 @@ public class S1FPacketSetExperience implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.field_149401_a = parPacketBuffer.readFloat(); this.level = parPacketBuffer.readVarIntFromBuffer(); @@ -74,9 +76,10 @@ public class S1FPacketSetExperience implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeFloat(this.field_149401_a); parPacketBuffer.writeVarIntToBuffer(this.level); parPacketBuffer.writeVarIntToBuffer(this.totalExperience); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S20PacketEntityProperties.java b/src/game/java/net/minecraft/network/play/server/S20PacketEntityProperties.java index f3c25ed0..a2c948eb 100644 --- a/src/game/java/net/minecraft/network/play/server/S20PacketEntityProperties.java +++ b/src/game/java/net/minecraft/network/play/server/S20PacketEntityProperties.java @@ -17,13 +17,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S20PacketEntityProperties implements Packet { public class Snapshot { @@ -91,6 +91,7 @@ public class S20PacketEntityProperties implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityProperties(this); } @@ -98,6 +99,7 @@ public class S20PacketEntityProperties implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); int i = parPacketBuffer.readInt(); @@ -122,6 +124,7 @@ public class S20PacketEntityProperties implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeInt(this.field_149444_b.size()); @@ -139,4 +142,4 @@ public class S20PacketEntityProperties implements Packet } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S21PacketChunkData.java b/src/game/java/net/minecraft/network/play/server/S21PacketChunkData.java index 8d3e40d4..3a8859d8 100644 --- a/src/game/java/net/minecraft/network/play/server/S21PacketChunkData.java +++ b/src/game/java/net/minecraft/network/play/server/S21PacketChunkData.java @@ -14,13 +14,13 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S21PacketChunkData implements Packet { public static class Extracted { @@ -140,6 +140,7 @@ public class S21PacketChunkData implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleChunkData(this); } @@ -147,6 +148,7 @@ public class S21PacketChunkData implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.chunkX = parPacketBuffer.readInt(); this.chunkZ = parPacketBuffer.readInt(); @@ -159,6 +161,7 @@ public class S21PacketChunkData implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.chunkX); parPacketBuffer.writeInt(this.chunkZ); @@ -166,4 +169,4 @@ public class S21PacketChunkData implements Packet { parPacketBuffer.writeShort((short) (this.extractedData.dataSize & '\uffff')); parPacketBuffer.writeByteArray(this.extractedData.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S22PacketMultiBlockChange.java b/src/game/java/net/minecraft/network/play/server/S22PacketMultiBlockChange.java index 37f4e48a..5dad21fa 100644 --- a/src/game/java/net/minecraft/network/play/server/S22PacketMultiBlockChange.java +++ b/src/game/java/net/minecraft/network/play/server/S22PacketMultiBlockChange.java @@ -14,13 +14,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S22PacketMultiBlockChange implements Packet { public class BlockUpdateData { @@ -87,6 +87,7 @@ public class S22PacketMultiBlockChange implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleMultiBlockChange(this); } @@ -94,6 +95,7 @@ public class S22PacketMultiBlockChange implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.chunkPosCoord = new ChunkCoordIntPair(parPacketBuffer.readInt(), parPacketBuffer.readInt()); this.changedBlocks = new S22PacketMultiBlockChange.BlockUpdateData[parPacketBuffer.readVarIntFromBuffer()]; @@ -108,6 +110,7 @@ public class S22PacketMultiBlockChange implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.chunkPosCoord.chunkXPos); parPacketBuffer.writeInt(this.chunkPosCoord.chunkZPos); @@ -121,4 +124,4 @@ public class S22PacketMultiBlockChange implements Packet } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S23PacketBlockChange.java b/src/game/java/net/minecraft/network/play/server/S23PacketBlockChange.java index de25c44d..293b98d6 100644 --- a/src/game/java/net/minecraft/network/play/server/S23PacketBlockChange.java +++ b/src/game/java/net/minecraft/network/play/server/S23PacketBlockChange.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S23PacketBlockChange implements Packet { private BlockPos blockPosition; @@ -56,6 +56,7 @@ public class S23PacketBlockChange implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleBlockChange(this); } @@ -63,6 +64,7 @@ public class S23PacketBlockChange implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.blockPosition = parPacketBuffer.readBlockPos(); this.blockState = (IBlockState) Block.BLOCK_STATE_IDS.getByValue(parPacketBuffer.readVarIntFromBuffer()); @@ -71,8 +73,9 @@ public class S23PacketBlockChange implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.blockPosition); parPacketBuffer.writeVarIntToBuffer(Block.BLOCK_STATE_IDS.get(this.blockState)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S24PacketBlockAction.java b/src/game/java/net/minecraft/network/play/server/S24PacketBlockAction.java index 36d11e1b..d8635a8e 100644 --- a/src/game/java/net/minecraft/network/play/server/S24PacketBlockAction.java +++ b/src/game/java/net/minecraft/network/play/server/S24PacketBlockAction.java @@ -7,18 +7,17 @@ import net.minecraft.network.Packet; import net.minecraft.network.PacketBuffer; import net.minecraft.network.play.INetHandlerPlayClient; import net.minecraft.util.BlockPos; -import net.starlikeclient.StarlikeSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +29,7 @@ import net.starlikeclient.StarlikeSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S24PacketBlockAction implements Packet { private BlockPos blockPosition; @@ -73,6 +72,7 @@ public class S24PacketBlockAction implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleBlockAction(this); } @@ -80,20 +80,22 @@ public class S24PacketBlockAction implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.blockPosition = parPacketBuffer.readBlockPos(); this.instrument = parPacketBuffer.readUnsignedByte(); this.pitch = parPacketBuffer.readUnsignedByte(); - this.block = Block.getBlockById(parPacketBuffer.readVarIntFromBuffer() & (StarlikeSettings.blockIdLimit - 1)); + this.block = Block.getBlockById(parPacketBuffer.readVarIntFromBuffer() & 4095); } /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.blockPosition); parPacketBuffer.writeByte(this.instrument); parPacketBuffer.writeByte(this.pitch); - parPacketBuffer.writeVarIntToBuffer(Block.getIdFromBlock(this.block) & (StarlikeSettings.blockIdLimit - 1)); + parPacketBuffer.writeVarIntToBuffer(Block.getIdFromBlock(this.block) & 4095); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S25PacketBlockBreakAnim.java b/src/game/java/net/minecraft/network/play/server/S25PacketBlockBreakAnim.java index 4c80b6c0..f392246e 100644 --- a/src/game/java/net/minecraft/network/play/server/S25PacketBlockBreakAnim.java +++ b/src/game/java/net/minecraft/network/play/server/S25PacketBlockBreakAnim.java @@ -10,13 +10,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S25PacketBlockBreakAnim implements Packet { private int breakerId; @@ -59,6 +59,7 @@ public class S25PacketBlockBreakAnim implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleBlockBreakAnim(this); } @@ -66,6 +67,7 @@ public class S25PacketBlockBreakAnim implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.breakerId = parPacketBuffer.readVarIntFromBuffer(); this.position = parPacketBuffer.readBlockPos(); @@ -75,9 +77,10 @@ public class S25PacketBlockBreakAnim implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.breakerId); parPacketBuffer.writeBlockPos(this.position); parPacketBuffer.writeByte(this.progress); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S26PacketMapChunkBulk.java b/src/game/java/net/minecraft/network/play/server/S26PacketMapChunkBulk.java index beb8d8c2..8fa3c6f8 100644 --- a/src/game/java/net/minecraft/network/play/server/S26PacketMapChunkBulk.java +++ b/src/game/java/net/minecraft/network/play/server/S26PacketMapChunkBulk.java @@ -11,13 +11,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,103 +29,106 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S26PacketMapChunkBulk implements Packet { - private int[] xPositions; - private int[] zPositions; - private S21PacketChunkData.Extracted[] chunksData; + private int[] chunkXPositions; + private int[] chunkZPositions; + private S21PacketChunkData.Extracted[] chunkDataArray; private boolean isOverworld; public S26PacketMapChunkBulk() { } + /** + * Constructs a new bulk chunk packet. + * + * @param chunks The list of chunks to include in this packet. + */ public S26PacketMapChunkBulk(List chunks) { - int i = chunks.size(); - this.xPositions = new int[i]; - this.zPositions = new int[i]; - this.chunksData = new S21PacketChunkData.Extracted[i]; - this.isOverworld = !((Chunk) chunks.get(0)).getWorld().provider.getHasNoSky(); + int chunkCount = chunks.size(); + this.chunkXPositions = new int[chunkCount]; + this.chunkZPositions = new int[chunkCount]; + this.chunkDataArray = new S21PacketChunkData.Extracted[chunkCount]; + this.isOverworld = !chunks.get(0).getWorld().provider.getHasNoSky(); - for (int j = 0; j < i; ++j) { - Chunk chunk = (Chunk) chunks.get(j); - S21PacketChunkData.Extracted s21packetchunkdata$extracted = S21PacketChunkData.func_179756_a(chunk, true, - this.isOverworld, '\uffff'); - this.xPositions[j] = chunk.xPosition; - this.zPositions[j] = chunk.zPosition; - this.chunksData[j] = s21packetchunkdata$extracted; + for (int i = 0; i < chunkCount; ++i) { + Chunk chunk = chunks.get(i); + S21PacketChunkData.Extracted extractedData = S21PacketChunkData.func_179756_a(chunk, true, this.isOverworld, + '\uffff'); + this.chunkXPositions[i] = chunk.xPosition; + this.chunkZPositions[i] = chunk.zPosition; + this.chunkDataArray[i] = extractedData; } - } - public byte[] getChunkBytes(int parInt1) { - return this.chunksData[parInt1].data; + /** + * Gets the raw byte data of a specific chunk. + * + * @param index The index of the chunk. + * @return The byte array representing the chunk data. + */ + public byte[] getChunkBytes(int index) { + return this.chunkDataArray[index].data; } public int getChunkCount() { - return this.xPositions.length; + return this.chunkXPositions.length; } - public int getChunkSize(int parInt1) { - return this.chunksData[parInt1].dataSize; + public int getChunkSize(int index) { + return this.chunkDataArray[index].dataSize; } - public int getChunkX(int parInt1) { - return this.xPositions[parInt1]; + public int getChunkX(int index) { + return this.chunkXPositions[index]; } - public int getChunkZ(int parInt1) { - return this.zPositions[parInt1]; + public int getChunkZ(int index) { + return this.chunkZPositions[index]; } - /** - * + Passes this Packet on to the NetHandler for processing. - */ - public void processPacket(INetHandlerPlayClient inethandlerplayclient) { - inethandlerplayclient.handleMapChunkBulk(this); + @Override + public void processPacket(INetHandlerPlayClient handler) { + handler.handleMapChunkBulk(this); } - /** - * + Reads the raw packet data from the data stream. - */ - public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { - this.isOverworld = parPacketBuffer.readBoolean(); - int i = parPacketBuffer.readVarIntFromBuffer(); - this.xPositions = new int[i]; - this.zPositions = new int[i]; - this.chunksData = new S21PacketChunkData.Extracted[i]; + @Override + public void readPacketData(PacketBuffer buffer) throws IOException { + this.isOverworld = buffer.readBoolean(); + int chunkCount = buffer.readVarIntFromBuffer(); - for (int j = 0; j < i; ++j) { - this.xPositions[j] = parPacketBuffer.readInt(); - this.zPositions[j] = parPacketBuffer.readInt(); - this.chunksData[j] = new S21PacketChunkData.Extracted(); - this.chunksData[j].dataSize = parPacketBuffer.readShort() & '\uffff'; - this.chunksData[j].data = new byte[S21PacketChunkData - .func_180737_a(Integer.bitCount(this.chunksData[j].dataSize), this.isOverworld, true)]; + this.chunkXPositions = new int[chunkCount]; + this.chunkZPositions = new int[chunkCount]; + this.chunkDataArray = new S21PacketChunkData.Extracted[chunkCount]; + + for (int i = 0; i < chunkCount; ++i) { + this.chunkXPositions[i] = buffer.readInt(); + this.chunkZPositions[i] = buffer.readInt(); + this.chunkDataArray[i] = new S21PacketChunkData.Extracted(); + this.chunkDataArray[i].dataSize = buffer.readShort() & 0xFFFF; + this.chunkDataArray[i].data = new byte[S21PacketChunkData + .func_180737_a(Integer.bitCount(this.chunkDataArray[i].dataSize), this.isOverworld, true)]; } - for (int k = 0; k < i; ++k) { - parPacketBuffer.readBytes(this.chunksData[k].data); + for (int i = 0; i < chunkCount; ++i) { + buffer.readBytes(this.chunkDataArray[i].data); } - } - /** - * + Writes the raw packet data to the data stream. - */ - public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { - parPacketBuffer.writeBoolean(this.isOverworld); - parPacketBuffer.writeVarIntToBuffer(this.chunksData.length); + @Override + public void writePacketData(PacketBuffer buffer) throws IOException { + buffer.writeBoolean(this.isOverworld); + buffer.writeVarIntToBuffer(this.chunkDataArray.length); - for (int i = 0; i < this.xPositions.length; ++i) { - parPacketBuffer.writeInt(this.xPositions[i]); - parPacketBuffer.writeInt(this.zPositions[i]); - parPacketBuffer.writeShort((short) (this.chunksData[i].dataSize & '\uffff')); + for (int i = 0; i < this.chunkXPositions.length; ++i) { + buffer.writeInt(this.chunkXPositions[i]); + buffer.writeInt(this.chunkZPositions[i]); + buffer.writeShort((short) (this.chunkDataArray[i].dataSize & 0xFFFF)); } - for (int j = 0; j < this.xPositions.length; ++j) { - parPacketBuffer.writeBytes(this.chunksData[j].data); + for (int i = 0; i < this.chunkXPositions.length; ++i) { + buffer.writeBytes(this.chunkDataArray[i].data); } - } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S27PacketExplosion.java b/src/game/java/net/minecraft/network/play/server/S27PacketExplosion.java index 9245f725..3d40b112 100644 --- a/src/game/java/net/minecraft/network/play/server/S27PacketExplosion.java +++ b/src/game/java/net/minecraft/network/play/server/S27PacketExplosion.java @@ -1,6 +1,7 @@ package net.minecraft.network.play.server; import java.io.IOException; +import java.util.Collections; import java.util.List; import com.google.common.collect.Lists; @@ -14,13 +15,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,14 +33,13 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S27PacketExplosion implements Packet { - private double posX; - private double posY; - private double posZ; + private double posX, posY, posZ; private float strength; private List affectedBlockPositions; + private float motionX, motionY, motionZ; private float field_149152_f; private float field_149153_g; private float field_149159_h; @@ -47,19 +47,18 @@ public class S27PacketExplosion implements Packet { public S27PacketExplosion() { } - public S27PacketExplosion(double parDouble1, double y, double z, float strengthIn, List affectedBlocksIn, - Vec3 parVec3_1) { - this.posX = parDouble1; + public S27PacketExplosion(double x, double y, double z, float strengthIn, List affectedBlocksIn, + Vec3 motion) { + this.posX = x; this.posY = y; this.posZ = z; this.strength = strengthIn; - this.affectedBlockPositions = Lists.newArrayList(affectedBlocksIn); - if (parVec3_1 != null) { - this.field_149152_f = (float) parVec3_1.xCoord; - this.field_149153_g = (float) parVec3_1.yCoord; - this.field_149159_h = (float) parVec3_1.zCoord; + this.affectedBlockPositions = Collections.unmodifiableList(Lists.newArrayList(affectedBlocksIn)); + if (motion != null) { + this.motionX = (float) motion.xCoord; + this.motionY = (float) motion.yCoord; + this.motionZ = (float) motion.zCoord; } - } public float func_149144_d() { @@ -94,64 +93,53 @@ public class S27PacketExplosion implements Packet { return this.posZ; } - /** - * + Passes this Packet on to the NetHandler for processing. - */ - public void processPacket(INetHandlerPlayClient inethandlerplayclient) { - inethandlerplayclient.handleExplosion(this); + @Override + public void processPacket(INetHandlerPlayClient handler) { + handler.handleExplosion(this); } - /** - * + Reads the raw packet data from the data stream. - */ - public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { - this.posX = (double) parPacketBuffer.readFloat(); - this.posY = (double) parPacketBuffer.readFloat(); - this.posZ = (double) parPacketBuffer.readFloat(); - this.strength = parPacketBuffer.readFloat(); - int i = parPacketBuffer.readInt(); - this.affectedBlockPositions = Lists.newArrayListWithCapacity(i); - int j = (int) this.posX; - int k = (int) this.posY; - int l = (int) this.posZ; + @Override + public void readPacketData(PacketBuffer buf) throws IOException { + this.posX = buf.readFloat(); + this.posY = buf.readFloat(); + this.posZ = buf.readFloat(); + this.strength = buf.readFloat(); - for (int i1 = 0; i1 < i; ++i1) { - int j1 = parPacketBuffer.readByte() + j; - int k1 = parPacketBuffer.readByte() + k; - int l1 = parPacketBuffer.readByte() + l; - this.affectedBlockPositions.add(new BlockPos(j1, k1, l1)); + int affectedBlocks = buf.readInt(); + if (affectedBlocks < 0 || affectedBlocks > 4096) { + throw new IOException("Too many affected blocks: " + affectedBlocks); } - this.field_149152_f = parPacketBuffer.readFloat(); - this.field_149153_g = parPacketBuffer.readFloat(); - this.field_149159_h = parPacketBuffer.readFloat(); - } - - /** - * + Writes the raw packet data to the data stream. - */ - public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { - parPacketBuffer.writeFloat((float) this.posX); - parPacketBuffer.writeFloat((float) this.posY); - parPacketBuffer.writeFloat((float) this.posZ); - parPacketBuffer.writeFloat(this.strength); - parPacketBuffer.writeInt(this.affectedBlockPositions.size()); - int i = (int) this.posX; - int j = (int) this.posY; - int k = (int) this.posZ; - - for (int m = 0, n = this.affectedBlockPositions.size(); m < n; ++m) { - BlockPos blockpos = this.affectedBlockPositions.get(m); - int l = blockpos.getX() - i; - int i1 = blockpos.getY() - j; - int j1 = blockpos.getZ() - k; - parPacketBuffer.writeByte(l); - parPacketBuffer.writeByte(i1); - parPacketBuffer.writeByte(j1); + this.affectedBlockPositions = Lists.newArrayListWithCapacity(affectedBlocks); + for (int i = 0; i < affectedBlocks; i++) { + int x = buf.readByte() + (int) posX; + int y = buf.readByte() + (int) posY; + int z = buf.readByte() + (int) posZ; + this.affectedBlockPositions.add(new BlockPos(x, y, z)); } - parPacketBuffer.writeFloat(this.field_149152_f); - parPacketBuffer.writeFloat(this.field_149153_g); - parPacketBuffer.writeFloat(this.field_149159_h); + this.motionX = buf.readFloat(); + this.motionY = buf.readFloat(); + this.motionZ = buf.readFloat(); } -} \ No newline at end of file + + @Override + public void writePacketData(PacketBuffer buf) throws IOException { + buf.writeFloat((float) this.posX); + buf.writeFloat((float) this.posY); + buf.writeFloat((float) this.posZ); + buf.writeFloat(this.strength); + + buf.writeInt(this.affectedBlockPositions.size()); + for (BlockPos blockPos : this.affectedBlockPositions) { + buf.writeByte(blockPos.getX() - (int) posX); + buf.writeByte(blockPos.getY() - (int) posY); + buf.writeByte(blockPos.getZ() - (int) posZ); + } + + buf.writeFloat(this.motionX); + buf.writeFloat(this.motionY); + buf.writeFloat(this.motionZ); + } + +} diff --git a/src/game/java/net/minecraft/network/play/server/S28PacketEffect.java b/src/game/java/net/minecraft/network/play/server/S28PacketEffect.java index 3575649c..d532fc00 100644 --- a/src/game/java/net/minecraft/network/play/server/S28PacketEffect.java +++ b/src/game/java/net/minecraft/network/play/server/S28PacketEffect.java @@ -10,13 +10,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S28PacketEffect implements Packet { private int soundType; @@ -65,6 +65,7 @@ public class S28PacketEffect implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEffect(this); } @@ -72,6 +73,7 @@ public class S28PacketEffect implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.soundType = parPacketBuffer.readInt(); this.soundPos = parPacketBuffer.readBlockPos(); @@ -82,10 +84,11 @@ public class S28PacketEffect implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.soundType); parPacketBuffer.writeBlockPos(this.soundPos); parPacketBuffer.writeInt(this.soundData); parPacketBuffer.writeBoolean(this.serverWide); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S29PacketSoundEffect.java b/src/game/java/net/minecraft/network/play/server/S29PacketSoundEffect.java index 75f0d945..6b28bd81 100644 --- a/src/game/java/net/minecraft/network/play/server/S29PacketSoundEffect.java +++ b/src/game/java/net/minecraft/network/play/server/S29PacketSoundEffect.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S29PacketSoundEffect implements Packet { private String soundName; @@ -82,6 +82,7 @@ public class S29PacketSoundEffect implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSoundEffect(this); } @@ -89,6 +90,7 @@ public class S29PacketSoundEffect implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.soundName = parPacketBuffer.readStringFromBuffer(256); this.posX = parPacketBuffer.readInt(); @@ -101,6 +103,7 @@ public class S29PacketSoundEffect implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.soundName); parPacketBuffer.writeInt(this.posX); @@ -109,4 +112,4 @@ public class S29PacketSoundEffect implements Packet { parPacketBuffer.writeFloat(this.soundVolume); parPacketBuffer.writeByte(this.soundPitch); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2APacketParticles.java b/src/game/java/net/minecraft/network/play/server/S2APacketParticles.java index 9ef070c9..60f56145 100644 --- a/src/game/java/net/minecraft/network/play/server/S2APacketParticles.java +++ b/src/game/java/net/minecraft/network/play/server/S2APacketParticles.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumParticleTypes; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.EnumParticleTypes; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2APacketParticles implements Packet { private EnumParticleTypes particleType; @@ -140,6 +140,7 @@ public class S2APacketParticles implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleParticles(this); } @@ -147,6 +148,7 @@ public class S2APacketParticles implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.particleType = EnumParticleTypes.getParticleFromId(parPacketBuffer.readInt()); if (this.particleType == null) { @@ -174,6 +176,7 @@ public class S2APacketParticles implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeInt(this.particleType.getParticleID()); parPacketBuffer.writeBoolean(this.longDistance); @@ -192,4 +195,4 @@ public class S2APacketParticles implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2BPacketChangeGameState.java b/src/game/java/net/minecraft/network/play/server/S2BPacketChangeGameState.java index 276288cf..a4bacb0b 100644 --- a/src/game/java/net/minecraft/network/play/server/S2BPacketChangeGameState.java +++ b/src/game/java/net/minecraft/network/play/server/S2BPacketChangeGameState.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2BPacketChangeGameState implements Packet { public static final String[] MESSAGE_NAMES = new String[] { "tile.bed.notValid" }; @@ -53,6 +53,7 @@ public class S2BPacketChangeGameState implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleChangeGameState(this); } @@ -60,6 +61,7 @@ public class S2BPacketChangeGameState implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.state = parPacketBuffer.readUnsignedByte(); this.field_149141_c = parPacketBuffer.readFloat(); @@ -68,8 +70,9 @@ public class S2BPacketChangeGameState implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.state); parPacketBuffer.writeFloat(this.field_149141_c); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2CPacketSpawnGlobalEntity.java b/src/game/java/net/minecraft/network/play/server/S2CPacketSpawnGlobalEntity.java index a6b38c3f..a41d4054 100644 --- a/src/game/java/net/minecraft/network/play/server/S2CPacketSpawnGlobalEntity.java +++ b/src/game/java/net/minecraft/network/play/server/S2CPacketSpawnGlobalEntity.java @@ -12,13 +12,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2CPacketSpawnGlobalEntity implements Packet { private int entityId; @@ -76,6 +76,7 @@ public class S2CPacketSpawnGlobalEntity implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSpawnGlobalEntity(this); } @@ -83,6 +84,7 @@ public class S2CPacketSpawnGlobalEntity implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.type = parPacketBuffer.readByte(); @@ -94,6 +96,7 @@ public class S2CPacketSpawnGlobalEntity implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeByte(this.type); @@ -101,4 +104,4 @@ public class S2CPacketSpawnGlobalEntity implements Packet parPacketBuffer.writeInt(this.y); parPacketBuffer.writeInt(this.z); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2DPacketOpenWindow.java b/src/game/java/net/minecraft/network/play/server/S2DPacketOpenWindow.java index 5f265b3b..80032d76 100644 --- a/src/game/java/net/minecraft/network/play/server/S2DPacketOpenWindow.java +++ b/src/game/java/net/minecraft/network/play/server/S2DPacketOpenWindow.java @@ -10,13 +10,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2DPacketOpenWindow implements Packet { private int windowId; @@ -84,6 +84,7 @@ public class S2DPacketOpenWindow implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleOpenWindow(this); } @@ -91,6 +92,7 @@ public class S2DPacketOpenWindow implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readUnsignedByte(); this.inventoryType = parPacketBuffer.readStringFromBuffer(32); @@ -105,6 +107,7 @@ public class S2DPacketOpenWindow implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeString(this.inventoryType); @@ -115,4 +118,4 @@ public class S2DPacketOpenWindow implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2EPacketCloseWindow.java b/src/game/java/net/minecraft/network/play/server/S2EPacketCloseWindow.java index a58a5d56..3481325b 100644 --- a/src/game/java/net/minecraft/network/play/server/S2EPacketCloseWindow.java +++ b/src/game/java/net/minecraft/network/play/server/S2EPacketCloseWindow.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2EPacketCloseWindow implements Packet { private int windowId; @@ -42,6 +42,7 @@ public class S2EPacketCloseWindow implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleCloseWindow(this); } @@ -49,6 +50,7 @@ public class S2EPacketCloseWindow implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readUnsignedByte(); } @@ -56,7 +58,8 @@ public class S2EPacketCloseWindow implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S2FPacketSetSlot.java b/src/game/java/net/minecraft/network/play/server/S2FPacketSetSlot.java index 6f9a9c50..820a6750 100644 --- a/src/game/java/net/minecraft/network/play/server/S2FPacketSetSlot.java +++ b/src/game/java/net/minecraft/network/play/server/S2FPacketSetSlot.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S2FPacketSetSlot implements Packet { private int windowId; @@ -59,6 +59,7 @@ public class S2FPacketSetSlot implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSetSlot(this); } @@ -66,6 +67,7 @@ public class S2FPacketSetSlot implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readByte(); this.slot = parPacketBuffer.readShort(); @@ -75,9 +77,10 @@ public class S2FPacketSetSlot implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeShort(this.slot); parPacketBuffer.writeItemStackToBuffer(this.item); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S30PacketWindowItems.java b/src/game/java/net/minecraft/network/play/server/S30PacketWindowItems.java index 3e14d968..b17d02fd 100644 --- a/src/game/java/net/minecraft/network/play/server/S30PacketWindowItems.java +++ b/src/game/java/net/minecraft/network/play/server/S30PacketWindowItems.java @@ -11,13 +11,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S30PacketWindowItems implements Packet { private int windowId; @@ -60,6 +60,7 @@ public class S30PacketWindowItems implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleWindowItems(this); } @@ -67,6 +68,7 @@ public class S30PacketWindowItems implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readUnsignedByte(); short short1 = parPacketBuffer.readShort(); @@ -81,6 +83,7 @@ public class S30PacketWindowItems implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeShort(this.itemStacks.length); @@ -90,4 +93,4 @@ public class S30PacketWindowItems implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S31PacketWindowProperty.java b/src/game/java/net/minecraft/network/play/server/S31PacketWindowProperty.java index 1901107b..d94e2a91 100644 --- a/src/game/java/net/minecraft/network/play/server/S31PacketWindowProperty.java +++ b/src/game/java/net/minecraft/network/play/server/S31PacketWindowProperty.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S31PacketWindowProperty implements Packet { private int windowId; @@ -58,6 +58,7 @@ public class S31PacketWindowProperty implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleWindowProperty(this); } @@ -65,6 +66,7 @@ public class S31PacketWindowProperty implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readUnsignedByte(); this.varIndex = parPacketBuffer.readShort(); @@ -74,9 +76,10 @@ public class S31PacketWindowProperty implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.windowId); parPacketBuffer.writeShort(this.varIndex); parPacketBuffer.writeShort(this.varValue); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S32PacketConfirmTransaction.java b/src/game/java/net/minecraft/network/play/server/S32PacketConfirmTransaction.java index 8da9f9b0..91b7464f 100644 --- a/src/game/java/net/minecraft/network/play/server/S32PacketConfirmTransaction.java +++ b/src/game/java/net/minecraft/network/play/server/S32PacketConfirmTransaction.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S32PacketConfirmTransaction implements Packet { private int windowId; @@ -58,6 +58,7 @@ public class S32PacketConfirmTransaction implements Packet { private World world; @@ -57,6 +57,7 @@ public class S33PacketUpdateSign implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleUpdateSign(this); } @@ -64,6 +65,7 @@ public class S33PacketUpdateSign implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.blockPos = parPacketBuffer.readBlockPos(); this.lines = new IChatComponent[4]; @@ -77,6 +79,7 @@ public class S33PacketUpdateSign implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.blockPos); @@ -85,4 +88,4 @@ public class S33PacketUpdateSign implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S34PacketMaps.java b/src/game/java/net/minecraft/network/play/server/S34PacketMaps.java index dc4d6afb..1ed6d4e4 100644 --- a/src/game/java/net/minecraft/network/play/server/S34PacketMaps.java +++ b/src/game/java/net/minecraft/network/play/server/S34PacketMaps.java @@ -12,13 +12,13 @@ import net.minecraft.world.storage.MapData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.storage.MapData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S34PacketMaps implements Packet { private int mapId; @@ -71,6 +71,7 @@ public class S34PacketMaps implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleMaps(this); } @@ -78,6 +79,7 @@ public class S34PacketMaps implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.mapId = parPacketBuffer.readVarIntFromBuffer(); this.mapScale = parPacketBuffer.readByte(); @@ -122,6 +124,7 @@ public class S34PacketMaps implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.mapId); parPacketBuffer.writeByte(this.mapScale); @@ -143,4 +146,4 @@ public class S34PacketMaps implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S35PacketUpdateTileEntity.java b/src/game/java/net/minecraft/network/play/server/S35PacketUpdateTileEntity.java index a3d66f9b..587c27d6 100644 --- a/src/game/java/net/minecraft/network/play/server/S35PacketUpdateTileEntity.java +++ b/src/game/java/net/minecraft/network/play/server/S35PacketUpdateTileEntity.java @@ -11,13 +11,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S35PacketUpdateTileEntity implements Packet { private BlockPos blockPos; @@ -60,6 +60,7 @@ public class S35PacketUpdateTileEntity implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleUpdateTileEntity(this); } @@ -67,6 +68,7 @@ public class S35PacketUpdateTileEntity implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.blockPos = parPacketBuffer.readBlockPos(); this.metadata = parPacketBuffer.readUnsignedByte(); @@ -76,9 +78,10 @@ public class S35PacketUpdateTileEntity implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.blockPos); parPacketBuffer.writeByte((byte) this.metadata); parPacketBuffer.writeNBTTagCompoundToBuffer(this.nbt); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S36PacketSignEditorOpen.java b/src/game/java/net/minecraft/network/play/server/S36PacketSignEditorOpen.java index 6fe87502..24f6d605 100644 --- a/src/game/java/net/minecraft/network/play/server/S36PacketSignEditorOpen.java +++ b/src/game/java/net/minecraft/network/play/server/S36PacketSignEditorOpen.java @@ -10,13 +10,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S36PacketSignEditorOpen implements Packet { private BlockPos signPosition; @@ -47,6 +47,7 @@ public class S36PacketSignEditorOpen implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleSignEditorOpen(this); } @@ -54,6 +55,7 @@ public class S36PacketSignEditorOpen implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.signPosition = parPacketBuffer.readBlockPos(); } @@ -61,7 +63,8 @@ public class S36PacketSignEditorOpen implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeBlockPos(this.signPosition); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S37PacketStatistics.java b/src/game/java/net/minecraft/network/play/server/S37PacketStatistics.java index 1dbe87ae..535a4df1 100644 --- a/src/game/java/net/minecraft/network/play/server/S37PacketStatistics.java +++ b/src/game/java/net/minecraft/network/play/server/S37PacketStatistics.java @@ -15,13 +15,13 @@ import net.minecraft.stats.StatList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.stats.StatList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S37PacketStatistics implements Packet { private Map field_148976_a; @@ -52,6 +52,7 @@ public class S37PacketStatistics implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleStatistics(this); } @@ -59,6 +60,7 @@ public class S37PacketStatistics implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { int i = parPacketBuffer.readVarIntFromBuffer(); this.field_148976_a = Maps.newHashMap(); @@ -76,6 +78,7 @@ public class S37PacketStatistics implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.field_148976_a.size()); @@ -85,4 +88,4 @@ public class S37PacketStatistics implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S38PacketPlayerListItem.java b/src/game/java/net/minecraft/network/play/server/S38PacketPlayerListItem.java index 92099ce0..af29a560 100644 --- a/src/game/java/net/minecraft/network/play/server/S38PacketPlayerListItem.java +++ b/src/game/java/net/minecraft/network/play/server/S38PacketPlayerListItem.java @@ -18,13 +18,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S38PacketPlayerListItem implements Packet { public static enum Action { @@ -73,6 +73,7 @@ public class S38PacketPlayerListItem implements Packet { return this.profile; } + @Override public String toString() { return Objects.toStringHelper(this).add("latency", this.ping).add("gameMode", this.gamemode) .add("profile", this.profile).add("displayName", this.displayName == null ? null @@ -122,6 +123,7 @@ public class S38PacketPlayerListItem implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handlePlayerListItem(this); } @@ -129,6 +131,7 @@ public class S38PacketPlayerListItem implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.action = (S38PacketPlayerListItem.Action) parPacketBuffer .readEnumValue(S38PacketPlayerListItem.Action.class); @@ -186,6 +189,7 @@ public class S38PacketPlayerListItem implements Packet { } + @Override public String toString() { return Objects.toStringHelper(this).add("action", this.action).add("entries", this.players).toString(); } @@ -193,6 +197,7 @@ public class S38PacketPlayerListItem implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.action); parPacketBuffer.writeVarIntToBuffer(this.players.size()); @@ -249,4 +254,4 @@ public class S38PacketPlayerListItem implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S39PacketPlayerAbilities.java b/src/game/java/net/minecraft/network/play/server/S39PacketPlayerAbilities.java index 94fb80a6..5d9c0881 100644 --- a/src/game/java/net/minecraft/network/play/server/S39PacketPlayerAbilities.java +++ b/src/game/java/net/minecraft/network/play/server/S39PacketPlayerAbilities.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S39PacketPlayerAbilities implements Packet { private boolean invulnerable; @@ -77,6 +77,7 @@ public class S39PacketPlayerAbilities implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handlePlayerAbilities(this); } @@ -84,6 +85,7 @@ public class S39PacketPlayerAbilities implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { byte b0 = parPacketBuffer.readByte(); this.setInvulnerable((b0 & 1) > 0); @@ -121,6 +123,7 @@ public class S39PacketPlayerAbilities implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { byte b0 = 0; if (this.isInvulnerable()) { @@ -143,4 +146,4 @@ public class S39PacketPlayerAbilities implements Packet { parPacketBuffer.writeFloat(this.flySpeed); parPacketBuffer.writeFloat(this.walkSpeed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S3APacketTabComplete.java b/src/game/java/net/minecraft/network/play/server/S3APacketTabComplete.java index 9d05fbcf..06626521 100644 --- a/src/game/java/net/minecraft/network/play/server/S3APacketTabComplete.java +++ b/src/game/java/net/minecraft/network/play/server/S3APacketTabComplete.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S3APacketTabComplete implements Packet { private String[] matches; @@ -46,6 +46,7 @@ public class S3APacketTabComplete implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleTabComplete(this); } @@ -53,6 +54,7 @@ public class S3APacketTabComplete implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.matches = new String[parPacketBuffer.readVarIntFromBuffer()]; @@ -65,6 +67,7 @@ public class S3APacketTabComplete implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.matches.length); @@ -73,4 +76,4 @@ public class S3APacketTabComplete implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S3BPacketScoreboardObjective.java b/src/game/java/net/minecraft/network/play/server/S3BPacketScoreboardObjective.java index bd5db149..1ea9d60f 100644 --- a/src/game/java/net/minecraft/network/play/server/S3BPacketScoreboardObjective.java +++ b/src/game/java/net/minecraft/network/play/server/S3BPacketScoreboardObjective.java @@ -11,13 +11,13 @@ import net.minecraft.scoreboard.ScoreObjective; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.scoreboard.ScoreObjective; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S3BPacketScoreboardObjective implements Packet { private String objectiveName; @@ -66,6 +66,7 @@ public class S3BPacketScoreboardObjective implements Packet { public static enum Action { @@ -85,6 +85,7 @@ public class S3CPacketUpdateScore implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleUpdateScore(this); } @@ -92,6 +93,7 @@ public class S3CPacketUpdateScore implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.name = parPacketBuffer.readStringFromBuffer(40); this.action = (S3CPacketUpdateScore.Action) parPacketBuffer.readEnumValue(S3CPacketUpdateScore.Action.class); @@ -105,6 +107,7 @@ public class S3CPacketUpdateScore implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.name); parPacketBuffer.writeEnumValue(this.action); @@ -114,4 +117,4 @@ public class S3CPacketUpdateScore implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S3DPacketDisplayScoreboard.java b/src/game/java/net/minecraft/network/play/server/S3DPacketDisplayScoreboard.java index 0f851f55..472e3a9c 100644 --- a/src/game/java/net/minecraft/network/play/server/S3DPacketDisplayScoreboard.java +++ b/src/game/java/net/minecraft/network/play/server/S3DPacketDisplayScoreboard.java @@ -10,13 +10,13 @@ import net.minecraft.scoreboard.ScoreObjective; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.scoreboard.ScoreObjective; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S3DPacketDisplayScoreboard implements Packet { private int position; @@ -58,6 +58,7 @@ public class S3DPacketDisplayScoreboard implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleDisplayScoreboard(this); } @@ -65,6 +66,7 @@ public class S3DPacketDisplayScoreboard implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.position = parPacketBuffer.readByte(); this.scoreName = parPacketBuffer.readStringFromBuffer(16); @@ -73,8 +75,9 @@ public class S3DPacketDisplayScoreboard implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.position); parPacketBuffer.writeString(this.scoreName); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S3EPacketTeams.java b/src/game/java/net/minecraft/network/play/server/S3EPacketTeams.java index 3c4f29d1..af8d4cee 100644 --- a/src/game/java/net/minecraft/network/play/server/S3EPacketTeams.java +++ b/src/game/java/net/minecraft/network/play/server/S3EPacketTeams.java @@ -14,13 +14,13 @@ import net.minecraft.scoreboard.Team; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.scoreboard.Team; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S3EPacketTeams implements Packet { private String field_149320_a = ""; @@ -126,6 +126,7 @@ public class S3EPacketTeams implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleTeams(this); } @@ -133,6 +134,7 @@ public class S3EPacketTeams implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.field_149320_a = parPacketBuffer.readStringFromBuffer(16); this.field_149314_f = parPacketBuffer.readByte(); @@ -158,6 +160,7 @@ public class S3EPacketTeams implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.field_149320_a); parPacketBuffer.writeByte(this.field_149314_f); @@ -179,4 +182,4 @@ public class S3EPacketTeams implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S3FPacketCustomPayload.java b/src/game/java/net/minecraft/network/play/server/S3FPacketCustomPayload.java index f58a5fe2..b9131ed9 100644 --- a/src/game/java/net/minecraft/network/play/server/S3FPacketCustomPayload.java +++ b/src/game/java/net/minecraft/network/play/server/S3FPacketCustomPayload.java @@ -10,13 +10,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S3FPacketCustomPayload implements Packet { private String channel; @@ -56,6 +56,7 @@ public class S3FPacketCustomPayload implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleCustomPayload(this); } @@ -63,6 +64,7 @@ public class S3FPacketCustomPayload implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.channel = parPacketBuffer.readStringFromBuffer(20); int i = parPacketBuffer.readableBytes(); @@ -76,8 +78,9 @@ public class S3FPacketCustomPayload implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.channel); parPacketBuffer.writeBytes((ByteBuf) this.data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S40PacketDisconnect.java b/src/game/java/net/minecraft/network/play/server/S40PacketDisconnect.java index 7bade5dd..aee9a170 100644 --- a/src/game/java/net/minecraft/network/play/server/S40PacketDisconnect.java +++ b/src/game/java/net/minecraft/network/play/server/S40PacketDisconnect.java @@ -10,13 +10,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S40PacketDisconnect implements Packet { private IChatComponent reason; @@ -47,6 +47,7 @@ public class S40PacketDisconnect implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleDisconnect(this); } @@ -54,6 +55,7 @@ public class S40PacketDisconnect implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.reason = parPacketBuffer.readChatComponent(); } @@ -61,7 +63,8 @@ public class S40PacketDisconnect implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeChatComponent(this.reason); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S41PacketServerDifficulty.java b/src/game/java/net/minecraft/network/play/server/S41PacketServerDifficulty.java index 2b30ac49..e388660c 100644 --- a/src/game/java/net/minecraft/network/play/server/S41PacketServerDifficulty.java +++ b/src/game/java/net/minecraft/network/play/server/S41PacketServerDifficulty.java @@ -10,13 +10,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S41PacketServerDifficulty implements Packet { private EnumDifficulty difficulty; @@ -53,6 +53,7 @@ public class S41PacketServerDifficulty implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleServerDifficulty(this); } @@ -60,6 +61,7 @@ public class S41PacketServerDifficulty implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { int i = parPacketBuffer.readUnsignedByte(); this.difficulty = EnumDifficulty.getDifficultyEnum(i & 3); @@ -69,7 +71,8 @@ public class S41PacketServerDifficulty implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeByte(this.difficulty.getDifficultyId() | (this.difficultyLocked ? 4 : 0)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S42PacketCombatEvent.java b/src/game/java/net/minecraft/network/play/server/S42PacketCombatEvent.java index 34d6d863..68c78a79 100644 --- a/src/game/java/net/minecraft/network/play/server/S42PacketCombatEvent.java +++ b/src/game/java/net/minecraft/network/play/server/S42PacketCombatEvent.java @@ -11,13 +11,13 @@ import net.minecraft.util.CombatTracker; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.CombatTracker; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S42PacketCombatEvent implements Packet { public static enum Event { @@ -65,6 +65,7 @@ public class S42PacketCombatEvent implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleCombatEvent(this); } @@ -72,6 +73,7 @@ public class S42PacketCombatEvent implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.eventType = (S42PacketCombatEvent.Event) parPacketBuffer.readEnumValue(S42PacketCombatEvent.Event.class); if (this.eventType == S42PacketCombatEvent.Event.END_COMBAT) { @@ -88,6 +90,7 @@ public class S42PacketCombatEvent implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.eventType); if (this.eventType == S42PacketCombatEvent.Event.END_COMBAT) { @@ -100,4 +103,4 @@ public class S42PacketCombatEvent implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S43PacketCamera.java b/src/game/java/net/minecraft/network/play/server/S43PacketCamera.java index 62542981..9e89e815 100644 --- a/src/game/java/net/minecraft/network/play/server/S43PacketCamera.java +++ b/src/game/java/net/minecraft/network/play/server/S43PacketCamera.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S43PacketCamera implements Packet { public int entityId; @@ -48,6 +48,7 @@ public class S43PacketCamera implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleCamera(this); } @@ -55,6 +56,7 @@ public class S43PacketCamera implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); } @@ -62,7 +64,8 @@ public class S43PacketCamera implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S44PacketWorldBorder.java b/src/game/java/net/minecraft/network/play/server/S44PacketWorldBorder.java index 2ad8d896..46f22af0 100644 --- a/src/game/java/net/minecraft/network/play/server/S44PacketWorldBorder.java +++ b/src/game/java/net/minecraft/network/play/server/S44PacketWorldBorder.java @@ -10,13 +10,13 @@ import net.minecraft.world.border.WorldBorder; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.border.WorldBorder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S44PacketWorldBorder implements Packet { public static enum Action { @@ -96,6 +96,7 @@ public class S44PacketWorldBorder implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleWorldBorder(this); } @@ -103,6 +104,7 @@ public class S44PacketWorldBorder implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.action = (S44PacketWorldBorder.Action) parPacketBuffer.readEnumValue(S44PacketWorldBorder.Action.class); switch (this.action) { @@ -140,6 +142,7 @@ public class S44PacketWorldBorder implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.action); switch (this.action) { @@ -173,4 +176,4 @@ public class S44PacketWorldBorder implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S45PacketTitle.java b/src/game/java/net/minecraft/network/play/server/S45PacketTitle.java index 4cc38d1e..f82583b7 100644 --- a/src/game/java/net/minecraft/network/play/server/S45PacketTitle.java +++ b/src/game/java/net/minecraft/network/play/server/S45PacketTitle.java @@ -10,13 +10,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S45PacketTitle implements Packet { public static enum Type { @@ -108,6 +108,7 @@ public class S45PacketTitle implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleTitle(this); } @@ -115,6 +116,7 @@ public class S45PacketTitle implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.type = (S45PacketTitle.Type) parPacketBuffer.readEnumValue(S45PacketTitle.Type.class); if (this.type == S45PacketTitle.Type.TITLE || this.type == S45PacketTitle.Type.SUBTITLE) { @@ -132,6 +134,7 @@ public class S45PacketTitle implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeEnumValue(this.type); if (this.type == S45PacketTitle.Type.TITLE || this.type == S45PacketTitle.Type.SUBTITLE) { @@ -145,4 +148,4 @@ public class S45PacketTitle implements Packet { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S46PacketSetCompressionLevel.java b/src/game/java/net/minecraft/network/play/server/S46PacketSetCompressionLevel.java index 3802d88d..0d43f221 100644 --- a/src/game/java/net/minecraft/network/play/server/S46PacketSetCompressionLevel.java +++ b/src/game/java/net/minecraft/network/play/server/S46PacketSetCompressionLevel.java @@ -9,13 +9,13 @@ import net.minecraft.network.play.INetHandlerPlayClient; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.network.play.INetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S46PacketSetCompressionLevel implements Packet { private int field_179761_a; @@ -39,6 +39,7 @@ public class S46PacketSetCompressionLevel implements Packet { private IChatComponent header; @@ -52,6 +52,7 @@ public class S47PacketPlayerListHeaderFooter implements Packet { private String url; @@ -55,6 +55,7 @@ public class S48PacketResourcePackSend implements Packet /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleResourcePack(this); } @@ -62,6 +63,7 @@ public class S48PacketResourcePackSend implements Packet /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.url = parPacketBuffer.readStringFromBuffer(32767); this.hash = parPacketBuffer.readStringFromBuffer(40); @@ -70,8 +72,9 @@ public class S48PacketResourcePackSend implements Packet /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeString(this.url); parPacketBuffer.writeString(this.hash); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/network/play/server/S49PacketUpdateEntityNBT.java b/src/game/java/net/minecraft/network/play/server/S49PacketUpdateEntityNBT.java index 1deba491..f04a25a7 100644 --- a/src/game/java/net/minecraft/network/play/server/S49PacketUpdateEntityNBT.java +++ b/src/game/java/net/minecraft/network/play/server/S49PacketUpdateEntityNBT.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class S49PacketUpdateEntityNBT implements Packet { private int entityId; @@ -55,6 +55,7 @@ public class S49PacketUpdateEntityNBT implements Packet { /** * + Passes this Packet on to the NetHandler for processing. */ + @Override public void processPacket(INetHandlerPlayClient inethandlerplayclient) { inethandlerplayclient.handleEntityNBT(this); } @@ -62,6 +63,7 @@ public class S49PacketUpdateEntityNBT implements Packet { /** * + Reads the raw packet data from the data stream. */ + @Override public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.entityId = parPacketBuffer.readVarIntFromBuffer(); this.tagCompound = parPacketBuffer.readNBTTagCompoundFromBuffer(); @@ -70,8 +72,9 @@ public class S49PacketUpdateEntityNBT implements Packet { /** * + Writes the raw packet data to the data stream. */ + @Override public void writePacketData(PacketBuffer parPacketBuffer) throws IOException { parPacketBuffer.writeVarIntToBuffer(this.entityId); parPacketBuffer.writeNBTTagCompoundToBuffer(this.tagCompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/Path.java b/src/game/java/net/minecraft/pathfinding/Path.java index 8ec75ed6..b33ee562 100644 --- a/src/game/java/net/minecraft/pathfinding/Path.java +++ b/src/game/java/net/minecraft/pathfinding/Path.java @@ -3,13 +3,13 @@ package net.minecraft.pathfinding; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.pathfinding; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Path { /** @@ -163,4 +163,4 @@ public class Path { this.pathPoints[parInt1] = pathpoint; pathpoint.index = parInt1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathEntity.java b/src/game/java/net/minecraft/pathfinding/PathEntity.java index d4e99e2d..9f16f08f 100644 --- a/src/game/java/net/minecraft/pathfinding/PathEntity.java +++ b/src/game/java/net/minecraft/pathfinding/PathEntity.java @@ -6,13 +6,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathEntity { private final PathPoint[] points; @@ -127,4 +127,4 @@ public class PathEntity { public void setCurrentPathLength(int length) { this.pathLength = length; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathFinder.java b/src/game/java/net/minecraft/pathfinding/PathFinder.java index 2cc7bc0d..6adcbc8d 100644 --- a/src/game/java/net/minecraft/pathfinding/PathFinder.java +++ b/src/game/java/net/minecraft/pathfinding/PathFinder.java @@ -8,13 +8,13 @@ import net.minecraft.world.pathfinder.NodeProcessor; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.pathfinder.NodeProcessor; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathFinder { /** @@ -143,4 +143,4 @@ public class PathFinder { return this.createEntityPathTo(blockaccess, entityFrom, entityTo.posX, entityTo.getEntityBoundingBox().minY, entityTo.posZ, dist); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathNavigate.java b/src/game/java/net/minecraft/pathfinding/PathNavigate.java index 6d15ed05..5dc9ca9c 100644 --- a/src/game/java/net/minecraft/pathfinding/PathNavigate.java +++ b/src/game/java/net/minecraft/pathfinding/PathNavigate.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class PathNavigate { protected EntityLiving theEntity; @@ -295,4 +295,4 @@ public abstract class PathNavigate { (double) MathHelper.floor_double(z)); return this.setPath(pathentity, speedIn); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathNavigateClimber.java b/src/game/java/net/minecraft/pathfinding/PathNavigateClimber.java index 144d43cd..37f0c7aa 100644 --- a/src/game/java/net/minecraft/pathfinding/PathNavigateClimber.java +++ b/src/game/java/net/minecraft/pathfinding/PathNavigateClimber.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathNavigateClimber extends PathNavigateGround { private BlockPos targetPosition; @@ -39,6 +39,7 @@ public class PathNavigateClimber extends PathNavigateGround { /** * + Returns the path to the given EntityLiving. Args : entity */ + @Override public PathEntity getPathToEntityLiving(Entity entity) { this.targetPosition = new BlockPos(entity); return super.getPathToEntityLiving(entity); @@ -47,11 +48,13 @@ public class PathNavigateClimber extends PathNavigateGround { /** * + Returns path to given BlockPos */ + @Override public PathEntity getPathToPos(BlockPos blockpos) { this.targetPosition = blockpos; return super.getPathToPos(blockpos); } + @Override public void onUpdateNavigation() { if (!this.noPath()) { super.onUpdateNavigation(); @@ -77,6 +80,7 @@ public class PathNavigateClimber extends PathNavigateGround { * + Try to find and set a path to EntityLiving. Returns true if successful. * Args : entity, speed */ + @Override public boolean tryMoveToEntityLiving(Entity entity, double d0) { PathEntity pathentity = this.getPathToEntityLiving(entity); if (pathentity != null) { @@ -87,4 +91,4 @@ public class PathNavigateClimber extends PathNavigateGround { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathNavigateGround.java b/src/game/java/net/minecraft/pathfinding/PathNavigateGround.java index 3510765f..97b41b21 100644 --- a/src/game/java/net/minecraft/pathfinding/PathNavigateGround.java +++ b/src/game/java/net/minecraft/pathfinding/PathNavigateGround.java @@ -15,13 +15,13 @@ import net.minecraft.world.pathfinder.WalkNodeProcessor; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.pathfinder.WalkNodeProcessor; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathNavigateGround extends PathNavigate { protected WalkNodeProcessor nodeProcessor; @@ -46,6 +46,7 @@ public class PathNavigateGround extends PathNavigate { /** * + If on ground or swimming and can swim */ + @Override protected boolean canNavigate() { return this.theEntity.onGround || this.getCanSwim() && this.isInLiquid() || this.theEntity.isRiding() && this.theEntity instanceof EntityZombie && this.theEntity.ridingEntity instanceof EntityChicken; @@ -63,6 +64,7 @@ public class PathNavigateGround extends PathNavigate { return this.nodeProcessor.getEnterDoors(); } + @Override protected Vec3 getEntityPosition() { return new Vec3(this.theEntity.posX, (double) this.getPathablePosY(), this.theEntity.posZ); } @@ -94,6 +96,7 @@ public class PathNavigateGround extends PathNavigate { } } + @Override protected PathFinder getPathFinder() { this.nodeProcessor = new WalkNodeProcessor(); this.nodeProcessor.setEnterDoors(true); @@ -105,6 +108,7 @@ public class PathNavigateGround extends PathNavigate { * straight line between the two points. Args: pos1, pos2, entityXSize, * entityYSize, entityZSize */ + @Override protected boolean isDirectPathBetweenPoints(Vec3 posVec31, Vec3 posVec32, int sizeX, int sizeY, int sizeZ) { int i = MathHelper.floor_double(posVec31.xCoord); int j = MathHelper.floor_double(posVec31.zCoord); @@ -172,7 +176,7 @@ public class PathNavigateGround extends PathNavigate { */ private boolean isPositionClear(int parInt1, int parInt2, int parInt3, int parInt4, int parInt5, int parInt6, Vec3 parVec3_1, double parDouble1, double parDouble2) { - for (BlockPos blockpos : BlockPos.getAllInBox(new BlockPos(parInt1, parInt2, parInt3), + for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(parInt1, parInt2, parInt3), new BlockPos(parInt1 + parInt4 - 1, parInt2 + parInt5 - 1, parInt3 + parInt6 - 1))) { double d0 = (double) blockpos.getX() + 0.5D - parVec3_1.xCoord; double d1 = (double) blockpos.getZ() + 0.5D - parVec3_1.zCoord; @@ -227,6 +231,7 @@ public class PathNavigateGround extends PathNavigate { /** * + Trims path data from the end to the first sun covered block */ + @Override protected void removeSunnyPath() { super.removeSunnyPath(); if (this.shouldAvoidSun) { @@ -266,4 +271,4 @@ public class PathNavigateGround extends PathNavigate { public void setEnterDoors(boolean par1) { this.nodeProcessor.setEnterDoors(par1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathNavigateSwimmer.java b/src/game/java/net/minecraft/pathfinding/PathNavigateSwimmer.java index 535b62db..c4ccfd10 100644 --- a/src/game/java/net/minecraft/pathfinding/PathNavigateSwimmer.java +++ b/src/game/java/net/minecraft/pathfinding/PathNavigateSwimmer.java @@ -9,13 +9,13 @@ import net.minecraft.world.pathfinder.SwimNodeProcessor; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.pathfinder.SwimNodeProcessor; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathNavigateSwimmer extends PathNavigate { public PathNavigateSwimmer(EntityLiving entitylivingIn, World worldIn) { @@ -37,15 +37,18 @@ public class PathNavigateSwimmer extends PathNavigate { /** * + If on ground or swimming and can swim */ + @Override protected boolean canNavigate() { return this.isInLiquid(); } + @Override protected Vec3 getEntityPosition() { return new Vec3(this.theEntity.posX, this.theEntity.posY + (double) this.theEntity.height * 0.5D, this.theEntity.posZ); } + @Override protected PathFinder getPathFinder() { return new PathFinder(new SwimNodeProcessor()); } @@ -55,6 +58,7 @@ public class PathNavigateSwimmer extends PathNavigate { * straight line between the two points. Args: pos1, pos2, entityXSize, * entityYSize, entityZSize */ + @Override protected boolean isDirectPathBetweenPoints(Vec3 vec3, Vec3 vec31, int var3, int var4, int var5) { MovingObjectPosition movingobjectposition = this.worldObj.rayTraceBlocks(vec3, new Vec3(vec31.xCoord, vec31.yCoord + (double) this.theEntity.height * 0.5D, vec31.zCoord), false, true, @@ -63,6 +67,7 @@ public class PathNavigateSwimmer extends PathNavigate { || movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.MISS; } + @Override protected void pathFollow() { Vec3 vec3 = this.getEntityPosition(); float f = this.theEntity.width * this.theEntity.width; @@ -87,7 +92,8 @@ public class PathNavigateSwimmer extends PathNavigate { /** * + Trims path data from the end to the first sun covered block */ + @Override protected void removeSunnyPath() { super.removeSunnyPath(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/pathfinding/PathPoint.java b/src/game/java/net/minecraft/pathfinding/PathPoint.java index 9479cccc..1330afbe 100644 --- a/src/game/java/net/minecraft/pathfinding/PathPoint.java +++ b/src/game/java/net/minecraft/pathfinding/PathPoint.java @@ -5,13 +5,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PathPoint { public static int makeHash(int x, int y, int z) { @@ -70,6 +70,7 @@ public class PathPoint { return f * f + f1 * f1 + f2 * f2; } + @Override public boolean equals(Object object) { if (!(object instanceof PathPoint)) { return false; @@ -80,6 +81,7 @@ public class PathPoint { } } + @Override public int hashCode() { return this.hash; } @@ -91,7 +93,8 @@ public class PathPoint { return this.index >= 0; } + @Override public String toString() { return this.xCoord + ", " + this.yCoord + ", " + this.zCoord; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/Potion.java b/src/game/java/net/minecraft/potion/Potion.java index b1d183c7..c5039a1b 100644 --- a/src/game/java/net/minecraft/potion/Potion.java +++ b/src/game/java/net/minecraft/potion/Potion.java @@ -22,13 +22,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Potion { /** @@ -392,4 +392,4 @@ public class Potion { this.name = nameIn; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionAbsorption.java b/src/game/java/net/minecraft/potion/PotionAbsorption.java index e393e577..ad194800 100644 --- a/src/game/java/net/minecraft/potion/PotionAbsorption.java +++ b/src/game/java/net/minecraft/potion/PotionAbsorption.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,22 +25,24 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionAbsorption extends Potion { protected PotionAbsorption(int potionID, ResourceLocation location, boolean badEffect, int potionColor) { super(potionID, location, badEffect, potionColor); } + @Override public void applyAttributesModifiersToEntity(EntityLivingBase entityLivingBaseIn, BaseAttributeMap amplifier, int parInt1) { entityLivingBaseIn.setAbsorptionAmount(entityLivingBaseIn.getAbsorptionAmount() + (float) (4 * (parInt1 + 1))); super.applyAttributesModifiersToEntity(entityLivingBaseIn, amplifier, parInt1); } + @Override public void removeAttributesModifiersFromEntity(EntityLivingBase entityLivingBaseIn, BaseAttributeMap amplifier, int parInt1) { entityLivingBaseIn.setAbsorptionAmount(entityLivingBaseIn.getAbsorptionAmount() - (float) (4 * (parInt1 + 1))); super.removeAttributesModifiersFromEntity(entityLivingBaseIn, amplifier, parInt1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionAttackDamage.java b/src/game/java/net/minecraft/potion/PotionAttackDamage.java index 491345e3..d95330ac 100644 --- a/src/game/java/net/minecraft/potion/PotionAttackDamage.java +++ b/src/game/java/net/minecraft/potion/PotionAttackDamage.java @@ -6,13 +6,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,15 +24,16 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionAttackDamage extends Potion { protected PotionAttackDamage(int potionID, ResourceLocation location, boolean badEffect, int potionColor) { super(potionID, location, badEffect, potionColor); } + @Override public double getAttributeModifierAmount(int modifier, AttributeModifier parAttributeModifier) { return this.id == Potion.weakness.id ? (double) (-0.5F * (float) (modifier + 1)) : 1.3D * (double) (modifier + 1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionEffect.java b/src/game/java/net/minecraft/potion/PotionEffect.java index c2217670..3f262663 100644 --- a/src/game/java/net/minecraft/potion/PotionEffect.java +++ b/src/game/java/net/minecraft/potion/PotionEffect.java @@ -8,13 +8,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionEffect { private static final Logger LOGGER = LogManager.getLogger(); @@ -110,6 +110,7 @@ public class PotionEffect { return --this.duration; } + @Override public boolean equals(Object object) { if (!(object instanceof PotionEffect)) { return false; @@ -155,6 +156,7 @@ public class PotionEffect { return this.potionID; } + @Override public int hashCode() { return this.potionID; } @@ -192,6 +194,7 @@ public class PotionEffect { this.isSplashPotion = splashPotion; } + @Override public String toString() { String s = ""; if (this.getAmplifier() > 0) { @@ -222,4 +225,4 @@ public class PotionEffect { nbt.setBoolean("ShowParticles", this.getIsShowParticles()); return nbt; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionHealth.java b/src/game/java/net/minecraft/potion/PotionHealth.java index 0e6640c7..6ea37ac1 100644 --- a/src/game/java/net/minecraft/potion/PotionHealth.java +++ b/src/game/java/net/minecraft/potion/PotionHealth.java @@ -5,13 +5,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionHealth extends Potion { public PotionHealth(int potionID, ResourceLocation location, boolean badEffect, int potionColor) { @@ -34,6 +34,7 @@ public class PotionHealth extends Potion { * + Returns true if the potion has an instant effect instead of a continuous * one (eg Harming) */ + @Override public boolean isInstant() { return true; } @@ -41,7 +42,8 @@ public class PotionHealth extends Potion { /** * + checks if Potion effect is ready to be applied this tick. */ + @Override public boolean isReady(int parInt1, int parInt2) { return parInt1 >= 1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionHealthBoost.java b/src/game/java/net/minecraft/potion/PotionHealthBoost.java index 50bf1b40..c6fc5f49 100644 --- a/src/game/java/net/minecraft/potion/PotionHealthBoost.java +++ b/src/game/java/net/minecraft/potion/PotionHealthBoost.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,13 +25,14 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionHealthBoost extends Potion { public PotionHealthBoost(int potionID, ResourceLocation location, boolean badEffect, int potionColor) { super(potionID, location, badEffect, potionColor); } + @Override public void removeAttributesModifiersFromEntity(EntityLivingBase entitylivingbase, BaseAttributeMap baseattributemap, int i) { super.removeAttributesModifiersFromEntity(entitylivingbase, baseattributemap, i); @@ -40,4 +41,4 @@ public class PotionHealthBoost extends Potion { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/potion/PotionHelper.java b/src/game/java/net/minecraft/potion/PotionHelper.java index 84d59fd8..de6b0cfb 100644 --- a/src/game/java/net/minecraft/potion/PotionHelper.java +++ b/src/game/java/net/minecraft/potion/PotionHelper.java @@ -13,13 +13,13 @@ import net.minecraft.util.IntegerCache; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.IntegerCache; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PotionHelper { public static final String field_77924_a = null; @@ -517,4 +517,4 @@ public class PotionHelper { return 0; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/GoalColor.java b/src/game/java/net/minecraft/scoreboard/GoalColor.java index 2d14f356..77502d77 100644 --- a/src/game/java/net/minecraft/scoreboard/GoalColor.java +++ b/src/game/java/net/minecraft/scoreboard/GoalColor.java @@ -8,13 +8,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GoalColor implements IScoreObjectiveCriteria { private final String goalName; @@ -36,19 +36,23 @@ public class GoalColor implements IScoreObjectiveCriteria { IScoreObjectiveCriteria.INSTANCES.put(this.goalName, this); } + @Override public int func_96635_a(List parList) { return 0; } + @Override public String getName() { return this.goalName; } + @Override public IScoreObjectiveCriteria.EnumRenderType getRenderType() { return IScoreObjectiveCriteria.EnumRenderType.INTEGER; } + @Override public boolean isReadOnly() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/IScoreObjectiveCriteria.java b/src/game/java/net/minecraft/scoreboard/IScoreObjectiveCriteria.java index ca74b6a8..7bd53a3e 100644 --- a/src/game/java/net/minecraft/scoreboard/IScoreObjectiveCriteria.java +++ b/src/game/java/net/minecraft/scoreboard/IScoreObjectiveCriteria.java @@ -11,13 +11,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IScoreObjectiveCriteria { public static enum EnumRenderType { @@ -108,4 +108,4 @@ public interface IScoreObjectiveCriteria { IScoreObjectiveCriteria.EnumRenderType getRenderType(); boolean isReadOnly(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/Score.java b/src/game/java/net/minecraft/scoreboard/Score.java index 3529382f..464eb36b 100644 --- a/src/game/java/net/minecraft/scoreboard/Score.java +++ b/src/game/java/net/minecraft/scoreboard/Score.java @@ -8,13 +8,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Score { /** * + Used for sorting score by points */ public static final Comparator scoreComparator = new Comparator() { + @Override public int compare(Score score, Score score1) { return score.getScorePoints() > score1.getScorePoints() ? 1 : (score.getScorePoints() < score1.getScorePoints() ? -1 @@ -117,4 +118,4 @@ public class Score { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ScoreDummyCriteria.java b/src/game/java/net/minecraft/scoreboard/ScoreDummyCriteria.java index 494d606e..e5823d3f 100644 --- a/src/game/java/net/minecraft/scoreboard/ScoreDummyCriteria.java +++ b/src/game/java/net/minecraft/scoreboard/ScoreDummyCriteria.java @@ -7,13 +7,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScoreDummyCriteria implements IScoreObjectiveCriteria { private final String dummyName; @@ -35,19 +35,23 @@ public class ScoreDummyCriteria implements IScoreObjectiveCriteria { IScoreObjectiveCriteria.INSTANCES.put(name, this); } + @Override public int func_96635_a(List var1) { return 0; } + @Override public String getName() { return this.dummyName; } + @Override public IScoreObjectiveCriteria.EnumRenderType getRenderType() { return IScoreObjectiveCriteria.EnumRenderType.INTEGER; } + @Override public boolean isReadOnly() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ScoreHealthCriteria.java b/src/game/java/net/minecraft/scoreboard/ScoreHealthCriteria.java index 5427dbff..27ebd6a1 100644 --- a/src/game/java/net/minecraft/scoreboard/ScoreHealthCriteria.java +++ b/src/game/java/net/minecraft/scoreboard/ScoreHealthCriteria.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScoreHealthCriteria extends ScoreDummyCriteria { public ScoreHealthCriteria(String name) { super(name); } + @Override public int func_96635_a(List list) { float f = 0.0F; @@ -48,11 +49,13 @@ public class ScoreHealthCriteria extends ScoreDummyCriteria { return MathHelper.ceiling_float_int(f); } + @Override public IScoreObjectiveCriteria.EnumRenderType getRenderType() { return IScoreObjectiveCriteria.EnumRenderType.HEARTS; } + @Override public boolean isReadOnly() { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ScoreObjective.java b/src/game/java/net/minecraft/scoreboard/ScoreObjective.java index 51be0521..1f6ef6c3 100644 --- a/src/game/java/net/minecraft/scoreboard/ScoreObjective.java +++ b/src/game/java/net/minecraft/scoreboard/ScoreObjective.java @@ -6,13 +6,13 @@ import net.minecraft.client.Minecraft; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScoreObjective { private final Scoreboard theScoreboard; @@ -82,4 +82,4 @@ public class ScoreObjective { this.renderType = type; this.theScoreboard.func_96532_b(this); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ScorePlayerTeam.java b/src/game/java/net/minecraft/scoreboard/ScorePlayerTeam.java index e9a94e76..52975885 100644 --- a/src/game/java/net/minecraft/scoreboard/ScorePlayerTeam.java +++ b/src/game/java/net/minecraft/scoreboard/ScorePlayerTeam.java @@ -10,13 +10,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScorePlayerTeam extends Team { /** @@ -60,6 +60,7 @@ public class ScorePlayerTeam extends Team { this.teamNameSPT = name; } + @Override public String formatString(String input) { return this.getColorPrefix() + input + this.getColorSuffix(); } @@ -82,6 +83,7 @@ public class ScorePlayerTeam extends Team { return i; } + @Override public boolean getAllowFriendlyFire() { return this.allowFriendlyFire; } @@ -104,14 +106,17 @@ public class ScorePlayerTeam extends Team { return this.colorSuffix; } + @Override public Team.EnumVisible getDeathMessageVisibility() { return this.deathMessageVisibility; } + @Override public Collection getMembershipCollection() { return this.membershipSet; } + @Override public Team.EnumVisible getNameTagVisibility() { return this.nameTagVisibility; } @@ -119,10 +124,12 @@ public class ScorePlayerTeam extends Team { /** * + Retrieve the name by which this team is registered in the scoreboard */ + @Override public String getRegisteredName() { return this.registeredName; } + @Override public boolean getSeeFriendlyInvisiblesEnabled() { return this.canSeeFriendlyInvisibles; } @@ -177,4 +184,4 @@ public class ScorePlayerTeam extends Team { this.theScoreboard.sendTeamUpdate(this); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/Scoreboard.java b/src/game/java/net/minecraft/scoreboard/Scoreboard.java index 2f372178..884507cb 100644 --- a/src/game/java/net/minecraft/scoreboard/Scoreboard.java +++ b/src/game/java/net/minecraft/scoreboard/Scoreboard.java @@ -16,13 +16,13 @@ import net.minecraft.util.EnumChatFormatting; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Scoreboard { private static String[] field_178823_g = null; @@ -441,4 +441,4 @@ public class Scoreboard { public void setObjectiveInDisplaySlot(int parInt1, ScoreObjective parScoreObjective) { this.objectiveDisplaySlots[parInt1] = parScoreObjective; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ScoreboardSaveData.java b/src/game/java/net/minecraft/scoreboard/ScoreboardSaveData.java index 93e443ff..c87cfeb8 100644 --- a/src/game/java/net/minecraft/scoreboard/ScoreboardSaveData.java +++ b/src/game/java/net/minecraft/scoreboard/ScoreboardSaveData.java @@ -11,13 +11,13 @@ import net.minecraft.world.WorldSavedData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.WorldSavedData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScoreboardSaveData extends WorldSavedData { private static final Logger logger = LogManager.getLogger(); @@ -131,6 +131,7 @@ public class ScoreboardSaveData extends WorldSavedData { /** * + reads in data from the NBTTagCompound into this MapDataBase */ + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { if (this.theScoreboard == null) { this.delayedInitNbt = nbttagcompound; @@ -265,6 +266,7 @@ public class ScoreboardSaveData extends WorldSavedData { * + write data to NBTTagCompound from this MapDataBase, similar to Entities and * TileEntities */ + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { if (this.theScoreboard == null) { logger.warn("Tried to save scoreboard without having a scoreboard..."); @@ -275,4 +277,4 @@ public class ScoreboardSaveData extends WorldSavedData { this.func_96497_d(nbttagcompound); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/ServerScoreboard.java b/src/game/java/net/minecraft/scoreboard/ServerScoreboard.java index 0e309a9a..f05fa5bf 100644 --- a/src/game/java/net/minecraft/scoreboard/ServerScoreboard.java +++ b/src/game/java/net/minecraft/scoreboard/ServerScoreboard.java @@ -19,13 +19,13 @@ import net.minecraft.server.MinecraftServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.server.MinecraftServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerScoreboard extends Scoreboard { @@ -52,6 +52,7 @@ public class ServerScoreboard extends Scoreboard { /** * + Adds a player to the given team */ + @Override public boolean addPlayerToTeam(String s, String s1) { if (super.addPlayerToTeam(s, s1)) { ScorePlayerTeam scoreplayerteam = this.getTeam(s1); @@ -68,6 +69,7 @@ public class ServerScoreboard extends Scoreboard { * + This packet will notify the players that this team is created, and that * will register it on the client */ + @Override public void broadcastTeamCreated(ScorePlayerTeam scoreplayerteam) { super.broadcastTeamCreated(scoreplayerteam); this.scoreboardMCServer.getConfigurationManager() @@ -75,6 +77,7 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } + @Override public void func_178820_a(String s, ScoreObjective scoreobjective) { super.func_178820_a(s, scoreobjective); this.scoreboardMCServer.getConfigurationManager() @@ -82,6 +85,7 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } + @Override public void func_96513_c(ScorePlayerTeam scoreplayerteam) { super.func_96513_c(scoreplayerteam); this.scoreboardMCServer.getConfigurationManager() @@ -89,12 +93,14 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } + @Override public void func_96516_a(String s) { super.func_96516_a(s); this.scoreboardMCServer.getConfigurationManager().sendPacketToAllPlayers(new S3CPacketUpdateScore(s)); this.func_96551_b(); } + @Override public void func_96532_b(ScoreObjective scoreobjective) { super.func_96532_b(scoreobjective); if (this.field_96553_b.contains(scoreobjective)) { @@ -105,6 +111,7 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } + @Override public void func_96533_c(ScoreObjective scoreobjective) { super.func_96533_c(scoreobjective); if (this.field_96553_b.contains(scoreobjective)) { @@ -114,6 +121,7 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } + @Override public void func_96536_a(Score score) { super.func_96536_a(score); if (this.field_96553_b.contains(score.getObjective())) { @@ -207,6 +215,7 @@ public class ServerScoreboard extends Scoreboard { /** * + Called when a score objective is added */ + @Override public void onScoreObjectiveAdded(ScoreObjective scoreobjective) { super.onScoreObjectiveAdded(scoreobjective); this.func_96551_b(); @@ -216,6 +225,7 @@ public class ServerScoreboard extends Scoreboard { * + Removes the given username from the given ScorePlayerTeam. If the player is * not on the team then an IllegalStateException is thrown. */ + @Override public void removePlayerFromTeam(String s, ScorePlayerTeam scoreplayerteam) { super.removePlayerFromTeam(s, scoreplayerteam); this.scoreboardMCServer.getConfigurationManager() @@ -226,6 +236,7 @@ public class ServerScoreboard extends Scoreboard { /** * + This packet will notify the players that this team is updated */ + @Override public void sendTeamUpdate(ScorePlayerTeam scoreplayerteam) { super.sendTeamUpdate(scoreplayerteam); this.scoreboardMCServer.getConfigurationManager() @@ -236,6 +247,7 @@ public class ServerScoreboard extends Scoreboard { /** * + 0 is tab menu, 1 is sidebar, 2 is below name */ + @Override public void setObjectiveInDisplaySlot(int i, ScoreObjective scoreobjective) { ScoreObjective scoreobjective1 = this.getObjectiveInDisplaySlot(i); super.setObjectiveInDisplaySlot(i, scoreobjective); @@ -259,4 +271,4 @@ public class ServerScoreboard extends Scoreboard { this.func_96551_b(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/scoreboard/Team.java b/src/game/java/net/minecraft/scoreboard/Team.java index 908172b8..c1fe0bac 100644 --- a/src/game/java/net/minecraft/scoreboard/Team.java +++ b/src/game/java/net/minecraft/scoreboard/Team.java @@ -8,13 +8,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Team { public static enum EnumVisible { @@ -80,4 +80,4 @@ public abstract class Team { public boolean isSameTeam(Team other) { return other == null ? false : this == other; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/MinecraftServer.java b/src/game/java/net/minecraft/server/MinecraftServer.java index 609688e4..f7dec1f3 100644 --- a/src/game/java/net/minecraft/server/MinecraftServer.java +++ b/src/game/java/net/minecraft/server/MinecraftServer.java @@ -39,7 +39,6 @@ import net.minecraft.util.ReportedException; import net.minecraft.util.Util; import net.minecraft.util.Vec3; import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.MinecraftException; import net.minecraft.world.World; import net.minecraft.world.WorldManager; import net.minecraft.world.WorldServer; @@ -53,13 +52,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -71,7 +70,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MinecraftServer implements Runnable, ICommandSender, IThreadListener { private static final Logger logger = LogManager.getLogger(); @@ -152,6 +151,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre /** * + Send a chat message to the CommandSender */ + @Override public void addChatMessage(IChatComponent ichatcomponent) { logger.info(ichatcomponent.getUnformattedText()); } @@ -161,12 +161,14 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre */ public CrashReport addServerInfoToCrashReport(CrashReport crashreport) { crashreport.getCategory().addCrashSectionCallable("Profiler Position", new Callable() { + @Override public String call() throws Exception { return "N/A (disabled)"; } }); if (this.serverConfigManager != null) { crashreport.getCategory().addCrashSectionCallable("Player Count", new Callable() { + @Override public String call() { return MinecraftServer.this.serverConfigManager.getCurrentPlayerCount() + " / " + MinecraftServer.this.serverConfigManager.getMaxPlayers() + "; " @@ -186,6 +188,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Returns {@code true} if the CommandSender is allowed to execute the * command, {@code false} if not */ + @Override public boolean canCommandSenderUseCommand(int var1, String var2) { return true; } @@ -267,6 +270,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre /** * + Returns the entity associated with the command sender. MAY BE NULL! */ + @Override public Entity getCommandSenderEntity() { return null; } @@ -288,6 +292,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return new ChatComponentText(this.getName()); } @@ -310,6 +315,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Get the world, if available. {@code null} is not allowed! If you are * not an entity in the world, return the overworld */ + @Override public World getEntityWorld() { return this.worldServers[0]; } @@ -365,6 +371,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return "Server"; } @@ -387,6 +394,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Get the position in the world. {@code null} is not allowed! If you * are not an entity in the world, return the coordinates 0, 0, 0 */ + @Override public BlockPos getPosition() { return BlockPos.ORIGIN; } @@ -395,6 +403,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Get the position vector. {@code null} is not allowed! If you are not * an entity in the world, return 0.0D, 0.0D, 0.0D */ + @Override public Vec3 getPositionVector() { return new Vec3(0.0D, 0.0D, 0.0D); } @@ -642,6 +651,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre this.nanoTimeSinceStatusRefresh = 0L; } + @Override public void run() { try { if (this.startServer()) { @@ -720,11 +730,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre + worldserver.provider.getDimensionName()); } - try { - worldserver.saveAllChunks(true, (IProgressUpdate) null); - } catch (MinecraftException minecraftexception) { - logger.warn(minecraftexception.getMessage()); - } + worldserver.saveAllChunks(true, (IProgressUpdate) null); } } @@ -735,6 +741,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre * + Returns true if the command sender should be sent feedback about executed * commands */ + @Override public boolean sendCommandFeedback() { /** * + Gets mcServer. @@ -766,6 +773,7 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre this.canSpawnNPCs = spawnNpcs; } + @Override public void setCommandStat(CommandResultStats.Type var1, int var2) { } @@ -1012,4 +1020,4 @@ public abstract class MinecraftServer implements Runnable, ICommandSender, IThre public WorldServer worldServerForDimension(int dimension) { return dimension == -1 ? this.worldServers[1] : (dimension == 1 ? this.worldServers[2] : this.worldServers[0]); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/management/ItemInWorldManager.java b/src/game/java/net/minecraft/server/management/ItemInWorldManager.java index 027ca1e5..82699892 100644 --- a/src/game/java/net/minecraft/server/management/ItemInWorldManager.java +++ b/src/game/java/net/minecraft/server/management/ItemInWorldManager.java @@ -23,13 +23,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ItemInWorldManager { public World theWorld; @@ -370,4 +370,4 @@ public class ItemInWorldManager { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/management/LowerStringMap.java b/src/game/java/net/minecraft/server/management/LowerStringMap.java index 26962004..9bbcd459 100644 --- a/src/game/java/net/minecraft/server/management/LowerStringMap.java +++ b/src/game/java/net/minecraft/server/management/LowerStringMap.java @@ -9,13 +9,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,43 +27,52 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LowerStringMap implements Map { private final Map internalMap = Maps.newLinkedHashMap(); + @Override public void clear() { this.internalMap.clear(); } + @Override public boolean containsKey(Object parObject) { return this.internalMap.containsKey(parObject.toString().toLowerCase()); } + @Override public boolean containsValue(Object parObject) { return this.internalMap.containsKey(parObject); } + @Override public Set> entrySet() { return this.internalMap.entrySet(); } + @Override public V get(Object parObject) { return (V) this.internalMap.get(parObject.toString().toLowerCase()); } + @Override public boolean isEmpty() { return this.internalMap.isEmpty(); } + @Override public Set keySet() { return this.internalMap.keySet(); } + @Override public V put(String parString1, V parObject) { return (V) this.internalMap.put(parString1.toLowerCase(), parObject); } + @Override public void putAll(Map parMap) { for (Entry entry : parMap.entrySet()) { this.put((String) entry.getKey(), (V) entry.getValue()); @@ -71,15 +80,18 @@ public class LowerStringMap implements Map { } + @Override public V remove(Object object) { return (V) this.internalMap.remove(object.toString().toLowerCase()); } + @Override public int size() { return this.internalMap.size(); } + @Override public Collection values() { return this.internalMap.values(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/management/PlayerManager.java b/src/game/java/net/minecraft/server/management/PlayerManager.java index 5d8e36c9..13f769d7 100644 --- a/src/game/java/net/minecraft/server/management/PlayerManager.java +++ b/src/game/java/net/minecraft/server/management/PlayerManager.java @@ -24,13 +24,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlayerManager { class PlayerInstance { @@ -500,4 +500,4 @@ public class PlayerManager { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/game/java/net/minecraft/server/management/ServerConfigurationManager.java index 0e0574df..a42cb6a9 100644 --- a/src/game/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/game/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -29,6 +29,8 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.event.ClickEvent; +import net.minecraft.event.HoverEvent; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.Packet; @@ -59,6 +61,7 @@ import net.minecraft.stats.StatisticsFile; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import net.minecraft.util.MathHelper; @@ -74,13 +77,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -92,7 +95,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ServerConfigurationManager { private static final Logger logger = LogManager.getLogger(); @@ -380,6 +383,18 @@ public abstract class ServerConfigurationManager { shaderF4Msg.appendSibling(shaderF4Msg2); playerIn.addChatMessage(shaderF4Msg); } + + playerIn.addChatMessage( + new ChatComponentText("[Starlike Client] ") + .setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD)) + .appendSibling(new ChatComponentTranslation("starlike.welcomeMsg").setChatStyle(new ChatStyle() + .setColor(EnumChatFormatting.AQUA) + .setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, + "https://github.com/zumbiepig/Starlike/wiki")) + .setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ChatComponentTranslation("starlike.welcomeMsgHover") + .setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD))))))); + this.playerLoggedIn(playerIn); nethandlerplayserver.setPlayerLocation(playerIn.posX, playerIn.posY, playerIn.posZ, playerIn.rotationYaw, playerIn.rotationPitch); @@ -745,32 +760,39 @@ public abstract class ServerConfigurationManager { public void setPlayerManager(WorldServer[] worldServers) { this.playerNBTManagerObj = worldServers[0].getSaveHandler().getPlayerNBTManager(); worldServers[0].getWorldBorder().addListener(new IBorderListener() { + @Override public void onCenterChanged(WorldBorder worldborder, double var2, double var4) { ServerConfigurationManager.this.sendPacketToAllPlayers( new S44PacketWorldBorder(worldborder, S44PacketWorldBorder.Action.SET_CENTER)); } + @Override public void onDamageAmountChanged(WorldBorder var1, double var2) { } + @Override public void onDamageBufferChanged(WorldBorder var1, double var2) { } + @Override public void onSizeChanged(WorldBorder worldborder, double var2) { ServerConfigurationManager.this.sendPacketToAllPlayers( new S44PacketWorldBorder(worldborder, S44PacketWorldBorder.Action.SET_SIZE)); } + @Override public void onTransitionStarted(WorldBorder worldborder, double var2, double var4, long var6) { ServerConfigurationManager.this.sendPacketToAllPlayers( new S44PacketWorldBorder(worldborder, S44PacketWorldBorder.Action.LERP_SIZE)); } + @Override public void onWarningDistanceChanged(WorldBorder worldborder, int var2) { ServerConfigurationManager.this.sendPacketToAllPlayers( new S44PacketWorldBorder(worldborder, S44PacketWorldBorder.Action.SET_WARNING_BLOCKS)); } + @Override public void onWarningTimeChanged(WorldBorder worldborder, int var2) { ServerConfigurationManager.this.sendPacketToAllPlayers( new S44PacketWorldBorder(worldborder, S44PacketWorldBorder.Action.SET_WARNING_TIME)); @@ -928,4 +950,4 @@ public abstract class ServerConfigurationManager { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/server/network/NetHandlerLoginServer.java b/src/game/java/net/minecraft/server/network/NetHandlerLoginServer.java index d8982a0c..93b0a65d 100644 --- a/src/game/java/net/minecraft/server/network/NetHandlerLoginServer.java +++ b/src/game/java/net/minecraft/server/network/NetHandlerLoginServer.java @@ -32,13 +32,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetHandlerLoginServer implements INetHandlerLoginServer, ITickable { static enum LoginState { @@ -105,14 +105,17 @@ public class NetHandlerLoginServer implements INetHandlerLoginServer, ITickable * + Invoked when disconnecting, the parameter is a ChatComponent describing the * reason for termination */ + @Override public void onDisconnect(IChatComponent ichatcomponent) { logger.info(this.getConnectionInfo() + " lost connection: " + ichatcomponent.getUnformattedText()); } + @Override public void processEncryptionResponse(C01PacketEncryptionResponse c01packetencryptionresponse) { } + @Override public void processLoginStart(C00PacketLoginStart c00packetloginstart) { Validate.validState(this.currentLoginState == NetHandlerLoginServer.LoginState.HELLO, "Unexpected hello packet", new Object[0]); @@ -187,6 +190,7 @@ public class NetHandlerLoginServer implements INetHandlerLoginServer, ITickable /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.currentLoginState == NetHandlerLoginServer.LoginState.READY_TO_ACCEPT) { this.tryAcceptPlayer(); @@ -217,4 +221,4 @@ public class NetHandlerLoginServer implements INetHandlerLoginServer, ITickable } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/Achievement.java b/src/game/java/net/minecraft/stats/Achievement.java index ca4998bf..5cfdebee 100644 --- a/src/game/java/net/minecraft/stats/Achievement.java +++ b/src/game/java/net/minecraft/stats/Achievement.java @@ -14,13 +14,13 @@ import net.minecraft.util.StatCollector; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.StatCollector; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Achievement extends StatBase { public final int displayColumn; @@ -77,6 +77,7 @@ public class Achievement extends StatBase { this.parentAchievement = parent; } + @Override public Achievement func_150953_b(Class parClass1, Supplier ctor) { return (Achievement) super.func_150953_b(parClass1, ctor); @@ -100,6 +101,7 @@ public class Achievement extends StatBase { return this.isSpecial; } + @Override public IChatComponent getStatName() { IChatComponent ichatcomponent = super.getStatName(); ichatcomponent.getChatStyle() @@ -111,6 +113,7 @@ public class Achievement extends StatBase { * + Initializes the current stat as independent (i.e., lacking prerequisites * for being updated) and returns the current instance. */ + @Override public Achievement initIndependentStat() { this.isIndependent = true; return this; @@ -120,6 +123,7 @@ public class Achievement extends StatBase { * + Returns whether or not the StatBase-derived class is a statistic (running * counter) or an achievement (one-shot). */ + @Override public boolean isAchievement() { return true; } @@ -127,6 +131,7 @@ public class Achievement extends StatBase { /** * + Register the stat into StatList. */ + @Override public Achievement registerStat() { super.registerStat(); AchievementList.achievementList.add(this); @@ -149,4 +154,4 @@ public class Achievement extends StatBase { this.statStringFormatter = parIStatStringFormat; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/AchievementList.java b/src/game/java/net/minecraft/stats/AchievementList.java index 5fd11a75..2aab3e61 100644 --- a/src/game/java/net/minecraft/stats/AchievementList.java +++ b/src/game/java/net/minecraft/stats/AchievementList.java @@ -12,13 +12,13 @@ import net.minecraft.util.JsonSerializableSet; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.JsonSerializableSet; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AchievementList { public static int minDisplayColumn; @@ -142,4 +142,4 @@ public class AchievementList { overpowered = (new Achievement("achievement.overpowered", "overpowered", 6, 4, new ItemStack(Items.golden_apple, 1, 1), buildBetterPickaxe)).setSpecial().registerStat(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/IStatStringFormat.java b/src/game/java/net/minecraft/stats/IStatStringFormat.java index 5392599f..58cdffa4 100644 --- a/src/game/java/net/minecraft/stats/IStatStringFormat.java +++ b/src/game/java/net/minecraft/stats/IStatStringFormat.java @@ -3,13 +3,13 @@ package net.minecraft.stats; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.stats; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IStatStringFormat { /** * + Formats the strings based on 'IStatStringFormat' interface. */ String formatString(String var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/IStatType.java b/src/game/java/net/minecraft/stats/IStatType.java index 3a91d9f8..b182e1ea 100644 --- a/src/game/java/net/minecraft/stats/IStatType.java +++ b/src/game/java/net/minecraft/stats/IStatType.java @@ -3,13 +3,13 @@ package net.minecraft.stats; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.stats; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IStatType { /** * + Formats a given stat for human consumption. */ String format(int var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/ObjectiveStat.java b/src/game/java/net/minecraft/stats/ObjectiveStat.java index 7aba33d2..23f1de58 100644 --- a/src/game/java/net/minecraft/stats/ObjectiveStat.java +++ b/src/game/java/net/minecraft/stats/ObjectiveStat.java @@ -5,13 +5,13 @@ import net.minecraft.scoreboard.ScoreDummyCriteria; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.scoreboard.ScoreDummyCriteria; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ObjectiveStat extends ScoreDummyCriteria { private final StatBase field_151459_g; @@ -32,4 +32,4 @@ public class ObjectiveStat extends ScoreDummyCriteria { super(parStatBase.statId); this.field_151459_g = parStatBase; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatBase.java b/src/game/java/net/minecraft/stats/StatBase.java index 322e8e3a..f2bc2167 100644 --- a/src/game/java/net/minecraft/stats/StatBase.java +++ b/src/game/java/net/minecraft/stats/StatBase.java @@ -15,13 +15,13 @@ import net.minecraft.util.IJsonSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,17 +33,19 @@ import net.minecraft.util.IJsonSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatBase { private static NumberFormat numberFormat = NumberFormat.getIntegerInstance(Locale.US); public static IStatType simpleStatType = new IStatType() { + @Override public String format(int parInt1) { return StatBase.numberFormat.format((long) parInt1); } }; private static DecimalFormat decimalFormat = new DecimalFormat("########0.00"); public static IStatType timeStatType = new IStatType() { + @Override public String format(int i) { double d0 = (double) i / 20.0D; double d1 = d0 / 60.0D; @@ -57,6 +59,7 @@ public class StatBase { } }; public static IStatType distanceStatType = new IStatType() { + @Override public String format(int i) { double d0 = (double) i / 100.0D; double d1 = d0 / 1000.0D; @@ -65,6 +68,7 @@ public class StatBase { } }; public static IStatType field_111202_k = new IStatType() { + @Override public String format(int i) { return StatBase.decimalFormat.format((double) i * 0.1D); } @@ -89,6 +93,7 @@ public class StatBase { IScoreObjectiveCriteria.INSTANCES.put(this.field_150957_c.getName(), this.field_150957_c); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -138,6 +143,7 @@ public class StatBase { return ichatcomponent; } + @Override public int hashCode() { return this.statId.hashCode(); } @@ -174,8 +180,9 @@ public class StatBase { } } + @Override public String toString() { return "Stat{id=" + this.statId + ", nameId=" + this.statName + ", awardLocallyOnly=" + this.isIndependent + ", formatter=" + this.type + ", objectiveCriteria=" + this.field_150957_c + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatBasic.java b/src/game/java/net/minecraft/stats/StatBasic.java index faabf623..6036cc0a 100644 --- a/src/game/java/net/minecraft/stats/StatBasic.java +++ b/src/game/java/net/minecraft/stats/StatBasic.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatBasic extends StatBase { public StatBasic(String statIdIn, IChatComponent statNameIn) { @@ -37,9 +37,10 @@ public class StatBasic extends StatBase { /** * + Register the stat into StatList. */ + @Override public StatBase registerStat() { super.registerStat(); StatList.generalStats.add(this); return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatCrafting.java b/src/game/java/net/minecraft/stats/StatCrafting.java index 3902c35f..36e9c948 100644 --- a/src/game/java/net/minecraft/stats/StatCrafting.java +++ b/src/game/java/net/minecraft/stats/StatCrafting.java @@ -7,13 +7,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatCrafting extends StatBase { private final Item field_150960_a; @@ -43,4 +43,4 @@ public class StatCrafting extends StatBase { public Item func_150959_a() { return this.field_150960_a; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatFileWriter.java b/src/game/java/net/minecraft/stats/StatFileWriter.java index 80ac9f9f..97217233 100644 --- a/src/game/java/net/minecraft/stats/StatFileWriter.java +++ b/src/game/java/net/minecraft/stats/StatFileWriter.java @@ -11,13 +11,13 @@ import net.minecraft.util.TupleIntJsonSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.TupleIntJsonSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatFileWriter { protected final Map statsData = Maps.newHashMap(); @@ -105,4 +105,4 @@ public class StatFileWriter { tupleintjsonserializable.setIntegerValue(i); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatList.java b/src/game/java/net/minecraft/stats/StatList.java index e016b09b..7b8637d6 100644 --- a/src/game/java/net/minecraft/stats/StatList.java +++ b/src/game/java/net/minecraft/stats/StatList.java @@ -19,18 +19,17 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ResourceLocation; -import net.starlikeclient.StarlikeSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +41,7 @@ import net.starlikeclient.StarlikeSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatList { protected static Map oneShotStats = Maps.newHashMap(); @@ -220,7 +219,7 @@ public class StatList { new ChatComponentTranslation("stat.workbenchInteraction", new Object[0]))).registerStat(); public static StatBase field_181723_aa = (new StatBasic("stat.chestOpened", new ChatComponentTranslation("stat.chestOpened", new Object[0]))).registerStat(); - public static final StatBase[] mineBlockStatArray = new StatBase[StarlikeSettings.blockIdLimit]; + public static final StatBase[] mineBlockStatArray = new StatBase[4096]; /** * + Tracks the number of items a given block or item has been crafted. */ @@ -390,4 +389,4 @@ public class StatList { mergeStatBases(parArrayOfStatBase, Blocks.grass, Blocks.dirt); mergeStatBases(parArrayOfStatBase, Blocks.farmland, Blocks.dirt); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/stats/StatisticsFile.java b/src/game/java/net/minecraft/stats/StatisticsFile.java index a46e8cb0..f31f724d 100644 --- a/src/game/java/net/minecraft/stats/StatisticsFile.java +++ b/src/game/java/net/minecraft/stats/StatisticsFile.java @@ -26,13 +26,13 @@ import net.minecraft.util.TupleIntJsonSerializable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.util.TupleIntJsonSerializable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatisticsFile extends StatFileWriter { private static final Logger logger = LogManager.getLogger(); @@ -200,6 +200,7 @@ public class StatisticsFile extends StatFileWriter { /** * + Triggers the logging of an achievement and attempts to announce to server */ + @Override public void unlockAchievement(EntityPlayer playerIn, StatBase statIn, int parInt1) { int i = statIn.isAchievement() ? this.readStat(statIn) : 0; super.unlockAchievement(playerIn, statIn, parInt1); @@ -222,4 +223,4 @@ public class StatisticsFile extends StatFileWriter { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/IHopper.java b/src/game/java/net/minecraft/tileentity/IHopper.java index 65b4897b..c1f96583 100644 --- a/src/game/java/net/minecraft/tileentity/IHopper.java +++ b/src/game/java/net/minecraft/tileentity/IHopper.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IHopper extends IInventory { /** @@ -46,4 +46,4 @@ public interface IHopper extends IInventory { * + Gets the world Z position for this hopper entity. */ double getZPos(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/MobSpawnerBaseLogic.java b/src/game/java/net/minecraft/tileentity/MobSpawnerBaseLogic.java index a55a9aa6..c0c541cd 100644 --- a/src/game/java/net/minecraft/tileentity/MobSpawnerBaseLogic.java +++ b/src/game/java/net/minecraft/tileentity/MobSpawnerBaseLogic.java @@ -23,13 +23,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MobSpawnerBaseLogic { public class WeightedRandomMinecart extends WeightedRandom.Item { @@ -401,4 +401,4 @@ public abstract class MobSpawnerBaseLogic { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntity.java b/src/game/java/net/minecraft/tileentity/TileEntity.java index 24d624a7..045408d4 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntity.java +++ b/src/game/java/net/minecraft/tileentity/TileEntity.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class TileEntity { private static final Logger logger = LogManager.getLogger(); @@ -97,7 +97,8 @@ public abstract class TileEntity { tileentity = (TileEntity) oclass.get(); } } catch (Exception exception) { - logger.error("Could not create TileEntity", exception); + logger.error("Could not create TileEntity"); + logger.error(exception); } if (tileentity != null) { @@ -110,6 +111,7 @@ public abstract class TileEntity { } protected World worldObj; + protected BlockPos pos = BlockPos.ORIGIN; protected boolean tileEntityInvalid; @@ -118,8 +120,11 @@ public abstract class TileEntity { protected Block blockType; + public boolean shouldCull = false; + public void addInfoToCrashReport(CrashReportCategory reportCategory) { reportCategory.addCrashSectionCallable("Name", new Callable() { + @Override public String call() throws Exception { return (String) TileEntity.classToNameMap.get(TileEntity.this.getClass()) + " // " + TileEntity.this.getClass().getName(); @@ -128,6 +133,7 @@ public abstract class TileEntity { if (this.worldObj != null) { CrashReportCategory.addBlockInfo(reportCategory, this.pos, this.getBlockType(), this.getBlockMetadata()); reportCategory.addCrashSectionCallable("Actual block type", new Callable() { + @Override public String call() throws Exception { int i = Block .getIdFromBlock(TileEntity.this.worldObj.getBlockState(TileEntity.this.pos).getBlock()); @@ -142,6 +148,7 @@ public abstract class TileEntity { } }); reportCategory.addCrashSectionCallable("Actual block data value", new Callable() { + @Override public String call() throws Exception { IBlockState iblockstate = TileEntity.this.worldObj.getBlockState(TileEntity.this.pos); int i = iblockstate.getBlock().getMetaFromState(iblockstate); @@ -292,4 +299,4 @@ public abstract class TileEntity { nbttagcompound.setInteger("z", this.pos.getZ()); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityBanner.java b/src/game/java/net/minecraft/tileentity/TileEntityBanner.java index 17f2b4d6..c9b137b2 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityBanner.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityBanner.java @@ -18,13 +18,13 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityBanner extends TileEntity { public static enum EnumBannerPattern { @@ -226,6 +226,7 @@ public class TileEntityBanner extends TileEntity { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); @@ -274,6 +275,7 @@ public class TileEntityBanner extends TileEntity { } } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.baseColor = nbttagcompound.getInteger("Base"); @@ -307,8 +309,9 @@ public class TileEntityBanner extends TileEntity { this.field_175119_g = true; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); func_181020_a(nbttagcompound, this.baseColor, this.patterns); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityBeacon.java b/src/game/java/net/minecraft/tileentity/TileEntityBeacon.java index 5a4221c8..572748e0 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityBeacon.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityBeacon.java @@ -32,13 +32,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityBeacon extends TileEntityLockable implements ITickable, IInventory { public static class BeamSegment { @@ -126,13 +126,16 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I } + @Override public void clear() { this.payment = null; } + @Override public void closeInventory(EntityPlayer player) { } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerBeacon(inventoryplayer, this); } @@ -141,6 +144,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int index, int count) { if (index == 0 && this.payment != null) { if (count >= this.payment.stackSize) { @@ -176,12 +180,14 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); return new S35PacketUpdateTileEntity(this.pos, 3, nbttagcompound); } + @Override public int getField(int parInt1) { switch (parInt1) { case 0: @@ -195,10 +201,12 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I } } + @Override public int getFieldCount() { return 3; } + @Override public String getGuiID() { return "minecraft:beacon"; } @@ -207,10 +215,12 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 1; } + @Override public double getMaxRenderDistanceSquared() { return 65536.0D; } @@ -219,6 +229,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.beacon"; } @@ -226,6 +237,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 1; } @@ -233,6 +245,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int index) { return index == 0 ? this.payment : null; } @@ -240,6 +253,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } @@ -248,6 +262,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int index, ItemStack stack) { return stack.getItem() == Items.netherite_ingot || stack.getItem() == Items.emerald || stack.getItem() == Items.diamond || stack.getItem() == Items.gold_ingot @@ -258,15 +273,18 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer player) { return this.worldObj.getTileEntity(this.pos) != this ? false : player.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D; } + @Override public void openInventory(EntityPlayer player) { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.primaryEffect = this.func_183001_h(nbttagcompound.getInteger("Primary")); @@ -274,6 +292,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I this.levels = nbttagcompound.getInteger("Levels"); } + @Override public boolean receiveClientEvent(int id, int type) { if (id == 1) { this.updateBeacon(); @@ -286,6 +305,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int index) { if (index == 0 && this.payment != null) { ItemStack itemstack = this.payment; @@ -296,6 +316,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I } } + @Override public void setField(int id, int value) { switch (id) { case 0: @@ -314,6 +335,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int index, ItemStack stack) { if (index == 0) { this.payment = stack; @@ -350,6 +372,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.worldObj.getTotalWorldTime() % 80L == 0L) { this.updateBeacon(); @@ -374,7 +397,7 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I EntitySheep.func_175513_a(EnumDyeColor.WHITE)); this.beamSegments.add(tileentitybeacon$beamsegment); boolean flag = true; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i1 = k + 1; i1 < 256; ++i1) { IBlockState iblockstate = this.worldObj.getBlockState(blockpos$mutableblockpos.func_181079_c(j, i1, l)); @@ -454,10 +477,11 @@ public class TileEntityBeacon extends TileEntityLockable implements ITickable, I } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setInteger("Primary", this.primaryEffect); nbttagcompound.setInteger("Secondary", this.secondaryEffect); nbttagcompound.setInteger("Levels", this.levels); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityBrewingStand.java b/src/game/java/net/minecraft/tileentity/TileEntityBrewingStand.java index 7d5cdc45..001eb001 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityBrewingStand.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityBrewingStand.java @@ -23,13 +23,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityBrewingStand extends TileEntityLockable implements ITickable, ISidedInventory { /** @@ -131,6 +131,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Returns true if automation can extract the given item in the given slot * from the given side. Args: slot, item, side */ + @Override public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) { return true; } @@ -139,10 +140,12 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Returns true if automation can insert the given item in the given slot from * the given side. Args: slot, item, side */ + @Override public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) { return this.isItemValidForSlot(index, itemStackIn); } + @Override public void clear() { for (int i = 0; i < this.brewingItemStacks.length; ++i) { this.brewingItemStacks[i] = null; @@ -150,9 +153,11 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka } + @Override public void closeInventory(EntityPlayer var1) { } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerBrewingStand(inventoryplayer, this); } @@ -161,6 +166,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int var2) { if (i >= 0 && i < this.brewingItemStacks.length) { ItemStack itemstack = this.brewingItemStacks[i]; @@ -183,6 +189,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka return aboolean; } + @Override public int getField(int i) { switch (i) { case 0: @@ -192,10 +199,12 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka } } + @Override public int getFieldCount() { return 1; } + @Override public String getGuiID() { return "minecraft:brewing_stand"; } @@ -204,6 +213,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -212,6 +222,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.brewing"; } @@ -230,10 +241,12 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.brewingItemStacks.length; } + @Override public int[] getSlotsForFace(EnumFacing side) { return side == EnumFacing.UP ? inputSlots : outputSlots; } @@ -241,6 +254,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return i >= 0 && i < this.brewingItemStacks.length ? this.brewingItemStacks[i] : null; } @@ -248,6 +262,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } @@ -256,6 +271,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return i == 3 ? itemstack.getItem().isPotionIngredient(itemstack) : itemstack.getItem() == Items.potionitem || itemstack.getItem() == Items.glass_bottle; @@ -265,15 +281,18 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getTileEntity(this.pos) != this ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D; } + @Override public void openInventory(EntityPlayer var1) { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -297,6 +316,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (i >= 0 && i < this.brewingItemStacks.length) { ItemStack itemstack = this.brewingItemStacks[i]; @@ -307,6 +327,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka } } + @Override public void setField(int i, int j) { switch (i) { case 0: @@ -319,6 +340,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { if (i >= 0 && i < this.brewingItemStacks.length) { this.brewingItemStacks[i] = itemstack; @@ -333,6 +355,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.brewTime > 0) { --this.brewTime; @@ -371,6 +394,7 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setShort("BrewTime", (short) this.brewTime); @@ -391,4 +415,4 @@ public class TileEntityBrewingStand extends TileEntityLockable implements ITicka } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityChest.java b/src/game/java/net/minecraft/tileentity/TileEntityChest.java index 5dbf29f1..128e033f 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityChest.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityChest.java @@ -21,13 +21,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityChest extends TileEntityLockable implements ITickable, IInventory { private ItemStack[] chestContents = new ItemStack[27]; @@ -77,6 +77,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } } + @Override public void clear() { for (int i = 0; i < this.chestContents.length; ++i) { this.chestContents[i] = null; @@ -84,6 +85,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } + @Override public void closeInventory(EntityPlayer entityplayer) { if (!entityplayer.isSpectator() && this.getBlockType() instanceof BlockChest) { --this.numPlayersUsing; @@ -94,6 +96,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { return new ContainerChest(inventoryplayer, this, entityplayer); } @@ -102,6 +105,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.chestContents[i] != null) { if (this.chestContents[i].stackSize <= j) { @@ -178,14 +182,17 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II return this.cachedChestType; } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } + @Override public String getGuiID() { return "minecraft:chest"; } @@ -194,6 +201,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -202,6 +210,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.chest"; } @@ -209,6 +218,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 27; } @@ -216,6 +226,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.chestContents[i]; } @@ -223,6 +234,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } @@ -230,6 +242,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + invalidates a tile entity */ + @Override public void invalidate() { super.invalidate(); this.updateContainingBlockInfo(); @@ -249,6 +262,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -257,12 +271,14 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getTileEntity(this.pos) != this ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D; } + @Override public void openInventory(EntityPlayer entityplayer) { if (!entityplayer.isSpectator()) { if (this.numPlayersUsing < 0) { @@ -277,6 +293,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -295,6 +312,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } + @Override public boolean receiveClientEvent(int i, int j) { if (i == 1) { this.numPlayersUsing = j; @@ -307,6 +325,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.chestContents[i] != null) { ItemStack itemstack = this.chestContents[i]; @@ -321,6 +340,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II this.customName = name; } + @Override public void setField(int var1, int var2) { } @@ -328,6 +348,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.chestContents[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -340,6 +361,7 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { this.checkForAdjacentChests(); int i = this.pos.getX(); @@ -419,11 +441,13 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } + @Override public void updateContainingBlockInfo() { super.updateContainingBlockInfo(); this.adjacentChestChecked = false; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); NBTTagList nbttaglist = new NBTTagList(); @@ -443,4 +467,4 @@ public class TileEntityChest extends TileEntityLockable implements ITickable, II } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityCommandBlock.java b/src/game/java/net/minecraft/tileentity/TileEntityCommandBlock.java index 9b76848a..29286725 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityCommandBlock.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityCommandBlock.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,48 +32,57 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityCommandBlock extends TileEntity { private final CommandBlockLogic commandBlockLogic = new CommandBlockLogic() { + @Override public int func_145751_f() { return 0; } + @Override public void func_145757_a(ByteBuf bytebuf) { bytebuf.writeInt(TileEntityCommandBlock.this.pos.getX()); bytebuf.writeInt(TileEntityCommandBlock.this.pos.getY()); bytebuf.writeInt(TileEntityCommandBlock.this.pos.getZ()); } + @Override public Entity getCommandSenderEntity() { return null; } + @Override public World getEntityWorld() { return TileEntityCommandBlock.this.getWorld(); } + @Override public BlockPos getPosition() { return TileEntityCommandBlock.this.pos; } + @Override public Vec3 getPositionVector() { return new Vec3((double) TileEntityCommandBlock.this.pos.getX() + 0.5D, (double) TileEntityCommandBlock.this.pos.getY() + 0.5D, (double) TileEntityCommandBlock.this.pos.getZ() + 0.5D); } + @Override public void setCommand(String s) { super.setCommand(s); TileEntityCommandBlock.this.markDirty(); } + @Override public void updateCommand() { TileEntityCommandBlock.this.getWorld().markBlockForUpdate(TileEntityCommandBlock.this.pos); } }; + @Override public boolean func_183000_F() { return true; } @@ -91,19 +100,22 @@ public class TileEntityCommandBlock extends TileEntity { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); return new S35PacketUpdateTileEntity(this.pos, 2, nbttagcompound); } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.commandBlockLogic.readDataFromNBT(nbttagcompound); } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); this.commandBlockLogic.writeDataToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityComparator.java b/src/game/java/net/minecraft/tileentity/TileEntityComparator.java index c1c814b9..e474f260 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityComparator.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityComparator.java @@ -5,13 +5,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityComparator extends TileEntity { private int outputSignal; @@ -32,6 +32,7 @@ public class TileEntityComparator extends TileEntity { return this.outputSignal; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.outputSignal = nbttagcompound.getInteger("OutputSignal"); @@ -41,8 +42,9 @@ public class TileEntityComparator extends TileEntity { this.outputSignal = parInt1; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setInteger("OutputSignal", this.outputSignal); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityDaylightDetector.java b/src/game/java/net/minecraft/tileentity/TileEntityDaylightDetector.java index 9cd8bfc2..ab3e13c8 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityDaylightDetector.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityDaylightDetector.java @@ -6,13 +6,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,12 +24,13 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityDaylightDetector extends TileEntity implements ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.worldObj != null && !this.worldObj.isRemote && this.worldObj.getTotalWorldTime() % 20L == 0L) { this.blockType = this.getBlockType(); @@ -39,4 +40,4 @@ public class TileEntityDaylightDetector extends TileEntity implements ITickable } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityDispenser.java b/src/game/java/net/minecraft/tileentity/TileEntityDispenser.java index 5f0e89f9..d89384aa 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityDispenser.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityDispenser.java @@ -13,13 +13,13 @@ import net.minecraft.nbt.NBTTagList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.nbt.NBTTagList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityDispenser extends TileEntityLockable implements IInventory { private static final EaglercraftRandom RNG = new EaglercraftRandom(); @@ -53,6 +53,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor return -1; } + @Override public void clear() { for (int i = 0; i < this.stacks.length; ++i) { this.stacks[i] = null; @@ -60,9 +61,11 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor } + @Override public void closeInventory(EntityPlayer var1) { } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerDispenser(inventoryplayer, this); } @@ -71,6 +74,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.stacks[i] != null) { if (this.stacks[i].stackSize <= j) { @@ -105,14 +109,17 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor return i; } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } + @Override public String getGuiID() { return "minecraft:dispenser"; } @@ -121,6 +128,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -129,6 +137,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.dispenser"; } @@ -136,6 +145,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return 9; } @@ -143,6 +153,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.stacks[i]; } @@ -150,6 +161,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null; } @@ -158,6 +170,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -166,15 +179,18 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getTileEntity(this.pos) != this ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D; } + @Override public void openInventory(EntityPlayer var1) { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -197,6 +213,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.stacks[i] != null) { ItemStack itemstack = this.stacks[i]; @@ -211,6 +228,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor this.customName = customName; } + @Override public void setField(int var1, int var2) { } @@ -218,6 +236,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.stacks[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -227,6 +246,7 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor this.markDirty(); } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); NBTTagList nbttaglist = new NBTTagList(); @@ -246,4 +266,4 @@ public class TileEntityDispenser extends TileEntityLockable implements IInventor } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityDropper.java b/src/game/java/net/minecraft/tileentity/TileEntityDropper.java index 39ff7f1d..1bc233b0 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityDropper.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityDropper.java @@ -3,13 +3,13 @@ package net.minecraft.tileentity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,9 +21,10 @@ package net.minecraft.tileentity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityDropper extends TileEntityDispenser { + @Override public String getGuiID() { return "minecraft:dropper"; } @@ -32,7 +33,8 @@ public class TileEntityDropper extends TileEntityDispenser { * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.dropper"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityEnchantmentTable.java b/src/game/java/net/minecraft/tileentity/TileEntityEnchantmentTable.java index 42621b84..c95cc678 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityEnchantmentTable.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityEnchantmentTable.java @@ -16,13 +16,13 @@ import net.minecraft.world.IInteractionObject; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.IInteractionObject; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, IInteractionObject { private static EaglercraftRandom rand = new EaglercraftRandom(); @@ -50,6 +50,7 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, public float field_145924_q; private String customName; + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerEnchantment(inventoryplayer, this.worldObj, this.pos); } @@ -58,11 +59,13 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public String getGuiID() { return "minecraft:enchanting_table"; } @@ -71,6 +74,7 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.enchant"; } @@ -78,10 +82,12 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); if (nbttagcompound.hasKey("CustomName", 8)) { @@ -97,6 +103,7 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { this.bookSpreadPrev = this.bookSpread; this.bookRotationPrev = this.bookRotation; @@ -158,6 +165,7 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, this.pageFlip += this.field_145929_l; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); if (this.hasCustomName()) { @@ -165,4 +173,4 @@ public class TileEntityEnchantmentTable extends TileEntity implements ITickable, } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityEndPortal.java b/src/game/java/net/minecraft/tileentity/TileEntityEndPortal.java index 28a6aa6d..2ddfd774 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityEndPortal.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityEndPortal.java @@ -3,13 +3,13 @@ package net.minecraft.tileentity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.tileentity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityEndPortal extends TileEntity { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityEnderChest.java b/src/game/java/net/minecraft/tileentity/TileEntityEnderChest.java index 5ada98a1..94393b67 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityEnderChest.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityEnderChest.java @@ -7,13 +7,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityEnderChest extends TileEntity implements ITickable { public float lidAngle; @@ -47,6 +47,7 @@ public class TileEntityEnderChest extends TileEntity implements ITickable { /** * + invalidates a tile entity */ + @Override public void invalidate() { this.updateContainingBlockInfo(); super.invalidate(); @@ -57,6 +58,7 @@ public class TileEntityEnderChest extends TileEntity implements ITickable { this.worldObj.addBlockEvent(this.pos, Blocks.ender_chest, 1, this.numPlayersUsing); } + @Override public boolean receiveClientEvent(int i, int j) { if (i == 1) { this.numPlayersUsing = j; @@ -69,6 +71,7 @@ public class TileEntityEnderChest extends TileEntity implements ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (++this.ticksSinceSync % 20 * 4 == 0) { this.worldObj.addBlockEvent(this.pos, Blocks.ender_chest, 1, this.numPlayersUsing); @@ -112,4 +115,4 @@ public class TileEntityEnderChest extends TileEntity implements ITickable { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityFlowerPot.java b/src/game/java/net/minecraft/tileentity/TileEntityFlowerPot.java index a5cd5516..11f43f68 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityFlowerPot.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityFlowerPot.java @@ -9,13 +9,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityFlowerPot extends TileEntity { private Item flowerPotItem; @@ -46,6 +46,7 @@ public class TileEntityFlowerPot extends TileEntity { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); @@ -62,6 +63,7 @@ public class TileEntityFlowerPot extends TileEntity { return this.flowerPotItem; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); if (nbttagcompound.hasKey("Item", 8)) { @@ -78,10 +80,11 @@ public class TileEntityFlowerPot extends TileEntity { this.flowerPotData = potData; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); ResourceLocation resourcelocation = (ResourceLocation) Item.itemRegistry.getNameForObject(this.flowerPotItem); nbttagcompound.setString("Item", resourcelocation == null ? "" : resourcelocation.toString()); nbttagcompound.setInteger("Data", this.flowerPotData); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityFurnace.java b/src/game/java/net/minecraft/tileentity/TileEntityFurnace.java index b8148006..1b6e23e3 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityFurnace.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityFurnace.java @@ -28,13 +28,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityFurnace extends TileEntityLockable implements ITickable, ISidedInventory { private static final int[] slotsTop = new int[] { 0 }; @@ -120,6 +120,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Returns true if automation can extract the given item in the given slot * from the given side. Args: slot, item, side */ + @Override public boolean canExtractItem(int i, ItemStack itemstack, EnumFacing enumfacing) { if (enumfacing == EnumFacing.DOWN && i == 1) { Item item = itemstack.getItem(); @@ -135,6 +136,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Returns true if automation can insert the given item in the given slot from * the given side. Args: slot, item, side */ + @Override public boolean canInsertItem(int i, ItemStack itemstack, EnumFacing var3) { return this.isItemValidForSlot(i, itemstack); } @@ -159,6 +161,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, } } + @Override public void clear() { for (int i = 0; i < this.furnaceItemStacks.length; ++i) { this.furnaceItemStacks[i] = null; @@ -166,9 +169,11 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, } + @Override public void closeInventory(EntityPlayer var1) { } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerFurnace(inventoryplayer, this); } @@ -177,6 +182,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.furnaceItemStacks[i] != null) { if (this.furnaceItemStacks[i].stackSize <= j) { @@ -200,6 +206,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, return 200; } + @Override public int getField(int i) { switch (i) { case 0: @@ -215,10 +222,12 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, } } + @Override public int getFieldCount() { return 4; } + @Override public String getGuiID() { return "minecraft:furnace"; } @@ -227,6 +236,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -235,6 +245,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.furnaceCustomName : "container.furnace"; } @@ -242,10 +253,12 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.furnaceItemStacks.length; } + @Override public int[] getSlotsForFace(EnumFacing enumfacing) { return enumfacing == EnumFacing.DOWN ? slotsBottom : (enumfacing == EnumFacing.UP ? slotsTop : slotsSides); } @@ -253,6 +266,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.furnaceItemStacks[i]; } @@ -260,6 +274,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.furnaceCustomName != null && this.furnaceCustomName.length() > 0; } @@ -275,6 +290,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return i == 2 ? false : (i != 1 ? true : isItemFuel(itemstack) || SlotFurnaceFuel.isBucket(itemstack)); } @@ -283,15 +299,18 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getTileEntity(this.pos) != this ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D; } + @Override public void openInventory(EntityPlayer var1) { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -318,6 +337,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.furnaceItemStacks[i] != null) { ItemStack itemstack = this.furnaceItemStacks[i]; @@ -332,6 +352,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, this.furnaceCustomName = parString1; } + @Override public void setField(int i, int j) { switch (i) { case 0: @@ -353,6 +374,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { boolean flag = itemstack != null && itemstack.isItemEqual(this.furnaceItemStacks[i]) && ItemStack.areItemStackTagsEqual(itemstack, this.furnaceItemStacks[i]); @@ -399,6 +421,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { boolean flag = this.isBurning(); boolean flag1 = false; @@ -449,6 +472,7 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setShort("BurnTime", (short) this.furnaceBurnTime); @@ -471,4 +495,4 @@ public class TileEntityFurnace extends TileEntityLockable implements ITickable, } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityHopper.java b/src/game/java/net/minecraft/tileentity/TileEntityHopper.java index e5f30b81..00a05f67 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityHopper.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityHopper.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITickable { private static boolean canCombine(ItemStack stack1, ItemStack stack2) { @@ -306,6 +306,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi private int transferCooldown = -1; + @Override public void clear() { for (int i = 0; i < this.inventory.length; ++i) { this.inventory[i] = null; @@ -313,9 +314,11 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi } + @Override public void closeInventory(EntityPlayer var1) { } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { return new ContainerHopper(inventoryplayer, this, entityplayer); } @@ -324,6 +327,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Removes up to a specified number of items from an inventory slot and * returns them in a new stack. */ + @Override public ItemStack decrStackSize(int i, int j) { if (this.inventory[i] != null) { if (this.inventory[i].stackSize <= j) { @@ -343,14 +347,17 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi } } + @Override public int getField(int var1) { return 0; } + @Override public int getFieldCount() { return 0; } + @Override public String getGuiID() { return "minecraft:hopper"; } @@ -373,6 +380,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Returns the maximum stack size for a inventory slot. Seems to always be 64, * possibly will be extended. */ + @Override public int getInventoryStackLimit() { return 64; } @@ -381,6 +389,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Gets the name of this command sender (usually username, but possibly * "Rcon") */ + @Override public String getName() { return this.hasCustomName() ? this.customName : "container.hopper"; } @@ -388,6 +397,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Returns the number of slots in the inventory. */ + @Override public int getSizeInventory() { return this.inventory.length; } @@ -395,6 +405,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Returns the stack in the given slot. */ + @Override public ItemStack getStackInSlot(int i) { return this.inventory[i]; } @@ -402,6 +413,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Gets the world X position for this hopper entity. */ + @Override public double getXPos() { return (double) this.pos.getX() + 0.5D; } @@ -409,6 +421,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Gets the world Y position for this hopper entity. */ + @Override public double getYPos() { return (double) this.pos.getY() + 0.5D; } @@ -416,6 +429,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Gets the world Z position for this hopper entity. */ + @Override public double getZPos() { return (double) this.pos.getZ() + 0.5D; } @@ -423,6 +437,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Returns true if this thing is named */ + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } @@ -480,6 +495,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Returns true if automation is allowed to insert the given stack (ignoring * stack size) into the given slot. */ + @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return true; } @@ -492,6 +508,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Do not make give this method the name canInteractWith because it clashes * with Container */ + @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return this.worldObj.getTileEntity(this.pos) != this ? false : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, @@ -502,6 +519,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + For tile entities, ensures the chunk containing the tile entity is saved to * disk later - the game won't think it hasn't changed and skip it. */ + @Override public void markDirty() { super.markDirty(); } @@ -510,9 +528,11 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi return this.transferCooldown <= 1; } + @Override public void openInventory(EntityPlayer var1) { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); @@ -536,6 +556,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Removes a stack from the given slot and returns it. */ + @Override public ItemStack removeStackFromSlot(int i) { if (this.inventory[i] != null) { ItemStack itemstack = this.inventory[i]; @@ -550,6 +571,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi this.customName = customNameIn; } + @Override public void setField(int var1, int var2) { } @@ -557,6 +579,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi * + Sets the given item stack to the specified slot in the inventory (can be * crafting or armor sections). */ + @Override public void setInventorySlotContents(int i, ItemStack itemstack) { this.inventory[i] = itemstack; if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) { @@ -600,6 +623,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { if (this.worldObj != null && !this.worldObj.isRemote) { --this.transferCooldown; @@ -636,6 +660,7 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi } } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); NBTTagList nbttaglist = new NBTTagList(); @@ -656,4 +681,4 @@ public class TileEntityHopper extends TileEntityLockable implements IHopper, ITi } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityLockable.java b/src/game/java/net/minecraft/tileentity/TileEntityLockable.java index 115c37a0..6277142e 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityLockable.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityLockable.java @@ -11,13 +11,13 @@ import net.minecraft.world.LockCode; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.LockCode; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class TileEntityLockable extends TileEntity implements IInteractionObject, ILockableContainer { private LockCode code = LockCode.EMPTY_CODE; @@ -38,28 +38,34 @@ public abstract class TileEntityLockable extends TileEntity implements IInteract * + Get the formatted ChatComponent that will be used for the sender's username * in chat */ + @Override public IChatComponent getDisplayName() { return (IChatComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatComponentTranslation(this.getName(), new Object[0])); } + @Override public LockCode getLockCode() { return this.code; } + @Override public boolean isLocked() { return this.code != null && !this.code.isEmpty(); } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.code = LockCode.fromNBT(nbttagcompound); } + @Override public void setLockCode(LockCode code) { this.code = code; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); if (this.code != null) { @@ -67,4 +73,4 @@ public abstract class TileEntityLockable extends TileEntity implements IInteract } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityMobSpawner.java b/src/game/java/net/minecraft/tileentity/TileEntityMobSpawner.java index 0efa608a..22f7567b 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityMobSpawner.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityMobSpawner.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,22 +29,26 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityMobSpawner extends TileEntity implements ITickable { private final MobSpawnerBaseLogic spawnerLogic = new MobSpawnerBaseLogic() { + @Override public void func_98267_a(int i) { TileEntityMobSpawner.this.worldObj.addBlockEvent(TileEntityMobSpawner.this.pos, Blocks.mob_spawner, i, 0); } + @Override public BlockPos getSpawnerPosition() { return TileEntityMobSpawner.this.pos; } + @Override public World getSpawnerWorld() { return TileEntityMobSpawner.this.worldObj; } + @Override public void setRandomEntity( MobSpawnerBaseLogic.WeightedRandomMinecart mobspawnerbaselogic$weightedrandomminecart) { super.setRandomEntity(mobspawnerbaselogic$weightedrandomminecart); @@ -55,6 +59,7 @@ public class TileEntityMobSpawner extends TileEntity implements ITickable { } }; + @Override public boolean func_183000_F() { return true; } @@ -64,6 +69,7 @@ public class TileEntityMobSpawner extends TileEntity implements ITickable { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); @@ -75,11 +81,13 @@ public class TileEntityMobSpawner extends TileEntity implements ITickable { return this.spawnerLogic; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.spawnerLogic.readFromNBT(nbttagcompound); } + @Override public boolean receiveClientEvent(int i, int j) { return this.spawnerLogic.setDelayToMin(i) ? true : super.receiveClientEvent(i, j); } @@ -87,12 +95,14 @@ public class TileEntityMobSpawner extends TileEntity implements ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { this.spawnerLogic.updateSpawner(); } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); this.spawnerLogic.writeToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityNote.java b/src/game/java/net/minecraft/tileentity/TileEntityNote.java index 84a303f5..9586da74 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityNote.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityNote.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityNote extends TileEntity { public byte note; @@ -42,6 +42,7 @@ public class TileEntityNote extends TileEntity { this.markDirty(); } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.note = nbttagcompound.getByte("note"); @@ -72,8 +73,9 @@ public class TileEntityNote extends TileEntity { } } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setByte("note", this.note); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntityPiston.java b/src/game/java/net/minecraft/tileentity/TileEntityPiston.java index 83ee7681..e57f1574 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntityPiston.java +++ b/src/game/java/net/minecraft/tileentity/TileEntityPiston.java @@ -16,13 +16,13 @@ import net.minecraft.util.ITickable; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntityPiston extends TileEntity implements ITickable { private IBlockState pistonState; @@ -72,6 +72,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { } + @Override public int getBlockMetadata() { return 0; } @@ -158,6 +159,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.pistonState = Block.getBlockById(nbttagcompound.getInteger("blockId")) @@ -174,6 +176,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { /** * + Like the old updateEntity(), except more generic. */ + @Override public void update() { this.lastProgress = this.progress; if (this.lastProgress >= 1.0F) { @@ -198,6 +201,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { } } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setInteger("blockId", Block.getIdFromBlock(this.pistonState.getBlock())); @@ -206,4 +210,4 @@ public class TileEntityPiston extends TileEntity implements ITickable { nbttagcompound.setFloat("progress", this.lastProgress); nbttagcompound.setBoolean("extending", this.extending); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntitySign.java b/src/game/java/net/minecraft/tileentity/TileEntitySign.java index 4d9fe38b..c9558bf0 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntitySign.java +++ b/src/game/java/net/minecraft/tileentity/TileEntitySign.java @@ -25,13 +25,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntitySign extends TileEntity { public final IChatComponent[] signText = new IChatComponent[] { new ChatComponentText(""), @@ -65,42 +65,52 @@ public class TileEntitySign extends TileEntity { public boolean executeCommand(final EntityPlayer playerIn) { ICommandSender icommandsender = new ICommandSender() { + @Override public void addChatMessage(IChatComponent var1) { } + @Override public boolean canCommandSenderUseCommand(int j, String var2) { return j <= 2; } + @Override public Entity getCommandSenderEntity() { return playerIn; } + @Override public IChatComponent getDisplayName() { return playerIn.getDisplayName(); } + @Override public World getEntityWorld() { return playerIn.getEntityWorld(); } + @Override public String getName() { return playerIn.getName(); } + @Override public BlockPos getPosition() { return TileEntitySign.this.pos; } + @Override public Vec3 getPositionVector() { return new Vec3((double) TileEntitySign.this.pos.getX() + 0.5D, (double) TileEntitySign.this.pos.getY() + 0.5D, (double) TileEntitySign.this.pos.getZ() + 0.5D); } + @Override public boolean sendCommandFeedback() { return false; } + @Override public void setCommandStat(CommandResultStats.Type commandresultstats$type, int j) { TileEntitySign.this.stats.func_179672_a(this, commandresultstats$type, j); } @@ -120,6 +130,7 @@ public class TileEntitySign extends TileEntity { return true; } + @Override public boolean func_183000_F() { return true; } @@ -129,6 +140,7 @@ public class TileEntitySign extends TileEntity { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { IChatComponent[] aichatcomponent = new IChatComponent[4]; System.arraycopy(this.signText, 0, aichatcomponent, 0, 4); @@ -162,46 +174,57 @@ public class TileEntitySign extends TileEntity { return this.stats; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { this.isEditable = false; super.readFromNBT(nbttagcompound); ICommandSender icommandsender = new ICommandSender() { + @Override public void addChatMessage(IChatComponent var1) { } + @Override public boolean canCommandSenderUseCommand(int var1, String var2) { return true; } + @Override public Entity getCommandSenderEntity() { return null; } + @Override public IChatComponent getDisplayName() { return new ChatComponentText(this.getName()); } + @Override public World getEntityWorld() { return TileEntitySign.this.worldObj; } + @Override public String getName() { return "Sign"; } + @Override public BlockPos getPosition() { return TileEntitySign.this.pos; } + @Override public Vec3 getPositionVector() { return new Vec3((double) TileEntitySign.this.pos.getX() + 0.5D, (double) TileEntitySign.this.pos.getY() + 0.5D, (double) TileEntitySign.this.pos.getZ() + 0.5D); } + @Override public boolean sendCommandFeedback() { return false; } + @Override public void setCommandStat(CommandResultStats.Type var1, int var2) { } }; @@ -241,6 +264,7 @@ public class TileEntitySign extends TileEntity { this.player = playerIn; } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); @@ -251,4 +275,4 @@ public class TileEntitySign extends TileEntity { this.stats.writeStatsToNBT(nbttagcompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/tileentity/TileEntitySkull.java b/src/game/java/net/minecraft/tileentity/TileEntitySkull.java index 9a1f3086..b8a05c5e 100644 --- a/src/game/java/net/minecraft/tileentity/TileEntitySkull.java +++ b/src/game/java/net/minecraft/tileentity/TileEntitySkull.java @@ -11,13 +11,13 @@ import net.minecraft.util.StringUtils; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.StringUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TileEntitySkull extends TileEntity { public static GameProfile updateGameprofile(GameProfile input) { @@ -46,6 +46,7 @@ public class TileEntitySkull extends TileEntity { * used to sync tile entity data from the server to the client easily. For * example this is used by signs to synchronise the text to be displayed. */ + @Override public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); @@ -64,6 +65,7 @@ public class TileEntitySkull extends TileEntity { return this.skullType; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.skullType = nbttagcompound.getByte("SkullType"); @@ -102,6 +104,7 @@ public class TileEntitySkull extends TileEntity { this.markDirty(); } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setByte("SkullType", (byte) (this.skullType & 255)); @@ -113,4 +116,4 @@ public class TileEntitySkull extends TileEntity { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/AxisAlignedBB.java b/src/game/java/net/minecraft/util/AxisAlignedBB.java index 51a05333..b233d8d4 100644 --- a/src/game/java/net/minecraft/util/AxisAlignedBB.java +++ b/src/game/java/net/minecraft/util/AxisAlignedBB.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AxisAlignedBB { /** @@ -353,6 +353,7 @@ public class AxisAlignedBB { this.maxZ + z); } + @Override public String toString() { return "box[" + this.minX + ", " + this.minY + ", " + this.minZ + " -> " + this.maxX + ", " + this.maxY + ", " + this.maxZ + "]"; @@ -367,4 +368,4 @@ public class AxisAlignedBB { double d5 = Math.max(this.maxZ, other.maxZ); return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/BlockPos.java b/src/game/java/net/minecraft/util/BlockPos.java index 0cfd2a12..c7143b1e 100644 --- a/src/game/java/net/minecraft/util/BlockPos.java +++ b/src/game/java/net/minecraft/util/BlockPos.java @@ -9,13 +9,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,45 +27,9 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockPos extends Vec3i { - public static final class MutableBlockPos extends BlockPos { - - public MutableBlockPos() { - this(0, 0, 0); - } - - public MutableBlockPos(int x_, int y_, int z_) { - super(x_, y_, z_); - } - - public BlockPos.MutableBlockPos func_181079_c(int parInt1, int parInt2, int parInt3) { - this.x = parInt1; - this.y = parInt2; - this.z = parInt3; - return this; - } - - public int getX() { - return this.x; - } - - public int getY() { - return this.y; - } - - public int getZ() { - return this.z; - } - - public void setPos(int i, int j, int k) { - this.x = i; - this.y = j; - this.z = k; - } - } - /** * + The BlockPos with all coordinates 0 */ @@ -77,7 +41,6 @@ public class BlockPos extends Vec3i { private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS; private static final long X_MASK = (1L << NUM_X_BITS) - 1L; private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L; - private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; /** @@ -95,15 +58,15 @@ public class BlockPos extends Vec3i { * given corners */ public static Iterable getAllInBox(BlockPos from, BlockPos to) { - final BlockPos blockpos = new BlockPos(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), - Math.min(from.getZ(), to.getZ())); - final BlockPos blockpos1 = new BlockPos(Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), - Math.max(from.getZ(), to.getZ())); + final BlockPos blockpos = new BlockPos(Math.min(from.x, to.x), Math.min(from.y, to.y), Math.min(from.z, to.z)); + final BlockPos blockpos1 = new BlockPos(Math.max(from.x, to.x), Math.max(from.y, to.y), Math.max(from.z, to.z)); return new Iterable() { + @Override public Iterator iterator() { return new AbstractIterator() { private BlockPos lastReturned = null; + @Override protected BlockPos computeNext() { if (this.lastReturned == null) { this.lastReturned = blockpos; @@ -111,17 +74,17 @@ public class BlockPos extends Vec3i { } else if (this.lastReturned.equals(blockpos1)) { return (BlockPos) this.endOfData(); } else { - int i = this.lastReturned.getX(); - int j = this.lastReturned.getY(); - int k = this.lastReturned.getZ(); - if (i < blockpos1.getX()) { + int i = this.lastReturned.x; + int j = this.lastReturned.y; + int k = this.lastReturned.z; + if (i < blockpos1.x) { ++i; - } else if (j < blockpos1.getY()) { - i = blockpos.getX(); + } else if (j < blockpos1.y) { + i = blockpos.x; ++j; - } else if (k < blockpos1.getZ()) { - i = blockpos.getX(); - j = blockpos.getY(); + } else if (k < blockpos1.z) { + i = blockpos.x; + j = blockpos.y; ++k; } @@ -139,35 +102,34 @@ public class BlockPos extends Vec3i { * method is used, the resulting BlockPos instances can only be used inside the * iteration loop. */ - public static Iterable getAllInBoxMutable(BlockPos from, BlockPos to) { - final BlockPos blockpos = new BlockPos(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), - Math.min(from.getZ(), to.getZ())); - final BlockPos blockpos1 = new BlockPos(Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), - Math.max(from.getZ(), to.getZ())); - return new Iterable() { - public Iterator iterator() { - return new AbstractIterator() { - private BlockPos.MutableBlockPos theBlockPos = null; + public static Iterable getAllInBoxMutable(BlockPos from, BlockPos to) { + final BlockPos blockpos = new BlockPos(Math.min(from.x, to.x), Math.min(from.y, to.y), Math.min(from.z, to.z)); + final BlockPos blockpos1 = new BlockPos(Math.max(from.x, to.x), Math.max(from.y, to.y), Math.max(from.z, to.z)); + return new Iterable() { + @Override + public Iterator iterator() { + return new AbstractIterator() { + private BlockPos theBlockPos = null; - protected BlockPos.MutableBlockPos computeNext() { + @Override + protected BlockPos computeNext() { if (this.theBlockPos == null) { - this.theBlockPos = new BlockPos.MutableBlockPos(blockpos.getX(), blockpos.getY(), - blockpos.getZ()); + this.theBlockPos = new BlockPos(blockpos.x, blockpos.y, blockpos.z); return this.theBlockPos; } else if (this.theBlockPos.equals(blockpos1)) { - return (BlockPos.MutableBlockPos) this.endOfData(); + return (BlockPos) this.endOfData(); } else { - int i = this.theBlockPos.getX(); - int j = this.theBlockPos.getY(); - int k = this.theBlockPos.getZ(); - if (i < blockpos1.getX()) { + int i = this.theBlockPos.x; + int j = this.theBlockPos.y; + int k = this.theBlockPos.z; + if (i < blockpos1.x) { ++i; - } else if (j < blockpos1.getY()) { - i = blockpos.getX(); + } else if (j < blockpos1.y) { + i = blockpos.x; ++j; - } else if (k < blockpos1.getZ()) { - i = blockpos.getX(); - j = blockpos.getY(); + } else if (k < blockpos1.z) { + i = blockpos.x; + j = blockpos.y; ++k; } @@ -182,6 +144,10 @@ public class BlockPos extends Vec3i { }; } + public BlockPos() { + super(0, 0, 0); + } + public BlockPos(double x, double y, double z) { super(x, y, z); } @@ -199,7 +165,7 @@ public class BlockPos extends Vec3i { } public BlockPos(Vec3i source) { - this(source.getX(), source.getY(), source.getZ()); + this(source.x, source.y, source.z); } /** @@ -207,31 +173,44 @@ public class BlockPos extends Vec3i { */ public BlockPos add(double x, double y, double z) { return x == 0.0D && y == 0.0D && z == 0.0D ? this - : new BlockPos((double) this.getX() + x, (double) this.getY() + y, (double) this.getZ() + z); + : new BlockPos((double) this.x + x, (double) this.y + y, (double) this.z + z); } /** * + Add the given coordinates to the coordinates of this BlockPos */ public BlockPos add(int x, int y, int z) { - return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.getX() + x, this.getY() + y, this.getZ() + z); + return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.x + x, this.y + y, this.z + z); + } + + /** + * eagler + */ + /** + * + Add the given coordinates to the coordinates of this BlockPos + */ + public BlockPos add(int x, int y, int z, BlockPos dst) { + dst.x = this.x + x; + dst.y = this.y + y; + dst.z = this.z + z; + return dst; } /** * + Add the given coordinates to the coordinates of this BlockPos */ public BlockPos add(Vec3i vec) { - return vec.getX() == 0 && vec.getY() == 0 && vec.getZ() == 0 ? this - : new BlockPos(this.getX() + vec.getX(), this.getY() + vec.getY(), this.getZ() + vec.getZ()); + return vec.x == 0 && vec.y == 0 && vec.z == 0 ? this + : new BlockPos(this.x + vec.x, this.y + vec.y, this.z + vec.z); } /** * + Calculate the cross product of this and the given Vector */ + @Override public BlockPos crossProduct(Vec3i vec3i) { - return new BlockPos(this.getY() * vec3i.getZ() - this.getZ() * vec3i.getY(), - this.getZ() * vec3i.getX() - this.getX() * vec3i.getZ(), - this.getX() * vec3i.getY() - this.getY() * vec3i.getX()); + return new BlockPos(this.y * vec3i.z - this.z * vec3i.y, this.z * vec3i.x - this.x * vec3i.z, + this.x * vec3i.y - this.y * vec3i.x); } /** @@ -288,6 +267,13 @@ public class BlockPos extends Vec3i { return this.offset(EnumFacing.EAST, n); } + public BlockPos func_181079_c(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + return this; + } + /** * + Offset this BlockPos 1 block in northern direction */ @@ -342,9 +328,9 @@ public class BlockPos extends Vec3i { } public BlockPos offsetFaster(EnumFacing facing, BlockPos ret) { - ret.x = this.getX() + facing.getFrontOffsetX(); - ret.y = this.getY() + facing.getFrontOffsetY(); - ret.z = this.getZ() + facing.getFrontOffsetZ(); + ret.x = this.x + facing.getFrontOffsetX(); + ret.y = this.y + facing.getFrontOffsetY(); + ret.z = this.z + facing.getFrontOffsetZ(); return ret; } @@ -379,16 +365,16 @@ public class BlockPos extends Vec3i { * + Subtract the given Vector from this BlockPos */ public BlockPos subtract(Vec3i vec) { - return vec.getX() == 0 && vec.getY() == 0 && vec.getZ() == 0 ? this - : new BlockPos(this.getX() - vec.getX(), this.getY() - vec.getY(), this.getZ() - vec.getZ()); + return vec.x == 0 && vec.y == 0 && vec.z == 0 ? this + : new BlockPos(this.x - vec.x, this.y - vec.y, this.z - vec.z); } /** * + Serialize this BlockPos into a long value */ public long toLong() { - return ((long) this.getX() & X_MASK) << X_SHIFT | ((long) this.getY() & Y_MASK) << Y_SHIFT - | ((long) this.getZ() & Z_MASK) << 0; + return ((long) this.x & X_MASK) << X_SHIFT | ((long) this.y & Y_MASK) << Y_SHIFT + | ((long) this.z & Z_MASK) << 0; } /** @@ -444,4 +430,5 @@ public class BlockPos extends Vec3i { public BlockPos west(int n) { return this.offset(EnumFacing.WEST, n); } -} \ No newline at end of file + +} diff --git a/src/game/java/net/minecraft/util/Cartesian.java b/src/game/java/net/minecraft/util/Cartesian.java index 5be7929a..e2993a93 100644 --- a/src/game/java/net/minecraft/util/Cartesian.java +++ b/src/game/java/net/minecraft/util/Cartesian.java @@ -16,13 +16,13 @@ import com.google.common.collect.UnmodifiableIterator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,13 +34,14 @@ import com.google.common.collect.UnmodifiableIterator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Cartesian { static class GetList implements Function> { private GetList() { } + @Override public List apply(Object[] aobject) { return (List) Arrays.asList((Object[]) aobject); } @@ -71,6 +72,7 @@ public class Cartesian { Arrays.fill(this.results, (Object) null); } + @Override public boolean hasNext() { if (this.index == -2) { this.index = 0; @@ -109,6 +111,7 @@ public class Cartesian { } } + @Override public T[] next() { if (!this.hasNext()) { throw new NoSuchElementException(); @@ -132,6 +135,7 @@ public class Cartesian { this.iterables = iterables; } + @Override public Iterator iterator() { return (Iterator) (this.iterables.length <= 0 ? Collections.singletonList((T[]) Cartesian.createArray(this.clazz, 0)).iterator() @@ -167,4 +171,4 @@ public class Cartesian { return (T[]) ((Object[]) arraylist.toArray(createArray(clazz, arraylist.size()))); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatAllowedCharacters.java b/src/game/java/net/minecraft/util/ChatAllowedCharacters.java index 778b52b5..e6f83959 100644 --- a/src/game/java/net/minecraft/util/ChatAllowedCharacters.java +++ b/src/game/java/net/minecraft/util/ChatAllowedCharacters.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatAllowedCharacters { /** @@ -52,4 +52,4 @@ public class ChatAllowedCharacters { public static boolean isAllowedCharacter(char character) { return character != 167 && character >= 32 && character != 127; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentProcessor.java b/src/game/java/net/minecraft/util/ChatComponentProcessor.java index 5bf4ad6c..da5be1f2 100644 --- a/src/game/java/net/minecraft/util/ChatComponentProcessor.java +++ b/src/game/java/net/minecraft/util/ChatComponentProcessor.java @@ -11,13 +11,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentProcessor { public static IChatComponent processComponent(ICommandSender commandSender, IChatComponent component, @@ -88,4 +88,4 @@ public class ChatComponentProcessor { return (IChatComponent) object; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentScore.java b/src/game/java/net/minecraft/util/ChatComponentScore.java index 581bf935..3a31c380 100644 --- a/src/game/java/net/minecraft/util/ChatComponentScore.java +++ b/src/game/java/net/minecraft/util/ChatComponentScore.java @@ -11,13 +11,13 @@ import net.minecraft.server.MinecraftServer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.server.MinecraftServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentScore extends ChatComponentStyle { private final String name; @@ -48,6 +48,7 @@ public class ChatComponentScore extends ChatComponentStyle { * + Creates a copy of this component. Almost a deep copy, except the style is * shallow-copied. */ + @Override public ChatComponentScore createCopy() { ChatComponentScore chatcomponentscore = new ChatComponentScore(this.name, this.objective); chatcomponentscore.setValue(this.value); @@ -61,6 +62,7 @@ public class ChatComponentScore extends ChatComponentStyle { return chatcomponentscore; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -85,6 +87,7 @@ public class ChatComponentScore extends ChatComponentStyle { * + Gets the text of this component, without any special formatting codes * added, for chat. TODO: why is this two different methods? */ + @Override public String getUnformattedTextForChat() { MinecraftServer minecraftserver = MinecraftServer.getServer(); if (minecraftserver != null && StringUtils.isNullOrEmpty(this.value)) { @@ -108,8 +111,9 @@ public class ChatComponentScore extends ChatComponentStyle { this.value = valueIn; } + @Override public String toString() { return "ScoreComponent{name=\'" + this.name + '\'' + "objective=\'" + this.objective + '\'' + ", siblings=" + this.siblings + ", style=" + this.getChatStyle() + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentSelector.java b/src/game/java/net/minecraft/util/ChatComponentSelector.java index 6def42b4..ee424101 100644 --- a/src/game/java/net/minecraft/util/ChatComponentSelector.java +++ b/src/game/java/net/minecraft/util/ChatComponentSelector.java @@ -5,13 +5,13 @@ import java.util.List; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentSelector extends ChatComponentStyle { private final String selector; @@ -36,6 +36,7 @@ public class ChatComponentSelector extends ChatComponentStyle { * + Creates a copy of this component. Almost a deep copy, except the style is * shallow-copied. */ + @Override public ChatComponentSelector createCopy() { ChatComponentSelector chatcomponentselector = new ChatComponentSelector(this.selector); chatcomponentselector.setChatStyle(this.getChatStyle().createShallowCopy()); @@ -48,6 +49,7 @@ public class ChatComponentSelector extends ChatComponentStyle { return chatcomponentselector; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -70,12 +72,14 @@ public class ChatComponentSelector extends ChatComponentStyle { * + Gets the text of this component, without any special formatting codes * added, for chat. TODO: why is this two different methods? */ + @Override public String getUnformattedTextForChat() { return this.selector; } + @Override public String toString() { return "SelectorComponent{pattern=\'" + this.selector + '\'' + ", siblings=" + this.siblings + ", style=" + this.getChatStyle() + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentStyle.java b/src/game/java/net/minecraft/util/ChatComponentStyle.java index 410ab27a..902ffc0a 100644 --- a/src/game/java/net/minecraft/util/ChatComponentStyle.java +++ b/src/game/java/net/minecraft/util/ChatComponentStyle.java @@ -10,13 +10,13 @@ import com.google.common.collect.Lists; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import com.google.common.collect.Lists; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ChatComponentStyle implements IChatComponent { /** @@ -39,11 +39,13 @@ public abstract class ChatComponentStyle implements IChatComponent { public static Iterator createDeepCopyIterator(Iterable components) { Iterator iterator = Iterators.concat( Iterators.transform(components.iterator(), new Function>() { + @Override public Iterator apply(IChatComponent ichatcomponent) { return ichatcomponent.iterator(); } })); iterator = Iterators.transform(iterator, new Function() { + @Override public IChatComponent apply(IChatComponent ichatcomponent) { IChatComponent ichatcomponent1 = ichatcomponent.createCopy(); ichatcomponent1.setChatStyle(ichatcomponent1.getChatStyle().createDeepCopy()); @@ -65,6 +67,7 @@ public abstract class ChatComponentStyle implements IChatComponent { /** * + Appends the given component to the end of this one. */ + @Override public IChatComponent appendSibling(IChatComponent component) { component.getChatStyle().setParentStyle(this.getChatStyle()); this.siblings.add(component); @@ -74,10 +77,12 @@ public abstract class ChatComponentStyle implements IChatComponent { /** * + Appends the given text to the end of this component. */ + @Override public IChatComponent appendText(String text) { return this.appendSibling(new ChatComponentText(text)); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -90,6 +95,7 @@ public abstract class ChatComponentStyle implements IChatComponent { } } + @Override public ChatStyle getChatStyle() { if (this.style == null) { this.style = new ChatStyle(); @@ -109,6 +115,7 @@ public abstract class ChatComponentStyle implements IChatComponent { /** * + Gets the text of this component, with formatting codes added for rendering. */ + @Override public final String getFormattedText() { StringBuilder stringbuilder = new StringBuilder(); @@ -124,6 +131,7 @@ public abstract class ChatComponentStyle implements IChatComponent { /** * + Gets the sibling components of this one. */ + @Override public List getSiblings() { return this.siblings; } @@ -132,6 +140,7 @@ public abstract class ChatComponentStyle implements IChatComponent { * + Get the text of this component, and all child components, with all * special formatting codes removed. */ + @Override public final String getUnformattedText() { StringBuilder stringbuilder = new StringBuilder(); @@ -142,15 +151,18 @@ public abstract class ChatComponentStyle implements IChatComponent { return stringbuilder.toString(); } + @Override public int hashCode() { return 31 * this.style.hashCode() + this.siblings.hashCode(); } + @Override public Iterator iterator() { return Iterators.concat(Iterators.forArray(new ChatComponentStyle[] { this }), createDeepCopyIterator(this.siblings)); } + @Override public IChatComponent setChatStyle(ChatStyle style) { this.style = style; @@ -161,7 +173,8 @@ public abstract class ChatComponentStyle implements IChatComponent { return this; } + @Override public String toString() { return "BaseComponent{style=" + this.style + ", siblings=" + this.siblings + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentText.java b/src/game/java/net/minecraft/util/ChatComponentText.java index 29561c9d..ca631a33 100644 --- a/src/game/java/net/minecraft/util/ChatComponentText.java +++ b/src/game/java/net/minecraft/util/ChatComponentText.java @@ -5,13 +5,13 @@ import java.util.List; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentText extends ChatComponentStyle { private final String text; @@ -36,6 +36,7 @@ public class ChatComponentText extends ChatComponentStyle { * + Creates a copy of this component. Almost a deep copy, except the style is * shallow-copied. */ + @Override public ChatComponentText createCopy() { ChatComponentText chatcomponenttext = new ChatComponentText(this.text); chatcomponenttext.setChatStyle(this.getChatStyle().createShallowCopy()); @@ -48,6 +49,7 @@ public class ChatComponentText extends ChatComponentStyle { return chatcomponenttext; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -73,12 +75,14 @@ public class ChatComponentText extends ChatComponentStyle { * + Gets the text of this component, without any special formatting codes * added, for chat. TODO: why is this two different methods? */ + @Override public String getUnformattedTextForChat() { return this.text; } + @Override public String toString() { return "TextComponent{text=\'" + this.text + '\'' + ", siblings=" + this.siblings + ", style=" + this.getChatStyle() + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentTranslation.java b/src/game/java/net/minecraft/util/ChatComponentTranslation.java index ac283515..12f27c43 100644 --- a/src/game/java/net/minecraft/util/ChatComponentTranslation.java +++ b/src/game/java/net/minecraft/util/ChatComponentTranslation.java @@ -15,13 +15,13 @@ import net.lax1dude.eaglercraft.v1_8.HString; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.lax1dude.eaglercraft.v1_8.HString; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentTranslation extends ChatComponentStyle { public static final Pattern stringVariablePattern = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); @@ -60,6 +60,7 @@ public class ChatComponentTranslation extends ChatComponentStyle { * + Creates a copy of this component. Almost a deep copy, except the style is * shallow-copied. */ + @Override public ChatComponentTranslation createCopy() { Object[] aobject = new Object[this.formatArgs.length]; @@ -111,6 +112,7 @@ public class ChatComponentTranslation extends ChatComponentStyle { } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -152,6 +154,7 @@ public class ChatComponentTranslation extends ChatComponentStyle { * + Gets the text of this component, without any special formatting codes * added, for chat. TODO: why is this two different methods? */ + @Override public String getUnformattedTextForChat() { this.ensureInitialized(); StringBuilder stringbuilder = new StringBuilder(); @@ -163,6 +166,7 @@ public class ChatComponentTranslation extends ChatComponentStyle { return stringbuilder.toString(); } + @Override public int hashCode() { int i = super.hashCode(); i = 31 * i + this.key.hashCode(); @@ -223,11 +227,13 @@ public class ChatComponentTranslation extends ChatComponentStyle { } } + @Override public Iterator iterator() { this.ensureInitialized(); return Iterators.concat(createDeepCopyIterator(this.children), createDeepCopyIterator(this.siblings)); } + @Override public IChatComponent setChatStyle(ChatStyle chatstyle) { super.setChatStyle(chatstyle); @@ -247,8 +253,9 @@ public class ChatComponentTranslation extends ChatComponentStyle { return this; } + @Override public String toString() { return "TranslatableComponent{key=\'" + this.key + '\'' + ", args=" + Arrays.toString(this.formatArgs) + ", siblings=" + this.siblings + ", style=" + this.getChatStyle() + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatComponentTranslationFormatException.java b/src/game/java/net/minecraft/util/ChatComponentTranslationFormatException.java index dfacbc20..adbb4119 100644 --- a/src/game/java/net/minecraft/util/ChatComponentTranslationFormatException.java +++ b/src/game/java/net/minecraft/util/ChatComponentTranslationFormatException.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.HString; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.HString; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatComponentTranslationFormatException extends IllegalArgumentException { public ChatComponentTranslationFormatException(ChatComponentTranslation component, int index) { @@ -37,4 +37,4 @@ public class ChatComponentTranslationFormatException extends IllegalArgumentExce public ChatComponentTranslationFormatException(ChatComponentTranslation component, Throwable cause) { super(HString.format("Error while parsing: %s", new Object[] { component }), cause); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ChatStyle.java b/src/game/java/net/minecraft/util/ChatStyle.java index b86e3b7b..f0e2de47 100644 --- a/src/game/java/net/minecraft/util/ChatStyle.java +++ b/src/game/java/net/minecraft/util/ChatStyle.java @@ -11,13 +11,13 @@ import net.minecraft.event.HoverEvent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,10 +29,11 @@ import net.minecraft.event.HoverEvent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChatStyle { public static class Serializer implements JSONTypeCodec { + @Override public ChatStyle deserialize(JSONObject jsonobject) throws JSONException { ChatStyle chatstyle = new ChatStyle(); if (jsonobject == null) { @@ -106,6 +107,7 @@ public class ChatStyle { } } + @Override public JSONObject serialize(ChatStyle chatstyle) { if (chatstyle.isEmpty()) { return null; @@ -174,6 +176,7 @@ public class ChatStyle { * + Creates a deep copy of this style. No changes to this instance or its * parent style will be reflected in the copy. */ + @Override public ChatStyle createDeepCopy() { return this; } @@ -184,6 +187,7 @@ public class ChatStyle { * WILL be reflected in both this instance and the copy, wherever either does * not override a value. */ + @Override public ChatStyle createShallowCopy() { return this; } @@ -191,6 +195,7 @@ public class ChatStyle { /** * + Whether or not text of this ChatStyle should be in bold. */ + @Override public boolean getBold() { return false; } @@ -198,6 +203,7 @@ public class ChatStyle { /** * + The effective chat click event. */ + @Override public ClickEvent getChatClickEvent() { return null; } @@ -205,6 +211,7 @@ public class ChatStyle { /** * + The effective chat hover event. */ + @Override public HoverEvent getChatHoverEvent() { return null; } @@ -212,6 +219,7 @@ public class ChatStyle { /** * + Gets the effective color of this ChatStyle. */ + @Override public EnumChatFormatting getColor() { return null; } @@ -220,6 +228,7 @@ public class ChatStyle { * + Gets the equivalent text formatting code for this style, without the * initial section sign (U+00A7) character. */ + @Override public String getFormattingCode() { return ""; } @@ -227,6 +236,7 @@ public class ChatStyle { /** * + Get the text to be inserted into Chat when the component is shift-clicked */ + @Override public String getInsertion() { return null; } @@ -234,6 +244,7 @@ public class ChatStyle { /** * + Whether or not text of this ChatStyle should be italicized. */ + @Override public boolean getItalic() { return false; } @@ -241,6 +252,7 @@ public class ChatStyle { /** * + Whether or not text of this ChatStyle should be obfuscated. */ + @Override public boolean getObfuscated() { return false; } @@ -248,6 +260,7 @@ public class ChatStyle { /** * + Whether or not to format text of this ChatStyle using strikethrough. */ + @Override public boolean getStrikethrough() { return false; } @@ -255,6 +268,7 @@ public class ChatStyle { /** * + Whether or not text of this ChatStyle should be underlined. */ + @Override public boolean getUnderlined() { return false; } @@ -264,6 +278,7 @@ public class ChatStyle { * if, e.g., the parent style is bold and you want text of this style to be * unbolded. */ + @Override public ChatStyle setBold(Boolean boldIn) { throw new UnsupportedOperationException(); } @@ -272,6 +287,7 @@ public class ChatStyle { * + Sets the event that should be run when text of this ChatStyle is clicked * on. */ + @Override public ChatStyle setChatClickEvent(ClickEvent event) { throw new UnsupportedOperationException(); } @@ -280,6 +296,7 @@ public class ChatStyle { * + Sets the event that should be run when text of this ChatStyle is hovered * over. */ + @Override public ChatStyle setChatHoverEvent(HoverEvent event) { throw new UnsupportedOperationException(); } @@ -288,6 +305,7 @@ public class ChatStyle { * + Sets the color for this ChatStyle to the given value. Only use color values * for this; set other values using the specific methods. */ + @Override public ChatStyle setColor(EnumChatFormatting color) { throw new UnsupportedOperationException(); } @@ -297,6 +315,7 @@ public class ChatStyle { * false if, e.g., the parent style is italicized and you want to override that * for this style. */ + @Override public ChatStyle setItalic(Boolean italic) { throw new UnsupportedOperationException(); } @@ -306,6 +325,7 @@ public class ChatStyle { * false if, e.g., the parent style is obfuscated and you want to override that * for this style. */ + @Override public ChatStyle setObfuscated(Boolean obfuscated) { throw new UnsupportedOperationException(); } @@ -315,6 +335,7 @@ public class ChatStyle { * value. Without a parent, obvious defaults are used (bold: false, underlined: * false, etc). */ + @Override public ChatStyle setParentStyle(ChatStyle parent) { throw new UnsupportedOperationException(); } @@ -324,6 +345,7 @@ public class ChatStyle { * Set to false if, e.g., the parent style uses strikethrough and you want to * override that for this style. */ + @Override public ChatStyle setStrikethrough(Boolean strikethrough) { throw new UnsupportedOperationException(); } @@ -333,10 +355,12 @@ public class ChatStyle { * false if, e.g., the parent style is underlined and you want to override that * for this style. */ + @Override public ChatStyle setUnderlined(Boolean underlined) { throw new UnsupportedOperationException(); } + @Override public String toString() { return "Style.ROOT"; } @@ -392,6 +416,7 @@ public class ChatStyle { return chatstyle; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -549,6 +574,7 @@ public class ChatStyle { return this.underlined == null ? this.getParent().getUnderlined() : this.underlined.booleanValue(); } + @Override public int hashCode() { int i = this.color.hashCode(); i = 31 * i + this.bold.hashCode(); @@ -666,10 +692,11 @@ public class ChatStyle { return this; } + @Override public String toString() { return "Style{hasParent=" + (this.parentStyle != null) + ", color=" + this.color + ", bold=" + this.bold + ", italic=" + this.italic + ", underlined=" + this.underlined + ", obfuscated=" + this.obfuscated + ", clickEvent=" + this.getChatClickEvent() + ", hoverEvent=" + this.getChatHoverEvent() + ", insertion=" + this.getInsertion() + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ClassInheritanceMultiMap.java b/src/game/java/net/minecraft/util/ClassInheritanceMultiMap.java index 60679005..8086058f 100644 --- a/src/game/java/net/minecraft/util/ClassInheritanceMultiMap.java +++ b/src/game/java/net/minecraft/util/ClassInheritanceMultiMap.java @@ -14,13 +14,13 @@ import com.google.common.collect.Sets; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import com.google.common.collect.Sets; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClassInheritanceMultiMap extends AbstractSet { private static final Set> field_181158_a = Sets.newHashSet(); @@ -52,6 +52,7 @@ public class ClassInheritanceMultiMap extends AbstractSet { } + @Override public boolean add(T parObject) { for (Class oclass : this.knownKeys) { if (oclass.isAssignableFrom(parObject.getClass())) { @@ -62,6 +63,7 @@ public class ClassInheritanceMultiMap extends AbstractSet { return true; } + @Override public boolean contains(Object parObject) { return Iterators.contains(this.getByClass(parObject.getClass()).iterator(), parObject); } @@ -103,6 +105,7 @@ public class ClassInheritanceMultiMap extends AbstractSet { public Iterable getByClass(final Class clazz) { return new Iterable() { + @Override public Iterator iterator() { List list = (List) ClassInheritanceMultiMap.this.map .get(ClassInheritanceMultiMap.this.func_181157_b(clazz)); @@ -116,11 +119,13 @@ public class ClassInheritanceMultiMap extends AbstractSet { }; } + @Override public Iterator iterator() { return this.field_181745_e.isEmpty() ? Iterators.emptyIterator() : Iterators.unmodifiableIterator(this.field_181745_e.iterator()); } + @Override public boolean remove(Object parObject) { Object object = parObject; boolean flag = false; @@ -137,7 +142,8 @@ public class ClassInheritanceMultiMap extends AbstractSet { return flag; } + @Override public int size() { return this.field_181745_e.size(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/CombatEntry.java b/src/game/java/net/minecraft/util/CombatEntry.java index 93a532ae..676c45e5 100644 --- a/src/game/java/net/minecraft/util/CombatEntry.java +++ b/src/game/java/net/minecraft/util/CombatEntry.java @@ -5,13 +5,13 @@ import net.minecraft.entity.EntityLivingBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.EntityLivingBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CombatEntry { private final DamageSource damageSrc; @@ -73,4 +73,4 @@ public class CombatEntry { public boolean isLivingDamageSrc() { return this.damageSrc.getEntity() instanceof EntityLivingBase; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/CombatTracker.java b/src/game/java/net/minecraft/util/CombatTracker.java index 8efaa2dc..4dffbb37 100644 --- a/src/game/java/net/minecraft/util/CombatTracker.java +++ b/src/game/java/net/minecraft/util/CombatTracker.java @@ -14,13 +14,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CombatTracker { /** @@ -244,4 +244,4 @@ public class CombatTracker { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/DamageSource.java b/src/game/java/net/minecraft/util/DamageSource.java index de137425..c847d419 100644 --- a/src/game/java/net/minecraft/util/DamageSource.java +++ b/src/game/java/net/minecraft/util/DamageSource.java @@ -10,13 +10,13 @@ import net.minecraft.world.Explosion; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.Explosion; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DamageSource { public static DamageSource inFire = (new DamageSource("inFire")).setFireDamage(); @@ -269,4 +269,4 @@ public class DamageSource { this.projectile = true; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EnchantmentNameParts.java b/src/game/java/net/minecraft/util/EnchantmentNameParts.java index f52f8a16..ea8a2e46 100644 --- a/src/game/java/net/minecraft/util/EnchantmentNameParts.java +++ b/src/game/java/net/minecraft/util/EnchantmentNameParts.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EnchantmentNameParts { private static final EnchantmentNameParts instance = new EnchantmentNameParts(); @@ -61,4 +61,4 @@ public class EnchantmentNameParts { public void reseedRandomGenerator(long seed) { this.rand.setSeed(seed); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EntityDamageSource.java b/src/game/java/net/minecraft/util/EntityDamageSource.java index a3abab46..76e7f44a 100644 --- a/src/game/java/net/minecraft/util/EntityDamageSource.java +++ b/src/game/java/net/minecraft/util/EntityDamageSource.java @@ -8,13 +8,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDamageSource extends DamageSource { protected Entity damageSourceEntity; @@ -44,6 +44,7 @@ public class EntityDamageSource extends DamageSource { /** * + Gets the death message that is displayed when the player dies */ + @Override public IChatComponent getDeathMessage(EntityLivingBase entitylivingbase) { ItemStack itemstack = this.damageSourceEntity instanceof EntityLivingBase ? ((EntityLivingBase) this.damageSourceEntity).getHeldItem() @@ -58,6 +59,7 @@ public class EntityDamageSource extends DamageSource { new Object[] { entitylivingbase.getDisplayName(), this.damageSourceEntity.getDisplayName() }); } + @Override public Entity getEntity() { return this.damageSourceEntity; } @@ -70,6 +72,7 @@ public class EntityDamageSource extends DamageSource { * + Return whether this damage source will have its damage amount scaled based * on the current difficulty. */ + @Override public boolean isDifficultyScaled() { return this.damageSourceEntity != null && this.damageSourceEntity instanceof EntityLivingBase && !(this.damageSourceEntity instanceof EntityPlayer); @@ -82,4 +85,4 @@ public class EntityDamageSource extends DamageSource { this.isThornsDamage = true; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EntityDamageSourceIndirect.java b/src/game/java/net/minecraft/util/EntityDamageSourceIndirect.java index 1dec0e06..d17a08e7 100644 --- a/src/game/java/net/minecraft/util/EntityDamageSourceIndirect.java +++ b/src/game/java/net/minecraft/util/EntityDamageSourceIndirect.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EntityDamageSourceIndirect extends EntityDamageSource { private Entity indirectEntity; @@ -38,6 +38,7 @@ public class EntityDamageSourceIndirect extends EntityDamageSource { /** * + Gets the death message that is displayed when the player dies */ + @Override public IChatComponent getDeathMessage(EntityLivingBase entitylivingbase) { IChatComponent ichatcomponent = this.indirectEntity == null ? this.damageSourceEntity.getDisplayName() : this.indirectEntity.getDisplayName(); @@ -53,11 +54,13 @@ public class EntityDamageSourceIndirect extends EntityDamageSource { : new ChatComponentTranslation(s, new Object[] { entitylivingbase.getDisplayName(), ichatcomponent }); } + @Override public Entity getEntity() { return this.indirectEntity; } + @Override public Entity getSourceOfDamage() { return this.damageSourceEntity; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EntitySelectors.java b/src/game/java/net/minecraft/util/EntitySelectors.java index 245aa0b0..35e626d0 100644 --- a/src/game/java/net/minecraft/util/EntitySelectors.java +++ b/src/game/java/net/minecraft/util/EntitySelectors.java @@ -13,13 +13,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class EntitySelectors { public static class ArmoredMob implements Predicate { @@ -41,6 +41,7 @@ public final class EntitySelectors { this.armor = armor; } + @Override public boolean apply(Entity entity) { if (!entity.isEntityAlive()) { return false; @@ -57,6 +58,7 @@ public final class EntitySelectors { } public static final Predicate selectAnything = new Predicate() { + @Override public boolean apply(Entity entity) { return entity.isEntityAlive(); } @@ -66,11 +68,13 @@ public final class EntitySelectors { * anything */ public static final Predicate IS_STANDALONE = new Predicate() { + @Override public boolean apply(Entity entity) { return entity.isEntityAlive() && entity.riddenByEntity == null && entity.ridingEntity == null; } }; public static final Predicate selectInventories = new Predicate() { + @Override public boolean apply(Entity entity) { return entity instanceof IInventory && entity.isEntityAlive(); } @@ -81,8 +85,9 @@ public final class EntitySelectors { * spectating */ public static final Predicate NOT_SPECTATING = new Predicate() { + @Override public boolean apply(Entity entity) { return !(entity instanceof EntityPlayer) || !((EntityPlayer) entity).isSpectator(); } }; -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EnumChatFormatting.java b/src/game/java/net/minecraft/util/EnumChatFormatting.java index a0cfca87..f0b50f53 100644 --- a/src/game/java/net/minecraft/util/EnumChatFormatting.java +++ b/src/game/java/net/minecraft/util/EnumChatFormatting.java @@ -11,13 +11,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumChatFormatting { BLACK("BLACK", '0', 0), DARK_BLUE("DARK_BLUE", '1', 1), DARK_GREEN("DARK_GREEN", '2', 2), @@ -165,7 +165,8 @@ public enum EnumChatFormatting { return this.fancyStyling; } + @Override public String toString() { return this.controlString; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EnumFacing.java b/src/game/java/net/minecraft/util/EnumFacing.java index 9908e951..adf90396 100644 --- a/src/game/java/net/minecraft/util/EnumFacing.java +++ b/src/game/java/net/minecraft/util/EnumFacing.java @@ -12,13 +12,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumFacing implements IStringSerializable { DOWN(0, 1, -1, "down", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.Y, new Vec3i(0, -1, 0)), @@ -68,10 +68,12 @@ public enum EnumFacing implements IStringSerializable { this.plane = plane; } + @Override public boolean apply(EnumFacing enumfacing) { return enumfacing != null && enumfacing.getAxis() == this; } + @Override public String getName() { return this.name; } @@ -95,6 +97,7 @@ public enum EnumFacing implements IStringSerializable { return this.plane == EnumFacing.Plane.VERTICAL; } + @Override public String toString() { return this.name; } @@ -117,6 +120,7 @@ public enum EnumFacing implements IStringSerializable { return this.offset; } + @Override public String toString() { return this.description; } @@ -140,6 +144,7 @@ public enum EnumFacing implements IStringSerializable { this.facingsArray = facingsArray; } + @Override public boolean apply(EnumFacing enumfacing) { return enumfacing != null && enumfacing.getAxis().getPlane() == this; } @@ -148,6 +153,7 @@ public enum EnumFacing implements IStringSerializable { return facingsArray; } + @Override public Iterator iterator() { return Iterators.forArray(facingsArray); } @@ -332,6 +338,7 @@ public enum EnumFacing implements IStringSerializable { return this.index; } + @Override public String getName() { return this.name; } @@ -461,7 +468,8 @@ public enum EnumFacing implements IStringSerializable { } } + @Override public String toString() { return this.name; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EnumParticleTypes.java b/src/game/java/net/minecraft/util/EnumParticleTypes.java index 77a1c0a7..5bbbd63d 100644 --- a/src/game/java/net/minecraft/util/EnumParticleTypes.java +++ b/src/game/java/net/minecraft/util/EnumParticleTypes.java @@ -9,13 +9,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumParticleTypes { EXPLOSION_NORMAL("explode", 0, true), EXPLOSION_LARGE("largeexplode", 1, true), @@ -114,4 +114,4 @@ public enum EnumParticleTypes { public boolean hasArguments() { return this.argumentCount > 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/EnumWorldBlockLayer.java b/src/game/java/net/minecraft/util/EnumWorldBlockLayer.java index a9c3694d..cebbfdf2 100644 --- a/src/game/java/net/minecraft/util/EnumWorldBlockLayer.java +++ b/src/game/java/net/minecraft/util/EnumWorldBlockLayer.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumWorldBlockLayer { SOLID("Solid"), CUTOUT_MIPPED("Mipped Cutout"), CUTOUT("Cutout"), TRANSLUCENT("Translucent"), @@ -35,7 +35,8 @@ public enum EnumWorldBlockLayer { this.layerName = layerNameIn; } + @Override public String toString() { return this.layerName; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/FoodStats.java b/src/game/java/net/minecraft/util/FoodStats.java index 9ea8c544..72c959f5 100644 --- a/src/game/java/net/minecraft/util/FoodStats.java +++ b/src/game/java/net/minecraft/util/FoodStats.java @@ -9,13 +9,13 @@ import net.minecraft.world.EnumDifficulty; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.EnumDifficulty; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FoodStats { /** @@ -159,4 +159,4 @@ public class FoodStats { parNBTTagCompound.setFloat("foodSaturationLevel", this.foodSaturationLevel); parNBTTagCompound.setFloat("foodExhaustionLevel", this.foodExhaustionLevel); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/FrameTimer.java b/src/game/java/net/minecraft/util/FrameTimer.java index d5bd4f68..d6f00f31 100644 --- a/src/game/java/net/minecraft/util/FrameTimer.java +++ b/src/game/java/net/minecraft/util/FrameTimer.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FrameTimer { private final long[] field_181752_a = new long[240]; @@ -65,4 +65,4 @@ public class FrameTimer { public int func_181751_b(int parInt1) { return parInt1 % 240; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IChatComponent.java b/src/game/java/net/minecraft/util/IChatComponent.java index f044601b..addf53ef 100644 --- a/src/game/java/net/minecraft/util/IChatComponent.java +++ b/src/game/java/net/minecraft/util/IChatComponent.java @@ -12,13 +12,13 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IChatComponent extends Iterable { public static class Serializer implements JSONTypeCodec { @@ -39,6 +39,9 @@ public interface IChatComponent extends Iterable { * So sorry for this implementation */ public static String componentToJson(IChatComponent component) { + if (component == null) { + return "null"; + } if ((component instanceof ChatComponentText) && component.getChatStyle().isEmpty() && component.getSiblings().isEmpty()) { String escaped = new JSONObject().put("E", component.getUnformattedTextForChat()).toString(); @@ -55,6 +58,7 @@ public interface IChatComponent extends Iterable { return (IChatComponent) JSONTypeProvider.deserialize(json, IChatComponent.class); } + @Override public IChatComponent deserialize(Object parJsonElement) throws JSONException { if (parJsonElement instanceof String) { return new ChatComponentText((String) parJsonElement); @@ -138,6 +142,7 @@ public interface IChatComponent extends Iterable { } } + @Override public Object serialize(IChatComponent ichatcomponent) { if (ichatcomponent instanceof ChatComponentText && ichatcomponent.getChatStyle().isEmpty() && ichatcomponent.getSiblings().isEmpty()) { @@ -268,4 +273,4 @@ public interface IChatComponent extends Iterable { String getUnformattedTextForChat(); IChatComponent setChatStyle(ChatStyle var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IJsonSerializable.java b/src/game/java/net/minecraft/util/IJsonSerializable.java index dc751f75..f6e1b433 100644 --- a/src/game/java/net/minecraft/util/IJsonSerializable.java +++ b/src/game/java/net/minecraft/util/IJsonSerializable.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IJsonSerializable { void fromJson(Object var1); @@ -30,4 +30,4 @@ public interface IJsonSerializable { * + Gets the JsonElement that can be serialized. */ Object getSerializableElement(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IObjectIntIterable.java b/src/game/java/net/minecraft/util/IObjectIntIterable.java index 3171aea9..30164155 100644 --- a/src/game/java/net/minecraft/util/IObjectIntIterable.java +++ b/src/game/java/net/minecraft/util/IObjectIntIterable.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IObjectIntIterable extends Iterable { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IProgressUpdate.java b/src/game/java/net/minecraft/util/IProgressUpdate.java index 3e217048..3ecd2f66 100644 --- a/src/game/java/net/minecraft/util/IProgressUpdate.java +++ b/src/game/java/net/minecraft/util/IProgressUpdate.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProgressUpdate { /** @@ -49,4 +49,4 @@ public interface IProgressUpdate { * Args: loadProgress */ void setLoadingProgress(int var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IRegistry.java b/src/game/java/net/minecraft/util/IRegistry.java index ac7c5225..ebdab468 100644 --- a/src/game/java/net/minecraft/util/IRegistry.java +++ b/src/game/java/net/minecraft/util/IRegistry.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRegistry extends Iterable { V getObject(K var1); @@ -30,4 +30,4 @@ public interface IRegistry extends Iterable { * + Register an object on this registry. */ void putObject(K var1, V var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IStringSerializable.java b/src/game/java/net/minecraft/util/IStringSerializable.java index 8880deac..2fdb49f1 100644 --- a/src/game/java/net/minecraft/util/IStringSerializable.java +++ b/src/game/java/net/minecraft/util/IStringSerializable.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IStringSerializable { String getName(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IThreadListener.java b/src/game/java/net/minecraft/util/IThreadListener.java index b23f09da..9fbdec5a 100644 --- a/src/game/java/net/minecraft/util/IThreadListener.java +++ b/src/game/java/net/minecraft/util/IThreadListener.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,8 +21,8 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IThreadListener { void addScheduledTask(Runnable var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ITickable.java b/src/game/java/net/minecraft/util/ITickable.java index 101c0c40..4deb614b 100644 --- a/src/game/java/net/minecraft/util/ITickable.java +++ b/src/game/java/net/minecraft/util/ITickable.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITickable { /** * + Like the old updateEntity(), except more generic. */ void update(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IntHashMap.java b/src/game/java/net/minecraft/util/IntHashMap.java index cbd94c4f..276c3f28 100644 --- a/src/game/java/net/minecraft/util/IntHashMap.java +++ b/src/game/java/net/minecraft/util/IntHashMap.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntHashMap { static class Entry { @@ -37,6 +37,7 @@ public class IntHashMap { this.slotHash = parInt1; } + @Override public final boolean equals(Object object) { if (!(object instanceof IntHashMap.Entry)) { return false; @@ -64,10 +65,12 @@ public class IntHashMap { return this.valueEntry; } + @Override public final int hashCode() { return IntHashMap.computeHash(this.hashEntry); } + @Override public final String toString() { return this.getHash() + "=" + this.getValue(); } @@ -265,4 +268,4 @@ public class IntHashMap { IntHashMap.Entry inthashmap$entry = this.removeEntry(parInt1); return (V) (inthashmap$entry == null ? null : inthashmap$entry.valueEntry); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/IntegerCache.java b/src/game/java/net/minecraft/util/IntegerCache.java index 7d860941..a4228370 100644 --- a/src/game/java/net/minecraft/util/IntegerCache.java +++ b/src/game/java/net/minecraft/util/IntegerCache.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegerCache { private static final Integer[] field_181757_a = new Integer['\uffff']; @@ -38,4 +38,4 @@ public class IntegerCache { public static Integer func_181756_a(int parInt1) { return parInt1 > 0 && parInt1 < field_181757_a.length ? field_181757_a[parInt1] : Integer.valueOf(parInt1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/JsonSerializableSet.java b/src/game/java/net/minecraft/util/JsonSerializableSet.java index bd75ff5a..20fc2332 100644 --- a/src/game/java/net/minecraft/util/JsonSerializableSet.java +++ b/src/game/java/net/minecraft/util/JsonSerializableSet.java @@ -10,13 +10,13 @@ import com.google.common.collect.Sets; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import com.google.common.collect.Sets; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JsonSerializableSet extends ForwardingSet implements IJsonSerializable { /** @@ -36,10 +36,12 @@ public class JsonSerializableSet extends ForwardingSet implements IJsonS */ private final Set underlyingSet = Sets.newHashSet(); + @Override protected Set delegate() { return this.underlyingSet; } + @Override public void fromJson(Object jsonelement) { if (jsonelement instanceof JSONArray) { JSONArray arr = (JSONArray) jsonelement; @@ -53,6 +55,7 @@ public class JsonSerializableSet extends ForwardingSet implements IJsonS /** * + Gets the JsonElement that can be serialized. */ + @Override public Object getSerializableElement() { JSONArray jsonarray = new JSONArray(); @@ -62,4 +65,4 @@ public class JsonSerializableSet extends ForwardingSet implements IJsonS return jsonarray; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/LazyLoadBase.java b/src/game/java/net/minecraft/util/LazyLoadBase.java index 87faec89..92012978 100644 --- a/src/game/java/net/minecraft/util/LazyLoadBase.java +++ b/src/game/java/net/minecraft/util/LazyLoadBase.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class LazyLoadBase { private T value; @@ -37,4 +37,4 @@ public abstract class LazyLoadBase { } protected abstract T load(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/LoggingPrintStream.java b/src/game/java/net/minecraft/util/LoggingPrintStream.java index d22e258a..c587bb70 100644 --- a/src/game/java/net/minecraft/util/LoggingPrintStream.java +++ b/src/game/java/net/minecraft/util/LoggingPrintStream.java @@ -10,13 +10,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LoggingPrintStream extends PrintStream { private final String domain; @@ -59,11 +59,13 @@ public class LoggingPrintStream extends PrintStream { } } + @Override public void println(Object parObject) { this.logString(String.valueOf(parObject)); } + @Override public void println(String s) { this.logString(s); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/LongHashMap.java b/src/game/java/net/minecraft/util/LongHashMap.java index a5910bc7..c713b078 100644 --- a/src/game/java/net/minecraft/util/LongHashMap.java +++ b/src/game/java/net/minecraft/util/LongHashMap.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LongHashMap { static class Entry { @@ -37,6 +37,7 @@ public class LongHashMap { this.hash = parInt1; } + @Override public final boolean equals(Object object) { if (!(object instanceof LongHashMap.Entry)) { return false; @@ -64,10 +65,12 @@ public class LongHashMap { return this.value; } + @Override public final int hashCode() { return LongHashMap.getHashedKey(this.key); } + @Override public final String toString() { return this.getKey() + "=" + this.getValue(); } @@ -271,4 +274,4 @@ public class LongHashMap { this.capacity = (int) ((float) parInt1 * this.percentUseable); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MapPopulator.java b/src/game/java/net/minecraft/util/MapPopulator.java index 79f1de68..27a7d7ee 100644 --- a/src/game/java/net/minecraft/util/MapPopulator.java +++ b/src/game/java/net/minecraft/util/MapPopulator.java @@ -9,13 +9,13 @@ import com.google.common.collect.Maps; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import com.google.common.collect.Maps; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapPopulator { public static Map createMap(Iterable keys, Iterable values) { @@ -50,4 +50,4 @@ public class MapPopulator { return map; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MathHelper.java b/src/game/java/net/minecraft/util/MathHelper.java index 3c35d5e8..49670fc1 100644 --- a/src/game/java/net/minecraft/util/MathHelper.java +++ b/src/game/java/net/minecraft/util/MathHelper.java @@ -6,13 +6,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MathHelper { public static final float SQRT_2 = sqrt_float(2.0F); @@ -498,4 +498,4 @@ public class MathHelper { return value; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Matrix4f.java b/src/game/java/net/minecraft/util/Matrix4f.java index 38ce81ca..01b2ae9f 100644 --- a/src/game/java/net/minecraft/util/Matrix4f.java +++ b/src/game/java/net/minecraft/util/Matrix4f.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Matrix4f extends net.lax1dude.eaglercraft.v1_8.vector.Matrix4f { public Matrix4f() { @@ -46,4 +46,4 @@ public class Matrix4f extends net.lax1dude.eaglercraft.v1_8.vector.Matrix4f { this.m32 = parArrayOfFloat[14]; this.m33 = parArrayOfFloat[15]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MinecraftError.java b/src/game/java/net/minecraft/util/MinecraftError.java index d56560f1..087f121e 100644 --- a/src/game/java/net/minecraft/util/MinecraftError.java +++ b/src/game/java/net/minecraft/util/MinecraftError.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MinecraftError extends Error { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MouseFilter.java b/src/game/java/net/minecraft/util/MouseFilter.java index 99a75454..485f24a6 100644 --- a/src/game/java/net/minecraft/util/MouseFilter.java +++ b/src/game/java/net/minecraft/util/MouseFilter.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MouseFilter { private float field_76336_a; @@ -48,4 +48,4 @@ public class MouseFilter { this.field_76334_b += parFloat1; return parFloat1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MouseHelper.java b/src/game/java/net/minecraft/util/MouseHelper.java index 22e69bd3..8df2ec95 100644 --- a/src/game/java/net/minecraft/util/MouseHelper.java +++ b/src/game/java/net/minecraft/util/MouseHelper.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.PointerInputAbstraction; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.PointerInputAbstraction; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MouseHelper { public int deltaX; @@ -53,4 +53,4 @@ public class MouseHelper { Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2); Mouse.setGrabbed(false); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MovementInput.java b/src/game/java/net/minecraft/util/MovementInput.java index 150b623b..a8e7e003 100644 --- a/src/game/java/net/minecraft/util/MovementInput.java +++ b/src/game/java/net/minecraft/util/MovementInput.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MovementInput { public float moveStrafe; @@ -31,4 +31,4 @@ public class MovementInput { public void updatePlayerMoveState() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MovementInputFromOptions.java b/src/game/java/net/minecraft/util/MovementInputFromOptions.java index 7e7dc1e4..0d1781ec 100644 --- a/src/game/java/net/minecraft/util/MovementInputFromOptions.java +++ b/src/game/java/net/minecraft/util/MovementInputFromOptions.java @@ -7,13 +7,13 @@ import net.minecraft.client.settings.GameSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MovementInputFromOptions extends MovementInput { private final GameSettings gameSettings; @@ -34,6 +34,7 @@ public class MovementInputFromOptions extends MovementInput { this.gameSettings = gameSettingsIn; } + @Override public void updatePlayerMoveState() { this.moveStrafe = 0.0F; this.moveForward = 0.0F; @@ -67,4 +68,4 @@ public class MovementInputFromOptions extends MovementInput { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/MovingObjectPosition.java b/src/game/java/net/minecraft/util/MovingObjectPosition.java index 9102ccc6..06963e88 100644 --- a/src/game/java/net/minecraft/util/MovingObjectPosition.java +++ b/src/game/java/net/minecraft/util/MovingObjectPosition.java @@ -5,13 +5,13 @@ import net.minecraft.entity.Entity; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MovingObjectPosition { public static enum MovingObjectType { @@ -67,8 +67,9 @@ public class MovingObjectPosition { return this.blockPos; } + @Override public String toString() { return "HitResult{type=" + this.typeOfHit + ", blockpos=" + this.blockPos + ", f=" + this.sideHit + ", pos=" + this.hitVec + ", entity=" + this.entityHit + '}'; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ObjectIntIdentityMap.java b/src/game/java/net/minecraft/util/ObjectIntIdentityMap.java index 6464783a..705bc5c3 100644 --- a/src/game/java/net/minecraft/util/ObjectIntIdentityMap.java +++ b/src/game/java/net/minecraft/util/ObjectIntIdentityMap.java @@ -11,13 +11,13 @@ import com.google.common.collect.Lists; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import com.google.common.collect.Lists; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ObjectIntIdentityMap implements IObjectIntIterable { private final IdentityHashMap identityMap = new IdentityHashMap(512); @@ -44,6 +44,7 @@ public class ObjectIntIdentityMap implements IObjectIntIterable { return (T) (value >= 0 && value < this.objectList.size() ? this.objectList.get(value) : null); } + @Override public Iterator iterator() { return Iterators.filter(this.objectList.iterator(), Predicates.notNull()); } @@ -57,4 +58,4 @@ public class ObjectIntIdentityMap implements IObjectIntIterable { this.objectList.set(value, key); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/RegistryDefaulted.java b/src/game/java/net/minecraft/util/RegistryDefaulted.java index 783b6bc0..88f38856 100644 --- a/src/game/java/net/minecraft/util/RegistryDefaulted.java +++ b/src/game/java/net/minecraft/util/RegistryDefaulted.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegistryDefaulted extends RegistrySimple { private final V defaultObject; @@ -30,8 +30,9 @@ public class RegistryDefaulted extends RegistrySimple { this.defaultObject = defaultObjectIn; } + @Override public V getObject(K object) { Object object1 = super.getObject(object); return (V) (object1 == null ? this.defaultObject : object1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/RegistryNamespaced.java b/src/game/java/net/minecraft/util/RegistryNamespaced.java index 7ee541de..07e841cd 100644 --- a/src/game/java/net/minecraft/util/RegistryNamespaced.java +++ b/src/game/java/net/minecraft/util/RegistryNamespaced.java @@ -9,13 +9,13 @@ import com.google.common.collect.HashBiMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import com.google.common.collect.HashBiMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegistryNamespaced extends RegistrySimple implements IObjectIntIterable { /** @@ -43,10 +43,12 @@ public class RegistryNamespaced extends RegistrySimple implements IO /** * + Does this registry contain an entry for the given key? */ + @Override public boolean containsKey(K parObject) { return super.containsKey(parObject); } + @Override protected Map createUnderlyingMap() { return HashBiMap.create(); } @@ -65,6 +67,7 @@ public class RegistryNamespaced extends RegistrySimple implements IO return (K) this.inverseObjectRegistry.get(parObject); } + @Override public V getObject(K object) { return super.getObject(object); } @@ -76,6 +79,7 @@ public class RegistryNamespaced extends RegistrySimple implements IO return (V) this.underlyingIntegerMap.getByValue(i); } + @Override public Iterator iterator() { return this.underlyingIntegerMap.iterator(); } @@ -84,4 +88,4 @@ public class RegistryNamespaced extends RegistrySimple implements IO this.underlyingIntegerMap.put(object1, i); this.putObject(object, object1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/RegistryNamespacedDefaultedByKey.java b/src/game/java/net/minecraft/util/RegistryNamespacedDefaultedByKey.java index 7fc052a2..be66cb11 100644 --- a/src/game/java/net/minecraft/util/RegistryNamespacedDefaultedByKey.java +++ b/src/game/java/net/minecraft/util/RegistryNamespacedDefaultedByKey.java @@ -5,13 +5,13 @@ import org.apache.commons.lang3.Validate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import org.apache.commons.lang3.Validate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegistryNamespacedDefaultedByKey extends RegistryNamespaced { private final K defaultValueKey; @@ -33,6 +33,7 @@ public class RegistryNamespacedDefaultedByKey extends RegistryNamespaced extends RegistryNamespaced extends RegistryNamespaced implements IRegistry { private static final Logger logger = LogManager.getLogger(); @@ -57,10 +57,12 @@ public class RegistrySimple implements IRegistry { return Collections.unmodifiableSet(this.registryObjects.keySet()); } + @Override public V getObject(K object) { return (V) this.registryObjects.get(object); } + @Override public Iterator iterator() { return this.registryObjects.values().iterator(); } @@ -68,6 +70,7 @@ public class RegistrySimple implements IRegistry { /** * + Register an object on this registry. */ + @Override public void putObject(K object, V object1) { Validate.notNull(object); Validate.notNull(object1); @@ -77,4 +80,4 @@ public class RegistrySimple implements IRegistry { this.registryObjects.put(object, object1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ReportedException.java b/src/game/java/net/minecraft/util/ReportedException.java index 15c76ee6..bdfc0fc5 100644 --- a/src/game/java/net/minecraft/util/ReportedException.java +++ b/src/game/java/net/minecraft/util/ReportedException.java @@ -5,13 +5,13 @@ import net.minecraft.crash.CrashReport; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.crash.CrashReport; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ReportedException extends RuntimeException { private final CrashReport theReportedExceptionCrashReport; @@ -32,6 +32,7 @@ public class ReportedException extends RuntimeException { this.theReportedExceptionCrashReport = report; } + @Override public Throwable getCause() { return this.theReportedExceptionCrashReport.getCrashCause(); } @@ -43,7 +44,8 @@ public class ReportedException extends RuntimeException { return this.theReportedExceptionCrashReport; } + @Override public String getMessage() { return this.theReportedExceptionCrashReport.getDescription(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ResourceLocation.java b/src/game/java/net/minecraft/util/ResourceLocation.java index 58b4fcb2..196911aa 100644 --- a/src/game/java/net/minecraft/util/ResourceLocation.java +++ b/src/game/java/net/minecraft/util/ResourceLocation.java @@ -5,13 +5,13 @@ import org.apache.commons.lang3.Validate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import org.apache.commons.lang3.Validate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ResourceLocation { public static final int CACHED_POINTER_NONE = 0; @@ -70,6 +70,7 @@ public class ResourceLocation { this(0, new String[] { resourceDomainIn, resourcePathIn }); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -90,11 +91,13 @@ public class ResourceLocation { return this.resourcePath; } + @Override public int hashCode() { return 31 * this.resourceDomain.hashCode() + this.resourcePath.hashCode(); } + @Override public String toString() { return this.resourceDomain + ':' + this.resourcePath; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Rotations.java b/src/game/java/net/minecraft/util/Rotations.java index f0aa1435..1b0f3ab3 100644 --- a/src/game/java/net/minecraft/util/Rotations.java +++ b/src/game/java/net/minecraft/util/Rotations.java @@ -6,13 +6,13 @@ import net.minecraft.nbt.NBTTagList; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.nbt.NBTTagList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Rotations { protected final float x; @@ -43,6 +43,7 @@ public class Rotations { this.z = nbt.getFloatAt(2); } + @Override public boolean equals(Object object) { if (!(object instanceof Rotations)) { return false; @@ -80,4 +81,4 @@ public class Rotations { nbttaglist.appendTag(new NBTTagFloat(this.z)); return nbttaglist; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/ScreenShotHelper.java b/src/game/java/net/minecraft/util/ScreenShotHelper.java index 42c0b3d9..f575418f 100644 --- a/src/game/java/net/minecraft/util/ScreenShotHelper.java +++ b/src/game/java/net/minecraft/util/ScreenShotHelper.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformApplication; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformApplication; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScreenShotHelper { @@ -35,4 +35,4 @@ public class ScreenShotHelper { public static IChatComponent saveScreenshot() { return new ChatComponentText("Saved Screenshot As: " + PlatformApplication.saveScreenshot()); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Session.java b/src/game/java/net/minecraft/util/Session.java index 0c1c7875..e7da9b44 100644 --- a/src/game/java/net/minecraft/util/Session.java +++ b/src/game/java/net/minecraft/util/Session.java @@ -9,13 +9,13 @@ import net.minecraft.entity.player.EntityPlayer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Session { private static final EaglercraftUUID outOfGameUUID; @@ -60,4 +60,4 @@ public class Session { profile = new GameProfile(uuid, serverUsername); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/StatCollector.java b/src/game/java/net/minecraft/util/StatCollector.java index ca9f1fc2..2b3e3a66 100644 --- a/src/game/java/net/minecraft/util/StatCollector.java +++ b/src/game/java/net/minecraft/util/StatCollector.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StatCollector { private static StringTranslate localizedName = StringTranslate.getInstance(); @@ -64,4 +64,4 @@ public class StatCollector { public static String translateToLocalFormatted(String key, Object... format) { return localizedName.translateKeyFormat(key, format); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/StringTranslate.java b/src/game/java/net/minecraft/util/StringTranslate.java index 08988a03..cc81e069 100644 --- a/src/game/java/net/minecraft/util/StringTranslate.java +++ b/src/game/java/net/minecraft/util/StringTranslate.java @@ -22,13 +22,13 @@ import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StringTranslate { /** @@ -165,4 +165,4 @@ public class StringTranslate { String s = (String) this.languageList.get(key); return s == null ? key : s; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/StringUtils.java b/src/game/java/net/minecraft/util/StringUtils.java index 728805d2..746082e8 100644 --- a/src/game/java/net/minecraft/util/StringUtils.java +++ b/src/game/java/net/minecraft/util/StringUtils.java @@ -5,13 +5,13 @@ import java.util.regex.Pattern; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import java.util.regex.Pattern; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StringUtils { private static final Pattern patternControlCode = Pattern.compile("(?i)\\u00A7[0-9A-FK-OR]"); @@ -54,4 +54,4 @@ public class StringUtils { public static String translateControlCodesAlternate(String parString1) { return patternControlCodeAlternate.matcher(parString1).replaceAll(new String(new char[] { 0xA7, '$', '1' })); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Timer.java b/src/game/java/net/minecraft/util/Timer.java index 42c8c555..a090dda3 100644 --- a/src/game/java/net/minecraft/util/Timer.java +++ b/src/game/java/net/minecraft/util/Timer.java @@ -6,13 +6,13 @@ import net.minecraft.client.Minecraft; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Timer { float ticksPerSecond; @@ -90,4 +90,4 @@ public class Timer { } this.renderPartialTicks = this.elapsedPartialTicks; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Tuple.java b/src/game/java/net/minecraft/util/Tuple.java index 7a5e5b0c..e7e46224 100644 --- a/src/game/java/net/minecraft/util/Tuple.java +++ b/src/game/java/net/minecraft/util/Tuple.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Tuple { private A a; @@ -45,4 +45,4 @@ public class Tuple { public B getSecond() { return this.b; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/TupleIntJsonSerializable.java b/src/game/java/net/minecraft/util/TupleIntJsonSerializable.java index ca526034..6e65792b 100644 --- a/src/game/java/net/minecraft/util/TupleIntJsonSerializable.java +++ b/src/game/java/net/minecraft/util/TupleIntJsonSerializable.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TupleIntJsonSerializable { private int integerValue; @@ -51,4 +51,4 @@ public class TupleIntJsonSerializable { public void setJsonSerializableValue(IJsonSerializable jsonSerializableValueIn) { this.jsonSerializableValue = jsonSerializableValueIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Util.java b/src/game/java/net/minecraft/util/Util.java index fae58b07..faaa0689 100644 --- a/src/game/java/net/minecraft/util/Util.java +++ b/src/game/java/net/minecraft/util/Util.java @@ -8,13 +8,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Util { public static enum EnumOS { @@ -49,4 +49,4 @@ public class Util { public static Util.EnumOS getOSType() { return EagRuntime.getPlatformOS().getMinecraftEnum(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Vec3.java b/src/game/java/net/minecraft/util/Vec3.java index 6a6b9458..668022e5 100644 --- a/src/game/java/net/minecraft/util/Vec3.java +++ b/src/game/java/net/minecraft/util/Vec3.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Vec3 { public final double xCoord; @@ -201,7 +201,8 @@ public class Vec3 { return new Vec3(vec.xCoord - this.xCoord, vec.yCoord - this.yCoord, vec.zCoord - this.zCoord); } + @Override public String toString() { return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ")"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Vec3i.java b/src/game/java/net/minecraft/util/Vec3i.java index 845f9219..72bd4f42 100644 --- a/src/game/java/net/minecraft/util/Vec3i.java +++ b/src/game/java/net/minecraft/util/Vec3i.java @@ -5,13 +5,13 @@ import com.google.common.base.Objects; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import com.google.common.base.Objects; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Vec3i implements Comparable { /** @@ -44,6 +44,7 @@ public class Vec3i implements Comparable { this.z = zIn; } + @Override public int compareTo(Vec3i vec3i) { return this.getY() == vec3i.getY() ? (this.getZ() == vec3i.getZ() ? this.getX() - vec3i.getX() : this.getZ() - vec3i.getZ()) @@ -86,6 +87,7 @@ public class Vec3i implements Comparable { return d0 * d0 + d1 * d1 + d2 * d2; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -119,12 +121,14 @@ public class Vec3i implements Comparable { return this.z; } + @Override public int hashCode() { return (this.getY() + this.getZ() * 31) * 31 + this.getX(); } + @Override public String toString() { return Objects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()) .toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Vec4b.java b/src/game/java/net/minecraft/util/Vec4b.java index 09674ae7..68af998d 100644 --- a/src/game/java/net/minecraft/util/Vec4b.java +++ b/src/game/java/net/minecraft/util/Vec4b.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Vec4b { private byte field_176117_a; @@ -43,6 +43,7 @@ public class Vec4b { this.field_176114_d = parVec4b.field_176114_d; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -73,6 +74,7 @@ public class Vec4b { return this.field_176116_c; } + @Override public int hashCode() { int i = this.field_176117_a; i = 31 * i + this.field_176115_b; @@ -80,4 +82,4 @@ public class Vec4b { i = 31 * i + this.field_176114_d; return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/Vector3d.java b/src/game/java/net/minecraft/util/Vector3d.java index 684730eb..792e0c71 100644 --- a/src/game/java/net/minecraft/util/Vector3d.java +++ b/src/game/java/net/minecraft/util/Vector3d.java @@ -3,13 +3,13 @@ package net.minecraft.util; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Vector3d { public double field_181059_a; @@ -31,4 +31,4 @@ public class Vector3d { public Vector3d() { this.field_181059_a = this.field_181060_b = this.field_181061_c = 0.0D; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/WeightedRandom.java b/src/game/java/net/minecraft/util/WeightedRandom.java index 93d229e8..ede887d9 100644 --- a/src/game/java/net/minecraft/util/WeightedRandom.java +++ b/src/game/java/net/minecraft/util/WeightedRandom.java @@ -7,13 +7,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WeightedRandom { public static class Item { @@ -79,4 +79,4 @@ public class WeightedRandom { return i; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/WeightedRandomChestContent.java b/src/game/java/net/minecraft/util/WeightedRandomChestContent.java index 3a8de761..5dd525b9 100644 --- a/src/game/java/net/minecraft/util/WeightedRandomChestContent.java +++ b/src/game/java/net/minecraft/util/WeightedRandomChestContent.java @@ -15,13 +15,13 @@ import net.minecraft.tileentity.TileEntityDispenser; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.tileentity.TileEntityDispenser; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WeightedRandomChestContent extends WeightedRandom.Item { public static List func_177629_a(List parList, @@ -107,4 +107,4 @@ public class WeightedRandomChestContent extends WeightedRandom.Item { this.minStackSize = minimumChance; this.maxStackSize = maximumChance; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/util/WeightedRandomFishable.java b/src/game/java/net/minecraft/util/WeightedRandomFishable.java index 01f78900..7eac3ea4 100644 --- a/src/game/java/net/minecraft/util/WeightedRandomFishable.java +++ b/src/game/java/net/minecraft/util/WeightedRandomFishable.java @@ -7,13 +7,13 @@ import net.minecraft.item.ItemStack; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WeightedRandomFishable extends WeightedRandom.Item { private final ItemStack returnStack; @@ -69,4 +69,4 @@ public class WeightedRandomFishable extends WeightedRandom.Item { this.maxDamagePercent = maxDamagePercentIn; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/MerchantRecipe.java b/src/game/java/net/minecraft/village/MerchantRecipe.java index d3d2496a..a923197e 100644 --- a/src/game/java/net/minecraft/village/MerchantRecipe.java +++ b/src/game/java/net/minecraft/village/MerchantRecipe.java @@ -7,13 +7,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MerchantRecipe { private ItemStack itemToBuy; @@ -160,4 +160,4 @@ public class MerchantRecipe { nbttagcompound.setBoolean("rewardExp", this.rewardsExp); return nbttagcompound; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/MerchantRecipeList.java b/src/game/java/net/minecraft/village/MerchantRecipeList.java index de920cd4..930a21c8 100644 --- a/src/game/java/net/minecraft/village/MerchantRecipeList.java +++ b/src/game/java/net/minecraft/village/MerchantRecipeList.java @@ -12,13 +12,13 @@ import net.minecraft.network.PacketBuffer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.network.PacketBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MerchantRecipeList extends ArrayList { public static MerchantRecipeList readFromBuf(PacketBuffer buffer) throws IOException { @@ -145,4 +145,4 @@ public class MerchantRecipeList extends ArrayList { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/Village.java b/src/game/java/net/minecraft/village/Village.java index 790e3a1e..98f4dbfe 100644 --- a/src/game/java/net/minecraft/village/Village.java +++ b/src/game/java/net/minecraft/village/Village.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Village { class VillageAggressor { @@ -522,4 +522,4 @@ public class Village { parNBTTagCompound.setTag("Players", nbttaglist1); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/VillageCollection.java b/src/game/java/net/minecraft/village/VillageCollection.java index ce0470dd..f071434c 100644 --- a/src/game/java/net/minecraft/village/VillageCollection.java +++ b/src/game/java/net/minecraft/village/VillageCollection.java @@ -19,13 +19,13 @@ import net.minecraft.world.WorldSavedData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.WorldSavedData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VillageCollection extends WorldSavedData { public static String fileNameForProvider(WorldProvider provider) { @@ -217,6 +217,7 @@ public class VillageCollection extends WorldSavedData { /** * + reads in data from the NBTTagCompound into this MapDataBase */ + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { this.tickCounter = nbttagcompound.getInteger("Tick"); NBTTagList nbttaglist = nbttagcompound.getTagList("Villages", 10); @@ -275,6 +276,7 @@ public class VillageCollection extends WorldSavedData { * + write data to NBTTagCompound from this MapDataBase, similar to Entities and * TileEntities */ + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setInteger("Tick", this.tickCounter); NBTTagList nbttaglist = new NBTTagList(); @@ -287,4 +289,4 @@ public class VillageCollection extends WorldSavedData { nbttagcompound.setTag("Villages", nbttaglist); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/VillageDoorInfo.java b/src/game/java/net/minecraft/village/VillageDoorInfo.java index cef75249..65a33139 100644 --- a/src/game/java/net/minecraft/village/VillageDoorInfo.java +++ b/src/game/java/net/minecraft/village/VillageDoorInfo.java @@ -6,13 +6,13 @@ import net.minecraft.util.EnumFacing; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.EnumFacing; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VillageDoorInfo { private static EnumFacing getFaceDirection(int deltaX, int deltaZ) { @@ -115,4 +115,4 @@ public class VillageDoorInfo { public void setIsDetachedFromVillageFlag(boolean parFlag) { this.isDetachedFromVillageFlag = parFlag; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/village/VillageSiege.java b/src/game/java/net/minecraft/village/VillageSiege.java index e4a8f0ca..c95b1509 100644 --- a/src/game/java/net/minecraft/village/VillageSiege.java +++ b/src/game/java/net/minecraft/village/VillageSiege.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VillageSiege { private World worldObj; @@ -193,4 +193,4 @@ public class VillageSiege { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/ChunkCache.java b/src/game/java/net/minecraft/world/ChunkCache.java index 8ae01327..e632b34a 100644 --- a/src/game/java/net/minecraft/world/ChunkCache.java +++ b/src/game/java/net/minecraft/world/ChunkCache.java @@ -12,13 +12,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkCache implements IBlockAccess { protected int chunkX; @@ -68,14 +68,17 @@ public class ChunkCache implements IBlockAccess { /** * + set by !chunk.getAreLevelsEmpty */ + @Override public boolean extendedLevelsInChunkCache() { return this.hasExtendedLevels; } + @Override public BiomeGenBase getBiomeGenForCoords(BlockPos blockpos) { return this.worldObj.getBiomeGenForCoords(blockpos); } + @Override public IBlockState getBlockState(BlockPos blockpos) { if (blockpos.getY() >= 0 && blockpos.getY() < 256) { int i = (blockpos.getX() >> 4) - this.chunkX; @@ -91,6 +94,7 @@ public class ChunkCache implements IBlockAccess { return Blocks.air.getDefaultState(); } + @Override public int getCombinedLight(BlockPos blockpos, int i) { int j = this.getLightForExt(EnumSkyBlock.SKY, blockpos); int k = this.getLightForExt(EnumSkyBlock.BLOCK, blockpos); @@ -142,17 +146,20 @@ public class ChunkCache implements IBlockAccess { } } + @Override public int getStrongPower(BlockPos blockpos, EnumFacing enumfacing) { IBlockState iblockstate = this.getBlockState(blockpos); return iblockstate.getBlock().getStrongPower(this, blockpos, iblockstate, enumfacing); } + @Override public TileEntity getTileEntity(BlockPos blockpos) { int i = (blockpos.getX() >> 4) - this.chunkX; int j = (blockpos.getZ() >> 4) - this.chunkZ; return this.chunkArray[i][j].getTileEntity(blockpos, Chunk.EnumCreateEntityType.IMMEDIATE); } + @Override public WorldType getWorldType() { return this.worldObj.getWorldType(); } @@ -162,7 +169,8 @@ public class ChunkCache implements IBlockAccess { * this only checks to see if the blocks material is set to air, meaning it is * possible for non-vanilla blocks to still pass this check. */ + @Override public boolean isAirBlock(BlockPos blockpos) { return this.getBlockState(blockpos).getBlock().getMaterial() == Material.air; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/ChunkCoordIntPair.java b/src/game/java/net/minecraft/world/ChunkCoordIntPair.java index e61e8787..a6cdc055 100644 --- a/src/game/java/net/minecraft/world/ChunkCoordIntPair.java +++ b/src/game/java/net/minecraft/world/ChunkCoordIntPair.java @@ -5,13 +5,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkCoordIntPair { /** @@ -42,6 +42,7 @@ public class ChunkCoordIntPair { this.chunkZPos = z; } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -105,13 +106,15 @@ public class ChunkCoordIntPair { return this.chunkZPos << 4; } + @Override public int hashCode() { int i = 1664525 * this.chunkXPos + 1013904223; int j = 1664525 * (this.chunkZPos ^ -559038737) + 1013904223; return i ^ j; } + @Override public String toString() { return "[" + this.chunkXPos + ", " + this.chunkZPos + "]"; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/ColorizerFoliage.java b/src/game/java/net/minecraft/world/ColorizerFoliage.java index 699bf51b..af6ccaf3 100644 --- a/src/game/java/net/minecraft/world/ColorizerFoliage.java +++ b/src/game/java/net/minecraft/world/ColorizerFoliage.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ColorizerFoliage { /** @@ -61,4 +61,4 @@ public class ColorizerFoliage { public static void setFoliageBiomeColorizer(int[] parArrayOfInt) { foliageBuffer = parArrayOfInt; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/ColorizerGrass.java b/src/game/java/net/minecraft/world/ColorizerGrass.java index aa317f8e..5f92e5a2 100644 --- a/src/game/java/net/minecraft/world/ColorizerGrass.java +++ b/src/game/java/net/minecraft/world/ColorizerGrass.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ColorizerGrass { /** @@ -43,4 +43,4 @@ public class ColorizerGrass { public static void setGrassBiomeColorizer(int[] parArrayOfInt) { grassBuffer = parArrayOfInt; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/DifficultyInstance.java b/src/game/java/net/minecraft/world/DifficultyInstance.java index fffd8b5a..fdd471f3 100644 --- a/src/game/java/net/minecraft/world/DifficultyInstance.java +++ b/src/game/java/net/minecraft/world/DifficultyInstance.java @@ -5,13 +5,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DifficultyInstance { private final EnumDifficulty worldDifficulty; @@ -66,4 +66,4 @@ public class DifficultyInstance { return this.additionalDifficulty < 2.0F ? 0.0F : (this.additionalDifficulty > 4.0F ? 1.0F : (this.additionalDifficulty - 2.0F) / 2.0F); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/EnumDifficulty.java b/src/game/java/net/minecraft/world/EnumDifficulty.java index 50f96f44..b667b487 100644 --- a/src/game/java/net/minecraft/world/EnumDifficulty.java +++ b/src/game/java/net/minecraft/world/EnumDifficulty.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumDifficulty { PEACEFUL(0, "options.difficulty.peaceful"), EASY(1, "options.difficulty.easy"), @@ -56,4 +56,4 @@ public enum EnumDifficulty { public String getDifficultyResourceKey() { return this.difficultyResourceKey; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/EnumSkyBlock.java b/src/game/java/net/minecraft/world/EnumSkyBlock.java index 4bb03ee9..8ae2fc4b 100644 --- a/src/game/java/net/minecraft/world/EnumSkyBlock.java +++ b/src/game/java/net/minecraft/world/EnumSkyBlock.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumSkyBlock { SKY(15), BLOCK(0); @@ -31,4 +31,4 @@ public enum EnumSkyBlock { private EnumSkyBlock(int parInt2) { this.defaultLightValue = parInt2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/Explosion.java b/src/game/java/net/minecraft/world/Explosion.java index 685c2638..4e30d3dc 100644 --- a/src/game/java/net/minecraft/world/Explosion.java +++ b/src/game/java/net/minecraft/world/Explosion.java @@ -29,13 +29,13 @@ import net.minecraft.util.Vec3; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.util.Vec3; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Explosion { private final boolean isFlaming; @@ -266,4 +266,4 @@ public class Explosion { public Map getPlayerKnockbackMap() { return this.playerKnockbackMap; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/GameRules.java b/src/game/java/net/minecraft/world/GameRules.java index 1275713c..0a60862d 100644 --- a/src/game/java/net/minecraft/world/GameRules.java +++ b/src/game/java/net/minecraft/world/GameRules.java @@ -8,13 +8,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameRules { static class Value { @@ -194,4 +194,4 @@ public class GameRules { return nbttagcompound; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/IBlockAccess.java b/src/game/java/net/minecraft/world/IBlockAccess.java index 43aaa2e8..94a1fbc4 100644 --- a/src/game/java/net/minecraft/world/IBlockAccess.java +++ b/src/game/java/net/minecraft/world/IBlockAccess.java @@ -9,13 +9,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBlockAccess { /** @@ -53,4 +53,4 @@ public interface IBlockAccess { * possible for non-vanilla blocks to still pass this check. */ boolean isAirBlock(BlockPos var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/IInteractionObject.java b/src/game/java/net/minecraft/world/IInteractionObject.java index 655efaac..578f31fa 100644 --- a/src/game/java/net/minecraft/world/IInteractionObject.java +++ b/src/game/java/net/minecraft/world/IInteractionObject.java @@ -7,13 +7,13 @@ import net.minecraft.inventory.Container; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,10 +25,10 @@ import net.minecraft.inventory.Container; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IInteractionObject extends IWorldNameable { Container createContainer(InventoryPlayer var1, EntityPlayer var2); String getGuiID(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/ILockableContainer.java b/src/game/java/net/minecraft/world/ILockableContainer.java index 9d37fa93..ae1c3485 100644 --- a/src/game/java/net/minecraft/world/ILockableContainer.java +++ b/src/game/java/net/minecraft/world/ILockableContainer.java @@ -5,13 +5,13 @@ import net.minecraft.inventory.IInventory; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.inventory.IInventory; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ILockableContainer extends IInventory, IInteractionObject { LockCode getLockCode(); @@ -31,4 +31,4 @@ public interface ILockableContainer extends IInventory, IInteractionObject { boolean isLocked(); void setLockCode(LockCode var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/IWorldAccess.java b/src/game/java/net/minecraft/world/IWorldAccess.java index 46cfcfbc..f782fddf 100644 --- a/src/game/java/net/minecraft/world/IWorldAccess.java +++ b/src/game/java/net/minecraft/world/IWorldAccess.java @@ -7,13 +7,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IWorldAccess { void broadcastSound(int var1, BlockPos var2, int var3); @@ -73,4 +73,4 @@ public interface IWorldAccess { void spawnParticle(int var1, boolean var2, double var3, double var5, double var7, double var9, double var11, double var13, int... var15); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/IWorldNameable.java b/src/game/java/net/minecraft/world/IWorldNameable.java index 3a17dbcd..4343bfa2 100644 --- a/src/game/java/net/minecraft/world/IWorldNameable.java +++ b/src/game/java/net/minecraft/world/IWorldNameable.java @@ -5,13 +5,13 @@ import net.minecraft.util.IChatComponent; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IWorldNameable { /** @@ -42,4 +42,4 @@ public interface IWorldNameable { * + Returns true if this thing is named */ boolean hasCustomName(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/LockCode.java b/src/game/java/net/minecraft/world/LockCode.java index ab50ded4..67b89b97 100644 --- a/src/game/java/net/minecraft/world/LockCode.java +++ b/src/game/java/net/minecraft/world/LockCode.java @@ -5,13 +5,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LockCode { public static final LockCode EMPTY_CODE = new LockCode(""); @@ -54,4 +54,4 @@ public class LockCode { public void toNBT(NBTTagCompound nbt) { nbt.setString("Lock", this.lock); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/MinecraftException.java b/src/game/java/net/minecraft/world/MinecraftException.java index 5e5f1bee..065c7b64 100644 --- a/src/game/java/net/minecraft/world/MinecraftException.java +++ b/src/game/java/net/minecraft/world/MinecraftException.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,10 +21,10 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MinecraftException extends Exception { public MinecraftException(String msg) { super(msg); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/NextTickListEntry.java b/src/game/java/net/minecraft/world/NextTickListEntry.java index 23fc074d..7c0ef41b 100644 --- a/src/game/java/net/minecraft/world/NextTickListEntry.java +++ b/src/game/java/net/minecraft/world/NextTickListEntry.java @@ -3,29 +3,6 @@ package net.minecraft.world; import net.minecraft.block.Block; import net.minecraft.util.BlockPos; -/** - * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source - * code. - * - * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod - * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * - * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights - * Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ public class NextTickListEntry implements Comparable { private static long nextTickEntryID; private final Block block; @@ -33,54 +10,60 @@ public class NextTickListEntry implements Comparable { public long scheduledTime; public int priority; private long tickEntryID; + private int cachedHashCode = 0; public NextTickListEntry(BlockPos parBlockPos, Block parBlock) { - this.tickEntryID = (long) (nextTickEntryID++); + this.tickEntryID = nextTickEntryID++; this.position = parBlockPos; this.block = parBlock; } + @Override public int compareTo(NextTickListEntry parNextTickListEntry) { - return this.scheduledTime < parNextTickListEntry.scheduledTime ? -1 - : (this.scheduledTime > parNextTickListEntry.scheduledTime ? 1 - : (this.priority != parNextTickListEntry.priority - ? this.priority - parNextTickListEntry.priority - : (this.tickEntryID < parNextTickListEntry.tickEntryID ? -1 - : (this.tickEntryID > parNextTickListEntry.tickEntryID ? 1 : 0)))); + if (this.scheduledTime != parNextTickListEntry.scheduledTime) { + return Long.compare(this.scheduledTime, parNextTickListEntry.scheduledTime); + } + if (this.priority != parNextTickListEntry.priority) { + return Integer.compare(this.priority, parNextTickListEntry.priority); + } + return Long.compare(this.tickEntryID, parNextTickListEntry.tickEntryID); } + @Override public boolean equals(Object object) { - if (!(object instanceof NextTickListEntry)) { + if (this == object) + return true; + if (!(object instanceof NextTickListEntry)) return false; - } else { - NextTickListEntry nextticklistentry = (NextTickListEntry) object; - return this.position.equals(nextticklistentry.position) - && Block.isEqualTo(this.block, nextticklistentry.block); - } + NextTickListEntry other = (NextTickListEntry) object; + return this.hashCode() == other.hashCode() && this.position.equals(other.position) + && Block.isEqualTo(this.block, other.block); } public Block getBlock() { return this.block; } + @Override public int hashCode() { - return this.position.hashCode(); + if (cachedHashCode == 0) { + cachedHashCode = this.position.hashCode(); + } + return cachedHashCode; } public void setPriority(int parInt1) { this.priority = parInt1; } - /** - * + Sets the scheduled time for this tick entry - */ public NextTickListEntry setScheduledTime(long parLong1) { this.scheduledTime = parLong1; return this; } + @Override public String toString() { return Block.getIdFromBlock(this.block) + ": " + this.position + ", " + this.scheduledTime + ", " + this.priority + ", " + this.tickEntryID; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/SpawnerAnimals.java b/src/game/java/net/minecraft/world/SpawnerAnimals.java index 5865686b..3c8c4d6e 100644 --- a/src/game/java/net/minecraft/world/SpawnerAnimals.java +++ b/src/game/java/net/minecraft/world/SpawnerAnimals.java @@ -24,13 +24,13 @@ import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class SpawnerAnimals { private static final int MOB_COUNT_DIV = (int) Math.pow(17.0D, 2.0D); @@ -275,4 +275,4 @@ public final class SpawnerAnimals { return k3; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/Teleporter.java b/src/game/java/net/minecraft/world/Teleporter.java index 53a9c037..1ffbc536 100644 --- a/src/game/java/net/minecraft/world/Teleporter.java +++ b/src/game/java/net/minecraft/world/Teleporter.java @@ -19,13 +19,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Teleporter { public class PortalPosition extends BlockPos { @@ -78,7 +78,7 @@ public class Teleporter { int j1 = k; int k1 = 0; int l1 = this.random.nextInt(4); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i2 = i - b0; i2 <= i + b0; ++i2) { double d1 = (double) i2 + 0.5D - parEntity.posX; @@ -402,4 +402,4 @@ public class Teleporter { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/World.java b/src/game/java/net/minecraft/world/World.java index e0a63c50..a11cfdb9 100644 --- a/src/game/java/net/minecraft/world/World.java +++ b/src/game/java/net/minecraft/world/World.java @@ -59,13 +59,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -77,7 +77,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class World implements IBlockAccess { public static boolean doesBlockHaveSolidTopSurface(IBlockAccess blockAccess, BlockPos pos) { @@ -224,11 +224,13 @@ public abstract class World implements IBlockAccess { crashreportcategory.addCrashSection("Level name", this.worldInfo == null ? "????" : this.worldInfo.getWorldName()); crashreportcategory.addCrashSectionCallable("All players", new Callable() { + @Override public String call() { return World.this.playerEntities.size() + " total; " + World.this.playerEntities.toString(); } }); crashreportcategory.addCrashSectionCallable("Chunk stats", new Callable() { + @Override public String call() { return World.this.chunkProvider.makeString(); } @@ -310,8 +312,9 @@ public abstract class World implements IBlockAccess { return true; } - boolean flag = this.isWater(pos.west()) && this.isWater(pos.east()) && this.isWater(pos.north()) - && this.isWater(pos.south()); + BlockPos tmp = new BlockPos(); + boolean flag = this.isWater(pos.west(tmp)) && this.isWater(pos.east(tmp)) + && this.isWater(pos.north(tmp)) && this.isWater(pos.south(tmp)); if (!flag) { return true; } @@ -401,7 +404,7 @@ public abstract class World implements IBlockAccess { int l = MathHelper.floor_double(bb.maxY); int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 <= j; ++k1) { for (int l1 = k; l1 <= l; ++l1) { @@ -418,137 +421,124 @@ public abstract class World implements IBlockAccess { } public boolean checkLight(BlockPos pos) { - if (provider.getHasNoSky()) { - return this.checkLightFor(EnumSkyBlock.BLOCK, pos); + boolean flag = false; + if (!this.provider.getHasNoSky()) { + flag |= this.checkLightFor(EnumSkyBlock.SKY, pos); } - return this.checkLightFor(EnumSkyBlock.SKY, pos) | this.checkLightFor(EnumSkyBlock.BLOCK, pos); + + flag = flag | this.checkLightFor(EnumSkyBlock.BLOCK, pos); + return flag; } public boolean checkLightFor(EnumSkyBlock lightType, BlockPos pos) { if (!this.isAreaLoaded(pos, 17, false)) { return false; - } - - int queueSize = 0; - int currentIndex = 0; - - int baseX = pos.getX(); - int baseY = pos.getY(); - int baseZ = pos.getZ(); - - int currentLight = this.getLightFor(lightType, pos); - int computedLight = this.getRawLight(pos, lightType); - if (computedLight == currentLight) { - return true; - } - - if (computedLight > currentLight) { - this.lightUpdateBlockList[queueSize++] = 133152; } else { - this.lightUpdateBlockList[queueSize++] = 133152 | currentLight << 18; + int i = 0; + int j = 0; + int k = this.getLightFor(lightType, pos); + int l = this.getRawLight(pos, lightType); + int i1 = pos.getX(); + int j1 = pos.getY(); + int k1 = pos.getZ(); + if (l > k) { + this.lightUpdateBlockList[j++] = 133152; + } else if (l < k) { + this.lightUpdateBlockList[j++] = 133152 | k << 18; - while (currentIndex < queueSize) { - int packed = this.lightUpdateBlockList[currentIndex++]; - int relX = (packed & 63) - 32; - int relY = ((packed >> 6) & 63) - 32; - int relZ = ((packed >> 12) & 63) - 32; - int light = packed >> 18 & 15; + while (i < j) { + int l1 = this.lightUpdateBlockList[i++]; + int i2 = (l1 & 63) - 32 + i1; + int j2 = (l1 >> 6 & 63) - 32 + j1; + int k2 = (l1 >> 12 & 63) - 32 + k1; + int l2 = l1 >> 18 & 15; + BlockPos blockpos = new BlockPos(i2, j2, k2); + int i3 = this.getLightFor(lightType, blockpos); + if (i3 == l2) { + this.setLightFor(lightType, blockpos, 0); + if (l2 > 0) { + int j3 = MathHelper.abs_int(i2 - i1); + int k3 = MathHelper.abs_int(j2 - j1); + int l3 = MathHelper.abs_int(k2 - k1); + if (j3 + k3 + l3 < 17) { + BlockPos blockpos$mutableblockpos = new BlockPos(); - int worldX = relX + baseX; - int worldY = relY + baseY; - int worldZ = relZ + baseZ; - - BlockPos blockPos = new BlockPos(worldX, worldY, worldZ); - int currentBlockLight = this.getLightFor(lightType, blockPos); - - if (currentBlockLight == light) { - this.setLightFor(lightType, blockPos, 0); - - if (light > 0) { - int manhattan = Math.abs(relX) + Math.abs(relY) + Math.abs(relZ); - if (manhattan < 17) { - BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); - EnumFacing[] facings = EnumFacing.values(); - - for (EnumFacing facing : facings) { - int adjX = worldX + facing.getFrontOffsetX(); - int adjY = worldY + facing.getFrontOffsetY(); - int adjZ = worldZ + facing.getFrontOffsetZ(); - - mutablePos.func_181079_c(adjX, adjY, adjZ); - - int opacity = Math.max(1, this.getBlockState(mutablePos).getBlock().getLightOpacity()); - int neighborLight = this.getLightFor(lightType, mutablePos); - - if (neighborLight == light - opacity && queueSize < this.lightUpdateBlockList.length) { - this.lightUpdateBlockList[queueSize++] = ((adjX - baseX + 32) & 63) - | ((adjY - baseY + 32) & 63) << 6 | ((adjZ - baseZ + 32) & 63) << 12 - | (light - opacity) << 18; + EnumFacing[] facings = EnumFacing._VALUES; + for (int m = 0; m < facings.length; ++m) { + EnumFacing enumfacing = facings[m]; + int i4 = i2 + enumfacing.getFrontOffsetX(); + int j4 = j2 + enumfacing.getFrontOffsetY(); + int k4 = k2 + enumfacing.getFrontOffsetZ(); + blockpos$mutableblockpos.func_181079_c(i4, j4, k4); + int l4 = Math.max(1, + this.getBlockState(blockpos$mutableblockpos).getBlock().getLightOpacity()); + i3 = this.getLightFor(lightType, blockpos$mutableblockpos); + if (i3 == l2 - l4 && j < this.lightUpdateBlockList.length) { + this.lightUpdateBlockList[j++] = i4 - i1 + 32 | j4 - j1 + 32 << 6 + | k4 - k1 + 32 << 12 | l2 - l4 << 18; + } } } } } } + + i = 0; + } + + while (i < j) { + int i5 = this.lightUpdateBlockList[i++]; + int j5 = (i5 & 63) - 32 + i1; + int k5 = (i5 >> 6 & 63) - 32 + j1; + int l5 = (i5 >> 12 & 63) - 32 + k1; + BlockPos blockpos1 = new BlockPos(j5, k5, l5); + BlockPos tmp = new BlockPos(0, 0, 0); + int i6 = this.getLightFor(lightType, blockpos1); + int j6 = this.getRawLight(blockpos1, lightType); + if (j6 != i6) { + this.setLightFor(lightType, blockpos1, j6); + if (j6 > i6) { + int k6 = Math.abs(j5 - i1); + int l6 = Math.abs(k5 - j1); + int i7 = Math.abs(l5 - k1); + boolean flag = j < this.lightUpdateBlockList.length - 6; + if (k6 + l6 + i7 < 17 && flag) { + if (this.getLightFor(lightType, blockpos1.west(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 - 1 - i1 + 32 + (k5 - j1 + 32 << 6) + + (l5 - k1 + 32 << 12); + } + + if (this.getLightFor(lightType, blockpos1.east(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 + 1 - i1 + 32 + (k5 - j1 + 32 << 6) + + (l5 - k1 + 32 << 12); + } + + if (this.getLightFor(lightType, blockpos1.down(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 - i1 + 32 + (k5 - 1 - j1 + 32 << 6) + + (l5 - k1 + 32 << 12); + } + + if (this.getLightFor(lightType, blockpos1.up(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 - i1 + 32 + (k5 + 1 - j1 + 32 << 6) + + (l5 - k1 + 32 << 12); + } + + if (this.getLightFor(lightType, blockpos1.north(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 - i1 + 32 + (k5 - j1 + 32 << 6) + + (l5 - 1 - k1 + 32 << 12); + } + + if (this.getLightFor(lightType, blockpos1.south(tmp)) < j6) { + this.lightUpdateBlockList[j++] = j5 - i1 + 32 + (k5 - j1 + 32 << 6) + + (l5 + 1 - k1 + 32 << 12); + } + } + } + } } - currentIndex = 0; + return true; } - - while (currentIndex < queueSize) { - int packed = this.lightUpdateBlockList[currentIndex++]; - int relX = (packed & 63) - 32; - int relY = ((packed >> 6) & 63) - 32; - int relZ = ((packed >> 12) & 63) - 32; - - int worldX = relX + baseX; - int worldY = relY + baseY; - int worldZ = relZ + baseZ; - - BlockPos blockPos = new BlockPos(worldX, worldY, worldZ); - int currentBlockLight = this.getLightFor(lightType, blockPos); - int computedBlockLight = this.getRawLight(blockPos, lightType); - - if (computedBlockLight != currentBlockLight) { - this.setLightFor(lightType, blockPos, computedBlockLight); - - if (computedBlockLight > currentBlockLight) { - int manhattan = Math.abs(relX) + Math.abs(relY) + Math.abs(relZ); - if (manhattan < 17 && queueSize < this.lightUpdateBlockList.length - 6) { - if (this.getLightFor(lightType, blockPos.west()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX - 1 - baseX + 32) & 63) - | ((worldY - baseY + 32) & 63) << 6 | ((worldZ - baseZ + 32) & 63) << 12; - } - - if (this.getLightFor(lightType, blockPos.east()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX + 1 - baseX + 32) & 63) - | ((worldY - baseY + 32) & 63) << 6 | ((worldZ - baseZ + 32) & 63) << 12; - } - - if (this.getLightFor(lightType, blockPos.down()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX - baseX + 32) & 63) - | ((worldY - 1 - baseY + 32) & 63) << 6 | ((worldZ - baseZ + 32) & 63) << 12; - } - - if (this.getLightFor(lightType, blockPos.up()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX - baseX + 32) & 63) - | ((worldY + 1 - baseY + 32) & 63) << 6 | ((worldZ - baseZ + 32) & 63) << 12; - } - - if (this.getLightFor(lightType, blockPos.north()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX - baseX + 32) & 63) - | ((worldY - baseY + 32) & 63) << 6 | ((worldZ - 1 - baseZ + 32) & 63) << 12; - } - - if (this.getLightFor(lightType, blockPos.south()) < computedBlockLight) { - this.lightUpdateBlockList[queueSize++] = ((worldX - baseX + 32) & 63) - | ((worldY - baseY + 32) & 63) << 6 | ((worldZ + 1 - baseZ + 32) & 63) << 12; - } - } - } - } - } - - return true; } /** @@ -577,13 +567,6 @@ public abstract class World implements IBlockAccess { return true; } - /** - * + Checks whether the session lock file was modified by another process - */ - public void checkSessionLock() throws MinecraftException { - this.saveHandler.checkSessionLock(); - } - /** * + Counts how many entities of an entity class exist in the world. Args: * entityClass @@ -633,6 +616,7 @@ public abstract class World implements IBlockAccess { /** * + set by !chunk.getAreLevelsEmpty */ + @Override public boolean extendedLevelsInChunkCache() { return false; } @@ -685,7 +669,7 @@ public abstract class World implements IBlockAccess { int l = MathHelper.floor_double(bb.maxY + 1.0D); int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ + 1.0D); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = i1; l1 < j1; ++l1) { @@ -728,6 +712,7 @@ public abstract class World implements IBlockAccess { return this.provider.getHasNoSky() ? 128 : 256; } + @Override public BiomeGenBase getBiomeGenForCoords(final BlockPos pos) { if (this.isBlockLoaded(pos)) { Chunk chunk = this.getChunkFromBlockCoords(pos); @@ -738,6 +723,7 @@ public abstract class World implements IBlockAccess { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Getting biome"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Coordinates of biome request"); crashreportcategory.addCrashSectionCallable("Location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory .getCoordinateInfo(new net.minecraft.util.BlockPos(pos.getX(), pos.getY(), pos.getZ())); @@ -785,6 +771,7 @@ public abstract class World implements IBlockAccess { } } + @Override public IBlockState getBlockState(BlockPos pos) { if (!this.isValid(pos)) { return Blocks.air.getDefaultState(); @@ -921,7 +908,7 @@ public abstract class World implements IBlockAccess { boolean flag = entityIn.isOutsideBorder(); boolean flag1 = this.isInsideBorder(worldborder, entityIn); IBlockState iblockstate = Blocks.stone.getDefaultState(); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = i1; l1 < j1; ++l1) { @@ -966,6 +953,7 @@ public abstract class World implements IBlockAccess { return arraylist; } + @Override public int getCombinedLight(BlockPos pos, int lightValue) { int i = this.getLightFromNeighborsFor(EnumSkyBlock.SKY, pos); int j = this.getLightFromNeighborsFor(EnumSkyBlock.BLOCK, pos); @@ -1175,11 +1163,12 @@ public abstract class World implements IBlockAccess { public int getLight(BlockPos pos, boolean checkNeighbors) { if (pos.getX() >= -30000000 && pos.getZ() >= -30000000 && pos.getX() < 30000000 && pos.getZ() < 30000000) { if (checkNeighbors && this.getBlockState(pos).getBlock().getUseNeighborBrightness()) { - int i1 = this.getLight(pos.up(), false); - int i = this.getLight(pos.east(), false); - int j = this.getLight(pos.west(), false); - int k = this.getLight(pos.south(), false); - int l = this.getLight(pos.north(), false); + BlockPos tmp = new BlockPos(0, 0, 0); + int i1 = this.getLight(pos.up(tmp), false); + int i = this.getLight(pos.east(tmp), false); + int j = this.getLight(pos.west(tmp), false); + int k = this.getLight(pos.south(tmp), false); + int l = this.getLight(pos.north(tmp), false); if (i > i1) { i1 = i; } @@ -1248,11 +1237,12 @@ public abstract class World implements IBlockAccess { } else if (!this.isBlockLoaded(pos)) { return type.defaultLightValue; } else if (this.getBlockState(pos).getBlock().getUseNeighborBrightness()) { - int i1 = this.getLightFor(type, pos.up()); - int i = this.getLightFor(type, pos.east()); - int j = this.getLightFor(type, pos.west()); - int k = this.getLightFor(type, pos.south()); - int l = this.getLightFor(type, pos.north()); + BlockPos tmp = new BlockPos(); + int i1 = this.getLightFor(type, pos.up(tmp)); + int i = this.getLightFor(type, pos.east(tmp)); + int j = this.getLightFor(type, pos.west(tmp)); + int k = this.getLightFor(type, pos.south(tmp)); + int l = this.getLightFor(type, pos.north(tmp)); if (i > i1) { i1 = i; } @@ -1512,27 +1502,28 @@ public abstract class World implements IBlockAccess { */ public int getStrongPower(BlockPos pos) { int i = 0; - i = Math.max(i, this.getStrongPower(pos.down(), EnumFacing.DOWN)); + BlockPos tmp = new BlockPos(); + i = Math.max(i, this.getStrongPower(pos.down(tmp), EnumFacing.DOWN)); if (i >= 15) { return i; } else { - i = Math.max(i, this.getStrongPower(pos.up(), EnumFacing.UP)); + i = Math.max(i, this.getStrongPower(pos.up(tmp), EnumFacing.UP)); if (i >= 15) { return i; } else { - i = Math.max(i, this.getStrongPower(pos.north(), EnumFacing.NORTH)); + i = Math.max(i, this.getStrongPower(pos.north(tmp), EnumFacing.NORTH)); if (i >= 15) { return i; } else { - i = Math.max(i, this.getStrongPower(pos.south(), EnumFacing.SOUTH)); + i = Math.max(i, this.getStrongPower(pos.south(tmp), EnumFacing.SOUTH)); if (i >= 15) { return i; } else { - i = Math.max(i, this.getStrongPower(pos.west(), EnumFacing.WEST)); + i = Math.max(i, this.getStrongPower(pos.west(tmp), EnumFacing.WEST)); if (i >= 15) { return i; } else { - i = Math.max(i, this.getStrongPower(pos.east(), EnumFacing.EAST)); + i = Math.max(i, this.getStrongPower(pos.east(tmp), EnumFacing.EAST)); return i >= 15 ? i : i; } } @@ -1545,6 +1536,7 @@ public abstract class World implements IBlockAccess { * + Returns the single highest strong power out of all directions using * getStrongPower(BlockPos, EnumFacing) */ + @Override public int getStrongPower(BlockPos pos, EnumFacing direction) { IBlockState iblockstate = this.getBlockState(pos); return iblockstate.getBlock().getStrongPower(this, pos, iblockstate, direction); @@ -1568,6 +1560,7 @@ public abstract class World implements IBlockAccess { * this.getRainStrength(delta); } + @Override public TileEntity getTileEntity(BlockPos pos) { if (!this.isValid(pos)) { return null; @@ -1657,6 +1650,7 @@ public abstract class World implements IBlockAccess { return this.worldInfo.getWorldTime(); } + @Override public WorldType getWorldType() { return this.worldInfo.getTerrainType(); } @@ -1677,7 +1671,7 @@ public abstract class World implements IBlockAccess { } else { boolean flag = false; Vec3 vec3 = new Vec3(0.0D, 0.0D, 0.0D); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = k; l1 < l; ++l1) { @@ -1727,7 +1721,7 @@ public abstract class World implements IBlockAccess { int l = MathHelper.floor_double(bb.maxY + 1.0D); int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ + 1.0D); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = k; l1 < l; ++l1) { @@ -1757,6 +1751,7 @@ public abstract class World implements IBlockAccess { * this only checks to see if the blocks material is set to air, meaning it is * possible for non-vanilla blocks to still pass this check. */ + @Override public boolean isAirBlock(BlockPos pos) { return this.getBlockState(pos).getBlock().getMaterial() == Material.air; } @@ -1771,7 +1766,7 @@ public abstract class World implements IBlockAccess { int l = MathHelper.floor_double(bb.maxY); int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 <= j; ++k1) { for (int l1 = k; l1 <= l; ++l1) { @@ -1912,12 +1907,13 @@ public abstract class World implements IBlockAccess { } public boolean isBlockPowered(BlockPos pos) { - return this.getRedstonePower(pos.down(), EnumFacing.DOWN) > 0 ? true - : (this.getRedstonePower(pos.up(), EnumFacing.UP) > 0 ? true - : (this.getRedstonePower(pos.north(), EnumFacing.NORTH) > 0 ? true - : (this.getRedstonePower(pos.south(), EnumFacing.SOUTH) > 0 ? true - : (this.getRedstonePower(pos.west(), EnumFacing.WEST) > 0 ? true - : this.getRedstonePower(pos.east(), EnumFacing.EAST) > 0)))); + BlockPos tmp = new BlockPos(0, 0, 0); + return this.getRedstonePower(pos.down(tmp), EnumFacing.DOWN) > 0 ? true + : (this.getRedstonePower(pos.up(tmp), EnumFacing.UP) > 0 ? true + : (this.getRedstonePower(pos.north(tmp), EnumFacing.NORTH) > 0 ? true + : (this.getRedstonePower(pos.south(tmp), EnumFacing.SOUTH) > 0 ? true + : (this.getRedstonePower(pos.west(tmp), EnumFacing.WEST) > 0 ? true + : this.getRedstonePower(pos.east(tmp), EnumFacing.EAST) > 0)))); } public boolean isBlockTickPending(BlockPos pos, Block blockType) { @@ -1948,7 +1944,7 @@ public abstract class World implements IBlockAccess { int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ + 1.0D); if (this.isAreaLoaded(i, k, i1, j, l, j1, true)) { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = k; l1 < l; ++l1) { @@ -1995,7 +1991,7 @@ public abstract class World implements IBlockAccess { int l = MathHelper.floor_double(bb.maxY + 1.0D); int i1 = MathHelper.floor_double(bb.minZ); int j1 = MathHelper.floor_double(bb.maxZ + 1.0D); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 < j; ++k1) { for (int l1 = k; l1 < l; ++l1) { @@ -2172,6 +2168,7 @@ public abstract class World implements IBlockAccess { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Exception while updating neighbours"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being updated"); crashreportcategory.addCrashSectionCallable("Source block type", new Callable() { + @Override public String call() throws Exception { try { return HString.format("ID #%d (%s // %s)", @@ -2756,7 +2753,7 @@ public abstract class World implements IBlockAccess { public void setTileEntity(BlockPos pos, TileEntity tileEntityIn) { if (tileEntityIn != null && !tileEntityIn.isInvalid()) { if (this.processingLoadedTiles) { - tileEntityIn.setPos(pos); + tileEntityIn.setPos(new BlockPos(pos)); Iterator iterator = this.addedTileEntityList.iterator(); while (iterator.hasNext()) { @@ -3169,4 +3166,4 @@ public abstract class World implements IBlockAccess { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldManager.java b/src/game/java/net/minecraft/world/WorldManager.java index e9c8bfa3..00ace70f 100644 --- a/src/game/java/net/minecraft/world/WorldManager.java +++ b/src/game/java/net/minecraft/world/WorldManager.java @@ -12,13 +12,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldManager implements IWorldAccess { private MinecraftServer mcServer; @@ -41,10 +41,12 @@ public class WorldManager implements IWorldAccess { this.theWorldServer = parWorldServer; } + @Override public void broadcastSound(int i, BlockPos blockpos, int j) { this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new S28PacketEffect(i, blockpos, j, true)); } + @Override public void markBlockForUpdate(BlockPos blockpos) { this.theWorldServer.getPlayerManager().markBlockForUpdate(blockpos); } @@ -53,9 +55,11 @@ public class WorldManager implements IWorldAccess { * + On the client, re-renders all blocks in this range, inclusive. On the * server, does nothing. Args: min x, min y, min z, max x, max y, max z */ + @Override public void markBlockRangeForRenderUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { } + @Override public void notifyLightSet(BlockPos var1) { } @@ -64,6 +68,7 @@ public class WorldManager implements IWorldAccess { * worlds, starts downloading any necessary textures. On server worlds, adds the * entity to the entity tracker. */ + @Override public void onEntityAdded(Entity entity) { this.theWorldServer.getEntityTracker().trackEntity(entity); } @@ -73,23 +78,27 @@ public class WorldManager implements IWorldAccess { * client worlds, releases any downloaded textures. On server worlds, removes * the entity from the entity tracker. */ + @Override public void onEntityRemoved(Entity entity) { this.theWorldServer.getEntityTracker().untrackEntity(entity); this.theWorldServer.getScoreboard().func_181140_a(entity); } + @Override public void playAuxSFX(EntityPlayer entityplayer, int i, BlockPos blockpos, int j) { this.mcServer.getConfigurationManager().sendToAllNearExcept(entityplayer, (double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ(), 64.0D, this.theWorldServer.provider.getDimensionId(), new S28PacketEffect(i, blockpos, j, false)); } + @Override public void playRecord(String var1, BlockPos var2) { } /** * + Plays the specified sound. Arg: soundName, x, y, z, volume, pitch */ + @Override public void playSound(String s, double d0, double d1, double d2, float f, float f1) { this.mcServer.getConfigurationManager().sendToAllNear(d0, d1, d2, f > 1.0F ? (double) (16.0F * f) : 16.0D, this.theWorldServer.provider.getDimensionId(), new S29PacketSoundEffect(s, d0, d1, d2, f, f1)); @@ -98,6 +107,7 @@ public class WorldManager implements IWorldAccess { /** * + Plays sound to all near players except the player reference given */ + @Override public void playSoundToNearExcept(EntityPlayer entityplayer, String s, double d0, double d1, double d2, float f, float f1) { this.mcServer.getConfigurationManager().sendToAllNearExcept(entityplayer, d0, d1, d2, @@ -105,6 +115,7 @@ public class WorldManager implements IWorldAccess { new S29PacketSoundEffect(s, d0, d1, d2, f, f1)); } + @Override public void sendBlockBreakProgress(int i, BlockPos blockpos, int j) { for (EntityPlayerMP entityplayermp : this.mcServer.getConfigurationManager().func_181057_v()) { if (entityplayermp != null && entityplayermp.worldObj == this.theWorldServer @@ -120,7 +131,8 @@ public class WorldManager implements IWorldAccess { } + @Override public void spawnParticle(int var1, boolean var2, double var3, double var5, double var7, double var9, double var11, double var13, int... var15) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldProvider.java b/src/game/java/net/minecraft/world/WorldProvider.java index 6a5c30a8..6c23ea7a 100644 --- a/src/game/java/net/minecraft/world/WorldProvider.java +++ b/src/game/java/net/minecraft/world/WorldProvider.java @@ -17,13 +17,13 @@ import net.minecraft.world.gen.FlatGeneratorInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.gen.FlatGeneratorInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class WorldProvider { public static final float[] moonPhaseFactors = new float[] { 1.0F, 0.75F, 0.5F, 0.25F, 0.0F, 0.25F, 0.5F, 0.75F }; @@ -272,4 +272,4 @@ public abstract class WorldProvider { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldProviderEnd.java b/src/game/java/net/minecraft/world/WorldProviderEnd.java index 4f1dbeee..ba2fe2de 100644 --- a/src/game/java/net/minecraft/world/WorldProviderEnd.java +++ b/src/game/java/net/minecraft/world/WorldProviderEnd.java @@ -11,13 +11,13 @@ import net.minecraft.world.gen.ChunkProviderEnd; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,12 +29,13 @@ import net.minecraft.world.gen.ChunkProviderEnd; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldProviderEnd extends WorldProvider { /** * + Returns array with sunrise/sunset colors */ + @Override public float[] calcSunriseSunsetColors(float var1, float var2) { return null; } @@ -43,6 +44,7 @@ public class WorldProviderEnd extends WorldProvider { * + Calculates the angle of sun and moon in the sky relative to a specified * time (usually worldTime) */ + @Override public float calculateCelestialAngle(long var1, float var3) { return 0.0F; } @@ -51,6 +53,7 @@ public class WorldProviderEnd extends WorldProvider { * + Will check if the x, z position specified is alright to be set as the map * spawn point */ + @Override public boolean canCoordinateBeSpawn(int i, int j) { return this.worldObj.getGroundAboveSeaLevel(new BlockPos(i, 0, j)).getMaterial().blocksMovement(); } @@ -59,6 +62,7 @@ public class WorldProviderEnd extends WorldProvider { * + True if the player can respawn in this dimension (true = overworld, false = * nether). */ + @Override public boolean canRespawnHere() { return false; } @@ -66,6 +70,7 @@ public class WorldProviderEnd extends WorldProvider { /** * + Returns a new chunk provider which generates chunks for this world */ + @Override public IChunkProvider createChunkGenerator() { return new ChunkProviderEnd(this.worldObj, this.worldObj.getSeed()); } @@ -73,10 +78,12 @@ public class WorldProviderEnd extends WorldProvider { /** * + Returns true if the given X,Z coordinate should show environmental fog. */ + @Override public boolean doesXZShowFog(int var1, int var2) { return true; } + @Override public int getAverageGroundLevel() { return 50; } @@ -84,6 +91,7 @@ public class WorldProviderEnd extends WorldProvider { /** * + the y level at which clouds are rendered. */ + @Override public float getCloudHeight() { return 8.0F; } @@ -91,6 +99,7 @@ public class WorldProviderEnd extends WorldProvider { /** * + Returns the dimension's name, e.g. "The End", "Nether", or "Overworld". */ + @Override public String getDimensionName() { return "The End"; } @@ -98,6 +107,7 @@ public class WorldProviderEnd extends WorldProvider { /** * + Return Vec3D with biome specific fog color */ + @Override public Vec3 getFogColor(float f, float var2) { int i = 10518688; float f1 = MathHelper.cos(f * 3.1415927F * 2.0F) * 2.0F + 0.5F; @@ -111,14 +121,17 @@ public class WorldProviderEnd extends WorldProvider { return new Vec3((double) f2, (double) f3, (double) f4); } + @Override public String getInternalNameSuffix() { return "_end"; } + @Override public BlockPos getSpawnCoordinate() { return new BlockPos(100, 50, 0); } + @Override public boolean isSkyColored() { return false; } @@ -127,6 +140,7 @@ public class WorldProviderEnd extends WorldProvider { * + Returns 'true' if in the "main surface world", but 'false' if in the Nether * or End dimensions. */ + @Override public boolean isSurfaceWorld() { return false; } @@ -134,9 +148,10 @@ public class WorldProviderEnd extends WorldProvider { /** * + creates a new world chunk manager for WorldProvider */ + @Override public void registerWorldChunkManager() { this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.sky, 0.0F); this.dimensionId = 1; this.hasNoSky = true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldProviderHell.java b/src/game/java/net/minecraft/world/WorldProviderHell.java index aa2091ec..71784194 100644 --- a/src/game/java/net/minecraft/world/WorldProviderHell.java +++ b/src/game/java/net/minecraft/world/WorldProviderHell.java @@ -10,13 +10,13 @@ import net.minecraft.world.gen.ChunkProviderHell; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,13 +28,14 @@ import net.minecraft.world.gen.ChunkProviderHell; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldProviderHell extends WorldProvider { /** * + Calculates the angle of sun and moon in the sky relative to a specified * time (usually worldTime) */ + @Override public float calculateCelestialAngle(long var1, float var3) { return 0.5F; } @@ -43,6 +44,7 @@ public class WorldProviderHell extends WorldProvider { * + Will check if the x, z position specified is alright to be set as the map * spawn point */ + @Override public boolean canCoordinateBeSpawn(int var1, int var2) { return false; } @@ -51,6 +53,7 @@ public class WorldProviderHell extends WorldProvider { * + True if the player can respawn in this dimension (true = overworld, false = * nether). */ + @Override public boolean canRespawnHere() { return false; } @@ -58,6 +61,7 @@ public class WorldProviderHell extends WorldProvider { /** * + Returns a new chunk provider which generates chunks for this world */ + @Override public IChunkProvider createChunkGenerator() { return new ChunkProviderHell(this.worldObj, this.worldObj.getWorldInfo().isMapFeaturesEnabled(), this.worldObj.getSeed()); @@ -66,6 +70,7 @@ public class WorldProviderHell extends WorldProvider { /** * + Returns true if the given X,Z coordinate should show environmental fog. */ + @Override public boolean doesXZShowFog(int var1, int var2) { return true; } @@ -73,6 +78,7 @@ public class WorldProviderHell extends WorldProvider { /** * + Creates the light to brightness table */ + @Override protected void generateLightBrightnessTable() { float f = 0.1F; @@ -86,6 +92,7 @@ public class WorldProviderHell extends WorldProvider { /** * + Returns the dimension's name, e.g. "The End", "Nether", or "Overworld". */ + @Override public String getDimensionName() { return "Nether"; } @@ -93,20 +100,25 @@ public class WorldProviderHell extends WorldProvider { /** * + Return Vec3D with biome specific fog color */ + @Override public Vec3 getFogColor(float var1, float var2) { return new Vec3(0.20000000298023224D, 0.029999999329447746D, 0.029999999329447746D); } + @Override public String getInternalNameSuffix() { return "_nether"; } + @Override public WorldBorder getWorldBorder() { return new WorldBorder() { + @Override public double getCenterX() { return super.getCenterX() / 8.0D; } + @Override public double getCenterZ() { return super.getCenterZ() / 8.0D; } @@ -117,6 +129,7 @@ public class WorldProviderHell extends WorldProvider { * + Returns 'true' if in the "main surface world", but 'false' if in the Nether * or End dimensions. */ + @Override public boolean isSurfaceWorld() { return false; } @@ -124,10 +137,11 @@ public class WorldProviderHell extends WorldProvider { /** * + creates a new world chunk manager for WorldProvider */ + @Override public void registerWorldChunkManager() { this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.hell, 0.0F); this.isHellWorld = true; this.hasNoSky = true; this.dimensionId = -1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldProviderSurface.java b/src/game/java/net/minecraft/world/WorldProviderSurface.java index 58486cda..d5e0d657 100644 --- a/src/game/java/net/minecraft/world/WorldProviderSurface.java +++ b/src/game/java/net/minecraft/world/WorldProviderSurface.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,17 +21,19 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldProviderSurface extends WorldProvider { /** * + Returns the dimension's name, e.g. "The End", "Nether", or "Overworld". */ + @Override public String getDimensionName() { return "Overworld"; } + @Override public String getInternalNameSuffix() { return ""; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldSavedData.java b/src/game/java/net/minecraft/world/WorldSavedData.java index a8209e5b..029ce2b3 100644 --- a/src/game/java/net/minecraft/world/WorldSavedData.java +++ b/src/game/java/net/minecraft/world/WorldSavedData.java @@ -5,13 +5,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class WorldSavedData { public final String mapName; @@ -58,4 +58,4 @@ public abstract class WorldSavedData { } public abstract void writeToNBT(NBTTagCompound var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldServer.java b/src/game/java/net/minecraft/world/WorldServer.java index 4d4f0d3c..ed495b06 100644 --- a/src/game/java/net/minecraft/world/WorldServer.java +++ b/src/game/java/net/minecraft/world/WorldServer.java @@ -74,13 +74,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -92,7 +92,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldServer extends World implements IThreadListener { static class ServerBlockEventList extends ArrayList { @@ -147,6 +147,7 @@ public class WorldServer extends World implements IThreadListener { this.getWorldBorder().setSize(server.getMaxWorldSize()); } + @Override public void addBlockEvent(BlockPos blockpos, Block block, int i, int j) { BlockEventData blockeventdata = new BlockEventData(blockpos, block, i, j); @@ -160,6 +161,7 @@ public class WorldServer extends World implements IThreadListener { this.field_147490_S[this.blockEventCacheIndex].add(blockeventdata); } + @Override public void addScheduledTask(Runnable runnable) { this.mcServer.addScheduledTask(runnable); } @@ -167,6 +169,7 @@ public class WorldServer extends World implements IThreadListener { /** * + adds a lightning bolt to the list of lightning bolts in this world. */ + @Override public boolean addWeatherEffect(Entity entity) { if (super.addWeatherEffect(entity)) { this.mcServer.getConfigurationManager().sendToAllNear(entity.posX, entity.posY, entity.posZ, 512.0D, @@ -183,6 +186,7 @@ public class WorldServer extends World implements IThreadListener { new BlockPos(blockpos.getX(), this.getHeight(), blockpos.getZ()))).expand(3.0D, 3.0D, 3.0D); List list = this.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb, new Predicate() { + @Override public boolean apply(EntityLivingBase entitylivingbase) { return entitylivingbase != null && entitylivingbase.isEntityAlive() && WorldServer.this.canSeeSky(entitylivingbase.getPosition()); @@ -241,6 +245,7 @@ public class WorldServer extends World implements IThreadListener { * + Creates the chunk provider for this world. Called in the constructor. * Retrieves provider from worldProvider? */ + @Override protected IChunkProvider createChunkProvider() { IChunkLoader ichunkloader = this.saveHandler.getChunkLoader(this.provider); this.theChunkProviderServer = new ChunkProviderServer(this, ichunkloader, this.provider.createChunkGenerator()); @@ -304,6 +309,7 @@ public class WorldServer extends World implements IThreadListener { this.saveHandler.flush(); } + @Override public List func_175712_a(StructureBoundingBox structureboundingbox, boolean flag) { ArrayList arraylist = null; @@ -357,6 +363,7 @@ public class WorldServer extends World implements IThreadListener { return this.mcServer; } + @Override public List getPendingBlockUpdates(Chunk chunk, boolean flag) { ChunkCoordIntPair chunkcoordintpair = chunk.getChunkCoordIntPair(); int i = (chunkcoordintpair.chunkXPos << 4) - 2; @@ -370,6 +377,7 @@ public class WorldServer extends World implements IThreadListener { return this.thePlayerManager; } + @Override protected int getRenderDistanceChunks() { return this.mcServer.getConfigurationManager().getViewDistance(); } @@ -406,6 +414,7 @@ public class WorldServer extends World implements IThreadListener { return arraylist; } + @Override public World init() { this.mapStorage = new MapStorage(this.saveHandler); String s = VillageCollection.fileNameForProvider(this.provider); @@ -443,6 +452,7 @@ public class WorldServer extends World implements IThreadListener { return this; } + @Override public void initialize(WorldSettings worldsettings) { if (!this.worldInfo.isInitialized()) { try { @@ -469,11 +479,13 @@ public class WorldServer extends World implements IThreadListener { } + @Override public boolean isBlockModifiable(EntityPlayer entityplayer, BlockPos blockpos) { return !this.mcServer.isBlockProtected(this, blockpos, entityplayer) && this.getWorldBorder().contains(blockpos); } + @Override public boolean isBlockTickPending(BlockPos blockpos, Block block) { NextTickListEntry nextticklistentry = new NextTickListEntry(blockpos, block); return this.pendingTickListEntriesThisTick.contains(nextticklistentry); @@ -483,6 +495,7 @@ public class WorldServer extends World implements IThreadListener { * + returns a new explosion. Does initiation (at time of writing Explosion is * not finished) */ + @Override public Explosion newExplosion(Entity entity, double d0, double d1, double d2, float f, boolean flag, boolean flag1) { Explosion explosion = new Explosion(this, entity, d0, d1, d2, f, flag, flag1); @@ -505,6 +518,7 @@ public class WorldServer extends World implements IThreadListener { return explosion; } + @Override protected void onEntityAdded(Entity entity) { super.onEntityAdded(entity); this.entitiesById.addKey(entity.getEntityId(), entity); @@ -518,6 +532,7 @@ public class WorldServer extends World implements IThreadListener { } + @Override protected void onEntityRemoved(Entity entity) { super.onEntityRemoved(entity); this.entitiesById.removeObject(entity.getEntityId()); @@ -548,7 +563,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Saves all chunks to disk while updating progress bar. */ - public void saveAllChunks(boolean progressCallback, IProgressUpdate parIProgressUpdate) throws MinecraftException { + public void saveAllChunks(boolean progressCallback, IProgressUpdate parIProgressUpdate) { if (this.chunkProvider.canSave()) { if (parIProgressUpdate != null) { parIProgressUpdate.displaySavingString("Saving level"); @@ -585,8 +600,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Saves the chunks to disk. */ - protected void saveLevel() throws MinecraftException { - this.checkSessionLock(); + protected void saveLevel() { this.worldInfo.setBorderSize(this.getWorldBorder().getDiameter()); this.worldInfo.getBorderCenterX(this.getWorldBorder().getCenterX()); this.worldInfo.getBorderCenterZ(this.getWorldBorder().getCenterZ()); @@ -601,6 +615,7 @@ public class WorldServer extends World implements IThreadListener { this.mapStorage.saveAllData(); } + @Override public void scheduleBlockUpdate(BlockPos blockpos, Block block, int i, int j) { NextTickListEntry nextticklistentry = new NextTickListEntry(blockpos, block); nextticklistentry.setPriority(j); @@ -615,6 +630,7 @@ public class WorldServer extends World implements IThreadListener { } + @Override public void scheduleUpdate(BlockPos blockpos, Block block, int i) { this.updateBlockTick(blockpos, block, i, 0); } @@ -658,6 +674,7 @@ public class WorldServer extends World implements IThreadListener { /** * + sends a Packet 38 (Entity Status) to all tracked players of that entity */ + @Override public void setEntityState(Entity entity, byte b0) { this.getEntityTracker().func_151248_b(entity, new S19PacketEntityStatus(entity, b0)); } @@ -666,6 +683,7 @@ public class WorldServer extends World implements IThreadListener { * + Sets a new spawn location by finding an uncovered block at a random (x,z) * location in the chunk. */ + @Override public void setInitialSpawnLocation() { if (this.worldInfo.getSpawnY() <= 0) { this.worldInfo.setSpawnY(this.func_181545_F() + 1); @@ -724,6 +742,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Runs a single tick for the world */ + @Override public void tick() { super.tick(); if (this.getWorldInfo().isHardcoreModeEnabled() && this.getDifficulty() != EnumDifficulty.HARD) { @@ -769,6 +788,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Runs through the list of updates to run and ticks them */ + @Override public boolean tickUpdates(boolean flag) { if (this.worldInfo.getTerrainType() == WorldType.DEBUG_WORLD) { return false; @@ -833,6 +853,7 @@ public class WorldServer extends World implements IThreadListener { * + Updates the flag that indicates whether or not all players in the world are * sleeping. */ + @Override public void updateAllPlayersSleepingFlag() { this.allPlayersSleeping = false; if (!this.playerEntities.isEmpty()) { @@ -853,6 +874,7 @@ public class WorldServer extends World implements IThreadListener { } + @Override protected void updateBlocks() { super.updateBlocks(); if (this.worldInfo.getTerrainType() == WorldType.DEBUG_WORLD) { @@ -931,6 +953,7 @@ public class WorldServer extends World implements IThreadListener { } } + @Override public void updateBlockTick(BlockPos blockpos, Block block, int i, int j) { NextTickListEntry nextticklistentry = new NextTickListEntry(blockpos, block); byte b0 = 0; @@ -970,6 +993,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Updates (and cleans up) entities and tile entities */ + @Override public void updateEntities() { if (this.playerEntities.isEmpty()) { if (this.updateEntityTick++ >= 1200) { @@ -986,6 +1010,7 @@ public class WorldServer extends World implements IThreadListener { * + Will update the entity in the world if the chunk the entity is in is * currently loaded or its forced to update. Args: entity, forceUpdate */ + @Override public void updateEntityWithOptionalForce(Entity entity, boolean flag) { if (!this.canSpawnAnimals() && (entity instanceof EntityAnimal || entity instanceof EntityWaterMob)) { entity.setDead(); @@ -1001,6 +1026,7 @@ public class WorldServer extends World implements IThreadListener { /** * + Updates all weather states. */ + @Override protected void updateWeather() { boolean flag = this.isRaining(); super.updateWeather(); @@ -1042,4 +1068,4 @@ public class WorldServer extends World implements IThreadListener { this.resetRainAndThunder(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldServerMulti.java b/src/game/java/net/minecraft/world/WorldServerMulti.java index 2321bd76..ab4c42de 100644 --- a/src/game/java/net/minecraft/world/WorldServerMulti.java +++ b/src/game/java/net/minecraft/world/WorldServerMulti.java @@ -10,13 +10,13 @@ import net.minecraft.world.storage.ISaveHandler; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.storage.ISaveHandler; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldServerMulti extends WorldServer { private WorldServer delegate; @@ -37,36 +37,44 @@ public class WorldServerMulti extends WorldServer { super(server, saveHandlerIn, new DerivedWorldInfo(delegate.getWorldInfo()), dimensionId); this.delegate = delegate; delegate.getWorldBorder().addListener(new IBorderListener() { + @Override public void onCenterChanged(WorldBorder var1, double d0, double d1) { WorldServerMulti.this.getWorldBorder().setCenter(d0, d1); } + @Override public void onDamageAmountChanged(WorldBorder var1, double d0) { WorldServerMulti.this.getWorldBorder().setDamageAmount(d0); } + @Override public void onDamageBufferChanged(WorldBorder var1, double d0) { WorldServerMulti.this.getWorldBorder().setDamageBuffer(d0); } + @Override public void onSizeChanged(WorldBorder var1, double d0) { WorldServerMulti.this.getWorldBorder().setTransition(d0); } + @Override public void onTransitionStarted(WorldBorder var1, double d0, double d1, long i) { WorldServerMulti.this.getWorldBorder().setTransition(d0, d1, i); } + @Override public void onWarningDistanceChanged(WorldBorder var1, int i) { WorldServerMulti.this.getWorldBorder().setWarningDistance(i); } + @Override public void onWarningTimeChanged(WorldBorder var1, int i) { WorldServerMulti.this.getWorldBorder().setWarningTime(i); } }); } + @Override public World init() { this.mapStorage = this.delegate.getMapStorage(); this.worldScoreboard = this.delegate.getScoreboard(); @@ -82,10 +90,4 @@ public class WorldServerMulti extends WorldServer { return this; } - - /** - * + Saves the chunks to disk. - */ - protected void saveLevel() throws MinecraftException { - } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldSettings.java b/src/game/java/net/minecraft/world/WorldSettings.java index e511673b..75609429 100644 --- a/src/game/java/net/minecraft/world/WorldSettings.java +++ b/src/game/java/net/minecraft/world/WorldSettings.java @@ -6,13 +6,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public final class WorldSettings { public static enum GameType { @@ -211,4 +211,4 @@ public final class WorldSettings { this.worldName = name; return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/WorldType.java b/src/game/java/net/minecraft/world/WorldType.java index d7a0f2ba..3896e19d 100644 --- a/src/game/java/net/minecraft/world/WorldType.java +++ b/src/game/java/net/minecraft/world/WorldType.java @@ -3,13 +3,13 @@ package net.minecraft.world; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldType { /** @@ -157,4 +157,4 @@ public class WorldType { public boolean showWorldInfoNotice() { return this.hasNotificationData; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeCache.java b/src/game/java/net/minecraft/world/biome/BiomeCache.java index 249d7cba..ba66673a 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeCache.java +++ b/src/game/java/net/minecraft/world/biome/BiomeCache.java @@ -10,13 +10,13 @@ import net.minecraft.util.LongHashMap; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.LongHashMap; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeCache { public class Block { @@ -121,4 +121,4 @@ public class BiomeCache { public BiomeGenBase[] getCachedBiomes(int x, int z) { return this.getBiomeCacheBlock(x, z).biomes; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeColorHelper.java b/src/game/java/net/minecraft/world/biome/BiomeColorHelper.java index af04f69b..33709dc1 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeColorHelper.java +++ b/src/game/java/net/minecraft/world/biome/BiomeColorHelper.java @@ -6,13 +6,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeColorHelper { interface ColorResolver { @@ -32,17 +32,20 @@ public class BiomeColorHelper { } private static final BiomeColorHelper.ColorResolver field_180291_a = new BiomeColorHelper.ColorResolver() { + @Override public int getColorAtPos(BiomeGenBase blockPosition, BlockPos parBlockPos) { return blockPosition.getGrassColorAtPos(parBlockPos); } }; private static final BiomeColorHelper.ColorResolver field_180289_b = new BiomeColorHelper.ColorResolver() { + @Override public int getColorAtPos(BiomeGenBase biomegenbase, BlockPos blockpos) { return biomegenbase.getFoliageColorAtPos(blockpos); } }; private static final BiomeColorHelper.ColorResolver field_180290_c = new BiomeColorHelper.ColorResolver() { + @Override public int getColorAtPos(BiomeGenBase biomegenbase, BlockPos var2) { return biomegenbase.waterColorMultiplier; } @@ -54,7 +57,7 @@ public class BiomeColorHelper { int j = 0; int k = 0; - for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(parBlockPos.add(-1, 0, -1), + for (BlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(parBlockPos.add(-1, 0, -1), parBlockPos.add(1, 0, 1))) { int l = parColorResolver.getColorAtPos(parIBlockAccess.getBiomeGenForCoords(blockpos$mutableblockpos), blockpos$mutableblockpos); @@ -77,4 +80,4 @@ public class BiomeColorHelper { public static int getWaterColorAtPos(IBlockAccess parIBlockAccess, BlockPos parBlockPos) { return func_180285_a(parIBlockAccess, parBlockPos, field_180290_c); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeDecorator.java b/src/game/java/net/minecraft/world/biome/BiomeDecorator.java index f93432f1..8ffac715 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeDecorator.java +++ b/src/game/java/net/minecraft/world/biome/BiomeDecorator.java @@ -26,13 +26,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,102 +44,102 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeDecorator { - protected World currentWorld; - protected EaglercraftRandom randomGenerator; - protected BlockPos field_180294_c; - protected ChunkProviderSettings chunkProviderSettings; + public World currentWorld; + public EaglercraftRandom randomGenerator; + public BlockPos field_180294_c; + public ChunkProviderSettings chunkProviderSettings; /** * + The clay generator. */ - protected WorldGenerator clayGen = new WorldGenClay(4); + public WorldGenerator clayGen = new WorldGenClay(4); /** * + The sand generator. */ - protected WorldGenerator sandGen = new WorldGenSand(Blocks.sand, 7); + public WorldGenerator sandGen = new WorldGenSand(Blocks.sand, 7); /** * + The gravel generator. */ - protected WorldGenerator gravelAsSandGen = new WorldGenSand(Blocks.gravel, 6); - protected WorldGenerator dirtGen; - protected WorldGenerator gravelGen; - protected WorldGenerator graniteGen; - protected WorldGenerator dioriteGen; - protected WorldGenerator andesiteGen; - protected WorldGenerator coalGen; - protected WorldGenerator ironGen; - protected WorldGenerator goldGen; - protected WorldGenerator redstoneGen; - protected WorldGenerator diamondGen; - protected WorldGenerator lapisGen; - protected WorldGenerator platinumGen; - protected WorldGenerator titaniumGen; - protected WorldGenerator copperGen; - protected WorldGenerator limestoneGen; - protected WorldGenerator tuffGen; + public WorldGenerator gravelAsSandGen = new WorldGenSand(Blocks.gravel, 6); + public WorldGenerator dirtGen; + public WorldGenerator gravelGen; + public WorldGenerator graniteGen; + public WorldGenerator dioriteGen; + public WorldGenerator andesiteGen; + public WorldGenerator coalGen; + public WorldGenerator ironGen; + public WorldGenerator goldGen; + public WorldGenerator redstoneGen; + public WorldGenerator diamondGen; + public WorldGenerator lapisGen; + public WorldGenerator platinumGen; + public WorldGenerator titaniumGen; + public WorldGenerator copperGen; + public WorldGenerator limestoneGen; + public WorldGenerator tuffGen; - protected WorldGenFlowers yellowFlowerGen = new WorldGenFlowers(Blocks.yellow_flower, + public WorldGenFlowers yellowFlowerGen = new WorldGenFlowers(Blocks.yellow_flower, BlockFlower.EnumFlowerType.DANDELION); /** * + Field that holds mushroomBrown WorldGenFlowers */ - protected WorldGenerator mushroomBrownGen = new GeneratorBushFeature(Blocks.brown_mushroom); + public WorldGenerator mushroomBrownGen = new GeneratorBushFeature(Blocks.brown_mushroom); /** * + Field that holds mushroomRed WorldGenFlowers */ - protected WorldGenerator mushroomRedGen = new GeneratorBushFeature(Blocks.red_mushroom); + public WorldGenerator mushroomRedGen = new GeneratorBushFeature(Blocks.red_mushroom); /** * + Field that holds big mushroom generator */ - protected WorldGenerator bigMushroomGen = new WorldGenBigMushroom(); + public WorldGenerator bigMushroomGen = new WorldGenBigMushroom(); /** * + Field that holds WorldGenReed */ - protected WorldGenerator reedGen = new WorldGenReed(); + public WorldGenerator reedGen = new WorldGenReed(); /** * + Field that holds WorldGenCactus */ - protected WorldGenerator cactusGen = new WorldGenCactus(); + public WorldGenerator cactusGen = new WorldGenCactus(); /** * + The water lily generation! */ - protected WorldGenerator waterlilyGen = new WorldGenWaterlily(); - protected int waterlilyPerChunk; - protected int treesPerChunk; + public WorldGenerator waterlilyGen = new WorldGenWaterlily(); + public int waterlilyPerChunk; + public int treesPerChunk; /** * + The number of yellow flower patches to generate per chunk. The game * generates much less than this number, since it attempts to generate them at a * random altitude. */ - protected int flowersPerChunk = 2; + public int flowersPerChunk = 2; /** * + The amount of tall grass to generate per chunk. */ - protected int grassPerChunk = 1; - protected int deadBushPerChunk; - protected int mushroomsPerChunk; - protected int reedsPerChunk; - protected int cactiPerChunk; + public int grassPerChunk = 1; + public int deadBushPerChunk; + public int mushroomsPerChunk; + public int reedsPerChunk; + public int cactiPerChunk; /** * + The number of sand patches to generate per chunk. Sand patches only * generate when part of it is underwater. */ - protected int sandPerChunk = 1; + public int sandPerChunk = 1; /** * + The number of sand patches to generate per chunk. Sand patches only * generate when part of it is underwater. There appear to be two separate * fields for this. */ - protected int sandPerChunk2 = 3; + public int sandPerChunk2 = 3; /** * + The number of clay patches to generate per chunk. Only generates when part * of it is underwater. */ - protected int clayPerChunk = 1; - protected int bigMushroomsPerChunk; + public int clayPerChunk = 1; + public int bigMushroomsPerChunk; /** * + True if decorator should generate surface lava & water */ @@ -195,7 +195,7 @@ public class BiomeDecorator { } } - protected void genDecorations(BiomeGenBase biomeGenBaseIn) { + public void genDecorations(BiomeGenBase biomeGenBaseIn) { this.generateOres(); for (int i = 0; i < this.sandPerChunk2; ++i) { @@ -412,7 +412,7 @@ public class BiomeDecorator { /** * + Generates ores in the current chunk */ - protected void generateOres() { + public void generateOres() { this.genStandardOre1(this.chunkProviderSettings.gravelCount, this.gravelGen, this.chunkProviderSettings.gravelMinHeight, this.chunkProviderSettings.gravelMaxHeight); this.genStandardOre1(this.chunkProviderSettings.dioriteCount, this.dioriteGen, @@ -448,7 +448,7 @@ public class BiomeDecorator { /** * + Standard ore generation helper. Generates most ores. */ - protected void genStandardOre1(int blockCount, WorldGenerator generator, int minHeight, int maxHeight) { + public void genStandardOre1(int blockCount, WorldGenerator generator, int minHeight, int maxHeight) { if (maxHeight < minHeight) { int i = minHeight; minHeight = maxHeight; @@ -472,7 +472,7 @@ public class BiomeDecorator { /** * + Standard ore generation helper. Generates Lapis Lazuli. */ - protected void genStandardOre2(int blockCount, WorldGenerator generator, int centerHeight, int spread) { + public void genStandardOre2(int blockCount, WorldGenerator generator, int centerHeight, int spread) { for (int i = 0; i < blockCount; ++i) { BlockPos blockpos = this.field_180294_c.add(this.randomGenerator.nextInt(16), this.randomGenerator.nextInt(spread) + this.randomGenerator.nextInt(spread) + centerHeight - spread, @@ -481,4 +481,4 @@ public class BiomeDecorator { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeEndDecorator.java b/src/game/java/net/minecraft/world/biome/BiomeEndDecorator.java index dc3713aa..0816be45 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeEndDecorator.java +++ b/src/game/java/net/minecraft/world/biome/BiomeEndDecorator.java @@ -8,13 +8,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,13 +26,14 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeEndDecorator extends BiomeDecorator { protected WorldGenerator spikeGen = new WorldGenSpikes(Blocks.end_stone); - protected void genDecorations(BiomeGenBase var1) { + @Override + public void genDecorations(BiomeGenBase var1) { this.generateOres(); if (this.randomGenerator.nextInt(5) == 0) { int i = this.randomGenerator.nextInt(16) + 8; @@ -48,4 +49,4 @@ public class BiomeEndDecorator extends BiomeDecorator { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenBase.java b/src/game/java/net/minecraft/world/biome/BiomeGenBase.java index a219eb3f..b5942224 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenBase.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenBase.java @@ -49,17 +49,19 @@ import net.minecraft.world.gen.feature.WorldGenSwamp; import net.minecraft.world.gen.feature.WorldGenTallGrass; import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; +import net.starlikeclient.minecraft.entities.entity.EntityWatcher; +import net.starlikeclient.minecraft.world.biome.BiomeGenEnderForest; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -71,7 +73,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class BiomeGenBase { public static class Height { @@ -101,6 +103,7 @@ public abstract class BiomeGenBase { this.maxGroupCount = groupCountMax; } + @Override public String toString() { return this.entityClass.getSimpleName() + "*(" + this.minGroupCount + "-" + this.maxGroupCount + "):" + this.itemWeight; @@ -173,6 +176,7 @@ public abstract class BiomeGenBase { public static BiomeGenBase mesa; public static BiomeGenBase mesaPlateau_F; public static BiomeGenBase mesaPlateau; + public static BiomeGenBase enderForest; public static BiomeGenBase field_180279_ad; protected static NoiseGeneratorPerlin temperatureNoise; @@ -253,6 +257,9 @@ public abstract class BiomeGenBase { .setHeight(height_HighPlateaus); mesaPlateau = (new BiomeGenMesa(39, false, false)).setColor(13274213).setBiomeName("Mesa Plateau") .setHeight(height_HighPlateaus); + enderForest = (new BiomeGenEnderForest(40, 3)).setColor(4215066).setBiomeName("Ender Forest") + .setHeight(height_LowHills).func_150563_c(0x800080); + ; field_180279_ad = ocean; @@ -344,7 +351,7 @@ public abstract class BiomeGenBase { public int waterColorMultiplier; public BiomeDecorator theBiomeDecorator; public List spawnableMonsterList; - protected List spawnableCreatureList; + public List spawnableCreatureList; protected List spawnableWaterCreatureList; protected List spawnableCaveCreatureList; @@ -389,9 +396,12 @@ public abstract class BiomeGenBase { this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityCreeper.class, 100, 4, 4)); this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySlime.class, 100, 4, 4)); this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityEnderman.class, 10, 1, 4)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityWatcher.class, 10, 4, 4)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityWitch.class, 5, 1, 1)); this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 10, 4, 4)); this.spawnableCaveCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); + } /** @@ -454,7 +464,7 @@ public abstract class BiomeGenBase { int k = (int) (parDouble1 / 3.0D + 3.0D + rand.nextDouble() * 0.25D); int l = parInt1 & 15; int i1 = parInt2 & 15; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int j1 = 255; j1 >= 0; --j1) { if (j1 <= rand.nextInt(5)) { @@ -681,4 +691,4 @@ public abstract class BiomeGenBase { return this; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenBeach.java b/src/game/java/net/minecraft/world/biome/BiomeGenBeach.java index 26d3bd83..a6ceb6b7 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenBeach.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenBeach.java @@ -5,13 +5,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenBeach extends BiomeGenBase { public BiomeGenBeach(int parInt1) { @@ -36,4 +36,4 @@ public class BiomeGenBeach extends BiomeGenBase { this.theBiomeDecorator.reedsPerChunk = 0; this.theBiomeDecorator.cactiPerChunk = 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenDesert.java b/src/game/java/net/minecraft/world/biome/BiomeGenDesert.java index 264acbcb..0443d65b 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenDesert.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenDesert.java @@ -9,13 +9,13 @@ import net.minecraft.world.gen.feature.WorldGenDesertWells; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.gen.feature.WorldGenDesertWells; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenDesert extends BiomeGenBase { public BiomeGenDesert(int parInt1) { @@ -42,6 +42,7 @@ public class BiomeGenDesert extends BiomeGenBase { this.spawnableCreatureList.clear(); } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { super.decorate(world, random, blockpos); if (random.nextInt(1000) == 0) { @@ -52,4 +53,4 @@ public class BiomeGenDesert extends BiomeGenBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenEnd.java b/src/game/java/net/minecraft/world/biome/BiomeGenEnd.java index 1c6995a7..69ba17ae 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenEnd.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenEnd.java @@ -7,13 +7,13 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenEnd extends BiomeGenBase { public BiomeGenEnd(int parInt1) { @@ -36,7 +36,7 @@ public class BiomeGenEnd extends BiomeGenBase { this.spawnableCaveCreatureList.clear(); this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityEnderman.class, 10, 4, 4)); - EntitiesStarlike.configEndEntities(this); + EntitiesStarlike.configEntities(this); this.topBlock = Blocks.dirt.getDefaultState(); this.fillerBlock = Blocks.dirt.getDefaultState(); @@ -46,7 +46,8 @@ public class BiomeGenEnd extends BiomeGenBase { /** * + takes temperature, returns color */ + @Override public int getSkyColorByTemp(float var1) { return 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenForest.java b/src/game/java/net/minecraft/world/biome/BiomeGenForest.java index cdcada93..5df458b8 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenForest.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenForest.java @@ -15,13 +15,13 @@ import net.minecraft.world.gen.feature.WorldGenForest; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.gen.feature.WorldGenForest; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenForest extends BiomeGenBase { protected static final WorldGenForest field_150629_aC = new WorldGenForest(false, true); @@ -70,6 +70,7 @@ public class BiomeGenForest extends BiomeGenBase { } + @Override protected BiomeGenBase createMutatedBiome(final int i) { if (this.biomeID == BiomeGenBase.forest.biomeID) { BiomeGenForest biomegenforest = new BiomeGenForest(i, 1); @@ -81,10 +82,12 @@ public class BiomeGenForest extends BiomeGenBase { } else { return this.biomeID != BiomeGenBase.birchForest.biomeID && this.biomeID != BiomeGenBase.birchForestHills.biomeID ? new BiomeGenMutated(i, this) { + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { this.baseBiome.decorate(world, random, blockpos); } } : new BiomeGenMutated(i, this) { + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return random.nextBoolean() ? BiomeGenForest.field_150629_aC : BiomeGenForest.field_150630_aD; @@ -93,6 +96,7 @@ public class BiomeGenForest extends BiomeGenBase { } } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { if (this.field_150632_aF == 3) { for (int i = 0; i < 4; ++i) { @@ -143,6 +147,7 @@ public class BiomeGenForest extends BiomeGenBase { super.decorate(world, random, blockpos); } + @Override protected BiomeGenBase func_150557_a(int i, boolean flag) { if (this.field_150632_aF == 2) { this.field_150609_ah = 353825; @@ -157,16 +162,19 @@ public class BiomeGenForest extends BiomeGenBase { } } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return (WorldGenAbstractTree) (this.field_150632_aF == 3 && random.nextInt(3) > 0 ? field_150631_aE : (this.field_150632_aF != 2 && random.nextInt(5) != 0 ? this.worldGeneratorTrees : field_150630_aD)); } + @Override public int getGrassColorAtPos(BlockPos blockpos) { int i = super.getGrassColorAtPos(blockpos); return this.field_150632_aF == 3 ? (i & 16711422) + 2634762 >> 1 : i; } + @Override public BlockFlower.EnumFlowerType pickRandomFlower(EaglercraftRandom random, BlockPos blockpos) { if (this.field_150632_aF == 1) { double d0 = MathHelper.clamp_double((1.0D + GRASS_COLOR_NOISE @@ -181,4 +189,4 @@ public class BiomeGenForest extends BiomeGenBase { return super.pickRandomFlower(random, blockpos); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenHell.java b/src/game/java/net/minecraft/world/biome/BiomeGenHell.java index 1b118af7..d167eada 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenHell.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenHell.java @@ -8,13 +8,13 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.starlikeclient.minecraft.init.EntitiesStarlike; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenHell extends BiomeGenBase { public BiomeGenHell(int parInt1) { @@ -39,6 +39,6 @@ public class BiomeGenHell extends BiomeGenBase { this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityPigZombie.class, 100, 4, 4)); this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityMagmaCube.class, 1, 4, 4)); - EntitiesStarlike.configNetherEntities(this); + EntitiesStarlike.configEntities(this); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenHills.java b/src/game/java/net/minecraft/world/biome/BiomeGenHills.java index f237ffe2..6d296403 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenHills.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenHills.java @@ -14,13 +14,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenHills extends BiomeGenBase { @@ -55,10 +55,12 @@ public class BiomeGenHills extends BiomeGenBase { } + @Override protected BiomeGenBase createMutatedBiome(int i) { return (new BiomeGenHills(i, false)).mutateHills(this); } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { super.decorate(world, random, blockpos); int i = 3 + random.nextInt(6); @@ -82,10 +84,12 @@ public class BiomeGenHills extends BiomeGenBase { } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return (WorldGenAbstractTree) (random.nextInt(3) > 0 ? this.field_150634_aD : super.genBigTreeChance(random)); } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { this.topBlock = Blocks.grass.getDefaultState(); @@ -112,4 +116,4 @@ public class BiomeGenHills extends BiomeGenBase { this.setTemperatureRainfall(parBiomeGenBase.temperature, parBiomeGenBase.rainfall); return this; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenJungle.java b/src/game/java/net/minecraft/world/biome/BiomeGenJungle.java index c752b347..cc188079 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenJungle.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenJungle.java @@ -24,13 +24,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenJungle extends BiomeGenBase { private boolean field_150614_aC; @@ -74,6 +74,7 @@ public class BiomeGenJungle extends BiomeGenBase { this.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityChicken.class, 10, 4, 4)); } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { super.decorate(world, random, blockpos); int i = random.nextInt(16) + 8; @@ -91,6 +92,7 @@ public class BiomeGenJungle extends BiomeGenBase { } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return (WorldGenAbstractTree) (random.nextInt(10) == 0 ? this.worldGeneratorBigTree : (random.nextInt(2) == 0 ? new WorldGenShrub(field_181620_aE, field_181622_aG) @@ -103,8 +105,9 @@ public class BiomeGenJungle extends BiomeGenBase { /** * + Gets a WorldGen appropriate for this biome. */ + @Override public WorldGenerator getRandomWorldGenForGrass(EaglercraftRandom random) { return random.nextInt(4) == 0 ? new WorldGenTallGrass(BlockTallGrass.EnumType.FERN) : new WorldGenTallGrass(BlockTallGrass.EnumType.GRASS); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenMesa.java b/src/game/java/net/minecraft/world/biome/BiomeGenMesa.java index 1da52e98..440b5737 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenMesa.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenMesa.java @@ -19,13 +19,13 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenMesa extends BiomeGenBase { private IBlockState[] field_150621_aC; @@ -69,6 +69,7 @@ public class BiomeGenMesa extends BiomeGenBase { } + @Override protected BiomeGenBase createMutatedBiome(int i) { boolean flag = this.biomeID == BiomeGenBase.mesa.biomeID; BiomeGenMesa biomegenmesa = new BiomeGenMesa(i, flag, this.field_150620_aI); @@ -83,6 +84,7 @@ public class BiomeGenMesa extends BiomeGenBase { return biomegenmesa; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { super.decorate(world, random, blockpos); } @@ -168,10 +170,12 @@ public class BiomeGenMesa extends BiomeGenBase { return this.field_150621_aC[(parInt2 + i + 64) % 64]; } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom var1) { return this.worldGeneratorTrees; } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { if (this.field_150621_aC == null || this.field_150622_aD != world.getSeed()) { @@ -289,11 +293,13 @@ public class BiomeGenMesa extends BiomeGenBase { } + @Override public int getFoliageColorAtPos(BlockPos var1) { return 10387789; } + @Override public int getGrassColorAtPos(BlockPos var1) { return 9470285; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenMushroomIsland.java b/src/game/java/net/minecraft/world/biome/BiomeGenMushroomIsland.java index 9d5b7931..f68e9af4 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenMushroomIsland.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenMushroomIsland.java @@ -6,13 +6,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenMushroomIsland extends BiomeGenBase { public BiomeGenMushroomIsland(int parInt1) { @@ -40,4 +40,4 @@ public class BiomeGenMushroomIsland extends BiomeGenBase { this.spawnableWaterCreatureList.clear(); this.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityMooshroom.class, 8, 4, 8)); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenMutated.java b/src/game/java/net/minecraft/world/biome/BiomeGenMutated.java index 2b58a810..f8f96b55 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenMutated.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenMutated.java @@ -11,13 +11,13 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenMutated extends BiomeGenBase { protected BiomeGenBase baseBiome; @@ -59,27 +59,33 @@ public class BiomeGenMutated extends BiomeGenBase { this.maxHeight = biome.maxHeight + 0.2F; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { this.baseBiome.theBiomeDecorator.decorate(world, random, this, blockpos); } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return this.baseBiome.genBigTreeChance(random); } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { this.baseBiome.genTerrainBlocks(world, random, chunkprimer, i, j, d0); } + @Override public Class getBiomeClass() { return this.baseBiome.getBiomeClass(); } + @Override public int getFoliageColorAtPos(BlockPos blockpos) { return this.baseBiome.getFoliageColorAtPos(blockpos); } + @Override public int getGrassColorAtPos(BlockPos blockpos) { return this.baseBiome.getGrassColorAtPos(blockpos); } @@ -87,10 +93,12 @@ public class BiomeGenMutated extends BiomeGenBase { /** * + returns the chance a creature has to spawn. */ + @Override public float getSpawningChance() { return this.baseBiome.getSpawningChance(); } + @Override public BiomeGenBase.TempCategory getTempCategory() { return this.baseBiome.getTempCategory(); } @@ -98,7 +106,8 @@ public class BiomeGenMutated extends BiomeGenBase { /** * + returns true if the biome specified is equal to this biome */ + @Override public boolean isEqualTo(BiomeGenBase biomegenbase) { return this.baseBiome.isEqualTo(biomegenbase); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenOcean.java b/src/game/java/net/minecraft/world/biome/BiomeGenOcean.java index a8963c53..ecdf107f 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenOcean.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenOcean.java @@ -7,13 +7,13 @@ import net.minecraft.world.chunk.ChunkPrimer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.chunk.ChunkPrimer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenOcean extends BiomeGenBase { public BiomeGenOcean(int parInt1) { @@ -33,12 +33,14 @@ public class BiomeGenOcean extends BiomeGenBase { this.spawnableCreatureList.clear(); } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { super.genTerrainBlocks(world, random, chunkprimer, i, j, d0); } + @Override public BiomeGenBase.TempCategory getTempCategory() { return BiomeGenBase.TempCategory.OCEAN; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenPlains.java b/src/game/java/net/minecraft/world/biome/BiomeGenPlains.java index b5be2416..d8b98e42 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenPlains.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenPlains.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenPlains extends BiomeGenBase { protected boolean field_150628_aC; @@ -43,6 +43,7 @@ public class BiomeGenPlains extends BiomeGenBase { this.theBiomeDecorator.grassPerChunk = 10; } + @Override protected BiomeGenBase createMutatedBiome(int i) { BiomeGenPlains biomegenplains = new BiomeGenPlains(i); biomegenplains.setBiomeName("Sunflower Plains"); @@ -52,6 +53,7 @@ public class BiomeGenPlains extends BiomeGenBase { return biomegenplains; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { double d0 = GRASS_COLOR_NOISE.func_151601_a((double) (blockpos.getX() + 8) / 200.0D, (double) (blockpos.getZ() + 8) / 200.0D); @@ -85,6 +87,7 @@ public class BiomeGenPlains extends BiomeGenBase { super.decorate(world, random, blockpos); } + @Override public BlockFlower.EnumFlowerType pickRandomFlower(EaglercraftRandom random, BlockPos blockpos) { double d0 = GRASS_COLOR_NOISE.func_151601_a((double) blockpos.getX() / 200.0D, (double) blockpos.getZ() / 200.0D); @@ -109,4 +112,4 @@ public class BiomeGenPlains extends BiomeGenBase { return BlockFlower.EnumFlowerType.DANDELION; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenRiver.java b/src/game/java/net/minecraft/world/biome/BiomeGenRiver.java index 9e323714..4947c9ba 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenRiver.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenRiver.java @@ -3,13 +3,13 @@ package net.minecraft.world.biome; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,11 +21,11 @@ package net.minecraft.world.biome; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenRiver extends BiomeGenBase { public BiomeGenRiver(int parInt1) { super(parInt1); this.spawnableCreatureList.clear(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenSavanna.java b/src/game/java/net/minecraft/world/biome/BiomeGenSavanna.java index ee643591..8264748b 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenSavanna.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenSavanna.java @@ -14,13 +14,13 @@ import net.minecraft.world.gen.feature.WorldGenSavannaTree; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.gen.feature.WorldGenSavannaTree; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenSavanna extends BiomeGenBase { @@ -44,10 +44,12 @@ public class BiomeGenSavanna extends BiomeGenBase { this.theBiomeDecorator.grassPerChunk = 5; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { this.theBiomeDecorator.decorate(world, random, this, blockpos); } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { this.topBlock = Blocks.grass.getDefaultState(); @@ -74,6 +76,7 @@ public class BiomeGenSavanna extends BiomeGenBase { this.theBiomeDecorator.grassPerChunk = 20; } + @Override protected BiomeGenBase createMutatedBiome(int i) { BiomeGenSavanna.Mutated biomegensavanna$mutated = new BiomeGenSavanna.Mutated(i, this); biomegensavanna$mutated.temperature = (this.temperature + 1.0F) * 0.5F; @@ -82,6 +85,7 @@ public class BiomeGenSavanna extends BiomeGenBase { return biomegensavanna$mutated; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { DOUBLE_PLANT_GENERATOR.setPlantType(BlockDoublePlant.EnumPlantType.GRASS); @@ -95,7 +99,8 @@ public class BiomeGenSavanna extends BiomeGenBase { super.decorate(world, random, blockpos); } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return (WorldGenAbstractTree) (random.nextInt(5) > 0 ? field_150627_aC : this.worldGeneratorTrees); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenSnow.java b/src/game/java/net/minecraft/world/biome/BiomeGenSnow.java index 7585ed05..fc319463 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenSnow.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenSnow.java @@ -12,13 +12,13 @@ import net.minecraft.world.gen.feature.WorldGenTaiga2; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.gen.feature.WorldGenTaiga2; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenSnow extends BiomeGenBase { private boolean field_150615_aC; @@ -47,6 +47,7 @@ public class BiomeGenSnow extends BiomeGenBase { this.spawnableCreatureList.clear(); } + @Override protected BiomeGenBase createMutatedBiome(int i) { BiomeGenBase biomegenbase = (new BiomeGenSnow(i, true)).func_150557_a(13828095, true) .setBiomeName(this.biomeName + " Spikes").setEnableSnow().setTemperatureRainfall(0.0F, 0.5F) @@ -56,6 +57,7 @@ public class BiomeGenSnow extends BiomeGenBase { return biomegenbase; } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { if (this.field_150615_aC) { for (int i = 0; i < 3; ++i) { @@ -74,7 +76,8 @@ public class BiomeGenSnow extends BiomeGenBase { super.decorate(world, random, blockpos); } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom var1) { return new WorldGenTaiga2(false); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenStoneBeach.java b/src/game/java/net/minecraft/world/biome/BiomeGenStoneBeach.java index 5f3ac917..3200d01d 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenStoneBeach.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenStoneBeach.java @@ -5,13 +5,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenStoneBeach extends BiomeGenBase { public BiomeGenStoneBeach(int parInt1) { @@ -36,4 +36,4 @@ public class BiomeGenStoneBeach extends BiomeGenBase { this.theBiomeDecorator.reedsPerChunk = 0; this.theBiomeDecorator.cactiPerChunk = 0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenSwamp.java b/src/game/java/net/minecraft/world/biome/BiomeGenSwamp.java index e906dc13..a3466952 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenSwamp.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenSwamp.java @@ -9,17 +9,18 @@ import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.starlikeclient.minecraft.init.EntitiesStarlike; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +32,7 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenSwamp extends BiomeGenBase { protected BiomeGenSwamp(int parInt1) { @@ -48,12 +49,16 @@ public class BiomeGenSwamp extends BiomeGenBase { this.theBiomeDecorator.grassPerChunk = 5; this.waterColorMultiplier = 14745518; this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySlime.class, 1, 1, 1)); + + EntitiesStarlike.configEntities(this); } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom var1) { return this.worldGeneratorSwamp; } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { double d1 = GRASS_COLOR_NOISE.func_151601_a((double) i * 0.25D, (double) j * 0.25D); @@ -77,17 +82,20 @@ public class BiomeGenSwamp extends BiomeGenBase { this.generateBiomeTerrain(world, random, chunkprimer, i, j, d0); } + @Override public int getFoliageColorAtPos(BlockPos var1) { return 6975545; } + @Override public int getGrassColorAtPos(BlockPos blockpos) { double d0 = GRASS_COLOR_NOISE.func_151601_a((double) blockpos.getX() * 0.0225D, (double) blockpos.getZ() * 0.0225D); return d0 < -0.1D ? 5011004 : 6975545; } + @Override public BlockFlower.EnumFlowerType pickRandomFlower(EaglercraftRandom var1, BlockPos var2) { return BlockFlower.EnumFlowerType.BLUE_ORCHID; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/BiomeGenTaiga.java b/src/game/java/net/minecraft/world/biome/BiomeGenTaiga.java index 9ef90a87..d21d0348 100644 --- a/src/game/java/net/minecraft/world/biome/BiomeGenTaiga.java +++ b/src/game/java/net/minecraft/world/biome/BiomeGenTaiga.java @@ -20,13 +20,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BiomeGenTaiga extends BiomeGenBase { @@ -65,12 +65,14 @@ public class BiomeGenTaiga extends BiomeGenBase { } + @Override protected BiomeGenBase createMutatedBiome(int i) { return this.biomeID == BiomeGenBase.megaTaiga.biomeID ? (new BiomeGenTaiga(i, 2)).func_150557_a(5858897, true) .setBiomeName("Mega Spruce Taiga").setFillerBlockMetadata(5159473).setTemperatureRainfall(0.25F, 0.8F) .setHeight(new BiomeGenBase.Height(this.minHeight, this.maxHeight)) : super.createMutatedBiome(i); } + @Override public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { if (this.field_150644_aH == 1 || this.field_150644_aH == 2) { int i = random.nextInt(3); @@ -95,6 +97,7 @@ public class BiomeGenTaiga extends BiomeGenBase { super.decorate(world, random, blockpos); } + @Override public WorldGenAbstractTree genBigTreeChance(EaglercraftRandom random) { return (WorldGenAbstractTree) ((this.field_150644_aH == 1 || this.field_150644_aH == 2) && random.nextInt(3) == 0 @@ -102,6 +105,7 @@ public class BiomeGenTaiga extends BiomeGenBase { : (random.nextInt(3) == 0 ? field_150639_aC : field_150640_aD)); } + @Override public void genTerrainBlocks(World world, EaglercraftRandom random, ChunkPrimer chunkprimer, int i, int j, double d0) { if (this.field_150644_aH == 1 || this.field_150644_aH == 2) { @@ -122,8 +126,9 @@ public class BiomeGenTaiga extends BiomeGenBase { /** * + Gets a WorldGen appropriate for this biome. */ + @Override public WorldGenerator getRandomWorldGenForGrass(EaglercraftRandom random) { return random.nextInt(5) > 0 ? new WorldGenTallGrass(BlockTallGrass.EnumType.FERN) : new WorldGenTallGrass(BlockTallGrass.EnumType.GRASS); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/WorldChunkManager.java b/src/game/java/net/minecraft/world/biome/WorldChunkManager.java index 6f0c4a38..c8dff16b 100644 --- a/src/game/java/net/minecraft/world/biome/WorldChunkManager.java +++ b/src/game/java/net/minecraft/world/biome/WorldChunkManager.java @@ -17,13 +17,13 @@ import net.minecraft.world.gen.layer.IntCache; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.gen.layer.IntCache; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldChunkManager { private GenLayer genBiomes; @@ -264,4 +264,4 @@ public class WorldChunkManager { public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] oldBiomeList, int x, int z, int width, int depth) { return this.getBiomeGenAt(oldBiomeList, x, z, width, depth, true); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/biome/WorldChunkManagerHell.java b/src/game/java/net/minecraft/world/biome/WorldChunkManagerHell.java index 344eddb1..f4ca0847 100644 --- a/src/game/java/net/minecraft/world/biome/WorldChunkManagerHell.java +++ b/src/game/java/net/minecraft/world/biome/WorldChunkManagerHell.java @@ -9,13 +9,13 @@ import net.minecraft.util.BlockPos; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.BlockPos; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldChunkManagerHell extends WorldChunkManager { private BiomeGenBase biomeGenerator; @@ -41,10 +41,12 @@ public class WorldChunkManagerHell extends WorldChunkManager { /** * + checks given Chunk's Biomes against List of allowed ones */ + @Override public boolean areBiomesViable(int var1, int var2, int var3, List list) { return list.contains(this.biomeGenerator); } + @Override public BlockPos findBiomePosition(int i, int j, int k, List list, EaglercraftRandom random) { return list.contains(this.biomeGenerator) ? new BlockPos(i - k + random.nextInt(k * 2 + 1), 0, j - k + random.nextInt(k * 2 + 1)) @@ -56,6 +58,7 @@ public class WorldChunkManagerHell extends WorldChunkManager { * width, length, cacheFlag (if false, don't check biomeCache to avoid infinite * loop in BiomeCacheBlock) */ + @Override public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] abiomegenbase, int i, int j, int k, int l, boolean var6) { return this.loadBlockGeneratorData(abiomegenbase, i, j, k, l); } @@ -63,6 +66,7 @@ public class WorldChunkManagerHell extends WorldChunkManager { /** * + Returns the biome generator */ + @Override public BiomeGenBase getBiomeGenerator(BlockPos var1) { return this.biomeGenerator; } @@ -70,6 +74,7 @@ public class WorldChunkManagerHell extends WorldChunkManager { /** * + Returns an array of biomes for the location input. */ + @Override public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] abiomegenbase, int var2, int var3, int i, int j) { if (abiomegenbase == null || abiomegenbase.length < i * j) { abiomegenbase = new BiomeGenBase[i * j]; @@ -83,6 +88,7 @@ public class WorldChunkManagerHell extends WorldChunkManager { * + Returns a list of rainfall values for the specified blocks. Args: * listToReuse, x, z, width, length. */ + @Override public float[] getRainfall(float[] afloat, int var2, int var3, int i, int j) { if (afloat == null || afloat.length < i * j) { afloat = new float[i * j]; @@ -97,6 +103,7 @@ public class WorldChunkManagerHell extends WorldChunkManager { * temperature and humidity onto the WorldChunkManager Args: oldBiomeList, x, z, * width, depth */ + @Override public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] abiomegenbase, int var2, int var3, int i, int j) { if (abiomegenbase == null || abiomegenbase.length < i * j) { abiomegenbase = new BiomeGenBase[i * j]; @@ -105,4 +112,4 @@ public class WorldChunkManagerHell extends WorldChunkManager { Arrays.fill(abiomegenbase, 0, i * j, this.biomeGenerator); return abiomegenbase; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/border/EnumBorderStatus.java b/src/game/java/net/minecraft/world/border/EnumBorderStatus.java index 25bd10a5..17a5c1ac 100644 --- a/src/game/java/net/minecraft/world/border/EnumBorderStatus.java +++ b/src/game/java/net/minecraft/world/border/EnumBorderStatus.java @@ -3,13 +3,13 @@ package net.minecraft.world.border; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.border; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumBorderStatus { GROWING(4259712), SHRINKING(16724016), STATIONARY(2138367); @@ -39,4 +39,4 @@ public enum EnumBorderStatus { public int getID() { return this.id; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/border/IBorderListener.java b/src/game/java/net/minecraft/world/border/IBorderListener.java index d0feb086..2e5c64be 100644 --- a/src/game/java/net/minecraft/world/border/IBorderListener.java +++ b/src/game/java/net/minecraft/world/border/IBorderListener.java @@ -3,13 +3,13 @@ package net.minecraft.world.border; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.border; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBorderListener { void onCenterChanged(WorldBorder var1, double var2, double var4); @@ -37,4 +37,4 @@ public interface IBorderListener { void onWarningDistanceChanged(WorldBorder var1, int var2); void onWarningTimeChanged(WorldBorder var1, int var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/border/WorldBorder.java b/src/game/java/net/minecraft/world/border/WorldBorder.java index 6a4046f6..6aa5cacf 100644 --- a/src/game/java/net/minecraft/world/border/WorldBorder.java +++ b/src/game/java/net/minecraft/world/border/WorldBorder.java @@ -13,13 +13,13 @@ import net.minecraft.world.ChunkCoordIntPair; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.ChunkCoordIntPair; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldBorder { private final List listeners = Lists.newArrayList(); @@ -268,4 +268,4 @@ public class WorldBorder { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/Chunk.java b/src/game/java/net/minecraft/world/chunk/Chunk.java index 1738864d..d9979a2f 100644 --- a/src/game/java/net/minecraft/world/chunk/Chunk.java +++ b/src/game/java/net/minecraft/world/chunk/Chunk.java @@ -1,5 +1,6 @@ package net.minecraft.world.chunk; +import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -39,13 +40,13 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -57,7 +58,7 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Chunk { public static enum EnumCreateEntityType { @@ -172,6 +173,7 @@ public class Chunk { public void addTileEntity(BlockPos blockpos, TileEntity tileentity) { tileentity.setWorldObj(this.worldObj); + blockpos = new BlockPos(blockpos); tileentity.setPos(blockpos); if (this.getBlock(blockpos) instanceof ITileEntityProvider) { if (this.chunkTileEntityMap.containsKey(blockpos)) { @@ -200,7 +202,7 @@ public class Chunk { /** * Checks light levels for a block and its neighbors - * + * * @param centerPos The position of the block to check */ private void checkLightForBlockAndNeighbors(BlockPos centerPos) { @@ -340,12 +342,14 @@ public class Chunk { } this.field_150815_m = true; + if (!this.isLightPopulated && this.isTerrainPopulated) { this.func_150809_p(); } - while (!this.tileEntityPosQueue.isEmpty()) { - BlockPos blockpos = (BlockPos) this.tileEntityPosQueue.remove(0); + List tileEntityPositions = new ArrayList<>(this.tileEntityPosQueue); + this.tileEntityPosQueue.clear(); + for (BlockPos blockpos : tileEntityPositions) { if (this.getTileEntity(blockpos, Chunk.EnumCreateEntityType.CHECK) == null && this.getBlock(blockpos).hasTileEntity()) { TileEntity tileentity = this.createNewTileEntity(blockpos); @@ -353,7 +357,6 @@ public class Chunk { this.worldObj.markBlockRangeForRenderUpdate(blockpos, blockpos); } } - } public void func_150809_p() { @@ -363,39 +366,34 @@ public class Chunk { if (!this.worldObj.provider.getHasNoSky()) { if (this.worldObj.isAreaLoaded(blockpos.add(-1, 0, -1), blockpos.add(16, this.worldObj.func_181545_F(), 16))) { - label92: for (int i = 0; i < 16; ++i) { + for (int i = 0; i < 16; ++i) { for (int j = 0; j < 16; ++j) { if (!this.func_150811_f(i, j)) { this.isLightPopulated = false; - break label92; + break; } } } - if (this.isLightPopulated) { EnumFacing[] facings = EnumFacing.Plane.HORIZONTAL.facingsArray; - for (int i = 0; i < facings.length; ++i) { - EnumFacing enumfacing = facings[i]; + for (EnumFacing enumfacing : facings) { int k = enumfacing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE ? 16 : 1; this.worldObj.getChunkFromBlockCoords(blockpos.offset(enumfacing, k)) .func_180700_a(enumfacing.getOpposite()); } - this.func_177441_y(); } } else { this.isLightPopulated = false; } } - } private boolean func_150811_f(int x, int z) { int i = this.getTopFilledSegment(); boolean flag = false; boolean flag1 = false; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos((this.xPosition << 4) + x, 0, - (this.zPosition << 4) + z); + BlockPos blockpos$mutableblockpos = new BlockPos((this.xPosition << 4) + x, 0, (this.zPosition << 4) + z); for (int j = i + 16 - 1; j > this.worldObj.func_181545_F() || j > 0 && !flag1; --j) { blockpos$mutableblockpos.func_181079_c(blockpos$mutableblockpos.getX(), j, blockpos$mutableblockpos.getZ()); @@ -587,6 +585,7 @@ public class Chunk { CrashReportCategory crashreportcategory = reportedexception.getCrashReport() .makeCategory("Block being got"); crashreportcategory.addCrashSectionCallable("Location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(blockpos); } @@ -602,6 +601,7 @@ public class Chunk { CrashReportCategory crashreportcategory = reportedexception.getCrashReport() .makeCategory("Block being got"); crashreportcategory.addCrashSectionCallable("Location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo( new BlockPos(Chunk.this.xPosition * 16 + x, y, Chunk.this.zPosition * 16 + z)); @@ -675,6 +675,7 @@ public class Chunk { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Getting block state"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being got"); crashreportcategory.addCrashSectionCallable("Location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(pos); } @@ -703,6 +704,7 @@ public class Chunk { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Getting block state"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being got"); crashreportcategory.addCrashSectionCallable("Location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo(pos); } @@ -877,11 +879,12 @@ public class Chunk { public TileEntity getTileEntity(BlockPos blockpos, Chunk.EnumCreateEntityType chunk$enumcreateentitytype) { TileEntity tileentity = (TileEntity) this.chunkTileEntityMap.get(blockpos); if (tileentity == null) { + BlockPos pos2 = new BlockPos(blockpos); if (chunk$enumcreateentitytype == Chunk.EnumCreateEntityType.IMMEDIATE) { - tileentity = this.createNewTileEntity(blockpos); - this.worldObj.setTileEntity(blockpos, tileentity); + tileentity = this.createNewTileEntity(pos2); + this.worldObj.setTileEntity(pos2, tileentity); } else if (chunk$enumcreateentitytype == Chunk.EnumCreateEntityType.QUEUED) { - this.tileEntityPosQueue.add(blockpos); + this.tileEntityPosQueue.add(pos2); } } else if (tileentity.isInvalid()) { this.chunkTileEntityMap.remove(blockpos); @@ -1045,6 +1048,9 @@ public class Chunk { } private void recheckGaps(boolean parFlag) { + if (!this.worldObj.isRemote) { + ++EaglerMinecraftServer.counterLightUpdate; + } if (this.worldObj.isAreaLoaded(new BlockPos(this.xPosition * 16 + 8, 0, this.zPosition * 16 + 8), 16)) { for (int i = 0; i < 16; ++i) { for (int j = 0; j < 16; ++j) { @@ -1408,4 +1414,4 @@ public class Chunk { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/ChunkPrimer.java b/src/game/java/net/minecraft/world/chunk/ChunkPrimer.java index 6d1ec1f8..01441a6d 100644 --- a/src/game/java/net/minecraft/world/chunk/ChunkPrimer.java +++ b/src/game/java/net/minecraft/world/chunk/ChunkPrimer.java @@ -7,13 +7,13 @@ import net.minecraft.init.Blocks; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.init.Blocks; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkPrimer { private final short[] data = new short[65536]; @@ -57,4 +57,4 @@ public class ChunkPrimer { int i = x << 12 | z << 8 | y; this.setBlockState(i, state); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/EmptyChunk.java b/src/game/java/net/minecraft/world/chunk/EmptyChunk.java index 4051c161..7891c9f9 100644 --- a/src/game/java/net/minecraft/world/chunk/EmptyChunk.java +++ b/src/game/java/net/minecraft/world/chunk/EmptyChunk.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EmptyChunk extends Chunk { public EmptyChunk(World worldIn, int x, int z) { @@ -45,15 +45,19 @@ public class EmptyChunk extends Chunk { /** * + Adds an entity to the chunk. Args: entity */ + @Override public void addEntity(Entity entityIn) { } + @Override public void addTileEntity(BlockPos pos, TileEntity tileEntityIn) { } + @Override public void addTileEntity(TileEntity tileEntityIn) { } + @Override public boolean canSeeSky(BlockPos pos) { return false; } @@ -61,12 +65,14 @@ public class EmptyChunk extends Chunk { /** * + Generates the height map for a chunk from scratch */ + @Override public void generateHeightMap() { } /** * + Generates the initial skylight map for the chunk upon generation or load. */ + @Override public void generateSkylightMap() { } @@ -74,22 +80,27 @@ public class EmptyChunk extends Chunk { * + Returns whether the ExtendedBlockStorages containing levels (in blocks) * from arg 1 to arg 2 are fully empty (true) or not (false). */ + @Override public boolean getAreLevelsEmpty(int startY, int endY) { return true; } + @Override public Block getBlock(BlockPos pos) { return Blocks.air; } + @Override public int getBlockLightOpacity(BlockPos pos) { return 255; } + @Override public int getBlockMetadata(BlockPos pos) { return 0; } + @Override public void getEntitiesOfTypeWithinAAAB(Class entityClass, AxisAlignedBB aabb, List listToFill, Predicate parPredicate) { } @@ -98,6 +109,7 @@ public class EmptyChunk extends Chunk { * + Fills the given list of all entities that intersect within the given * bounding box that aren't the passed entity. */ + @Override public void getEntitiesWithinAABBForEntity(Entity entityIn, AxisAlignedBB aabb, List listToFill, Predicate parPredicate) { } @@ -105,18 +117,22 @@ public class EmptyChunk extends Chunk { /** * + Returns the value in the height map at this x, z coordinate in the chunk */ + @Override public int getHeightValue(int x, int z) { return 0; } + @Override public int getLightFor(EnumSkyBlock pos, BlockPos parBlockPos) { return pos.defaultLightValue; } + @Override public int getLightSubtracted(BlockPos pos, int amount) { return 0; } + @Override public EaglercraftRandom getRandomWithSeed(long seed) { return new EaglercraftRandom( this.getWorld().getSeed() + (long) (this.xPosition * this.xPosition * 4987142) @@ -125,6 +141,7 @@ public class EmptyChunk extends Chunk { !this.getWorld().getWorldInfo().isOldEaglercraftRandom()); } + @Override public TileEntity getTileEntity(BlockPos pos, Chunk.EnumCreateEntityType parEnumCreateEntityType) { return null; } @@ -132,10 +149,12 @@ public class EmptyChunk extends Chunk { /** * + Checks whether the chunk is at the X/Z location specified */ + @Override public boolean isAtLocation(int x, int z) { return x == this.xPosition && z == this.zPosition; } + @Override public boolean isEmpty() { return true; } @@ -143,6 +162,7 @@ public class EmptyChunk extends Chunk { /** * + Returns true if this Chunk needs to be saved */ + @Override public boolean needsSaving(boolean parFlag) { return false; } @@ -150,36 +170,43 @@ public class EmptyChunk extends Chunk { /** * + Called when this Chunk is loaded by the ChunkProvider */ + @Override public void onChunkLoad() { } /** * + Called when this Chunk is unloaded by the ChunkProvider */ + @Override public void onChunkUnload() { } /** * + removes entity using its y chunk coordinate as its index */ + @Override public void removeEntity(Entity entityIn) { } /** * + Removes entity at the specified index from the entity array. */ + @Override public void removeEntityAtIndex(Entity entityIn, int parInt1) { } + @Override public void removeTileEntity(BlockPos pos) { } /** * + Sets the isModified flag for this Chunk */ + @Override public void setChunkModified() { } + @Override public void setLightFor(EnumSkyBlock pos, BlockPos value, int parInt1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/IChunkProvider.java b/src/game/java/net/minecraft/world/chunk/IChunkProvider.java index a7e203ed..d74e35aa 100644 --- a/src/game/java/net/minecraft/world/chunk/IChunkProvider.java +++ b/src/game/java/net/minecraft/world/chunk/IChunkProvider.java @@ -11,13 +11,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IChunkProvider { /** @@ -94,4 +94,4 @@ public interface IChunkProvider { * unload every such chunk. */ boolean unloadQueuedChunks(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/NibbleArray.java b/src/game/java/net/minecraft/world/chunk/NibbleArray.java index 1f6b3714..113ab322 100644 --- a/src/game/java/net/minecraft/world/chunk/NibbleArray.java +++ b/src/game/java/net/minecraft/world/chunk/NibbleArray.java @@ -3,13 +3,13 @@ package net.minecraft.world.chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NibbleArray { private final byte[] data; @@ -83,4 +83,4 @@ public class NibbleArray { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/AnvilChunkLoader.java b/src/game/java/net/minecraft/world/chunk/storage/AnvilChunkLoader.java index 79603ff9..1c40bc2b 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/AnvilChunkLoader.java +++ b/src/game/java/net/minecraft/world/chunk/storage/AnvilChunkLoader.java @@ -20,13 +20,13 @@ import net.minecraft.world.chunk.NibbleArray; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.chunk.NibbleArray; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AnvilChunkLoader implements IChunkLoader { private static final Logger logger = LogManager.getLogger("AnvilChunkLoader"); @@ -288,4 +288,4 @@ public abstract class AnvilChunkLoader implements IChunkLoader { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/ChunkLoader.java b/src/game/java/net/minecraft/world/chunk/storage/ChunkLoader.java index d2f4849d..96eef2fe 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/ChunkLoader.java +++ b/src/game/java/net/minecraft/world/chunk/storage/ChunkLoader.java @@ -10,13 +10,13 @@ import net.minecraft.world.chunk.NibbleArray; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.chunk.NibbleArray; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkLoader { public static class AnvilConverterData { @@ -113,7 +113,7 @@ public class ChunkLoader { parNBTTagCompound.setTag("Sections", nbttaglist); byte[] abyte = new byte[256]; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int j2 = 0; j2 < 16; ++j2) { for (int k2 = 0; k2 < 16; ++k2) { @@ -155,4 +155,4 @@ public class ChunkLoader { return chunkloader$anvilconverterdata; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java b/src/game/java/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java index 72a6bf78..750de5fe 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java +++ b/src/game/java/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java @@ -8,13 +8,13 @@ import net.minecraft.world.chunk.NibbleArray; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.chunk.NibbleArray; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ExtendedBlockStorage { private int yBase; @@ -198,4 +198,4 @@ public class ExtendedBlockStorage { public void setSkylightArray(NibbleArray newSkylightArray) { this.skylightArray = newSkylightArray; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/IChunkLoader.java b/src/game/java/net/minecraft/world/chunk/storage/IChunkLoader.java index df8972c3..999fec67 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/IChunkLoader.java +++ b/src/game/java/net/minecraft/world/chunk/storage/IChunkLoader.java @@ -2,20 +2,19 @@ package net.minecraft.world.chunk.storage; import java.io.IOException; -import net.minecraft.world.MinecraftException; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +26,7 @@ import net.minecraft.world.chunk.Chunk; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IChunkLoader { /** @@ -40,7 +39,7 @@ public interface IChunkLoader { */ Chunk loadChunk(World var1, int var2, int var3) throws IOException; - void saveChunk(World var1, Chunk var2) throws IOException, MinecraftException; + void saveChunk(World var1, Chunk var2) throws IOException; /** * + Save extra data associated with this Chunk not normally saved during @@ -53,4 +52,4 @@ public interface IChunkLoader { * only during world unload. Currently unused. */ void saveExtraData(); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/NibbleArrayReader.java b/src/game/java/net/minecraft/world/chunk/storage/NibbleArrayReader.java index b14ccf6f..1543b8ec 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/NibbleArrayReader.java +++ b/src/game/java/net/minecraft/world/chunk/storage/NibbleArrayReader.java @@ -3,13 +3,13 @@ package net.minecraft.world.chunk.storage; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.chunk.storage; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NibbleArrayReader { public final byte[] data; @@ -40,4 +40,4 @@ public class NibbleArrayReader { int k = i & 1; return k == 0 ? this.data[j] & 15 : this.data[j] >> 4 & 15; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/chunk/storage/RegionFile.java b/src/game/java/net/minecraft/world/chunk/storage/RegionFile.java index 87206cad..345fb017 100644 --- a/src/game/java/net/minecraft/world/chunk/storage/RegionFile.java +++ b/src/game/java/net/minecraft/world/chunk/storage/RegionFile.java @@ -16,13 +16,13 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.export.RandomAccessMemoryFile; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.export.RandomAccessMemoryFile; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RegionFile { class ChunkBuffer extends EaglerOutputStream { @@ -50,6 +50,7 @@ public class RegionFile { /** * + close this RegionFile and prevent further writes */ + @Override public void close() throws IOException { RegionFile.this.write(this.chunkX, this.chunkZ, this.buf, this.count); } @@ -297,4 +298,4 @@ public class RegionFile { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/demo/DemoWorldManager.java b/src/game/java/net/minecraft/world/demo/DemoWorldManager.java index 869a21a3..2ae11e75 100644 --- a/src/game/java/net/minecraft/world/demo/DemoWorldManager.java +++ b/src/game/java/net/minecraft/world/demo/DemoWorldManager.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DemoWorldManager extends ItemInWorldManager { private boolean field_73105_c; @@ -45,6 +45,7 @@ public class DemoWorldManager extends ItemInWorldManager { /** * + Activate the clicked on block, otherwise use the held item. */ + @Override public boolean activateBlockOrUseItem(EntityPlayer player, World worldIn, ItemStack stack, BlockPos pos, EnumFacing side, float offsetX, float offsetY, float offsetZ) { if (this.demoTimeExpired) { @@ -55,6 +56,7 @@ public class DemoWorldManager extends ItemInWorldManager { } } + @Override public void blockRemoving(BlockPos pos) { if (!this.demoTimeExpired) { super.blockRemoving(pos); @@ -65,6 +67,7 @@ public class DemoWorldManager extends ItemInWorldManager { * + If not creative, it calls sendBlockBreakProgress until the block is broken * first. tryHarvestBlock can also be the result of this call. */ + @Override public void onBlockClicked(BlockPos pos, EnumFacing side) { if (this.demoTimeExpired) { this.sendDemoReminder(); @@ -87,6 +90,7 @@ public class DemoWorldManager extends ItemInWorldManager { /** * + Attempts to harvest a block */ + @Override public boolean tryHarvestBlock(BlockPos pos) { return this.demoTimeExpired ? false : super.tryHarvestBlock(pos); } @@ -95,6 +99,7 @@ public class DemoWorldManager extends ItemInWorldManager { * + Attempts to right-click use an item by the given EntityPlayer in the given * World */ + @Override public boolean tryUseItem(EntityPlayer player, World worldIn, ItemStack stack) { if (this.demoTimeExpired) { this.sendDemoReminder(); @@ -104,6 +109,7 @@ public class DemoWorldManager extends ItemInWorldManager { } } + @Override public void updateBlockRemoving() { super.updateBlockRemoving(); ++this.field_73102_f; @@ -136,4 +142,4 @@ public class DemoWorldManager extends ItemInWorldManager { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/demo/DemoWorldServer.java b/src/game/java/net/minecraft/world/demo/DemoWorldServer.java index 9329ed54..0bcc78d3 100644 --- a/src/game/java/net/minecraft/world/demo/DemoWorldServer.java +++ b/src/game/java/net/minecraft/world/demo/DemoWorldServer.java @@ -11,13 +11,13 @@ import net.minecraft.world.storage.WorldInfo; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DemoWorldServer extends WorldServer { private static final long demoWorldSeed = EaglercraftVersion.demoWorldSeed; @@ -40,4 +40,4 @@ public class DemoWorldServer extends WorldServer { super(server, saveHandlerIn, worldInfoIn, dimensionId); this.worldInfo.populateFromWorldSettings(demoWorldSettings); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderDebug.java b/src/game/java/net/minecraft/world/gen/ChunkProviderDebug.java index ae470e32..85effb14 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderDebug.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderDebug.java @@ -20,13 +20,13 @@ import net.minecraft.world.chunk.IChunkProvider; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.chunk.IChunkProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderDebug implements IChunkProvider { private static final List field_177464_a = Lists.newArrayList(); @@ -78,6 +78,7 @@ public class ChunkProviderDebug implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return true; } @@ -85,24 +86,29 @@ public class ChunkProviderDebug implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { return false; } + @Override public int getLoadedChunkCount() { return 0; } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { BiomeGenBase biomegenbase = this.world.getBiomeGenForCoords(blockpos); return biomegenbase.getSpawnableList(enumcreaturetype); } + @Override public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) { return null; } @@ -110,6 +116,7 @@ public class ChunkProviderDebug implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "DebugLevelSource"; } @@ -117,6 +124,7 @@ public class ChunkProviderDebug implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int var2, int var3) { } @@ -125,6 +133,7 @@ public class ChunkProviderDebug implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -134,6 +143,7 @@ public class ChunkProviderDebug implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { ChunkPrimer chunkprimer = new ChunkPrimer(); @@ -163,6 +173,7 @@ public class ChunkProviderDebug implements IChunkProvider { return chunk; } + @Override public void recreateStructures(Chunk var1, int var2, int var3) { } @@ -171,6 +182,7 @@ public class ChunkProviderDebug implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -179,6 +191,7 @@ public class ChunkProviderDebug implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -186,7 +199,8 @@ public class ChunkProviderDebug implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java b/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java index 9dc47605..755e6e3f 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderEnd.java @@ -20,13 +20,13 @@ import net.minecraft.world.chunk.IChunkProvider; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.world.chunk.IChunkProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderEnd implements IChunkProvider { private EaglercraftRandom endRNG; @@ -69,6 +69,7 @@ public class ChunkProviderEnd implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return true; } @@ -76,10 +77,12 @@ public class ChunkProviderEnd implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { return false; } @@ -180,15 +183,18 @@ public class ChunkProviderEnd implements IChunkProvider { } + @Override public int getLoadedChunkCount() { return 0; } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { return this.endWorld.getBiomeGenForCoords(blockpos).getSpawnableList(enumcreaturetype); } + @Override public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) { return null; } @@ -271,6 +277,7 @@ public class ChunkProviderEnd implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "RandomLevelSource"; } @@ -278,6 +285,7 @@ public class ChunkProviderEnd implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int i, int j) { BlockFalling.fallInstantly = true; BlockPos blockpos = new BlockPos(i * 16, 0, j * 16); @@ -291,6 +299,7 @@ public class ChunkProviderEnd implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -300,6 +309,7 @@ public class ChunkProviderEnd implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { this.endRNG.setSeed((long) i * 341873128712L + (long) j * 132897987541L); ChunkPrimer chunkprimer = new ChunkPrimer(); @@ -318,6 +328,7 @@ public class ChunkProviderEnd implements IChunkProvider { return chunk; } + @Override public void recreateStructures(Chunk var1, int var2, int var3) { } @@ -326,6 +337,7 @@ public class ChunkProviderEnd implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -334,6 +346,7 @@ public class ChunkProviderEnd implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -341,7 +354,8 @@ public class ChunkProviderEnd implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderFlat.java b/src/game/java/net/minecraft/world/gen/ChunkProviderFlat.java index 36ed7a20..88acfdcd 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderFlat.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderFlat.java @@ -29,13 +29,13 @@ import net.minecraft.world.gen.structure.StructureOceanMonument; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.gen.structure.StructureOceanMonument; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderFlat implements IChunkProvider { private World worldObj; @@ -130,6 +130,7 @@ public class ChunkProviderFlat implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return true; } @@ -137,24 +138,29 @@ public class ChunkProviderFlat implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { return false; } + @Override public int getLoadedChunkCount() { return 0; } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(blockpos); return biomegenbase.getSpawnableList(enumcreaturetype); } + @Override public BlockPos getStrongholdGen(World world, String s, BlockPos blockpos) { if ("Stronghold".equals(s)) { for (int m = 0, n = this.structureGenerators.size(); m < n; ++m) { @@ -171,6 +177,7 @@ public class ChunkProviderFlat implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "FlatLevelSource"; } @@ -178,6 +185,7 @@ public class ChunkProviderFlat implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int i, int j) { int k = i * 16; int l = j * 16; @@ -229,6 +237,7 @@ public class ChunkProviderFlat implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -238,6 +247,7 @@ public class ChunkProviderFlat implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { ChunkPrimer chunkprimer = new ChunkPrimer(); @@ -269,6 +279,7 @@ public class ChunkProviderFlat implements IChunkProvider { return chunk; } + @Override public void recreateStructures(Chunk var1, int i, int j) { for (int m = 0, n = this.structureGenerators.size(); m < n; ++m) { this.structureGenerators.get(m).generate(this, this.worldObj, i, j, (ChunkPrimer) null); @@ -281,6 +292,7 @@ public class ChunkProviderFlat implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -289,6 +301,7 @@ public class ChunkProviderFlat implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -296,7 +309,8 @@ public class ChunkProviderFlat implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderGenerate.java b/src/game/java/net/minecraft/world/gen/ChunkProviderGenerate.java index bb12a2de..2736a256 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderGenerate.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderGenerate.java @@ -29,13 +29,13 @@ import net.minecraft.world.gen.structure.StructureOceanMonument; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.gen.structure.StructureOceanMonument; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderGenerate implements IChunkProvider { private EaglercraftRandom rand; @@ -120,6 +120,7 @@ public class ChunkProviderGenerate implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return true; } @@ -127,6 +128,7 @@ public class ChunkProviderGenerate implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } @@ -239,6 +241,7 @@ public class ChunkProviderGenerate implements IChunkProvider { } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk chunk, int i, int j) { boolean flag = false; if (this.settings.useMonuments && this.mapFeaturesEnabled && chunk.getInhabitedTime() < 3600L) { @@ -249,10 +252,12 @@ public class ChunkProviderGenerate implements IChunkProvider { return flag; } + @Override public int getLoadedChunkCount() { return 0; } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(blockpos); @@ -271,6 +276,7 @@ public class ChunkProviderGenerate implements IChunkProvider { return biomegenbase.getSpawnableList(enumcreaturetype); } + @Override public BlockPos getStrongholdGen(World world, String s, BlockPos blockpos) { return "Stronghold".equals(s) && this.strongholdGenerator != null ? this.strongholdGenerator.getClosestStrongholdPos(world, blockpos) @@ -280,6 +286,7 @@ public class ChunkProviderGenerate implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "RandomLevelSource"; } @@ -287,6 +294,7 @@ public class ChunkProviderGenerate implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int i, int j) { BlockFalling.fallInstantly = true; int k = i * 16; @@ -371,6 +379,7 @@ public class ChunkProviderGenerate implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -380,6 +389,7 @@ public class ChunkProviderGenerate implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { this.rand.setSeed((long) i * 341873128712L + (long) j * 132897987541L); ChunkPrimer chunkprimer = new ChunkPrimer(); @@ -426,6 +436,7 @@ public class ChunkProviderGenerate implements IChunkProvider { return chunk; } + @Override public void recreateStructures(Chunk var1, int i, int j) { if (this.settings.useMineShafts && this.mapFeaturesEnabled) { this.mineshaftGenerator.generate(this, this.worldObj, i, j, (ChunkPrimer) null); @@ -470,6 +481,7 @@ public class ChunkProviderGenerate implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -478,6 +490,7 @@ public class ChunkProviderGenerate implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -566,7 +579,8 @@ public class ChunkProviderGenerate implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderHell.java b/src/game/java/net/minecraft/world/gen/ChunkProviderHell.java index 70f00c2f..7987a30b 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderHell.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderHell.java @@ -29,13 +29,13 @@ import net.minecraft.world.gen.structure.MapGenNetherBridge; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -47,7 +47,7 @@ import net.minecraft.world.gen.structure.MapGenNetherBridge; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderHell implements IChunkProvider { private final World worldObj; @@ -118,6 +118,7 @@ public class ChunkProviderHell implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return true; } @@ -125,10 +126,12 @@ public class ChunkProviderHell implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int var1, int var2) { return true; } + @Override public boolean func_177460_a(IChunkProvider var1, Chunk var2, int var3, int var4) { return false; } @@ -270,10 +273,12 @@ public class ChunkProviderHell implements IChunkProvider { } + @Override public int getLoadedChunkCount() { return 0; } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { if (enumcreaturetype == EnumCreatureType.MONSTER) { @@ -291,6 +296,7 @@ public class ChunkProviderHell implements IChunkProvider { return biomegenbase.getSpawnableList(enumcreaturetype); } + @Override public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) { return null; } @@ -375,6 +381,7 @@ public class ChunkProviderHell implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "HellRandomLevelSource"; } @@ -382,6 +389,7 @@ public class ChunkProviderHell implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider var1, int i, int j) { BlockFalling.fallInstantly = true; BlockPos blockpos = new BlockPos(i * 16, 0, j * 16); @@ -456,6 +464,7 @@ public class ChunkProviderHell implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -465,6 +474,7 @@ public class ChunkProviderHell implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { this.hellRNG.setSeed((long) i * 341873128712L + (long) j * 132897987541L); ChunkPrimer chunkprimer = new ChunkPrimer(); @@ -488,6 +498,7 @@ public class ChunkProviderHell implements IChunkProvider { return chunk; } + @Override public void recreateStructures(Chunk var1, int i, int j) { this.genNetherBridge.generate(this, this.worldObj, i, j, (ChunkPrimer) null); } @@ -497,6 +508,7 @@ public class ChunkProviderHell implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { return true; } @@ -505,6 +517,7 @@ public class ChunkProviderHell implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { } @@ -512,7 +525,8 @@ public class ChunkProviderHell implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderServer.java b/src/game/java/net/minecraft/world/gen/ChunkProviderServer.java index 5132b7e9..d57c8fc9 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderServer.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderServer.java @@ -21,7 +21,6 @@ import net.minecraft.util.IProgressUpdate; import net.minecraft.util.LongHashMap; import net.minecraft.util.ReportedException; import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.MinecraftException; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.biome.BiomeGenBase; @@ -33,13 +32,13 @@ import net.minecraft.world.chunk.storage.IChunkLoader; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +50,7 @@ import net.minecraft.world.chunk.storage.IChunkLoader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderServer implements IChunkProvider { private static final Logger logger = LogManager.getLogger(); @@ -82,6 +81,7 @@ public class ChunkProviderServer implements IChunkProvider { /** * + Returns if the IChunkProvider supports saving. */ + @Override public boolean canSave() { return !this.worldObj.disableLevelSaving; } @@ -89,6 +89,7 @@ public class ChunkProviderServer implements IChunkProvider { /** * + Checks to see if a chunk exists at x, z */ + @Override public boolean chunkExists(int i, int j) { return this.id2ChunkMap.containsItem(ChunkCoordIntPair.chunkXZ2Int(i, j)); } @@ -108,6 +109,7 @@ public class ChunkProviderServer implements IChunkProvider { return this.loadedChunks; } + @Override public boolean func_177460_a(IChunkProvider ichunkprovider, Chunk chunk, int i, int j) { if (this.serverChunkGenerator != null && this.serverChunkGenerator.func_177460_a(ichunkprovider, chunk, i, j)) { Chunk chunk1 = this.provideChunk(i, j); @@ -118,15 +120,18 @@ public class ChunkProviderServer implements IChunkProvider { } } + @Override public int getLoadedChunkCount() { return this.id2ChunkMap.getNumHashElements(); } + @Override public List getPossibleCreatures(EnumCreatureType enumcreaturetype, BlockPos blockpos) { return this.serverChunkGenerator.getPossibleCreatures(enumcreaturetype, blockpos); } + @Override public BlockPos getStrongholdGen(World world, String s, BlockPos blockpos) { return this.serverChunkGenerator.getStrongholdGen(world, s, blockpos); } @@ -196,6 +201,7 @@ public class ChunkProviderServer implements IChunkProvider { /** * + Converts the instance data to a readable string. */ + @Override public String makeString() { return "ServerChunkCache: " + this.id2ChunkMap.getNumHashElements() + " Drop: " + this.droppedChunksSet.size(); } @@ -203,6 +209,7 @@ public class ChunkProviderServer implements IChunkProvider { /** * + Populates chunk with ores etc etc */ + @Override public void populate(IChunkProvider ichunkprovider, int i, int j) { Chunk chunk = this.provideChunk(i, j); if (!chunk.isTerrainPopulated()) { @@ -220,6 +227,7 @@ public class ChunkProviderServer implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(BlockPos blockpos) { return this.provideChunk(blockpos.getX() >> 4, blockpos.getZ() >> 4); } @@ -229,12 +237,14 @@ public class ChunkProviderServer implements IChunkProvider { * will generates all the blocks for the specified chunk from the map seed and * chunk seed */ + @Override public Chunk provideChunk(int i, int j) { Chunk chunk = (Chunk) this.id2ChunkMap.getValueByKey(ChunkCoordIntPair.chunkXZ2Int(i, j)); return chunk == null ? (!this.worldObj.isFindingSpawnPoint() && !this.chunkLoadOverride ? this.dummyChunk : this.loadChunk(i, j)) : chunk; } + @Override public void recreateStructures(Chunk var1, int var2, int var3) { } @@ -247,11 +257,7 @@ public class ChunkProviderServer implements IChunkProvider { } catch (IOException ioexception) { logger.error("Couldn\'t save chunk"); logger.error(ioexception); - } catch (MinecraftException minecraftexception) { - logger.error("Couldn\'t save chunk; already in use by another instance of Minecraft?"); - logger.error(minecraftexception); } - } } @@ -272,6 +278,7 @@ public class ChunkProviderServer implements IChunkProvider { * passed false, save up to two chunks. Return true if all chunks have been * saved. */ + @Override public boolean saveChunks(boolean flag, IProgressUpdate var2) { int i = 0; ArrayList arraylist = Lists.newArrayList(this.loadedChunks); @@ -299,6 +306,7 @@ public class ChunkProviderServer implements IChunkProvider { * + Save extra data not associated with any Chunk. Not saved during autosave, * only during world unload. Currently unimplemented. */ + @Override public void saveExtraData() { if (this.chunkLoader != null) { this.chunkLoader.saveExtraData(); @@ -320,6 +328,7 @@ public class ChunkProviderServer implements IChunkProvider { * + Unloads chunks that are marked to be unloaded. This is not guaranteed to * unload every such chunk. */ + @Override public boolean unloadQueuedChunks() { if (!this.worldObj.disableLevelSaving) { for (int i = 0; i < 100; ++i) { @@ -345,4 +354,4 @@ public class ChunkProviderServer implements IChunkProvider { return this.serverChunkGenerator.unloadQueuedChunks(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/ChunkProviderSettings.java b/src/game/java/net/minecraft/world/gen/ChunkProviderSettings.java index 4859725f..d4702c77 100644 --- a/src/game/java/net/minecraft/world/gen/ChunkProviderSettings.java +++ b/src/game/java/net/minecraft/world/gen/ChunkProviderSettings.java @@ -10,13 +10,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ChunkProviderSettings { public static class Factory { @@ -147,6 +147,7 @@ public class ChunkProviderSettings { this.func_177863_a(); } + @Override public boolean equals(Object object) { if (this == object) { return true; @@ -442,6 +443,7 @@ public class ChunkProviderSettings { return new ChunkProviderSettings(this); } + @Override public int hashCode() { int i = this.coordinateScale != 0.0F ? Float.floatToIntBits(this.coordinateScale) : 0; i = 31 * i + (this.heightScale != 0.0F ? Float.floatToIntBits(this.heightScale) : 0); @@ -525,12 +527,14 @@ public class ChunkProviderSettings { return i; } + @Override public String toString() { return JSONTypeProvider.serialize(this).toString(); } } public static class Serializer implements JSONTypeCodec { + @Override public ChunkProviderSettings.Factory deserialize(JSONObject jsonobject) throws JSONException { ChunkProviderSettings.Factory chunkprovidersettings$factory = new ChunkProviderSettings.Factory(); @@ -599,7 +603,7 @@ public class ChunkProviderSettings { chunkprovidersettings$factory.useLavaOceans); chunkprovidersettings$factory.fixedBiome = jsonobject.optInt("fixedBiome", chunkprovidersettings$factory.fixedBiome); - if (chunkprovidersettings$factory.fixedBiome < 38 && chunkprovidersettings$factory.fixedBiome >= -1) { + if (chunkprovidersettings$factory.fixedBiome < 39 && chunkprovidersettings$factory.fixedBiome >= -1) { if (chunkprovidersettings$factory.fixedBiome >= BiomeGenBase.hell.biomeID) { chunkprovidersettings$factory.fixedBiome += 2; } @@ -706,6 +710,7 @@ public class ChunkProviderSettings { return chunkprovidersettings$factory; } + @Override public JSONObject serialize(ChunkProviderSettings.Factory parFactory) throws JSONException { JSONObject jsonobject = new JSONObject(); jsonobject.put("coordinateScale", Float.valueOf(parFactory.coordinateScale)); @@ -1010,4 +1015,4 @@ public class ChunkProviderSettings { this.tuffMinHeight = settingsFactory.tuffMinHeight; this.tuffMaxHeight = settingsFactory.tuffMaxHeight; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/FlatGeneratorInfo.java b/src/game/java/net/minecraft/world/gen/FlatGeneratorInfo.java index 90a4570f..f544b533 100644 --- a/src/game/java/net/minecraft/world/gen/FlatGeneratorInfo.java +++ b/src/game/java/net/minecraft/world/gen/FlatGeneratorInfo.java @@ -18,13 +18,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FlatGeneratorInfo { public static FlatGeneratorInfo createFlatGeneratorFromString(String parString1) { @@ -233,6 +233,7 @@ public class FlatGeneratorInfo { this.biomeToUse = parInt1; } + @Override public String toString() { StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append(3); @@ -282,4 +283,4 @@ public class FlatGeneratorInfo { return stringbuilder.toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/FlatLayerInfo.java b/src/game/java/net/minecraft/world/gen/FlatLayerInfo.java index 0023a3b1..36d2218b 100644 --- a/src/game/java/net/minecraft/world/gen/FlatLayerInfo.java +++ b/src/game/java/net/minecraft/world/gen/FlatLayerInfo.java @@ -7,13 +7,13 @@ import net.minecraft.util.ResourceLocation; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FlatLayerInfo { private final int field_175902_a; @@ -85,6 +85,7 @@ public class FlatLayerInfo { this.layerMinimumY = parInt1; } + @Override public String toString() { String s; if (this.field_175902_a >= 3) { @@ -108,4 +109,4 @@ public class FlatLayerInfo { return s; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/GeneratorBushFeature.java b/src/game/java/net/minecraft/world/gen/GeneratorBushFeature.java index b2447782..ecc5c896 100644 --- a/src/game/java/net/minecraft/world/gen/GeneratorBushFeature.java +++ b/src/game/java/net/minecraft/world/gen/GeneratorBushFeature.java @@ -9,13 +9,13 @@ import net.minecraft.world.gen.feature.WorldGenerator; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.gen.feature.WorldGenerator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GeneratorBushFeature extends WorldGenerator { @@ -37,6 +37,7 @@ public class GeneratorBushFeature extends WorldGenerator { this.field_175908_a = parBlockBush; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 64; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -49,4 +50,4 @@ public class GeneratorBushFeature extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/MapGenBase.java b/src/game/java/net/minecraft/world/gen/MapGenBase.java index a9dfef32..dd366f77 100644 --- a/src/game/java/net/minecraft/world/gen/MapGenBase.java +++ b/src/game/java/net/minecraft/world/gen/MapGenBase.java @@ -8,13 +8,13 @@ import net.minecraft.world.chunk.IChunkProvider; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.chunk.IChunkProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenBase { /** @@ -67,4 +67,4 @@ public class MapGenBase { */ protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, ChunkPrimer var6) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/MapGenCaves.java b/src/game/java/net/minecraft/world/gen/MapGenCaves.java index cef7f9af..2bf794f2 100644 --- a/src/game/java/net/minecraft/world/gen/MapGenCaves.java +++ b/src/game/java/net/minecraft/world/gen/MapGenCaves.java @@ -15,13 +15,13 @@ import net.minecraft.world.chunk.ChunkPrimer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.chunk.ChunkPrimer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenCaves extends MapGenBase { @@ -203,7 +203,7 @@ public class MapGenCaves extends MapGenBase { } if (!flag3) { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int j3 = k2; j3 < k; ++j3) { double d10 = ((double) (j3 + parInt1 * 16) + 0.5D - parDouble1) / d2; @@ -276,6 +276,7 @@ public class MapGenCaves extends MapGenBase { /** * + Recursively called by generate() */ + @Override protected void recursiveGenerate(World var1, int i, int j, int k, int l, ChunkPrimer chunkprimer) { int i1 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(15) + 1) + 1); if (this.rand.nextInt(7) != 0) { @@ -305,4 +306,4 @@ public class MapGenCaves extends MapGenBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/MapGenCavesHell.java b/src/game/java/net/minecraft/world/gen/MapGenCavesHell.java index 2e7c14cc..bbcbd1bb 100644 --- a/src/game/java/net/minecraft/world/gen/MapGenCavesHell.java +++ b/src/game/java/net/minecraft/world/gen/MapGenCavesHell.java @@ -10,13 +10,13 @@ import net.minecraft.world.chunk.ChunkPrimer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.chunk.ChunkPrimer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenCavesHell extends MapGenBase { @@ -189,6 +189,7 @@ public class MapGenCavesHell extends MapGenBase { /** * + Recursively called by generate() */ + @Override protected void recursiveGenerate(World var1, int i, int j, int k, int l, ChunkPrimer chunkprimer) { int i1 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(10) + 1) + 1); if (this.rand.nextInt(5) != 0) { @@ -214,4 +215,4 @@ public class MapGenCavesHell extends MapGenBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/MapGenRavine.java b/src/game/java/net/minecraft/world/gen/MapGenRavine.java index 39fe64b3..620f4226 100644 --- a/src/game/java/net/minecraft/world/gen/MapGenRavine.java +++ b/src/game/java/net/minecraft/world/gen/MapGenRavine.java @@ -11,13 +11,13 @@ import net.minecraft.world.chunk.ChunkPrimer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.chunk.ChunkPrimer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenRavine extends MapGenBase { private float[] field_75046_d = new float[1024]; @@ -147,7 +147,7 @@ public class MapGenRavine extends MapGenBase { } if (!flag2) { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int j3 = k2; j3 < k; ++j3) { double d10 = ((double) (j3 + parInt1 * 16) + 0.5D - parDouble1) / d9; @@ -203,6 +203,7 @@ public class MapGenRavine extends MapGenBase { /** * + Recursively called by generate() */ + @Override protected void recursiveGenerate(World worldIn, int chunkX, int chunkZ, int chunkPrimerIn, int parInt4, ChunkPrimer parChunkPrimer) { if (this.rand.nextInt(50) == 0) { @@ -221,4 +222,4 @@ public class MapGenRavine extends MapGenBase { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/NoiseGenerator.java b/src/game/java/net/minecraft/world/gen/NoiseGenerator.java index b8359ad3..ac56f374 100644 --- a/src/game/java/net/minecraft/world/gen/NoiseGenerator.java +++ b/src/game/java/net/minecraft/world/gen/NoiseGenerator.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class NoiseGenerator { -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/NoiseGeneratorImproved.java b/src/game/java/net/minecraft/world/gen/NoiseGeneratorImproved.java index d40d11d5..798b3980 100644 --- a/src/game/java/net/minecraft/world/gen/NoiseGeneratorImproved.java +++ b/src/game/java/net/minecraft/world/gen/NoiseGeneratorImproved.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NoiseGeneratorImproved extends NoiseGenerator { private static final double[] field_152381_e = new double[] { 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, @@ -208,4 +208,4 @@ public class NoiseGeneratorImproved extends NoiseGenerator { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/NoiseGeneratorOctaves.java b/src/game/java/net/minecraft/world/gen/NoiseGeneratorOctaves.java index e4a45054..bf8166d2 100644 --- a/src/game/java/net/minecraft/world/gen/NoiseGeneratorOctaves.java +++ b/src/game/java/net/minecraft/world/gen/NoiseGeneratorOctaves.java @@ -6,13 +6,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NoiseGeneratorOctaves extends NoiseGenerator { private NoiseGeneratorImproved[] generatorCollection; @@ -83,4 +83,4 @@ public class NoiseGeneratorOctaves extends NoiseGenerator { return parArrayOfDouble; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/NoiseGeneratorPerlin.java b/src/game/java/net/minecraft/world/gen/NoiseGeneratorPerlin.java index 0f368615..0f0438aa 100644 --- a/src/game/java/net/minecraft/world/gen/NoiseGeneratorPerlin.java +++ b/src/game/java/net/minecraft/world/gen/NoiseGeneratorPerlin.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NoiseGeneratorPerlin extends NoiseGenerator { private NoiseGeneratorSimplex[] field_151603_a; @@ -79,4 +79,4 @@ public class NoiseGeneratorPerlin extends NoiseGenerator { return d0; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/NoiseGeneratorSimplex.java b/src/game/java/net/minecraft/world/gen/NoiseGeneratorSimplex.java index 6d2ce6b8..8a8a3016 100644 --- a/src/game/java/net/minecraft/world/gen/NoiseGeneratorSimplex.java +++ b/src/game/java/net/minecraft/world/gen/NoiseGeneratorSimplex.java @@ -5,13 +5,13 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NoiseGeneratorSimplex { private static int[][] field_151611_e = new int[][] { { 1, 1, 0 }, { -1, 1, 0 }, { 1, -1, 0 }, { -1, -1, 0 }, @@ -201,4 +201,4 @@ public class NoiseGeneratorSimplex { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenAbstractTree.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenAbstractTree.java index 34ce5ca6..28959d7c 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenAbstractTree.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenAbstractTree.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class WorldGenAbstractTree extends WorldGenerator { public WorldGenAbstractTree(boolean parFlag) { @@ -51,4 +51,4 @@ public abstract class WorldGenAbstractTree extends WorldGenerator { public void func_180711_a(World worldIn, EaglercraftRandom parRandom, BlockPos parBlockPos) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenBigMushroom.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenBigMushroom.java index b50d94ea..b208c2a3 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenBigMushroom.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenBigMushroom.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenBigMushroom extends WorldGenerator { private Block mushroomType; @@ -43,6 +43,7 @@ public class WorldGenBigMushroom extends WorldGenerator { this.mushroomType = parBlock; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (this.mushroomType == null) { this.mushroomType = random.nextBoolean() ? Blocks.brown_mushroom_block : Blocks.red_mushroom_block; @@ -57,7 +58,7 @@ public class WorldGenBigMushroom extends WorldGenerator { b0 = 0; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - b0; k <= blockpos.getX() + b0 && flag; ++k) { for (int l = blockpos.getZ() - b0; l <= blockpos.getZ() + b0 && flag; ++l) { @@ -189,4 +190,4 @@ public class WorldGenBigMushroom extends WorldGenerator { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenBigTree.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenBigTree.java index ec60a018..d4fc594d 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenBigTree.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenBigTree.java @@ -18,13 +18,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,15 +36,16 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenBigTree extends WorldGenAbstractTree { - static class FoliageCoordinates extends BlockPos { + static class FoliageCoordinates { private final int field_178000_b; + private final BlockPos blockPos; public FoliageCoordinates(BlockPos parBlockPos, int parInt1) { - super(parBlockPos.getX(), parBlockPos.getY(), parBlockPos.getZ()); this.field_178000_b = parInt1; + this.blockPos = parBlockPos; } public int func_177999_q() { @@ -97,6 +98,7 @@ public class WorldGenBigTree extends WorldGenAbstractTree { } } + @Override public void func_175904_e() { this.leafDistanceLimit = 5; } @@ -152,6 +154,7 @@ public class WorldGenBigTree extends WorldGenAbstractTree { } + @Override public boolean generate(World worldIn, EaglercraftRandom rand, BlockPos position) { this.world = worldIn; this.basePos = position; @@ -191,9 +194,9 @@ public class WorldGenBigTree extends WorldGenAbstractTree { WorldGenBigTree.FoliageCoordinates worldgenbigtree$foliagecoordinates = this.field_175948_j.get(j); int i = worldgenbigtree$foliagecoordinates.func_177999_q(); BlockPos blockpos = new BlockPos(this.basePos.getX(), i, this.basePos.getZ()); - if (!blockpos.equals(worldgenbigtree$foliagecoordinates) + if (!blockpos.equals(worldgenbigtree$foliagecoordinates.blockPos) && this.leafNodeNeedsBase(i - this.basePos.getY())) { - this.func_175937_a(blockpos, worldgenbigtree$foliagecoordinates, Blocks.log); + this.func_175937_a(blockpos, worldgenbigtree$foliagecoordinates.blockPos, Blocks.log); } } @@ -251,7 +254,7 @@ public class WorldGenBigTree extends WorldGenAbstractTree { */ void generateLeaves() { for (int i = 0, l = this.field_175948_j.size(); i < l; ++i) { - this.generateLeafNode(this.field_175948_j.get(i)); + this.generateLeafNode(this.field_175948_j.get(i).blockPos); } } @@ -337,4 +340,4 @@ public class WorldGenBigTree extends WorldGenAbstractTree { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenBlockBlob.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenBlockBlob.java index 03d12406..54f24b97 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenBlockBlob.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenBlockBlob.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenBlockBlob extends WorldGenerator { private final Block field_150545_a; @@ -39,6 +39,7 @@ public class WorldGenBlockBlob extends WorldGenerator { this.field_150544_b = parInt1; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { while (true) { label0: { @@ -65,7 +66,8 @@ public class WorldGenBlockBlob extends WorldGenerator { int l = i1 + random.nextInt(2); float f = (float) (j + k + l) * 0.333F + 0.5F; - for (BlockPos blockpos1 : BlockPos.getAllInBox(blockpos.add(-j, -k, -l), blockpos.add(j, k, l))) { + for (BlockPos blockpos1 : BlockPos.getAllInBoxMutable(blockpos.add(-j, -k, -l), + blockpos.add(j, k, l))) { if (blockpos1.distanceSq(blockpos) <= (double) (f * f)) { world.setBlockState(blockpos1, this.field_150545_a.getDefaultState(), 4); } @@ -81,4 +83,4 @@ public class WorldGenBlockBlob extends WorldGenerator { blockpos = blockpos.down(); } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenCactus.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenCactus.java index 4bfdf0c6..1369afd1 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenCactus.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenCactus.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,9 +26,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenCactus extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 10; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -46,4 +47,4 @@ public class WorldGenCactus extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenCanopyTree.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenCanopyTree.java index 81d0140c..aaef7382 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenCanopyTree.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenCanopyTree.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenCanopyTree extends WorldGenAbstractTree { private static final IBlockState field_181640_a = Blocks.log2.getDefaultState().withProperty(BlockNewLog.VARIANT, @@ -60,7 +60,7 @@ public class WorldGenCanopyTree extends WorldGenAbstractTree { int i = parBlockPos.getX(); int j = parBlockPos.getY(); int k = parBlockPos.getZ(); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int l = 0; l <= parInt1 + 1; ++l) { byte b0 = 1; @@ -92,6 +92,7 @@ public class WorldGenCanopyTree extends WorldGenAbstractTree { } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(3) + random.nextInt(2) + 6; int j = blockpos.getX(); @@ -199,4 +200,4 @@ public class WorldGenCanopyTree extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenClay.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenClay.java index 53402564..5f520578 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenClay.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenClay.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenClay extends WorldGenerator { private Block field_150546_a = Blocks.clay; @@ -38,6 +38,7 @@ public class WorldGenClay extends WorldGenerator { this.numberOfBlocks = parInt1; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (world.getBlockState(blockpos).getBlock().getMaterial() != Material.water) { return false; @@ -64,4 +65,4 @@ public class WorldGenClay extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenDeadBush.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenDeadBush.java index b7b036fd..994e9085 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenDeadBush.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenDeadBush.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,9 +28,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenDeadBush extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { Block block; while (((block = world.getBlockState(blockpos).getBlock()).getMaterial() == Material.air @@ -49,4 +50,4 @@ public class WorldGenDeadBush extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenDesertWells.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenDesertWells.java index 76cbeeef..97262078 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenDesertWells.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenDesertWells.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenDesertWells extends WorldGenerator { private static final BlockStateHelper field_175913_a = BlockStateHelper.forBlock(Blocks.sand) @@ -45,6 +45,7 @@ public class WorldGenDesertWells extends WorldGenerator { private final IBlockState field_175912_c = Blocks.sandstone.getDefaultState(); private final IBlockState field_175910_d = Blocks.flowing_water.getDefaultState(); + @Override public boolean generate(World world, EaglercraftRandom var2, BlockPos blockpos) { while (world.isAirBlock(blockpos) && blockpos.getY() > 2) { blockpos = blockpos.down(); @@ -109,4 +110,4 @@ public class WorldGenDesertWells extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenDoublePlant.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenDoublePlant.java index 399b588d..77aed8b5 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenDoublePlant.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenDoublePlant.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,11 +27,12 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenDoublePlant extends WorldGenerator { private BlockDoublePlant.EnumPlantType field_150549_a; + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { boolean flag = false; @@ -51,4 +52,4 @@ public class WorldGenDoublePlant extends WorldGenerator { public void setPlantType(BlockDoublePlant.EnumPlantType parEnumPlantType) { this.field_150549_a = parEnumPlantType; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenDungeons.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenDungeons.java index 6e3ecc91..e1b55a52 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenDungeons.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenDungeons.java @@ -21,13 +21,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenDungeons extends WorldGenerator { private static final Logger field_175918_a = LogManager.getLogger(); @@ -61,6 +61,7 @@ public class WorldGenDungeons extends WorldGenerator { new WeightedRandomChestContent(Items.iron_horse_armor, 0, 1, 1, 5), new WeightedRandomChestContent(Items.diamond_horse_armor, 0, 1, 1, 1) }); + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { boolean flag = true; int i = random.nextInt(2) + 2; @@ -172,4 +173,4 @@ public class WorldGenDungeons extends WorldGenerator { private String pickMobSpawner(EaglercraftRandom parRandom) { return SPAWNERTYPES[parRandom.nextInt(SPAWNERTYPES.length)]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenFire.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenFire.java index 619a4cb5..2138ff72 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenFire.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenFire.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,9 +26,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenFire extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 64; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -40,4 +41,4 @@ public class WorldGenFire extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenFlowers.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenFlowers.java index 4f055b4a..8112d0fe 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenFlowers.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenFlowers.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenFlowers extends WorldGenerator { private BlockFlower flower; @@ -37,6 +37,7 @@ public class WorldGenFlowers extends WorldGenerator { this.setGeneratedBlock(parBlockFlower, parEnumFlowerType); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 64; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -55,4 +56,4 @@ public class WorldGenFlowers extends WorldGenerator { this.field_175915_b = parBlockFlower.getDefaultState().withProperty(parBlockFlower.getTypeProperty(), parEnumFlowerType); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenForest.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenForest.java index 1e75f53e..2d0d8488 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenForest.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenForest.java @@ -14,13 +14,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenForest extends WorldGenAbstractTree { private static final IBlockState field_181629_a = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -47,6 +47,7 @@ public class WorldGenForest extends WorldGenAbstractTree { this.useExtraRandomHeight = parFlag2; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(3) + 5; if (this.useExtraRandomHeight) { @@ -65,7 +66,7 @@ public class WorldGenForest extends WorldGenAbstractTree { b0 = 2; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - b0; k <= blockpos.getX() + b0 && flag; ++k) { for (int l = blockpos.getZ() - b0; l <= blockpos.getZ() + b0 && flag; ++l) { @@ -125,4 +126,4 @@ public class WorldGenForest extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone1.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone1.java index 7b73d7dd..3a03d6b0 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone1.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone1.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,9 +28,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenGlowStone1 extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { BlockPos tmp; if (!world.isAirBlock(blockpos)) { @@ -68,4 +69,4 @@ public class WorldGenGlowStone1 extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone2.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone2.java index 1814b8fa..968451d3 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone2.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenGlowStone2.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,9 +28,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenGlowStone2 extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { BlockPos tmp; if (!world.isAirBlock(blockpos)) { @@ -68,4 +69,4 @@ public class WorldGenGlowStone2 extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenHellLava.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenHellLava.java index 3a8a8b76..a8736c89 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenHellLava.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenHellLava.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenHellLava extends WorldGenerator { private final Block field_150553_a; @@ -39,6 +39,7 @@ public class WorldGenHellLava extends WorldGenerator { this.field_94524_b = parFlag; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (world.getBlockState(blockpos.up()).getBlock() != Blocks.netherrack) { return false; @@ -96,4 +97,4 @@ public class WorldGenHellLava extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenHugeTrees.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenHugeTrees.java index 2696fb3c..21170f38 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenHugeTrees.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenHugeTrees.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class WorldGenHugeTrees extends WorldGenAbstractTree { protected final int baseHeight; @@ -135,4 +135,4 @@ public abstract class WorldGenHugeTrees extends WorldGenAbstractTree { protected boolean func_175929_a(World worldIn, EaglercraftRandom parRandom, BlockPos parBlockPos, int parInt1) { return this.func_175926_c(worldIn, parBlockPos, parInt1) && this.func_175927_a(parBlockPos, worldIn); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenIcePath.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenIcePath.java index 46b78b5a..22f2d806 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenIcePath.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenIcePath.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenIcePath extends WorldGenerator { private Block block = Blocks.packed_ice; @@ -37,6 +37,7 @@ public class WorldGenIcePath extends WorldGenerator { this.basePathWidth = parInt1; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { while (world.isAirBlock(blockpos) && blockpos.getY() > 2) { blockpos = blockpos.down(); @@ -67,4 +68,4 @@ public class WorldGenIcePath extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenIceSpike.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenIceSpike.java index 462e48b3..b69ad366 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenIceSpike.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenIceSpike.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,9 +29,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenIceSpike extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { while (world.isAirBlock(blockpos) && blockpos.getY() > 2) { blockpos = blockpos.down(); @@ -114,4 +115,4 @@ public class WorldGenIceSpike extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenLakes.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenLakes.java index dae74481..9f0963cf 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenLakes.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenLakes.java @@ -12,13 +12,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenLakes extends WorldGenerator { private Block block; @@ -39,6 +39,7 @@ public class WorldGenLakes extends WorldGenerator { this.block = blockIn; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (blockpos = blockpos.add(-8, 0, -8); blockpos.getY() > 5 && world.isAirBlock(blockpos); blockpos = blockpos.down()) { @@ -164,4 +165,4 @@ public class WorldGenLakes extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenLiquids.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenLiquids.java index e6c909d5..cde1597a 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenLiquids.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenLiquids.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenLiquids extends WorldGenerator { private Block block; @@ -37,6 +37,7 @@ public class WorldGenLiquids extends WorldGenerator { this.block = parBlock; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (world.getBlockState(blockpos.up()).getBlock() != Blocks.stone) { return false; @@ -88,4 +89,4 @@ public class WorldGenLiquids extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaJungle.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaJungle.java index 93670ee6..e5006877 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaJungle.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaJungle.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenMegaJungle extends WorldGenHugeTrees { public WorldGenMegaJungle(boolean parFlag, int parInt1, int parInt2, IBlockState parIBlockState, @@ -56,6 +56,7 @@ public class WorldGenMegaJungle extends WorldGenHugeTrees { } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = this.func_150533_a(random); if (!this.func_175929_a(world, random, blockpos, i)) { @@ -127,4 +128,4 @@ public class WorldGenMegaJungle extends WorldGenHugeTrees { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java index 264ed41b..0dceba19 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java @@ -17,13 +17,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenMegaPineTree extends WorldGenHugeTrees { private static final IBlockState field_181633_e = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -94,6 +94,7 @@ public class WorldGenMegaPineTree extends WorldGenHugeTrees { } + @Override public void func_180711_a(World world, EaglercraftRandom random, BlockPos blockpos) { this.func_175933_b(world, blockpos.west().north()); this.func_175933_b(world, blockpos.east(2).north()); @@ -111,6 +112,7 @@ public class WorldGenMegaPineTree extends WorldGenHugeTrees { } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = this.func_150533_a(random); if (!this.func_175929_a(world, random, blockpos, i)) { @@ -145,4 +147,4 @@ public class WorldGenMegaPineTree extends WorldGenHugeTrees { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenMelon.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenMelon.java index 5b55fea1..2e8b653a 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenMelon.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenMelon.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,9 +26,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenMelon extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 64; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -41,4 +42,4 @@ public class WorldGenMelon extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenMinable.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenMinable.java index 7a6a3f16..d0ca4788 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenMinable.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenMinable.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenMinable extends WorldGenerator { private final IBlockState oreBlock; @@ -49,6 +49,7 @@ public class WorldGenMinable extends WorldGenerator { this.predicate = parPredicate; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { float f = random.nextFloat() * 3.1415927F; double d0 = (double) ((float) (blockpos.getX() + 8) + MathHelper.sin(f) * (float) this.numberOfBlocks / 8.0F); @@ -102,4 +103,4 @@ public class WorldGenMinable extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenPumpkin.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenPumpkin.java index 3f582e96..4c6c2a45 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenPumpkin.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenPumpkin.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,9 +28,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenPumpkin extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 64; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(8) - random.nextInt(8), @@ -44,4 +45,4 @@ public class WorldGenPumpkin extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenReed.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenReed.java index 53b66787..cb37c5d8 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenReed.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenReed.java @@ -9,13 +9,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,9 +27,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenReed extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 20; ++i) { BlockPos blockpos1 = blockpos.add(random.nextInt(4) - random.nextInt(4), 0, @@ -53,4 +54,4 @@ public class WorldGenReed extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenSand.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenSand.java index e28f5b12..0030c0e9 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenSand.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenSand.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenSand extends WorldGenerator { private Block block; @@ -39,6 +39,7 @@ public class WorldGenSand extends WorldGenerator { this.radius = parInt1; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (world.getBlockState(blockpos).getBlock().getMaterial() != Material.water) { return false; @@ -65,4 +66,4 @@ public class WorldGenSand extends WorldGenerator { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenSavannaTree.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenSavannaTree.java index 02870518..a79e6e9b 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenSavannaTree.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenSavannaTree.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenSavannaTree extends WorldGenAbstractTree { private static final IBlockState field_181643_a = Blocks.log2.getDefaultState().withProperty(BlockNewLog.VARIANT, @@ -59,6 +59,7 @@ public class WorldGenSavannaTree extends WorldGenAbstractTree { this.setBlockAndNotifyAdequately(parWorld, parBlockPos, field_181643_a); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(3) + random.nextInt(3) + 5; boolean flag = true; @@ -73,7 +74,7 @@ public class WorldGenSavannaTree extends WorldGenAbstractTree { b0 = 2; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - b0; k <= blockpos.getX() + b0 && flag; ++k) { for (int l = blockpos.getZ() - b0; l <= blockpos.getZ() + b0 && flag; ++l) { @@ -194,4 +195,4 @@ public class WorldGenSavannaTree extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenShrub.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenShrub.java index 92426123..e3345bb2 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenShrub.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenShrub.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenShrub extends WorldGenTrees { private final IBlockState leavesMetadata; @@ -41,6 +41,7 @@ public class WorldGenShrub extends WorldGenTrees { this.leavesMetadata = parIBlockState2; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { Block block; while (((block = world.getBlockState(blockpos).getBlock()).getMaterial() == Material.air @@ -75,4 +76,4 @@ public class WorldGenShrub extends WorldGenTrees { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenSpikes.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenSpikes.java index 56cbd945..ca5433e9 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenSpikes.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenSpikes.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenSpikes extends WorldGenerator { private Block baseBlockRequired; @@ -37,11 +37,12 @@ public class WorldGenSpikes extends WorldGenerator { this.baseBlockRequired = parBlock; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { if (world.isAirBlock(blockpos) && world.getBlockState(blockpos.down()).getBlock() == this.baseBlockRequired) { int i = random.nextInt(32) + 6; int j = random.nextInt(4) + 1; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - j; k <= blockpos.getX() + j; ++k) { for (int l = blockpos.getZ() - j; l <= blockpos.getZ() + j; ++l) { @@ -78,4 +79,4 @@ public class WorldGenSpikes extends WorldGenerator { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenSwamp.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenSwamp.java index ffb9778a..01c05c7a 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenSwamp.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenSwamp.java @@ -16,13 +16,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenSwamp extends WorldGenAbstractTree { private static final IBlockState field_181648_a = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -60,6 +60,7 @@ public class WorldGenSwamp extends WorldGenAbstractTree { } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i; for (i = random.nextInt(4) + 5; world.getBlockState(blockpos.down()).getBlock() @@ -79,7 +80,7 @@ public class WorldGenSwamp extends WorldGenAbstractTree { b0 = 3; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - b0; k <= blockpos.getX() + b0 && flag; ++k) { for (int l = blockpos.getZ() - b0; l <= blockpos.getZ() + b0 && flag; ++l) { @@ -137,7 +138,7 @@ public class WorldGenSwamp extends WorldGenAbstractTree { for (int i2 = blockpos.getY() - 3 + i; i2 <= blockpos.getY() + i; ++i2) { int k2 = i2 - (blockpos.getY() + i); int i3 = 2 - k2 / 2; - BlockPos.MutableBlockPos blockpos$mutableblockpos1 = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos1 = new BlockPos(); for (int l3 = blockpos.getX() - i3; l3 <= blockpos.getX() + i3; ++l3) { for (int i4 = blockpos.getZ() - i3; i4 <= blockpos.getZ() + i3; ++i4) { @@ -181,4 +182,4 @@ public class WorldGenSwamp extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga1.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga1.java index b08e6078..ead96e0e 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga1.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga1.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenTaiga1 extends WorldGenAbstractTree { private static final IBlockState field_181636_a = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -46,6 +46,7 @@ public class WorldGenTaiga1 extends WorldGenAbstractTree { super(false); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(5) + 7; int j = i - random.nextInt(2) - 3; @@ -61,7 +62,7 @@ public class WorldGenTaiga1 extends WorldGenAbstractTree { j1 = l; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = blockpos.getX() - j1; k1 <= blockpos.getX() + j1 && flag; ++k1) { for (int l1 = blockpos.getZ() - j1; l1 <= blockpos.getZ() + j1 && flag; ++l1) { @@ -123,4 +124,4 @@ public class WorldGenTaiga1 extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga2.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga2.java index ffa99059..ba3ad9c5 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga2.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenTaiga2.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenTaiga2 extends WorldGenAbstractTree { private static final IBlockState field_181645_a = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -46,6 +46,7 @@ public class WorldGenTaiga2 extends WorldGenAbstractTree { super(parFlag); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(4) + 6; int j = 1 + random.nextInt(2); @@ -61,7 +62,7 @@ public class WorldGenTaiga2 extends WorldGenAbstractTree { j1 = l; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = blockpos.getX() - j1; k1 <= blockpos.getX() + j1 && flag; ++k1) { for (int l1 = blockpos.getZ() - j1; l1 <= blockpos.getZ() + j1 && flag; ++l1) { @@ -136,4 +137,4 @@ public class WorldGenTaiga2 extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenTallGrass.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenTallGrass.java index 5d2d43f7..90356149 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenTallGrass.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenTallGrass.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenTallGrass extends WorldGenerator { private final IBlockState tallGrassState; @@ -39,6 +39,7 @@ public class WorldGenTallGrass extends WorldGenerator { this.tallGrassState = Blocks.tallgrass.getDefaultState().withProperty(BlockTallGrass.TYPE, parEnumType); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { Block block; while (((block = world.getBlockState(blockpos).getBlock()).getMaterial() == Material.air @@ -56,4 +57,4 @@ public class WorldGenTallGrass extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenTrees.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenTrees.java index 402271c9..a67b9453 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenTrees.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenTrees.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenTrees extends WorldGenAbstractTree { private static final IBlockState field_181653_a = Blocks.log.getDefaultState().withProperty(BlockOldLog.VARIANT, @@ -85,6 +85,7 @@ public class WorldGenTrees extends WorldGenAbstractTree { .withProperty(BlockCocoa.AGE, Integer.valueOf(parInt1)).withProperty(BlockCocoa.FACING, parEnumFacing)); } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { int i = random.nextInt(3) + this.minTreeHeight; boolean flag = true; @@ -99,7 +100,7 @@ public class WorldGenTrees extends WorldGenAbstractTree { b0 = 2; } - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = blockpos.getX() - b0; k <= blockpos.getX() + b0 && flag; ++k) { for (int l = blockpos.getZ() - b0; l <= blockpos.getZ() + b0 && flag; ++l) { @@ -175,7 +176,7 @@ public class WorldGenTrees extends WorldGenAbstractTree { for (int l2 = blockpos.getY() - 3 + i; l2 <= blockpos.getY() + i; ++l2) { int k3 = l2 - (blockpos.getY() + i); int l3 = 2 - k3 / 2; - BlockPos.MutableBlockPos blockpos$mutableblockpos1 = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos1 = new BlockPos(); for (int i4 = blockpos.getX() - l3; i4 <= blockpos.getX() + l3; ++i4) { for (int j4 = blockpos.getZ() - l3; j4 <= blockpos.getZ() + l3; ++j4) { @@ -236,4 +237,4 @@ public class WorldGenTrees extends WorldGenAbstractTree { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenVines.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenVines.java index 9ba98ca6..eb0fa414 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenVines.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenVines.java @@ -11,13 +11,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,9 +29,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenVines extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (; blockpos.getY() < 128; blockpos = blockpos.up()) { if (world.isAirBlock(blockpos)) { @@ -56,4 +57,4 @@ public class WorldGenVines extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenWaterlily.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenWaterlily.java index 7b2bf579..c6cfb9b3 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenWaterlily.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenWaterlily.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,9 +26,10 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGenWaterlily extends WorldGenerator { + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { for (int i = 0; i < 10; ++i) { int j = blockpos.getX() + random.nextInt(8) - random.nextInt(8); @@ -42,4 +43,4 @@ public class WorldGenWaterlily extends WorldGenerator { return true; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGenerator.java b/src/game/java/net/minecraft/world/gen/feature/WorldGenerator.java index 8461c1d3..3f854bc5 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGenerator.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGenerator.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class WorldGenerator { private final boolean doBlockNotify; @@ -52,4 +52,4 @@ public abstract class WorldGenerator { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java b/src/game/java/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java index 4ae70615..09b10959 100644 --- a/src/game/java/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java +++ b/src/game/java/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java @@ -15,13 +15,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldGeneratorBonusChest extends WorldGenerator { private final List chestItems; @@ -44,6 +44,7 @@ public class WorldGeneratorBonusChest extends WorldGenerator { this.itemsToGenerateInBonusChest = parInt1; } + @Override public boolean generate(World world, EaglercraftRandom random, BlockPos blockpos) { Block block; while (((block = world.getBlockState(blockpos).getBlock()).getMaterial() == Material.air @@ -94,4 +95,4 @@ public class WorldGeneratorBonusChest extends WorldGenerator { return false; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayer.java b/src/game/java/net/minecraft/world/gen/layer/GenLayer.java index 8737209d..e5113e6a 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayer.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayer.java @@ -12,13 +12,13 @@ import net.minecraft.world.gen.ChunkProviderSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.gen.ChunkProviderSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class GenLayer { protected static boolean biomesEqualOrMesaPlateau(int biomeIDA, int biomeIDB) { @@ -48,11 +48,13 @@ public abstract class GenLayer { crashreportcategory.addCrashSection("Biome A ID", Integer.valueOf(biomeIDA)); crashreportcategory.addCrashSection("Biome B ID", Integer.valueOf(biomeIDB)); crashreportcategory.addCrashSectionCallable("Biome A", new Callable() { + @Override public String call() throws Exception { return String.valueOf(biomegenbase); } }); crashreportcategory.addCrashSectionCallable("Biome B", new Callable() { + @Override public String call() throws Exception { return String.valueOf(biomegenbase1); } @@ -230,4 +232,4 @@ public abstract class GenLayer { protected int selectRandom(int... parArrayOfInt) { return parArrayOfInt[this.nextInt(parArrayOfInt.length)]; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddIsland.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddIsland.java index fce0d1ed..10e74346 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddIsland.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddIsland.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerAddIsland extends GenLayer { public GenLayerAddIsland(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerAddIsland extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -96,4 +97,4 @@ public class GenLayerAddIsland extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.java index 49724467..82fa0f30 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerAddMushroomIsland extends GenLayer { public GenLayerAddMushroomIsland(long parLong1, GenLayer parGenLayer) { @@ -36,6 +36,7 @@ public class GenLayerAddMushroomIsland extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -62,4 +63,4 @@ public class GenLayerAddMushroomIsland extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddSnow.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddSnow.java index 6b43ac76..38bb50a2 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerAddSnow.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerAddSnow.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerAddSnow extends GenLayer { public GenLayerAddSnow(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerAddSnow extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -65,4 +66,4 @@ public class GenLayerAddSnow extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerBiome.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerBiome.java index a1ef9dbe..b53085e9 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerBiome.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerBiome.java @@ -7,13 +7,13 @@ import net.minecraft.world.gen.ChunkProviderSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,11 +25,12 @@ import net.minecraft.world.gen.ChunkProviderSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerBiome extends GenLayer { private BiomeGenBase[] field_151623_c = new BiomeGenBase[] { BiomeGenBase.desert, BiomeGenBase.desert, - BiomeGenBase.desert, BiomeGenBase.savanna, BiomeGenBase.savanna, BiomeGenBase.plains }; + BiomeGenBase.desert, BiomeGenBase.savanna, BiomeGenBase.savanna, BiomeGenBase.plains, + BiomeGenBase.enderForest }; private BiomeGenBase[] field_151621_d = new BiomeGenBase[] { BiomeGenBase.forest, BiomeGenBase.roofedForest, BiomeGenBase.extremeHills, BiomeGenBase.plains, BiomeGenBase.birchForest, BiomeGenBase.swampland }; private BiomeGenBase[] field_151622_e = new BiomeGenBase[] { BiomeGenBase.forest, BiomeGenBase.extremeHills, @@ -43,7 +44,8 @@ public class GenLayerBiome extends GenLayer { this.parent = parGenLayer; if (parWorldType == WorldType.DEFAULT_1_1) { this.field_151623_c = new BiomeGenBase[] { BiomeGenBase.desert, BiomeGenBase.forest, - BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga }; + BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga, + BiomeGenBase.enderForest }; this.field_175973_g = null; } else if (parWorldType == WorldType.CUSTOMIZED) { this.field_175973_g = ChunkProviderSettings.Factory.jsonToFactory(parString1).func_177864_b(); @@ -58,6 +60,7 @@ public class GenLayerBiome extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i, j, k, l); int[] aint1 = IntCache.getIntCache(k * l); @@ -106,4 +109,4 @@ public class GenLayerBiome extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerBiomeEdge.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerBiomeEdge.java index 66cdc4bf..2c8ec69d 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerBiomeEdge.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerBiomeEdge.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerBiomeEdge extends GenLayer { public GenLayerBiomeEdge(long parLong1, GenLayer parGenLayer) { @@ -58,6 +58,7 @@ public class GenLayerBiomeEdge extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i - 1, j - 1, k + 2, l + 2); int[] aint1 = IntCache.getIntCache(k * l); @@ -161,4 +162,4 @@ public class GenLayerBiomeEdge extends GenLayer { return true; } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerDeepOcean.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerDeepOcean.java index 76607658..f590693f 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerDeepOcean.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerDeepOcean.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerDeepOcean extends GenLayer { public GenLayerDeepOcean(long parLong1, GenLayer parGenLayer) { @@ -36,6 +36,7 @@ public class GenLayerDeepOcean extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int areaX, int areaY, int areaWidth, int areaHeight) { int i = areaX - 1; int j = areaY - 1; @@ -78,4 +79,4 @@ public class GenLayerDeepOcean extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerEdge.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerEdge.java index 902b8387..c813350e 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerEdge.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerEdge.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerEdge extends GenLayer { public static enum Mode { @@ -41,6 +41,7 @@ public class GenLayerEdge extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { switch (this.field_151627_c) { case COOL_WARM: @@ -132,4 +133,4 @@ public class GenLayerEdge extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.java index 66e3cd87..b3a24048 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerFuzzyZoom extends GenLayerZoom { public GenLayerFuzzyZoom(long parLong1, GenLayer parGenLayer) { @@ -32,7 +32,8 @@ public class GenLayerFuzzyZoom extends GenLayerZoom { * + returns the most frequently occurring number of the set, or a random number * from those provided */ + @Override protected int selectModeOrRandom(int parInt1, int parInt2, int parInt3, int parInt4) { return this.selectRandom(new int[] { parInt1, parInt2, parInt3, parInt4 }); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerHills.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerHills.java index 171b62d0..430ac85e 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerHills.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerHills.java @@ -7,13 +7,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerHills extends GenLayer { private static final Logger logger = LogManager.getLogger(); @@ -42,6 +42,7 @@ public class GenLayerHills extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i - 1, j - 1, k + 2, l + 2); int[] aint1 = this.field_151628_d.getInts(i - 1, j - 1, k + 2, l + 2); @@ -152,4 +153,4 @@ public class GenLayerHills extends GenLayer { return aint2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerIsland.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerIsland.java index 9ad09be0..cce8657d 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerIsland.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerIsland.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerIsland extends GenLayer { public GenLayerIsland(long parLong1) { @@ -33,6 +33,7 @@ public class GenLayerIsland extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = IntCache.getIntCache(k * l); @@ -49,4 +50,4 @@ public class GenLayerIsland extends GenLayer { return aint; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerRareBiome.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerRareBiome.java index 7e05f6da..49e2b63b 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerRareBiome.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerRareBiome.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerRareBiome extends GenLayer { public GenLayerRareBiome(long parLong1, GenLayer parGenLayer) { @@ -36,6 +36,7 @@ public class GenLayerRareBiome extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i - 1, j - 1, k + 2, l + 2); int[] aint1 = IntCache.getIntCache(k * l); @@ -58,4 +59,4 @@ public class GenLayerRareBiome extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.java index fa5f282b..7fbe785e 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerRemoveTooMuchOcean extends GenLayer { public GenLayerRemoveTooMuchOcean(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerRemoveTooMuchOcean extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -59,4 +60,4 @@ public class GenLayerRemoveTooMuchOcean extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiver.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiver.java index 050f92f3..5c1ab77a 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiver.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiver.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerRiver extends GenLayer { public GenLayerRiver(long parLong1, GenLayer parGenLayer) { @@ -40,6 +40,7 @@ public class GenLayerRiver extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -65,4 +66,4 @@ public class GenLayerRiver extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverInit.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverInit.java index 1731936b..f06d7f8a 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverInit.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverInit.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerRiverInit extends GenLayer { public GenLayerRiverInit(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerRiverInit extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i, j, k, l); int[] aint1 = IntCache.getIntCache(k * l); @@ -47,4 +48,4 @@ public class GenLayerRiverInit extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverMix.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverMix.java index aa63df44..928cf81a 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverMix.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerRiverMix.java @@ -5,13 +5,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerRiverMix extends GenLayer { private GenLayer biomePatternGeneratorChain; @@ -40,6 +40,7 @@ public class GenLayerRiverMix extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.biomePatternGeneratorChain.getInts(i, j, k, l); int[] aint1 = this.riverPatternGeneratorChain.getInts(i, j, k, l); @@ -71,9 +72,10 @@ public class GenLayerRiverMix extends GenLayer { * + Initialize layer's local worldGenSeed based on its own baseSeed and the * world's global seed (passed in as an argument). */ + @Override public void initWorldGenSeed(long i) { this.biomePatternGeneratorChain.initWorldGenSeed(i); this.riverPatternGeneratorChain.initWorldGenSeed(i); super.initWorldGenSeed(i); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerShore.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerShore.java index c5f985c9..df80a393 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerShore.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerShore.java @@ -7,13 +7,13 @@ import net.minecraft.world.biome.BiomeGenMesa; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.world.biome.BiomeGenMesa; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerShore extends GenLayer { public GenLayerShore(long parLong1, GenLayer parGenLayer) { @@ -69,6 +69,7 @@ public class GenLayerShore extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int[] aint = this.parent.getInts(i - 1, j - 1, k + 2, l + 2); int[] aint1 = IntCache.getIntCache(k * l); @@ -148,4 +149,4 @@ public class GenLayerShore extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerSmooth.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerSmooth.java index abe69e9f..c083e851 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerSmooth.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerSmooth.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerSmooth extends GenLayer { public GenLayerSmooth(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerSmooth extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i - 1; int j1 = j - 1; @@ -72,4 +73,4 @@ public class GenLayerSmooth extends GenLayer { return aint1; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.java index 28434fb8..c0bf5970 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerVoronoiZoom extends GenLayer { public GenLayerVoronoiZoom(long parLong1, GenLayer parGenLayer) { @@ -34,6 +34,7 @@ public class GenLayerVoronoiZoom extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { i = i - 2; j = j - 2; @@ -100,4 +101,4 @@ public class GenLayerVoronoiZoom extends GenLayer { return aint2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/GenLayerZoom.java b/src/game/java/net/minecraft/world/gen/layer/GenLayerZoom.java index 08cccf9f..c35a6e3b 100644 --- a/src/game/java/net/minecraft/world/gen/layer/GenLayerZoom.java +++ b/src/game/java/net/minecraft/world/gen/layer/GenLayerZoom.java @@ -3,13 +3,13 @@ package net.minecraft.world.gen.layer; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ package net.minecraft.world.gen.layer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GenLayerZoom extends GenLayer { /** @@ -48,6 +48,7 @@ public class GenLayerZoom extends GenLayer { * interpreted as temperatures, rainfall amounts, or biomeList[] indices based * on the particular GenLayer subclass. */ + @Override public int[] getInts(int i, int j, int k, int l) { int i1 = i >> 1; int j1 = j >> 1; @@ -84,4 +85,4 @@ public class GenLayerZoom extends GenLayer { return aint2; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/layer/IntCache.java b/src/game/java/net/minecraft/world/gen/layer/IntCache.java index e9e375f5..a1532678 100644 --- a/src/game/java/net/minecraft/world/gen/layer/IntCache.java +++ b/src/game/java/net/minecraft/world/gen/layer/IntCache.java @@ -7,13 +7,13 @@ import com.google.common.collect.Lists; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import com.google.common.collect.Lists; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntCache { private static int intCacheSize = 256; @@ -108,4 +108,4 @@ public class IntCache { inUseLargeArrays.clear(); inUseSmallArrays.clear(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java b/src/game/java/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java index eec69672..4e076618 100644 --- a/src/game/java/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java @@ -27,13 +27,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ComponentScatteredFeaturePieces { public static class DesertPyramid extends ComponentScatteredFeaturePieces.Feature { @@ -69,6 +69,7 @@ public class ComponentScatteredFeaturePieces { super(parRandom, parInt1, 64, parInt2, 21, 15, 21); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, -4, 0, this.scatteredFeatureSizeX - 1, 0, @@ -440,6 +441,7 @@ public class ComponentScatteredFeaturePieces { return true; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_74940_h[0] = nbttagcompound.getBoolean("hasPlacedChest0"); @@ -448,6 +450,7 @@ public class ComponentScatteredFeaturePieces { this.field_74940_h[3] = nbttagcompound.getBoolean("hasPlacedChest3"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("hasPlacedChest0", this.field_74940_h[0]); @@ -492,7 +495,7 @@ public class ComponentScatteredFeaturePieces { } else { int i = 0; int j = 0; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = this.boundingBox.minZ; k <= this.boundingBox.maxZ; ++k) { for (int l = this.boundingBox.minX; l <= this.boundingBox.maxX; ++l) { @@ -515,6 +518,7 @@ public class ComponentScatteredFeaturePieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { this.scatteredFeatureSizeX = nbttagcompound.getInteger("Width"); this.scatteredFeatureSizeY = nbttagcompound.getInteger("Height"); @@ -522,6 +526,7 @@ public class ComponentScatteredFeaturePieces { this.field_74936_d = nbttagcompound.getInteger("HPos"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setInteger("Width", this.scatteredFeatureSizeX); nbttagcompound.setInteger("Height", this.scatteredFeatureSizeY); @@ -535,6 +540,7 @@ public class ComponentScatteredFeaturePieces { private Stones() { } + @Override public void selectBlocks(EaglercraftRandom rand, int x, int y, int z, boolean parFlag) { if (rand.nextFloat() < 0.4F) { this.blockstate = Blocks.cobblestone.getDefaultState(); @@ -572,6 +578,7 @@ public class ComponentScatteredFeaturePieces { super(parRandom, parInt1, 64, parInt2, 12, 10, 15); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (!this.func_74935_a(world, structureboundingbox, 0)) { @@ -851,6 +858,7 @@ public class ComponentScatteredFeaturePieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_74947_h = nbttagcompound.getBoolean("placedMainChest"); @@ -859,6 +867,7 @@ public class ComponentScatteredFeaturePieces { this.field_74946_k = nbttagcompound.getBoolean("placedTrap2"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("placedMainChest", this.field_74947_h); @@ -878,6 +887,7 @@ public class ComponentScatteredFeaturePieces { super(parRandom, parInt1, 64, parInt2, 7, 7, 9); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (!this.func_74935_a(world, structureboundingbox, 0)) { @@ -962,11 +972,13 @@ public class ComponentScatteredFeaturePieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.hasWitch = nbttagcompound.getBoolean("Witch"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Witch", this.hasWitch); @@ -981,4 +993,4 @@ public class ComponentScatteredFeaturePieces { MapGenStructureIO.registerStructureComponent(ComponentScatteredFeaturePieces.SwampHut.class, ComponentScatteredFeaturePieces.SwampHut::new, "TeSH"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenMineshaft.java b/src/game/java/net/minecraft/world/gen/structure/MapGenMineshaft.java index 85798c0d..ec1559ad 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenMineshaft.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenMineshaft.java @@ -8,13 +8,13 @@ import net.minecraft.util.MathHelper; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenMineshaft extends MapGenStructure { private double field_82673_e = 0.004D; @@ -45,16 +45,19 @@ public class MapGenMineshaft extends MapGenStructure { } + @Override protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) { return this.rand.nextDouble() < this.field_82673_e && this.rand.nextInt(80) < Math.max(Math.abs(chunkX), Math.abs(chunkZ)); } + @Override public String getStructureName() { return "Mineshaft"; } + @Override protected StructureStart getStructureStart(int chunkX, int chunkZ) { return new StructureMineshaftStart(this.worldObj, this.rand, chunkX, chunkZ); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenNetherBridge.java b/src/game/java/net/minecraft/world/gen/structure/MapGenNetherBridge.java index 608b7e2f..07db584b 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenNetherBridge.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenNetherBridge.java @@ -15,13 +15,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenNetherBridge extends MapGenStructure { public static class Start extends StructureStart { @@ -70,6 +70,7 @@ public class MapGenNetherBridge extends MapGenStructure { this.spawnList.add(new BiomeGenBase.SpawnListEntry(EntityMagmaCube.class, 3, 4, 4)); } + @Override protected boolean canSpawnStructureAtCoords(int i, int j) { int k = i >> 4; int l = j >> 4; @@ -83,11 +84,13 @@ public class MapGenNetherBridge extends MapGenStructure { return this.spawnList; } + @Override public String getStructureName() { return "Fortress"; } + @Override protected StructureStart getStructureStart(int i, int j) { return new MapGenNetherBridge.Start(this.worldObj, this.rand, i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenScatteredFeature.java b/src/game/java/net/minecraft/world/gen/structure/MapGenScatteredFeature.java index f7dde44e..eef9dd06 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenScatteredFeature.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenScatteredFeature.java @@ -17,13 +17,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenScatteredFeature extends MapGenStructure { public static class Start extends StructureStart { @@ -94,6 +94,7 @@ public class MapGenScatteredFeature extends MapGenStructure { } + @Override protected boolean canSpawnStructureAtCoords(int i, int j) { int k = i; int l = j; @@ -147,11 +148,13 @@ public class MapGenScatteredFeature extends MapGenStructure { return this.scatteredFeatureSpawnList; } + @Override public String getStructureName() { return "Temple"; } + @Override protected StructureStart getStructureStart(int i, int j) { return new MapGenScatteredFeature.Start(this.worldObj, this.rand, i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenStronghold.java b/src/game/java/net/minecraft/world/gen/structure/MapGenStronghold.java index bec68185..788408a2 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenStronghold.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenStronghold.java @@ -17,13 +17,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenStronghold extends MapGenStructure { public static class Start extends StructureStart { @@ -105,6 +105,7 @@ public class MapGenStronghold extends MapGenStructure { } + @Override protected boolean canSpawnStructureAtCoords(int i, int j) { if (!this.ranBiomeCheck) { EaglercraftRandom random = new EaglercraftRandom(!this.worldObj.getWorldInfo().isOldEaglercraftRandom()); @@ -148,6 +149,7 @@ public class MapGenStronghold extends MapGenStructure { * + Returns a list of other locations at which the structure generation has * been run, or null if not relevant to this structure generator. */ + @Override protected List getCoordList() { ArrayList arraylist = Lists.newArrayList(); @@ -161,10 +163,12 @@ public class MapGenStronghold extends MapGenStructure { return arraylist; } + @Override public String getStructureName() { return "Stronghold"; } + @Override protected StructureStart getStructureStart(int i, int j) { MapGenStronghold.Start mapgenstronghold$start; for (mapgenstronghold$start = new MapGenStronghold.Start(this.worldObj, this.rand, i, j); mapgenstronghold$start @@ -177,4 +181,4 @@ public class MapGenStronghold extends MapGenStructure { return mapgenstronghold$start; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenStructure.java b/src/game/java/net/minecraft/world/gen/structure/MapGenStructure.java index 1640d39f..32f4d8a5 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenStructure.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenStructure.java @@ -23,13 +23,13 @@ import net.minecraft.world.gen.MapGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.gen.MapGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MapGenStructure extends MapGenBase { private MapGenStructureData structureData; @@ -216,6 +216,7 @@ public abstract class MapGenStructure extends MapGenBase { /** * + Recursively called by generate() */ + @Override protected final void recursiveGenerate(World world, final int i, final int j, int var4, int var5, ChunkPrimer var6) { this.func_143027_a(world); @@ -234,6 +235,7 @@ public abstract class MapGenStructure extends MapGenBase { "Exception preparing structure feature"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Feature being prepared"); crashreportcategory.addCrashSectionCallable("Is feature chunk", new Callable() { + @Override public String call() throws Exception { return MapGenStructure.this.canSpawnStructureAtCoords(i, j) ? "True" : "False"; } @@ -241,11 +243,13 @@ public abstract class MapGenStructure extends MapGenBase { crashreportcategory.addCrashSection("Chunk location", HString.format("%d,%d", new Object[] { Integer.valueOf(i), Integer.valueOf(j) })); crashreportcategory.addCrashSectionCallable("Chunk pos hash", new Callable() { + @Override public String call() throws Exception { return String.valueOf(ChunkCoordIntPair.chunkXZ2Int(i, j)); } }); crashreportcategory.addCrashSectionCallable("Structure type", new Callable() { + @Override public String call() throws Exception { return MapGenStructure.this.getClass().getCanonicalName(); } @@ -254,4 +258,4 @@ public abstract class MapGenStructure extends MapGenBase { } } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenStructureData.java b/src/game/java/net/minecraft/world/gen/structure/MapGenStructureData.java index f3c3d059..9b193efe 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenStructureData.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenStructureData.java @@ -6,13 +6,13 @@ import net.minecraft.world.WorldSavedData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.WorldSavedData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenStructureData extends WorldSavedData { public static String formatChunkCoords(int chunkX, int chunkZ) { @@ -44,6 +44,7 @@ public class MapGenStructureData extends WorldSavedData { /** * + reads in data from the NBTTagCompound into this MapDataBase */ + @Override public void readFromNBT(NBTTagCompound nbt) { this.tagCompound = nbt.getCompoundTag("Features"); } @@ -60,7 +61,8 @@ public class MapGenStructureData extends WorldSavedData { * + write data to NBTTagCompound from this MapDataBase, similar to Entities and * TileEntities */ + @Override public void writeToNBT(NBTTagCompound nbt) { nbt.setTag("Features", this.tagCompound); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenStructureIO.java b/src/game/java/net/minecraft/world/gen/structure/MapGenStructureIO.java index 78bd77b2..258d72e2 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenStructureIO.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenStructureIO.java @@ -13,13 +13,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenStructureIO { private static final Logger logger = LogManager.getLogger(); @@ -124,4 +124,4 @@ public class MapGenStructureIO { componentNameToSupplierMap.put(componentName, startSupplier); componentClassToNameMap.put(componentClass, componentName); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/MapGenVillage.java b/src/game/java/net/minecraft/world/gen/structure/MapGenVillage.java index 808c5bf6..fc593084 100644 --- a/src/game/java/net/minecraft/world/gen/structure/MapGenVillage.java +++ b/src/game/java/net/minecraft/world/gen/structure/MapGenVillage.java @@ -14,13 +14,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapGenVillage extends MapGenStructure { public static class Start extends StructureStart { @@ -75,15 +75,18 @@ public class MapGenVillage extends MapGenStructure { this.hasMoreThanTwoComponents = k > 2; } + @Override public boolean isSizeableStructure() { return this.hasMoreThanTwoComponents; } + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); this.hasMoreThanTwoComponents = nbttagcompound.getBoolean("Valid"); } + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setBoolean("Valid", this.hasMoreThanTwoComponents); @@ -120,6 +123,7 @@ public class MapGenVillage extends MapGenStructure { } + @Override protected boolean canSpawnStructureAtCoords(int i, int j) { int k = i; int l = j; @@ -149,11 +153,13 @@ public class MapGenVillage extends MapGenStructure { return false; } + @Override public String getStructureName() { return "Village"; } + @Override protected StructureStart getStructureStart(int i, int j) { return new MapGenVillage.Start(this.worldObj, this.rand, i, j, this.terrainType); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureBoundingBox.java b/src/game/java/net/minecraft/world/gen/structure/StructureBoundingBox.java index de6d734e..d1dd7b30 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureBoundingBox.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureBoundingBox.java @@ -10,13 +10,13 @@ import net.minecraft.util.Vec3i; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.Vec3i; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureBoundingBox { public static StructureBoundingBox func_175899_a(int parInt1, int parInt2, int parInt3, int parInt4, int parInt5, @@ -215,8 +215,9 @@ public class StructureBoundingBox { return new NBTTagIntArray(new int[] { this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ }); } + @Override public String toString() { return Objects.toStringHelper(this).add("x0", this.minX).add("y0", this.minY).add("z0", this.minZ) .add("x1", this.maxX).add("y1", this.maxY).add("z1", this.maxZ).toString(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureComponent.java b/src/game/java/net/minecraft/world/gen/structure/StructureComponent.java index 75595ca3..2b7bb0db 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureComponent.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureComponent.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class StructureComponent { public abstract static class BlockSelector { @@ -562,7 +562,7 @@ public abstract class StructureComponent { int l = Math.min(this.boundingBox.maxX + 1, boundingboxIn.maxX); int i1 = Math.min(this.boundingBox.maxY + 1, boundingboxIn.maxY); int j1 = Math.min(this.boundingBox.maxZ + 1, boundingboxIn.maxZ); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k1 = i; k1 <= l; ++k1) { for (int l1 = k; l1 <= j1; ++l1) { @@ -706,4 +706,4 @@ public abstract class StructureComponent { } protected abstract void writeStructureToNBT(NBTTagCompound var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftPieces.java b/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftPieces.java index 1a13c17e..933f0a60 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftPieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftPieces.java @@ -24,13 +24,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureMineshaftPieces { public static class Corridor extends StructureComponent { @@ -102,6 +102,7 @@ public class StructureMineshaftPieces { } + @Override public boolean addComponentParts(World worldIn, EaglercraftRandom randomIn, StructureBoundingBox structureBoundingBoxIn) { if (this.isLiquidInStructureBoundingBox(worldIn, structureBoundingBoxIn)) { @@ -218,6 +219,7 @@ public class StructureMineshaftPieces { } } + @Override public void buildComponent(StructureComponent componentIn, List listIn, EaglercraftRandom rand) { int i = this.getComponentType(); @@ -312,6 +314,7 @@ public class StructureMineshaftPieces { } + @Override protected boolean generateChestContents(World worldIn, StructureBoundingBox boundingBoxIn, EaglercraftRandom rand, int x, int y, int z, List listIn, int max) { BlockPos blockpos = new BlockPos(this.getXWithOffset(x, z), this.getYWithOffset(y), @@ -332,6 +335,7 @@ public class StructureMineshaftPieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound tagCompound) { this.hasRails = tagCompound.getBoolean("hr"); this.hasSpiders = tagCompound.getBoolean("sc"); @@ -339,6 +343,7 @@ public class StructureMineshaftPieces { this.sectionCount = tagCompound.getInteger("Num"); } + @Override protected void writeStructureToNBT(NBTTagCompound tagCompound) { tagCompound.setBoolean("hr", this.hasRails); tagCompound.setBoolean("sc", this.hasSpiders); @@ -395,6 +400,7 @@ public class StructureMineshaftPieces { this.isMultipleFloors = structurebb.getYSize() > 3; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -461,6 +467,7 @@ public class StructureMineshaftPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { int i = this.getComponentType(); @@ -522,11 +529,13 @@ public class StructureMineshaftPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { this.isMultipleFloors = nbttagcompound.getBoolean("tf"); this.corridorDirection = EnumFacing.getHorizontal(nbttagcompound.getInteger("D")); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setBoolean("tf", this.isMultipleFloors); nbttagcompound.setInteger("D", this.corridorDirection.getHorizontalIndex()); @@ -545,6 +554,7 @@ public class StructureMineshaftPieces { z + 7 + rand.nextInt(6)); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -572,6 +582,7 @@ public class StructureMineshaftPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { int i = this.getComponentType(); @@ -651,6 +662,7 @@ public class StructureMineshaftPieces { } + @Override public void func_181138_a(int parInt1, int parInt2, int parInt3) { super.func_181138_a(parInt1, parInt2, parInt3); @@ -660,6 +672,7 @@ public class StructureMineshaftPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { NBTTagList nbttaglist = nbttagcompound.getTagList("Entrances", 11); @@ -669,6 +682,7 @@ public class StructureMineshaftPieces { } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { NBTTagList nbttaglist = new NBTTagList(); @@ -715,6 +729,7 @@ public class StructureMineshaftPieces { this.boundingBox = structurebb; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -734,6 +749,7 @@ public class StructureMineshaftPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { int i = this.getComponentType(); @@ -759,9 +775,11 @@ public class StructureMineshaftPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound var1) { } + @Override protected void writeStructureToNBT(NBTTagCompound var1) { } } @@ -835,4 +853,4 @@ public class StructureMineshaftPieces { MapGenStructureIO.registerStructureComponent(StructureMineshaftPieces.Stairs.class, StructureMineshaftPieces.Stairs::new, "MSStairs"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftStart.java b/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftStart.java index 74043e1e..bd0d3f88 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftStart.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureMineshaftStart.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureMineshaftStart extends StructureStart { public StructureMineshaftStart() { @@ -39,4 +39,4 @@ public class StructureMineshaftStart extends StructureStart { this.updateBoundingBox(); this.markAvailableHeight(worldIn, rand, 10); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java b/src/game/java/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java index 24702dc5..cad4fa8d 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java @@ -19,13 +19,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureNetherBridgePieces { public static class Corridor extends StructureNetherBridgePieces.Piece { @@ -66,6 +66,7 @@ public class StructureNetherBridgePieces { this.field_111021_b = parRandom.nextInt(3) == 0; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.nether_brick.getDefaultState(), @@ -106,16 +107,19 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentX((StructureNetherBridgePieces.Start) structurecomponent, list, random, 0, 1, true); } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_111021_b = nbttagcompound.getBoolean("Chest"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Chest", this.field_111021_b); @@ -148,6 +152,7 @@ public class StructureNetherBridgePieces { this.field_111020_b = parRandom.nextInt(3) == 0; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.nether_brick.getDefaultState(), @@ -188,16 +193,19 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentZ((StructureNetherBridgePieces.Start) structurecomponent, list, random, 0, 1, true); } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_111020_b = nbttagcompound.getBoolean("Chest"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Chest", this.field_111020_b); @@ -227,6 +235,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { int i = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 2); @@ -272,6 +281,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 1, 0, @@ -302,6 +312,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 8, 1, 8, Blocks.nether_brick.getDefaultState(), @@ -353,6 +364,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { byte b0 = 1; @@ -390,6 +402,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.nether_brick.getDefaultState(), @@ -421,6 +434,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 1, 0, @@ -451,6 +465,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 6, 1, 6, Blocks.nether_brick.getDefaultState(), @@ -500,6 +515,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 2, 0, @@ -532,6 +548,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.nether_brick.getDefaultState(), @@ -559,6 +576,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 1, 0, @@ -607,6 +625,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 7, 3, 0, 11, 4, 18, Blocks.nether_brick.getDefaultState(), @@ -672,6 +691,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 8, 3, @@ -707,6 +727,7 @@ public class StructureNetherBridgePieces { this.fillSeed = parRandom.nextInt(); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { EaglercraftRandom random = new EaglercraftRandom((long) this.fillSeed); @@ -743,11 +764,13 @@ public class StructureNetherBridgePieces { return true; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.fillSeed = nbttagcompound.getInteger("Seed"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("Seed", this.fillSeed); @@ -777,6 +800,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 3, 0, 12, 4, 12, Blocks.nether_brick.getDefaultState(), @@ -891,6 +915,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 5, 3, @@ -921,6 +946,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 3, 0, 12, 4, 12, Blocks.nether_brick.getDefaultState(), @@ -1086,6 +1112,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 5, 3, @@ -1283,9 +1310,11 @@ public class StructureNetherBridgePieces { return flag ? i : -1; } + @Override protected void readStructureFromNBT(NBTTagCompound var1) { } + @Override protected void writeStructureToNBT(NBTTagCompound var1) { } } @@ -1341,6 +1370,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 6, 1, 6, Blocks.nether_brick.getDefaultState(), @@ -1391,6 +1421,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentZ((StructureNetherBridgePieces.Start) structurecomponent, list, random, 6, 2, false); @@ -1424,10 +1455,12 @@ public class StructureNetherBridgePieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); } @@ -1456,6 +1489,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 3, 0, 4, 4, 18, Blocks.nether_brick.getDefaultState(), @@ -1503,6 +1537,7 @@ public class StructureNetherBridgePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureNetherBridgePieces.Start) structurecomponent, list, random, 1, 3, @@ -1535,6 +1570,7 @@ public class StructureNetherBridgePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 2, 0, 6, 7, 7, Blocks.air.getDefaultState(), @@ -1594,11 +1630,13 @@ public class StructureNetherBridgePieces { return true; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.hasSpawner = nbttagcompound.getBoolean("Mob"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Mob", this.hasSpawner); @@ -1703,4 +1741,4 @@ public class StructureNetherBridgePieces { MapGenStructureIO.registerStructureComponent(StructureNetherBridgePieces.Start.class, StructureNetherBridgePieces.Start::new, "NeStart"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonument.java b/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonument.java index 1de8d641..884ddfba 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonument.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonument.java @@ -23,13 +23,13 @@ import net.minecraft.world.biome.BiomeGenBase; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.world.biome.BiomeGenBase; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureOceanMonument extends MapGenStructure { public static class StartMonument extends StructureStart { @@ -56,11 +56,13 @@ public class StructureOceanMonument extends MapGenStructure { this.func_175789_b(worldIn, parRandom, parInt1, parInt2); } + @Override public void func_175787_b(ChunkCoordIntPair pair) { super.func_175787_b(pair); this.field_175791_c.add(pair); } + @Override public boolean func_175788_a(ChunkCoordIntPair pair) { return this.field_175791_c.contains(pair) ? false : super.func_175788_a(pair); } @@ -80,6 +82,7 @@ public class StructureOceanMonument extends MapGenStructure { this.field_175790_d = true; } + @Override public void generateStructure(World worldIn, EaglercraftRandom rand, StructureBoundingBox structurebb) { if (!this.field_175790_d) { this.components.clear(); @@ -89,6 +92,7 @@ public class StructureOceanMonument extends MapGenStructure { super.generateStructure(worldIn, rand, structurebb); } + @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); if (tagCompound.hasKey("Processed", 9)) { @@ -103,6 +107,7 @@ public class StructureOceanMonument extends MapGenStructure { } + @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); NBTTagList nbttaglist = new NBTTagList(); @@ -150,6 +155,7 @@ public class StructureOceanMonument extends MapGenStructure { } + @Override protected boolean canSpawnStructureAtCoords(int i, int j) { int k = i; int l = j; @@ -190,11 +196,13 @@ public class StructureOceanMonument extends MapGenStructure { return field_175803_h; } + @Override public String getStructureName() { return "Monument"; } + @Override protected StructureStart getStructureStart(int i, int j) { return new StructureOceanMonument.StartMonument(this.worldObj, this.rand, i, j); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.java b/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.java index 8b31f9e0..307cde52 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureOceanMonumentPieces { public static class DoubleXRoom extends StructureOceanMonumentPieces.Piece { @@ -52,6 +52,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 2, 1, 1); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition = this.field_175830_k.field_175965_b[EnumFacing.EAST @@ -126,6 +127,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 2, 2, 1); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition = this.field_175830_k.field_175965_b[EnumFacing.EAST @@ -246,6 +248,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 1, 2, 1); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.field_175830_k.field_175967_a / 25 > 0) { @@ -350,6 +353,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 1, 2, 2); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition = this.field_175830_k.field_175965_b[EnumFacing.NORTH @@ -480,6 +484,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 1, 1, 2); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition = this.field_175830_k.field_175965_b[EnumFacing.NORTH @@ -572,6 +577,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 1, 1, 1); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 0, 3, 0, 2, 3, 7, field_175826_b, field_175826_b, false); @@ -603,6 +609,7 @@ public class StructureOceanMonumentPieces { private FitSimpleRoomHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -611,6 +618,7 @@ public class StructureOceanMonumentPieces { random); } + @Override public boolean func_175969_a(StructureOceanMonumentPieces.RoomDefinition var1) { return true; } @@ -620,6 +628,7 @@ public class StructureOceanMonumentPieces { private FitSimpleRoomTopHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -628,6 +637,7 @@ public class StructureOceanMonumentPieces { structureoceanmonumentpieces$roomdefinition, random); } + @Override public boolean func_175969_a( StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition) { return !structureoceanmonumentpieces$roomdefinition.field_175966_c[EnumFacing.WEST.getIndex()] @@ -725,6 +735,7 @@ public class StructureOceanMonumentPieces { .add(new StructureOceanMonumentPieces.Penthouse(this.coordBaseMode, structureboundingbox)); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { int i = Math.max(world.func_181545_F(), 64) - this.boundingBox.minY; @@ -1336,6 +1347,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 2, 2, 2); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.func_175819_a(world, structureboundingbox, 1, 8, 0, 14, 8, 14, field_175828_a); @@ -1428,6 +1440,7 @@ public class StructureOceanMonumentPieces { super(parEnumFacing, parStructureBoundingBox); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { this.fillWithBlocks(world, structureboundingbox, 2, -1, 2, 11, -1, 11, field_175826_b, field_175826_b, @@ -1638,9 +1651,11 @@ public class StructureOceanMonumentPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound var1) { } + @Override protected void writeStructureToNBT(NBTTagCompound var1) { } } @@ -1717,6 +1732,7 @@ public class StructureOceanMonumentPieces { this.field_175833_o = parRandom.nextInt(3); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_175830_k.field_175967_a / 25 > 0) { @@ -1960,6 +1976,7 @@ public class StructureOceanMonumentPieces { super(1, parEnumFacing, parRoomDefinition, 1, 1, 1); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_175830_k.field_175967_a / 25 > 0) { @@ -2016,6 +2033,7 @@ public class StructureOceanMonumentPieces { this.field_175834_o = parInt1 & 1; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.field_175834_o == 0) { @@ -2140,6 +2158,7 @@ public class StructureOceanMonumentPieces { private XDoubleRoomFitHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing parEnumFacing, StructureOceanMonumentPieces.RoomDefinition parRoomDefinition, EaglercraftRandom parRandom) { parRoomDefinition.field_175963_d = true; @@ -2147,6 +2166,7 @@ public class StructureOceanMonumentPieces { return new StructureOceanMonumentPieces.DoubleXRoom(parEnumFacing, parRoomDefinition, parRandom); } + @Override public boolean func_175969_a(StructureOceanMonumentPieces.RoomDefinition parRoomDefinition) { return parRoomDefinition.field_175966_c[EnumFacing.EAST.getIndex()] && !parRoomDefinition.field_175965_b[EnumFacing.EAST.getIndex()].field_175963_d; @@ -2157,6 +2177,7 @@ public class StructureOceanMonumentPieces { private XYDoubleRoomFitHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -2170,6 +2191,7 @@ public class StructureOceanMonumentPieces { structureoceanmonumentpieces$roomdefinition, random); } + @Override public boolean func_175969_a( StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition) { if (structureoceanmonumentpieces$roomdefinition.field_175966_c[EnumFacing.EAST.getIndex()] @@ -2193,6 +2215,7 @@ public class StructureOceanMonumentPieces { private YDoubleRoomFitHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -2202,6 +2225,7 @@ public class StructureOceanMonumentPieces { random); } + @Override public boolean func_175969_a( StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition) { return structureoceanmonumentpieces$roomdefinition.field_175966_c[EnumFacing.UP.getIndex()] @@ -2214,6 +2238,7 @@ public class StructureOceanMonumentPieces { private YZDoubleRoomFitHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -2227,6 +2252,7 @@ public class StructureOceanMonumentPieces { structureoceanmonumentpieces$roomdefinition, random); } + @Override public boolean func_175969_a( StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition) { if (structureoceanmonumentpieces$roomdefinition.field_175966_c[EnumFacing.NORTH.getIndex()] @@ -2250,6 +2276,7 @@ public class StructureOceanMonumentPieces { private ZDoubleRoomFitHelper() { } + @Override public StructureOceanMonumentPieces.Piece func_175968_a(EnumFacing enumfacing, StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition, EaglercraftRandom random) { @@ -2268,6 +2295,7 @@ public class StructureOceanMonumentPieces { structureoceanmonumentpieces$roomdefinition1, random); } + @Override public boolean func_175969_a( StructureOceanMonumentPieces.RoomDefinition structureoceanmonumentpieces$roomdefinition) { return structureoceanmonumentpieces$roomdefinition.field_175966_c[EnumFacing.NORTH.getIndex()] @@ -2300,4 +2328,4 @@ public class StructureOceanMonumentPieces { MapGenStructureIO.registerStructureComponent(StructureOceanMonumentPieces.SimpleTopRoom.class, StructureOceanMonumentPieces.SimpleTopRoom::new, "OMSimpleT"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureStart.java b/src/game/java/net/minecraft/world/gen/structure/StructureStart.java index 4532db62..c2ee20d2 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureStart.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureStart.java @@ -12,13 +12,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class StructureStart { /** @@ -186,4 +186,4 @@ public abstract class StructureStart { public void writeToNBT(NBTTagCompound var1) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureStrongholdPieces.java b/src/game/java/net/minecraft/world/gen/structure/StructureStrongholdPieces.java index 794f73c2..933a54b9 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureStrongholdPieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureStrongholdPieces.java @@ -22,13 +22,13 @@ import net.minecraft.world.World; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureStrongholdPieces { public static class ChestCorridor extends StructureStrongholdPieces.Stronghold { @@ -89,6 +89,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -133,16 +134,19 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 1); } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.hasMadeChest = nbttagcompound.getBoolean("Chest"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Chest", this.hasMadeChest); @@ -189,6 +193,7 @@ public class StructureStrongholdPieces { : parStructureBoundingBox.getZSize(); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -220,11 +225,13 @@ public class StructureStrongholdPieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_74993_a = nbttagcompound.getInteger("Steps"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("Steps", this.field_74993_a); @@ -265,6 +272,7 @@ public class StructureStrongholdPieces { this.field_74999_h = parRandom.nextInt(3) > 0; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -326,6 +334,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { int i = 3; @@ -354,6 +363,7 @@ public class StructureStrongholdPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_74996_b = nbttagcompound.getBoolean("leftLow"); @@ -362,6 +372,7 @@ public class StructureStrongholdPieces { this.field_74999_h = nbttagcompound.getBoolean("rightHigh"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("leftLow", this.field_74996_b); @@ -395,6 +406,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -415,6 +427,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { if (this.coordBaseMode != EnumFacing.NORTH && this.coordBaseMode != EnumFacing.EAST) { @@ -465,6 +478,7 @@ public class StructureStrongholdPieces { this.isLargeRoom = parStructureBoundingBox.getYSize() > 6; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -593,11 +607,13 @@ public class StructureStrongholdPieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.isLargeRoom = nbttagcompound.getBoolean("Tall"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Tall", this.isLargeRoom); @@ -650,6 +666,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { this.fillWithRandomizedBlocks(world, structureboundingbox, 0, 0, 0, 10, 7, 15, false, random, @@ -771,6 +788,7 @@ public class StructureStrongholdPieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List var2, EaglercraftRandom var3) { if (structurecomponent != null) { @@ -779,11 +797,13 @@ public class StructureStrongholdPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.hasSpawner = nbttagcompound.getBoolean("Mob"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Mob", this.hasSpawner); @@ -814,6 +834,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -854,6 +875,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 1); @@ -861,6 +883,7 @@ public class StructureStrongholdPieces { } public static class RightTurn extends StructureStrongholdPieces.LeftTurn { + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -881,6 +904,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { if (this.coordBaseMode != EnumFacing.NORTH && this.coordBaseMode != EnumFacing.EAST) { @@ -928,6 +952,7 @@ public class StructureStrongholdPieces { this.roomType = parRandom.nextInt(5); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -1041,6 +1066,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 4, 1); @@ -1048,11 +1074,13 @@ public class StructureStrongholdPieces { this.getNextComponentZ((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 4); } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.roomType = nbttagcompound.getInteger("Type"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("Type", this.roomType); @@ -1102,6 +1130,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -1145,6 +1174,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { if (this.field_75024_a) { @@ -1154,11 +1184,13 @@ public class StructureStrongholdPieces { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 1); } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.field_75024_a = nbttagcompound.getBoolean("Source"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Source", this.field_75024_a); @@ -1177,6 +1209,7 @@ public class StructureStrongholdPieces { super(0, parRandom, parInt2, parInt3); } + @Override public BlockPos getBoundingBoxCenter() { return this.strongholdPortalRoom != null ? this.strongholdPortalRoom.getBoundingBoxCenter() : super.getBoundingBoxCenter(); @@ -1207,6 +1240,7 @@ public class StructureStrongholdPieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -1240,6 +1274,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 1); @@ -1250,6 +1285,7 @@ public class StructureStrongholdPieces { private Stones() { } + @Override public void selectBlocks(EaglercraftRandom random, int var2, int var3, int var4, boolean flag) { if (flag) { float f = random.nextFloat(); @@ -1300,6 +1336,7 @@ public class StructureStrongholdPieces { this.expandsZ = parRandom.nextInt(2) == 0; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.isLiquidInStructureBoundingBox(world, structureboundingbox)) { @@ -1332,6 +1369,7 @@ public class StructureStrongholdPieces { } } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { this.getNextComponentNormal((StructureStrongholdPieces.Stairs2) structurecomponent, list, random, 1, 1); @@ -1345,12 +1383,14 @@ public class StructureStrongholdPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.expandsX = nbttagcompound.getBoolean("Left"); this.expandsZ = nbttagcompound.getBoolean("Right"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Left", this.expandsX); @@ -1548,11 +1588,13 @@ public class StructureStrongholdPieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { this.field_143013_d = StructureStrongholdPieces.Stronghold.Door .valueOf(nbttagcompound.getString("EntryDoor")); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setString("EntryDoor", this.field_143013_d.name()); } @@ -1569,10 +1611,12 @@ public class StructureStrongholdPieces { new StructureStrongholdPieces.PieceWeight(StructureStrongholdPieces.Crossing.class, 5, 4), new StructureStrongholdPieces.PieceWeight(StructureStrongholdPieces.ChestCorridor.class, 5, 4), new StructureStrongholdPieces.PieceWeight(StructureStrongholdPieces.Library.class, 10, 2) { + @Override public boolean canSpawnMoreStructuresOfType(int parInt1) { return super.canSpawnMoreStructuresOfType(parInt1) && parInt1 > 4; } }, new StructureStrongholdPieces.PieceWeight(StructureStrongholdPieces.PortalRoom.class, 20, 1) { + @Override public boolean canSpawnMoreStructuresOfType(int i) { return super.canSpawnMoreStructuresOfType(i) && i > 5; } @@ -1761,4 +1805,4 @@ public class StructureStrongholdPieces { MapGenStructureIO.registerStructureComponent(StructureStrongholdPieces.StairsStraight.class, StructureStrongholdPieces.StairsStraight::new, "SHSSD"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/gen/structure/StructureVillagePieces.java b/src/game/java/net/minecraft/world/gen/structure/StructureVillagePieces.java index 6eb203d1..264b8b13 100644 --- a/src/game/java/net/minecraft/world/gen/structure/StructureVillagePieces.java +++ b/src/game/java/net/minecraft/world/gen/structure/StructureVillagePieces.java @@ -31,13 +31,13 @@ import net.minecraft.world.biome.WorldChunkManager; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ import net.minecraft.world.biome.WorldChunkManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StructureVillagePieces { public static class Church extends StructureVillagePieces.Village { @@ -75,6 +75,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -194,6 +195,7 @@ public class StructureVillagePieces { return true; } + @Override protected int func_180779_c(int var1, int var2) { return 2; } @@ -232,6 +234,7 @@ public class StructureVillagePieces { this.cropTypeD = this.func_151559_a(rand); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -317,6 +320,7 @@ public class StructureVillagePieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.cropTypeA = Block.getBlockById(nbttagcompound.getInteger("CA")); @@ -325,6 +329,7 @@ public class StructureVillagePieces { this.cropTypeD = Block.getBlockById(nbttagcompound.getInteger("CD")); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("CA", Block.blockRegistry.getIDForObject(this.cropTypeA)); @@ -363,6 +368,7 @@ public class StructureVillagePieces { this.cropTypeB = this.func_151560_a(rand); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -428,12 +434,14 @@ public class StructureVillagePieces { } } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.cropTypeA = Block.getBlockById(nbttagcompound.getInteger("CA")); this.cropTypeB = Block.getBlockById(nbttagcompound.getInteger("CB")); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("CA", Block.blockRegistry.getIDForObject(this.cropTypeA)); @@ -464,6 +472,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -571,6 +580,9 @@ public class StructureVillagePieces { 3, 4, structureboundingbox); this.placeDoorCurrentPosition(world, structureboundingbox, random, 6, 1, 5, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); + this.setBlockState(world, Blocks.air.getDefaultState(), 6, 3, 5, structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 6, 3, 4, structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 6, 3, 6, structureboundingbox); for (int i1 = 0; i1 < 5; ++i1) { for (int j1 = 0; j1 < 9; ++j1) { @@ -584,6 +596,7 @@ public class StructureVillagePieces { return true; } + @Override protected int func_180779_c(int i, int j) { return i == 0 ? 4 : super.func_180779_c(i, j); } @@ -612,6 +625,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -731,6 +745,7 @@ public class StructureVillagePieces { return true; } + @Override protected int func_180779_c(int parInt1, int parInt2) { return 1; } @@ -780,6 +795,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -793,14 +809,18 @@ public class StructureVillagePieces { this.fillWithBlocks(world, structureboundingbox, 0, 1, 0, 9, 4, 6, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); + this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 9, 0, 6, Blocks.cobblestone.getDefaultState(), Blocks.cobblestone.getDefaultState(), false); + this.fillWithBlocks(world, structureboundingbox, 0, 4, 0, 9, 4, 6, Blocks.cobblestone.getDefaultState(), Blocks.cobblestone.getDefaultState(), false); + this.fillWithBlocks(world, structureboundingbox, 0, 5, 0, 9, 5, 6, Blocks.stone_slab.getDefaultState(), Blocks.stone_slab.getDefaultState(), false); this.fillWithBlocks(world, structureboundingbox, 1, 5, 1, 8, 5, 5, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); + this.fillWithBlocks(world, structureboundingbox, 1, 1, 0, 2, 3, 0, Blocks.planks.getDefaultState(), Blocks.planks.getDefaultState(), false); this.fillWithBlocks(world, structureboundingbox, 0, 1, 0, 0, 4, 0, Blocks.log.getDefaultState(), @@ -809,6 +829,7 @@ public class StructureVillagePieces { Blocks.log.getDefaultState(), false); this.fillWithBlocks(world, structureboundingbox, 0, 1, 6, 0, 4, 6, Blocks.log.getDefaultState(), Blocks.log.getDefaultState(), false); + this.setBlockState(world, Blocks.planks.getDefaultState(), 3, 3, 1, structureboundingbox); this.fillWithBlocks(world, structureboundingbox, 3, 1, 2, 3, 3, 2, Blocks.planks.getDefaultState(), Blocks.planks.getDefaultState(), false); @@ -830,41 +851,6 @@ public class StructureVillagePieces { this.setBlockState(world, Blocks.iron_bars.getDefaultState(), 9, 2, 4, structureboundingbox); this.fillWithBlocks(world, structureboundingbox, 7, 2, 4, 8, 2, 5, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); - this.setBlockState(world, Blocks.cobblestone.getDefaultState(), 6, 1, 3, structureboundingbox); - this.setBlockState(world, Blocks.furnace.getDefaultState(), 6, 2, 3, structureboundingbox); - this.setBlockState(world, Blocks.furnace.getDefaultState(), 6, 3, 3, structureboundingbox); - this.setBlockState(world, Blocks.double_stone_slab.getDefaultState(), 8, 1, 1, structureboundingbox); - this.setBlockState(world, Blocks.glass_pane.getDefaultState(), 0, 2, 2, structureboundingbox); - this.setBlockState(world, Blocks.glass_pane.getDefaultState(), 0, 2, 4, structureboundingbox); - this.setBlockState(world, Blocks.glass_pane.getDefaultState(), 2, 2, 6, structureboundingbox); - this.setBlockState(world, Blocks.glass_pane.getDefaultState(), 4, 2, 6, structureboundingbox); - this.setBlockState(world, Blocks.oak_fence.getDefaultState(), 2, 1, 4, structureboundingbox); - this.setBlockState(world, Blocks.wooden_pressure_plate.getDefaultState(), 2, 2, 4, structureboundingbox); - this.setBlockState(world, Blocks.planks.getDefaultState(), 1, 1, 5, structureboundingbox); - this.setBlockState(world, - Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 3)), 2, 1, 5, - structureboundingbox); - this.setBlockState(world, - Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 1)), 1, 1, 4, - structureboundingbox); - if (!this.hasMadeChest && structureboundingbox.isVecInside( - new BlockPos(this.getXWithOffset(5, 5), this.getYWithOffset(1), this.getZWithOffset(5, 5)))) { - this.hasMadeChest = true; - this.generateChestContents(world, structureboundingbox, random, 5, 1, 5, villageBlacksmithChestContents, - 3 + random.nextInt(6)); - } - - for (int i = 6; i <= 8; ++i) { - if (this.getBlockStateFromPos(world, i, 0, -1, structureboundingbox).getBlock() - .getMaterial() == Material.air - && this.getBlockStateFromPos(world, i, -1, -1, structureboundingbox).getBlock() - .getMaterial() != Material.air) { - this.setBlockState(world, - Blocks.stone_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.stone_stairs, 3)), i, - 0, -1, structureboundingbox); - } - } - for (int k = 0; k < 7; ++k) { for (int j = 0; j < 10; ++j) { this.clearCurrentPositionBlocksUpwards(world, j, 6, k, structureboundingbox); @@ -872,20 +858,103 @@ public class StructureVillagePieces { structureboundingbox); } } + // ** Basement section ** + + this.fillWithBlocks(world, structureboundingbox, 0, -4, 0, 9, -4, 6, Blocks.air.getDefaultState(), + Blocks.air.getDefaultState(), false); + + this.fillWithBlocks(world, structureboundingbox, 0, -3, 0, 9, -1, 6, Blocks.air.getDefaultState(), + Blocks.air.getDefaultState(), false); + + this.fillWithBlocks(world, structureboundingbox, 0, -4, 0, 9, -4, 6, Blocks.cobblestone.getDefaultState(), + Blocks.cobblestone.getDefaultState(), false); + this.setBlockState(world, Blocks.cobblestone.getDefaultState(), 7, 0, -1, structureboundingbox); + this.setBlockState(world, Blocks.cobblestone.getDefaultState(), 8, 0, -1, structureboundingbox); + this.setBlockState(world, Blocks.cobblestone.getDefaultState(), 9, 0, -1, structureboundingbox); + + this.setBlockState(world, + Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 2)), 8, 0, 0, + structureboundingbox); + this.setBlockState(world, Blocks.bookshelf.getDefaultState(), 8, -1, 0, structureboundingbox); + this.setBlockState(world, Blocks.bookshelf.getDefaultState(), 8, -2, 0, structureboundingbox); + + this.setBlockState(world, + Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 2)), 8, -1, 1, + structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 8, 0, 1, structureboundingbox); + this.setBlockState(world, Blocks.bookshelf.getDefaultState(), 8, -2, 1, structureboundingbox); + this.setBlockState(world, Blocks.bookshelf.getDefaultState(), 8, -3, 1, structureboundingbox); + + this.setBlockState(world, + Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 2)), 8, -2, 2, + structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 8, 0, 2, structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 8, -1, 2, structureboundingbox); + this.setBlockState(world, Blocks.bookshelf.getDefaultState(), 8, -3, 2, structureboundingbox); + + this.setBlockState(world, + Blocks.oak_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.oak_stairs, 2)), 8, -3, 3, + structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 8, 0, 3, structureboundingbox); + this.setBlockState(world, Blocks.air.getDefaultState(), 8, -1, 3, structureboundingbox); + + this.setBlockState(world, Blocks.chest.getDefaultState(), 2, -3, 1, structureboundingbox); + this.setBlockState(world, Blocks.chest.getDefaultState(), 3, -3, 1, structureboundingbox); + this.setBlockState(world, Blocks.sea_lantern.getDefaultState(), 2, -4, 1, structureboundingbox); + this.setBlockState(world, Blocks.sea_lantern.getDefaultState(), 3, -4, 1, structureboundingbox); + this.setBlockState(world, Blocks.smithing_table.getDefaultState(), 4, -3, 1, structureboundingbox); + + this.setBlockState(world, Blocks.furnace.getDefaultState(), 1, -3, 2, structureboundingbox); + this.setBlockState(world, Blocks.anvil.getDefaultState(), 1, -3, 3, structureboundingbox); + this.setBlockState(world, Blocks.anvil.getDefaultState(), 1, -3, 4, structureboundingbox); + this.setBlockState(world, Blocks.furnace.getDefaultState(), 1, -3, 5, structureboundingbox); + + this.fillWithBlocks(world, structureboundingbox, 0, -3, 0, 0, -1, 6, + Blocks.limestone_tiles.getDefaultState(), Blocks.limestone_tiles.getDefaultState(), false); + + this.fillWithBlocks(world, structureboundingbox, 9, -3, 0, 9, -1, 6, + Blocks.limestone_tiles.getDefaultState(), Blocks.limestone_tiles.getDefaultState(), false); + + this.fillWithBlocks(world, structureboundingbox, 0, -3, 0, 9, -1, 0, + Blocks.limestone_tiles.getDefaultState(), Blocks.limestone_tiles.getDefaultState(), false); + + this.fillWithBlocks(world, structureboundingbox, 0, -3, 6, 9, -1, 6, + Blocks.limestone_tiles.getDefaultState(), Blocks.limestone_tiles.getDefaultState(), false); + + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -3, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -2, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 2, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 3, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 4, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 5, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 1, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 2, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 3, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 4, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 5, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 6, -1, 1, structureboundingbox); + this.setBlockState(world, Blocks.polished_diorite_brick.getDefaultState(), 7, -1, 1, structureboundingbox); + + this.setBlockState(world, Blocks.oak_fence.getDefaultState(), 8, -3, 5, structureboundingbox); + this.setBlockState(world, Blocks.redstone_torch.getDefaultState(), 8, -2, 5, structureboundingbox); - this.spawnVillagers(world, structureboundingbox, 7, 1, 1, 1); return true; } + @Override protected int func_180779_c(int var1, int var2) { return 3; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.hasMadeChest = nbttagcompound.getBoolean("Chest"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Chest", this.hasMadeChest); @@ -915,6 +984,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -1094,6 +1164,7 @@ public class StructureVillagePieces { this.isRoofAccessible = rand.nextBoolean(); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -1193,11 +1264,13 @@ public class StructureVillagePieces { return true; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.isRoofAccessible = nbttagcompound.getBoolean("Terrace"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setBoolean("Terrace", this.isRoofAccessible); @@ -1232,6 +1305,7 @@ public class StructureVillagePieces { this.length = Math.max(parStructureBoundingBox.getXSize(), parStructureBoundingBox.getZSize()); } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { IBlockState iblockstate = this.func_175847_a(Blocks.gravel.getDefaultState()); @@ -1251,6 +1325,7 @@ public class StructureVillagePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { boolean flag = false; @@ -1325,11 +1400,13 @@ public class StructureVillagePieces { } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.length = nbttagcompound.getInteger("Length"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("Length", this.length); @@ -1415,6 +1492,7 @@ public class StructureVillagePieces { this.boundingBox = parStructureBoundingBox; } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -1471,6 +1549,7 @@ public class StructureVillagePieces { } + @Override protected void fillWithBlocks(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, IBlockState iblockstate, IBlockState iblockstate1, boolean flag) { IBlockState iblockstate2 = this.func_175847_a(iblockstate); @@ -1521,7 +1600,7 @@ public class StructureVillagePieces { protected int getAverageGroundLevel(World worldIn, StructureBoundingBox parStructureBoundingBox) { int i = 0; int j = 0; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int k = this.boundingBox.minZ; k <= this.boundingBox.maxZ; ++k) { for (int l = this.boundingBox.minX; l <= this.boundingBox.maxX; ++l) { @@ -1593,18 +1672,21 @@ public class StructureVillagePieces { return null; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { this.field_143015_k = nbttagcompound.getInteger("HPos"); this.villagersSpawned = nbttagcompound.getInteger("VCount"); this.isDesertVillage = nbttagcompound.getBoolean("Desert"); } + @Override protected void replaceAirAndLiquidDownwards(World world, IBlockState iblockstate, int i, int j, int k, StructureBoundingBox structureboundingbox) { IBlockState iblockstate1 = this.func_175847_a(iblockstate); super.replaceAirAndLiquidDownwards(world, iblockstate1, i, j, k, structureboundingbox); } + @Override protected void setBlockState(World world, IBlockState iblockstate, int i, int j, int k, StructureBoundingBox structureboundingbox) { IBlockState iblockstate1 = this.func_175847_a(iblockstate); @@ -1634,6 +1716,7 @@ public class StructureVillagePieces { } } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setInteger("HPos", this.field_143015_k); nbttagcompound.setInteger("VCount", this.villagersSpawned); @@ -1659,6 +1742,7 @@ public class StructureVillagePieces { } + @Override public boolean addComponentParts(World world, EaglercraftRandom var2, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -1699,6 +1783,7 @@ public class StructureVillagePieces { return true; } + @Override public void buildComponent(StructureComponent structurecomponent, List list, EaglercraftRandom random) { StructureVillagePieces.func_176069_e((StructureVillagePieces.Start) structurecomponent, list, random, @@ -1745,6 +1830,7 @@ public class StructureVillagePieces { this.tablePosition = rand.nextInt(3); } + @Override public boolean addComponentParts(World world, EaglercraftRandom random, StructureBoundingBox structureboundingbox) { if (this.field_143015_k < 0) { @@ -1760,6 +1846,8 @@ public class StructureVillagePieces { Blocks.air.getDefaultState(), false); this.fillWithBlocks(world, structureboundingbox, 0, 0, 0, 3, 0, 4, Blocks.cobblestone.getDefaultState(), Blocks.cobblestone.getDefaultState(), false); + this.fillWithBlocks(world, structureboundingbox, 1, 1, 1, 3, 5, 4, Blocks.air.getDefaultState(), + Blocks.air.getDefaultState(), false); this.fillWithBlocks(world, structureboundingbox, 1, 0, 1, 2, 0, 3, Blocks.dirt.getDefaultState(), Blocks.dirt.getDefaultState(), false); if (this.isTallHouse) { @@ -1830,12 +1918,14 @@ public class StructureVillagePieces { return true; } + @Override protected void readStructureFromNBT(NBTTagCompound nbttagcompound) { super.readStructureFromNBT(nbttagcompound); this.tablePosition = nbttagcompound.getInteger("T"); this.isTallHouse = nbttagcompound.getBoolean("C"); } + @Override protected void writeStructureToNBT(NBTTagCompound nbttagcompound) { super.writeStructureToNBT(nbttagcompound); nbttagcompound.setInteger("T", this.tablePosition); @@ -2066,4 +2156,4 @@ public class StructureVillagePieces { MapGenStructureIO.registerStructureComponent(StructureVillagePieces.Well.class, StructureVillagePieces.Well::new, "ViW"); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/pathfinder/NodeProcessor.java b/src/game/java/net/minecraft/world/pathfinder/NodeProcessor.java index d0775f8f..f2a4d6cb 100644 --- a/src/game/java/net/minecraft/world/pathfinder/NodeProcessor.java +++ b/src/game/java/net/minecraft/world/pathfinder/NodeProcessor.java @@ -9,13 +9,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class NodeProcessor { protected IBlockAccess blockaccess; @@ -73,4 +73,4 @@ public abstract class NodeProcessor { */ public void postProcess() { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/pathfinder/SwimNodeProcessor.java b/src/game/java/net/minecraft/world/pathfinder/SwimNodeProcessor.java index 9703c89f..da31160c 100644 --- a/src/game/java/net/minecraft/world/pathfinder/SwimNodeProcessor.java +++ b/src/game/java/net/minecraft/world/pathfinder/SwimNodeProcessor.java @@ -12,13 +12,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,9 +30,10 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SwimNodeProcessor extends NodeProcessor { + @Override public int findPathOptions(PathPoint[] apathpoint, Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f) { int i = 0; @@ -51,7 +52,7 @@ public class SwimNodeProcessor extends NodeProcessor { } private int func_176186_b(Entity entityIn, int x, int y, int z) { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i = x; i < x + this.entitySizeX; ++i) { for (int j = y; j < y + this.entitySizeY; ++j) { @@ -71,6 +72,7 @@ public class SwimNodeProcessor extends NodeProcessor { /** * + Returns given entity's position as PathPoint */ + @Override public PathPoint getPathPointTo(Entity entity) { return this.openPoint(MathHelper.floor_double(entity.getEntityBoundingBox().minX), MathHelper.floor_double(entity.getEntityBoundingBox().minY + 0.5D), @@ -80,6 +82,7 @@ public class SwimNodeProcessor extends NodeProcessor { /** * + Returns PathPoint for given coordinates */ + @Override public PathPoint getPathPointToCoords(Entity entity, double d0, double d1, double d2) { return this.openPoint(MathHelper.floor_double(d0 - (double) (entity.width / 2.0F)), MathHelper.floor_double(d1 + 0.5D), MathHelper.floor_double(d2 - (double) (entity.width / 2.0F))); @@ -93,6 +96,7 @@ public class SwimNodeProcessor extends NodeProcessor { return i == -1 ? this.openPoint(x, y, z) : null; } + @Override public void initProcessor(IBlockAccess iblockaccess, Entity entity) { super.initProcessor(iblockaccess, entity); } @@ -104,7 +108,8 @@ public class SwimNodeProcessor extends NodeProcessor { * {@link net.minecraft.world.pathfinder.WalkNodeProcessor#avoidsWater * avoidsWater} */ + @Override public void postProcess() { super.postProcess(); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/pathfinder/WalkNodeProcessor.java b/src/game/java/net/minecraft/world/pathfinder/WalkNodeProcessor.java index a4c960d4..bf114c7a 100644 --- a/src/game/java/net/minecraft/world/pathfinder/WalkNodeProcessor.java +++ b/src/game/java/net/minecraft/world/pathfinder/WalkNodeProcessor.java @@ -17,13 +17,13 @@ import net.minecraft.world.IBlockAccess; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,14 +35,14 @@ import net.minecraft.world.IBlockAccess; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WalkNodeProcessor extends NodeProcessor { public static int func_176170_a(IBlockAccess blockaccessIn, Entity entityIn, int x, int y, int z, int sizeX, int sizeY, int sizeZ, boolean avoidWater, boolean breakDoors, boolean enterDoors) { boolean flag = false; BlockPos blockpos = new BlockPos(entityIn); - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos blockpos$mutableblockpos = new BlockPos(); for (int i = x; i < x + sizeX; ++i) { for (int j = y; j < y + sizeY; ++j) { @@ -108,6 +108,7 @@ public class WalkNodeProcessor extends NodeProcessor { private boolean shouldAvoidWater; + @Override public int findPathOptions(PathPoint[] apathpoint, Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f) { int i = 0; @@ -154,12 +155,13 @@ public class WalkNodeProcessor extends NodeProcessor { /** * + Returns given entity's position as PathPoint */ + @Override public PathPoint getPathPointTo(Entity entity) { int i; if (this.canSwim && entity.isInWater()) { i = (int) entity.getEntityBoundingBox().minY; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos( - MathHelper.floor_double(entity.posX), i, MathHelper.floor_double(entity.posZ)); + BlockPos blockpos$mutableblockpos = new BlockPos(MathHelper.floor_double(entity.posX), i, + MathHelper.floor_double(entity.posZ)); for (Block block = this.blockaccess.getBlockState(blockpos$mutableblockpos) .getBlock(); block == Blocks.flowing_water @@ -182,6 +184,7 @@ public class WalkNodeProcessor extends NodeProcessor { /** * + Returns PathPoint for given coordinates */ + @Override public PathPoint getPathPointToCoords(Entity entity, double d0, double d1, double d2) { return this.openPoint(MathHelper.floor_double(d0 - (double) (entity.width / 2.0F)), MathHelper.floor_double(d1), MathHelper.floor_double(d2 - (double) (entity.width / 2.0F))); @@ -250,6 +253,7 @@ public class WalkNodeProcessor extends NodeProcessor { this.avoidsWater, this.canBreakDoors, this.canEnterDoors); } + @Override public void initProcessor(IBlockAccess iblockaccess, Entity entity) { super.initProcessor(iblockaccess, entity); this.shouldAvoidWater = this.avoidsWater; @@ -262,6 +266,7 @@ public class WalkNodeProcessor extends NodeProcessor { * {@link net.minecraft.world.pathfinder.WalkNodeProcessor#avoidsWater * avoidsWater} */ + @Override public void postProcess() { super.postProcess(); this.avoidsWater = this.shouldAvoidWater; @@ -282,4 +287,4 @@ public class WalkNodeProcessor extends NodeProcessor { public void setEnterDoors(boolean canEnterDoorsIn) { this.canEnterDoors = canEnterDoorsIn; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/DerivedWorldInfo.java b/src/game/java/net/minecraft/world/storage/DerivedWorldInfo.java index 70b3faf5..f88d6db1 100644 --- a/src/game/java/net/minecraft/world/storage/DerivedWorldInfo.java +++ b/src/game/java/net/minecraft/world/storage/DerivedWorldInfo.java @@ -10,13 +10,13 @@ import net.minecraft.world.WorldType; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.WorldType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DerivedWorldInfo extends WorldInfo { private final WorldInfo theWorldInfo; @@ -40,6 +40,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns true if commands are allowed on this World. */ + @Override public boolean areCommandsAllowed() { return this.theWorldInfo.areCommandsAllowed(); } @@ -48,10 +49,12 @@ public class DerivedWorldInfo extends WorldInfo { * + Creates a new NBTTagCompound for the world, with the given NBTTag as the * "Player" */ + @Override public NBTTagCompound cloneNBTCompound(NBTTagCompound nbt) { return this.theWorldInfo.cloneNBTCompound(nbt); } + @Override public EnumDifficulty getDifficulty() { return this.theWorldInfo.getDifficulty(); } @@ -59,6 +62,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Gets the GameRules class Instance. */ + @Override public GameRules getGameRulesInstance() { return this.theWorldInfo.getGameRulesInstance(); } @@ -66,6 +70,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Gets the GameType. */ + @Override public WorldSettings.GameType getGameType() { return this.theWorldInfo.getGameType(); } @@ -73,6 +78,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Return the last time the player was in this world. */ + @Override public long getLastTimePlayed() { return this.theWorldInfo.getLastTimePlayed(); } @@ -80,6 +86,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Gets the NBTTagCompound for the worldInfo */ + @Override public NBTTagCompound getNBTTagCompound() { return this.theWorldInfo.getNBTTagCompound(); } @@ -87,6 +94,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the player's NBTTagCompound to be loaded */ + @Override public NBTTagCompound getPlayerNBTTagCompound() { return this.theWorldInfo.getPlayerNBTTagCompound(); } @@ -94,6 +102,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Return the number of ticks until rain. */ + @Override public int getRainTime() { return this.theWorldInfo.getRainTime(); } @@ -101,6 +110,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the save version of this world */ + @Override public int getSaveVersion() { return this.theWorldInfo.getSaveVersion(); } @@ -108,10 +118,12 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the seed of current world. */ + @Override public long getSeed() { return this.theWorldInfo.getSeed(); } + @Override public long getSizeOnDisk() { return this.theWorldInfo.getSizeOnDisk(); } @@ -119,6 +131,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the x spawn position */ + @Override public int getSpawnX() { return this.theWorldInfo.getSpawnX(); } @@ -126,6 +139,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Return the Y axis spawning point of the player. */ + @Override public int getSpawnY() { return this.theWorldInfo.getSpawnY(); } @@ -133,10 +147,12 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the z spawn position */ + @Override public int getSpawnZ() { return this.theWorldInfo.getSpawnZ(); } + @Override public WorldType getTerrainType() { return this.theWorldInfo.getTerrainType(); } @@ -144,6 +160,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns the number of ticks until next thunderbolt. */ + @Override public int getThunderTime() { return this.theWorldInfo.getThunderTime(); } @@ -151,6 +168,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Get current world name */ + @Override public String getWorldName() { return this.theWorldInfo.getWorldName(); } @@ -158,14 +176,17 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Get current world time */ + @Override public long getWorldTime() { return this.theWorldInfo.getWorldTime(); } + @Override public long getWorldTotalTime() { return this.theWorldInfo.getWorldTotalTime(); } + @Override public boolean isDifficultyLocked() { return this.theWorldInfo.isDifficultyLocked(); } @@ -173,6 +194,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns true if hardcore mode is enabled, otherwise false */ + @Override public boolean isHardcoreModeEnabled() { return this.theWorldInfo.isHardcoreModeEnabled(); } @@ -180,6 +202,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns true if the World is initialized. */ + @Override public boolean isInitialized() { return this.theWorldInfo.isInitialized(); } @@ -188,6 +211,7 @@ public class DerivedWorldInfo extends WorldInfo { * + Get whether the map features (e.g. strongholds) generation is enabled or * disabled. */ + @Override public boolean isMapFeaturesEnabled() { return this.theWorldInfo.isMapFeaturesEnabled(); } @@ -195,6 +219,7 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns true if it is raining, false otherwise. */ + @Override public boolean isRaining() { return this.theWorldInfo.isRaining(); } @@ -202,88 +227,106 @@ public class DerivedWorldInfo extends WorldInfo { /** * + Returns true if it is thundering, false otherwise. */ + @Override public boolean isThundering() { return this.theWorldInfo.isThundering(); } + @Override public void setAllowCommands(boolean allow) { } + @Override public void setDifficulty(EnumDifficulty newDifficulty) { } + @Override public void setDifficultyLocked(boolean locked) { } /** * + Sets whether it is raining or not. */ + @Override public void setRaining(boolean isRaining) { } /** * + Sets the number of ticks until rain. */ + @Override public void setRainTime(int time) { } /** * + Sets the save version of the world */ + @Override public void setSaveVersion(int version) { } /** * + Sets the initialization status of the World. */ + @Override public void setServerInitialized(boolean initializedIn) { } + @Override public void setSpawn(BlockPos spawnPoint) { } /** * + Set the x spawn position to the passed in value */ + @Override public void setSpawnX(int x) { } /** * + Sets the y spawn position */ + @Override public void setSpawnY(int y) { } /** * + Set the z spawn position to the passed in value */ + @Override public void setSpawnZ(int z) { } + @Override public void setTerrainType(WorldType type) { } /** * + Sets whether it is thundering or not. */ + @Override public void setThundering(boolean thunderingIn) { } /** * + Defines the number of ticks until next thunderbolt. */ + @Override public void setThunderTime(int time) { } + @Override public void setWorldName(String worldName) { } /** * + Set current world time */ + @Override public void setWorldTime(long time) { } + @Override public void setWorldTotalTime(long time) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/IPlayerFileData.java b/src/game/java/net/minecraft/world/storage/IPlayerFileData.java index b769b169..b1b94331 100644 --- a/src/game/java/net/minecraft/world/storage/IPlayerFileData.java +++ b/src/game/java/net/minecraft/world/storage/IPlayerFileData.java @@ -6,13 +6,13 @@ import net.minecraft.nbt.NBTTagCompound; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IPlayerFileData { /** @@ -41,4 +41,4 @@ public interface IPlayerFileData { * + Writes the player data to disk from the specified PlayerEntityMP. */ void writePlayerData(EntityPlayer var1); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/ISaveFormat.java b/src/game/java/net/minecraft/world/storage/ISaveFormat.java index 09a12db3..fba1bbf0 100644 --- a/src/game/java/net/minecraft/world/storage/ISaveFormat.java +++ b/src/game/java/net/minecraft/world/storage/ISaveFormat.java @@ -7,13 +7,13 @@ import net.minecraft.util.IProgressUpdate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.IProgressUpdate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISaveFormat { /** @@ -40,7 +40,7 @@ public interface ISaveFormat { /** * + - * + * * @args: Takes one argument - the name of the directory of the world to * delete. @desc: Delete the world by deleting the associated directory * recursively. @@ -80,4 +80,4 @@ public interface ISaveFormat { * rename the directory containing the world data. */ boolean renameWorld(String var1, String var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/ISaveHandler.java b/src/game/java/net/minecraft/world/storage/ISaveHandler.java index 8f438829..a7fb1841 100644 --- a/src/game/java/net/minecraft/world/storage/ISaveHandler.java +++ b/src/game/java/net/minecraft/world/storage/ISaveHandler.java @@ -2,20 +2,19 @@ package net.minecraft.world.storage; import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFile2; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.MinecraftException; import net.minecraft.world.WorldProvider; import net.minecraft.world.chunk.storage.IChunkLoader; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,14 +26,9 @@ import net.minecraft.world.chunk.storage.IChunkLoader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ISaveHandler { - /** - * + Checks the session lock to prevent save collisions - */ - void checkSessionLock() throws MinecraftException; - /** * + Called to flush all changes to disk, waiting for them to complete. */ @@ -76,4 +70,4 @@ public interface ISaveHandler { * + Saves the given World Info with the given NBTTagCompound as the Player. */ void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2); -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/MapData.java b/src/game/java/net/minecraft/world/storage/MapData.java index c523b894..1ddccd0b 100644 --- a/src/game/java/net/minecraft/world/storage/MapData.java +++ b/src/game/java/net/minecraft/world/storage/MapData.java @@ -22,13 +22,13 @@ import net.minecraft.world.WorldSavedData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.world.WorldSavedData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapData extends WorldSavedData { public class MapInfo { @@ -133,6 +133,7 @@ public class MapData extends WorldSavedData { /** * + reads in data from the NBTTagCompound into this MapDataBase */ + @Override public void readFromNBT(NBTTagCompound nbttagcompound) { this.dimension = nbttagcompound.getByte("dimension"); this.xCenter = nbttagcompound.getInteger("xCenter"); @@ -276,6 +277,7 @@ public class MapData extends WorldSavedData { * + write data to NBTTagCompound from this MapDataBase, similar to Entities and * TileEntities */ + @Override public void writeToNBT(NBTTagCompound nbttagcompound) { nbttagcompound.setByte("dimension", this.dimension); nbttagcompound.setInteger("xCenter", this.xCenter); @@ -285,4 +287,4 @@ public class MapData extends WorldSavedData { nbttagcompound.setShort("height", (short) 128); nbttagcompound.setByteArray("colors", this.colors); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/MapStorage.java b/src/game/java/net/minecraft/world/storage/MapStorage.java index a324389b..7d08bb2c 100644 --- a/src/game/java/net/minecraft/world/storage/MapStorage.java +++ b/src/game/java/net/minecraft/world/storage/MapStorage.java @@ -26,13 +26,13 @@ import net.minecraft.world.gen.structure.MapGenStructureData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.minecraft.world.gen.structure.MapGenStructureData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MapStorage { public static interface MapStorageProvider { @@ -232,4 +232,4 @@ public class MapStorage { this.loadedDataMap.put(s, worldsaveddata); this.loadedDataList.add(worldsaveddata); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/SaveDataMemoryStorage.java b/src/game/java/net/minecraft/world/storage/SaveDataMemoryStorage.java index 0bc5b7a3..1e38ff95 100644 --- a/src/game/java/net/minecraft/world/storage/SaveDataMemoryStorage.java +++ b/src/game/java/net/minecraft/world/storage/SaveDataMemoryStorage.java @@ -5,13 +5,13 @@ import net.minecraft.world.WorldSavedData; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.world.WorldSavedData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SaveDataMemoryStorage extends MapStorage { public SaveDataMemoryStorage() { @@ -34,6 +34,7 @@ public class SaveDataMemoryStorage extends MapStorage { * + Returns an unique new data id for the given prefix and saves the idCounts * map to the 'idcounts' file. */ + @Override public int getUniqueDataId(String key) { return 0; } @@ -43,6 +44,7 @@ public class SaveDataMemoryStorage extends MapStorage { * disk, instantiating the given Class, or returns null if none such file * exists. args: Class to instantiate, String dataid */ + @Override public WorldSavedData loadData(Class clazz, String dataIdentifier) { return (WorldSavedData) this.loadedDataMap.get(dataIdentifier); } @@ -50,6 +52,7 @@ public class SaveDataMemoryStorage extends MapStorage { /** * + Saves all dirty loaded MapDataBases to disk. */ + @Override public void saveAllData() { } @@ -57,7 +60,8 @@ public class SaveDataMemoryStorage extends MapStorage { * + Assigns the given String id to the given MapDataBase, removing any existing * ones of the same id. */ + @Override public void setData(String dataIdentifier, WorldSavedData data) { this.loadedDataMap.put(dataIdentifier, data); } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/SaveFormatComparator.java b/src/game/java/net/minecraft/world/storage/SaveFormatComparator.java index e7635b49..41eadb6a 100644 --- a/src/game/java/net/minecraft/world/storage/SaveFormatComparator.java +++ b/src/game/java/net/minecraft/world/storage/SaveFormatComparator.java @@ -6,13 +6,13 @@ import net.minecraft.world.WorldSettings; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SaveFormatComparator implements Comparable { private final String fileName; @@ -51,6 +51,7 @@ public class SaveFormatComparator implements Comparable { this.levelDat = levelDat; } + @Override public int compareTo(SaveFormatComparator saveformatcomparator) { return this.lastTimePlayed < saveformatcomparator.lastTimePlayed ? 1 : (this.lastTimePlayed > saveformatcomparator.lastTimePlayed ? -1 @@ -59,7 +60,7 @@ public class SaveFormatComparator implements Comparable { /** * + - * + * * @return {@code true} if cheats are enabled for this world */ public boolean getCheatsEnabled() { @@ -102,4 +103,4 @@ public class SaveFormatComparator implements Comparable { public boolean requiresConversion() { return this.requiresConversion; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/SaveFormatOld.java b/src/game/java/net/minecraft/world/storage/SaveFormatOld.java index 8e817973..f60d93ad 100644 --- a/src/game/java/net/minecraft/world/storage/SaveFormatOld.java +++ b/src/game/java/net/minecraft/world/storage/SaveFormatOld.java @@ -20,13 +20,13 @@ import net.minecraft.util.IProgressUpdate; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,14 +38,14 @@ import net.minecraft.util.IProgressUpdate; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SaveFormatOld implements ISaveFormat { private static final Logger logger = LogManager.getLogger(); /** * + - * + * * @args: Takes one argument - the list of files and directories to * delete. @desc: Deletes the files and directory listed in the list * recursively. @@ -80,6 +80,7 @@ public class SaveFormatOld implements ISaveFormat { /** * + Return whether the given world can be loaded. */ + @Override public boolean canLoadWorld(String parString1) { return (WorldsDB.newVFile(this.savesDirectory, parString1, "level.dat")).exists() || (WorldsDB.newVFile(this.savesDirectory, parString1, "level.dat_old")).exists(); @@ -88,17 +89,19 @@ public class SaveFormatOld implements ISaveFormat { /** * + converts the map to mcRegion */ + @Override public boolean convertMapFormat(String var1, IProgressUpdate var2) { return false; } /** * + - * + * * @args: Takes one argument - the name of the directory of the world to * delete. @desc: Delete the world by deleting the associated directory * recursively. */ + @Override public boolean deleteWorldDirectory(String parString1) { VFile2 file1 = WorldsDB.newVFile(this.savesDirectory, parString1); logger.info("Deleting level " + parString1); @@ -118,13 +121,16 @@ public class SaveFormatOld implements ISaveFormat { return false; } + @Override public void flushCache() { } + @Override public boolean func_154334_a(String var1) { return false; } + @Override public boolean func_154335_d(String parString1) { return !canLoadWorld(parString1); } @@ -132,10 +138,12 @@ public class SaveFormatOld implements ISaveFormat { /** * + Returns the name of the save format. */ + @Override public String getName() { return "Old Format"; } + @Override public List getSaveList() { ArrayList arraylist = Lists.newArrayList(); @@ -155,6 +163,7 @@ public class SaveFormatOld implements ISaveFormat { /** * + Returns back a loader for the specified save directory */ + @Override public ISaveHandler getSaveLoader(String s, boolean flag) { return new SaveHandler(this.savesDirectory, s); } @@ -162,6 +171,7 @@ public class SaveFormatOld implements ISaveFormat { /** * + Returns the world's WorldInfo object */ + @Override public WorldInfo getWorldInfo(String saveName) { VFile2 file1 = WorldsDB.newVFile(this.savesDirectory, saveName); if (!file1.exists()) { @@ -202,6 +212,7 @@ public class SaveFormatOld implements ISaveFormat { /** * + gets if the map is old chunk saving (true) or McRegion (false) */ + @Override public boolean isOldMapFormat(String var1) { return false; } @@ -210,6 +221,7 @@ public class SaveFormatOld implements ISaveFormat { * + Renames the world by storing the new name in level.dat. It does *not* * rename the directory containing the world data. */ + @Override public boolean renameWorld(String dirName, String newName) { VFile2 file1 = WorldsDB.newVFile(this.savesDirectory, dirName); VFile2 file2 = WorldsDB.newVFile(file1, "level.dat"); @@ -235,4 +247,4 @@ public class SaveFormatOld implements ISaveFormat { } return false; } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/SaveHandler.java b/src/game/java/net/minecraft/world/storage/SaveHandler.java index ba522f76..5a12619f 100644 --- a/src/game/java/net/minecraft/world/storage/SaveHandler.java +++ b/src/game/java/net/minecraft/world/storage/SaveHandler.java @@ -12,20 +12,19 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.MinecraftException; import net.minecraft.world.WorldProvider; import net.minecraft.world.chunk.storage.IChunkLoader; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +36,7 @@ import net.minecraft.world.chunk.storage.IChunkLoader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SaveHandler implements ISaveHandler, IPlayerFileData { private static final Logger logger = LogManager.getLogger(); @@ -59,21 +58,17 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { } - /** - * + Checks the session lock to prevent save collisions - */ - public void checkSessionLock() throws MinecraftException { - } - /** * + Called to flush all changes to disk, waiting for them to complete. */ + @Override public void flush() { } /** * + Returns an array of usernames for which player.dat exists for. */ + @Override public String[] getAvailablePlayerDat() { List astring = this.playersDirectory.listFilenames(false); @@ -90,6 +85,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + initializes and returns the chunk loader for the specified world provider */ + @Override public IChunkLoader getChunkLoader(WorldProvider var1) { throw new RuntimeException("eagler"); } @@ -97,10 +93,12 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Gets the file location of the given map */ + @Override public VFile2 getMapFileFromName(String mapName) { return WorldsDB.newVFile(this.mapDataDir, mapName + ".dat"); } + @Override public IPlayerFileData getPlayerNBTManager() { return this; } @@ -108,6 +106,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Gets the File object corresponding to the base directory of this world. */ + @Override public VFile2 getWorldDirectory() { return this.worldDirectory; } @@ -115,6 +114,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Returns the name of the directory where world information is saved. */ + @Override public String getWorldDirectoryName() { return this.saveDirectoryName; } @@ -122,6 +122,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Loads and returns the world info */ + @Override public WorldInfo loadWorldInfo() { VFile2 file1 = WorldsDB.newVFile(this.worldDirectory, "level.dat"); if (file1.exists()) { @@ -153,6 +154,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Reads the player data from disk into the specified PlayerEntityMP. */ + @Override public NBTTagCompound readPlayerData(EntityPlayer player) { NBTTagCompound nbttagcompound = null; @@ -178,6 +180,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + used to update level.dat from old format to MCRegion format */ + @Override public void saveWorldInfo(WorldInfo worldInformation) { NBTTagCompound nbttagcompound = worldInformation.getNBTTagCompound(); NBTTagCompound nbttagcompound1 = new NBTTagCompound(); @@ -213,6 +216,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Saves the given World Info with the given NBTTagCompound as the Player. */ + @Override public void saveWorldInfoWithPlayer(WorldInfo worldinfo, NBTTagCompound nbttagcompound) { NBTTagCompound nbttagcompound1 = worldinfo.cloneNBTCompound(nbttagcompound); NBTTagCompound nbttagcompound2 = new NBTTagCompound(); @@ -248,6 +252,7 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { /** * + Writes the player data to disk from the specified PlayerEntityMP. */ + @Override public void writePlayerData(EntityPlayer player) { try { NBTTagCompound nbttagcompound = new NBTTagCompound(); @@ -269,4 +274,4 @@ public class SaveHandler implements ISaveHandler, IPlayerFileData { } } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/SaveHandlerMP.java b/src/game/java/net/minecraft/world/storage/SaveHandlerMP.java index bd787a7a..5c850c6b 100644 --- a/src/game/java/net/minecraft/world/storage/SaveHandlerMP.java +++ b/src/game/java/net/minecraft/world/storage/SaveHandlerMP.java @@ -2,20 +2,19 @@ package net.minecraft.world.storage; import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFile2; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.MinecraftException; import net.minecraft.world.WorldProvider; import net.minecraft.world.chunk.storage.IChunkLoader; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,18 +26,13 @@ import net.minecraft.world.chunk.storage.IChunkLoader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SaveHandlerMP implements ISaveHandler { - /** - * + Checks the session lock to prevent save collisions - */ - public void checkSessionLock() throws MinecraftException { - } - /** * + Called to flush all changes to disk, waiting for them to complete. */ + @Override public void flush() { } @@ -58,6 +52,7 @@ public class SaveHandlerMP implements ISaveHandler { return null; } + @Override public IPlayerFileData getPlayerNBTManager() { return null; } @@ -73,6 +68,7 @@ public class SaveHandlerMP implements ISaveHandler { /** * + Returns the name of the directory where world information is saved. */ + @Override public String getWorldDirectoryName() { return "none"; } @@ -80,6 +76,7 @@ public class SaveHandlerMP implements ISaveHandler { /** * + Loads and returns the world info */ + @Override public WorldInfo loadWorldInfo() { return null; } @@ -87,13 +84,15 @@ public class SaveHandlerMP implements ISaveHandler { /** * + used to update level.dat from old format to MCRegion format */ + @Override public void saveWorldInfo(WorldInfo var1) { } /** * + Saves the given World Info with the given NBTTagCompound as the Player. */ + @Override public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) { } -} \ No newline at end of file +} diff --git a/src/game/java/net/minecraft/world/storage/WorldInfo.java b/src/game/java/net/minecraft/world/storage/WorldInfo.java index e1549207..b0c4ca9d 100644 --- a/src/game/java/net/minecraft/world/storage/WorldInfo.java +++ b/src/game/java/net/minecraft/world/storage/WorldInfo.java @@ -14,13 +14,13 @@ import net.minecraft.world.WorldType; /** * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source * code. - * + * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * + * * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights * Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.world.WorldType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldInfo { public static final EnumDifficulty DEFAULT_DIFFICULTY = EnumDifficulty.NORMAL; @@ -253,11 +253,13 @@ public class WorldInfo { */ public void addToCrashReport(CrashReportCategory category) { category.addCrashSectionCallable("Level seed", new Callable() { + @Override public String call() throws Exception { return String.valueOf(WorldInfo.this.getSeed()); } }); category.addCrashSectionCallable("Level generator", new Callable() { + @Override public String call() throws Exception { return HString.format("ID %02d - %s, ver %d. Features enabled: %b", new Object[] { Integer.valueOf(WorldInfo.this.terrainType.getWorldTypeID()), @@ -267,28 +269,33 @@ public class WorldInfo { } }); category.addCrashSectionCallable("Level generator options", new Callable() { + @Override public String call() throws Exception { return WorldInfo.this.generatorOptions; } }); category.addCrashSectionCallable("Level spawn location", new Callable() { + @Override public String call() throws Exception { return CrashReportCategory.getCoordinateInfo((double) WorldInfo.this.spawnX, (double) WorldInfo.this.spawnY, (double) WorldInfo.this.spawnZ); } }); category.addCrashSectionCallable("Level time", new Callable() { + @Override public String call() throws Exception { return HString.format("%d game time, %d day time", new Object[] { Long.valueOf(WorldInfo.this.totalTime), Long.valueOf(WorldInfo.this.worldTime) }); } }); category.addCrashSectionCallable("Level dimension", new Callable() { + @Override public String call() throws Exception { return String.valueOf(WorldInfo.this.dimension); } }); category.addCrashSectionCallable("Level storage version", new Callable() { + @Override public String call() throws Exception { String s = "Unknown?"; @@ -308,6 +315,7 @@ public class WorldInfo { } }); category.addCrashSectionCallable("Level weather", new Callable() { + @Override public String call() throws Exception { return HString.format("Rain time: %d (now: %b), thunder time: %d (now: %b)", new Object[] { Integer.valueOf(WorldInfo.this.rainTime), @@ -316,6 +324,7 @@ public class WorldInfo { } }); category.addCrashSectionCallable("Level game mode", new Callable() { + @Override public String call() throws Exception { return HString.format("Game mode: %s (ID %d). Hardcore: %b. Cheats: %b", new Object[] { WorldInfo.this.theGameType.getName(), Integer.valueOf(WorldInfo.this.theGameType.getID()), @@ -810,4 +819,4 @@ public class WorldInfo { } } -} \ No newline at end of file +} diff --git a/src/lwjgl/java/fi/iki/elonen/NanoHTTPD.java b/src/lwjgl/java/fi/iki/elonen/NanoHTTPD.java index 0200211f..c93e9dcd 100644 --- a/src/lwjgl/java/fi/iki/elonen/NanoHTTPD.java +++ b/src/lwjgl/java/fi/iki/elonen/NanoHTTPD.java @@ -8,18 +8,18 @@ package fi.iki.elonen; * %% * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. Neither the name of the nanohttpd nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -328,7 +328,7 @@ public abstract class NanoHTTPD { /** * Provides rudimentary support for cookies. Doesn't support 'path', 'secure' * nor 'httpOnly'. Feel free to improve it and/or add unsupported features. - * + * * @author LordFokas */ public class CookieHandler implements Iterable { @@ -353,7 +353,7 @@ public abstract class NanoHTTPD { /** * Set a cookie with an expiration date from a month ago, effectively deleting * it on the client side. - * + * * @param name The cookie name. */ public void delete(String name) { @@ -367,7 +367,7 @@ public abstract class NanoHTTPD { /** * Read a cookie from the HTTP Headers. - * + * * @param name The cookie's name. * @return The cookie's value if it exists, null otherwise. */ @@ -381,7 +381,7 @@ public abstract class NanoHTTPD { /** * Sets a cookie. - * + * * @param name The cookie's name. * @param value The cookie's value. * @param expires How many days until the cookie expires. @@ -393,7 +393,7 @@ public abstract class NanoHTTPD { /** * Internally used by the webserver to add all queued cookies into the * Response's HTTP Headers. - * + * * @param response The Response object to which headers the queued cookies will * be added. */ @@ -1226,7 +1226,7 @@ public abstract class NanoHTTPD { /** * This method will only return the first value for a given parameter. You will * want to use getParameters if you expect multiple values for a given key. - * + * * @deprecated use {@link #getParameters()} instead. */ @Deprecated @@ -1236,14 +1236,14 @@ public abstract class NanoHTTPD { /** * Get the remote hostname of the requester. - * + * * @return the hostname. */ String getRemoteHostName(); /** * Get the remote ip address of the requester. - * + * * @return the IP address. */ String getRemoteIpAddress(); @@ -1255,7 +1255,7 @@ public abstract class NanoHTTPD { /** * Adds the files in the request body to the files map. - * + * * @param files map to modify */ void parseBody(Map files) throws IOException, ResponseException; @@ -1417,6 +1417,7 @@ public abstract class NanoHTTPD { @SuppressWarnings("serial") private final Map header = new HashMap() { + @Override public String put(String key, String value) { lowerCaseHeader.put(key == null ? key : key.toLowerCase(), value); return super.put(key, value); @@ -1475,7 +1476,7 @@ public abstract class NanoHTTPD { /** * Indicate to close the connection after the Response has been sent. - * + * * @param close {@code true} to hint connection closing, {@code false} to let * connection be closed by client. */ @@ -1574,7 +1575,7 @@ public abstract class NanoHTTPD { * Sends the body to the specified OutputStream. The pending parameter limits * the maximum amounts of bytes sent unless it is -1, in which case everything * is sent. - * + * * @param outputStream the OutputStream to send data to * @param pending -1 to send everything, otherwise sets a max limit to the * number of bytes sent @@ -1853,7 +1854,7 @@ public abstract class NanoHTTPD { * Decode parameters from a URL, handing the case where a single parameter name * might have been supplied several times, by return lists of values. In general * these lists will contain a single element. - * + * * @param parms original NanoHTTPD parameters values, as passed to the * serve() method. * @return a map of String (parameter name) to @@ -1867,7 +1868,7 @@ public abstract class NanoHTTPD { * Decode parameters from a URL, handing the case where a single parameter name * might have been supplied several times, by return lists of values. In general * these lists will contain a single element. - * + * * @param queryString a query string pulled from the URL. * @return a map of String (parameter name) to * List<String> (a list of the values supplied). @@ -1894,7 +1895,7 @@ public abstract class NanoHTTPD { /** * Decode percent encoded String values. - * + * * @param str the percent encoded String * @return expanded form of the input, for example "foo%20bar" becomes "foo bar" */ @@ -1910,7 +1911,7 @@ public abstract class NanoHTTPD { /** * Get MIME type from file name extension, if possible - * + * * @param uri the string representing a file * @return the connected mime/type */ @@ -2138,7 +2139,7 @@ public abstract class NanoHTTPD { /** * create a instance of the client handler, subclasses can return a subclass of * the ClientHandler. - * + * * @param finalAccept the socket the cleint is connected to * @param inputStream the input stream * @return the client handler @@ -2150,7 +2151,7 @@ public abstract class NanoHTTPD { /** * Instantiate the server runnable, can be overwritten by subclasses to provide * a subclass of the ServerRunnable. - * + * * @param timeout the socet timeout to use. * @return the server runnable. */ @@ -2190,7 +2191,7 @@ public abstract class NanoHTTPD { *

*

* (By default, this returns a 404 "Not Found" plain text error response.) - * + * * @param session The HTTP session * @return HTTP response, see class Response for details */ @@ -2218,7 +2219,7 @@ public abstract class NanoHTTPD { *

*

* (By default, this returns a 404 "Not Found" plain text error response.) - * + * * @param uri Percent-decoded URI without parameters, for example * "/index.cgi" * @param method "GET", "POST" etc. @@ -2235,7 +2236,7 @@ public abstract class NanoHTTPD { /** * Pluggable strategy for asynchronously executing requests. - * + * * @param asyncRunner new strategy for handling threads. */ public void setAsyncRunner(AsyncRunner asyncRunner) { @@ -2248,7 +2249,7 @@ public abstract class NanoHTTPD { /** * Pluggable strategy for creating and cleaning up temporary files. - * + * * @param tempFileManagerFactory new strategy for handling temp files. */ public void setTempFileManagerFactory(TempFileManagerFactory tempFileManagerFactory) { @@ -2257,7 +2258,7 @@ public abstract class NanoHTTPD { /** * Start the server. - * + * * @throws IOException if the socket is in use. */ public void start() throws IOException { @@ -2273,7 +2274,7 @@ public abstract class NanoHTTPD { /** * Start the server. - * + * * @param timeout timeout to use for socket connections. * @param daemon start the thread daemon or not. * @throws IOException if the socket is in use. diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java index 94ee424d..b4a42847 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class OpenGLObjects { @@ -31,6 +31,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteVertexArrays(this); } + @Override public int hashCode() { return ptr; } @@ -50,6 +51,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteBuffers(this); } + @Override public int hashCode() { return ptr; } @@ -69,6 +71,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteFramebuffer(this); } + @Override public int hashCode() { return ptr; } @@ -88,6 +91,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteProgram(this); } + @Override public int hashCode() { return ptr; } @@ -107,6 +111,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteQueries(this); } + @Override public int hashCode() { return ptr; } @@ -126,6 +131,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteRenderbuffer(this); } + @Override public int hashCode() { return ptr; } @@ -145,6 +151,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteShader(this); } + @Override public int hashCode() { return ptr; } @@ -164,6 +171,7 @@ class OpenGLObjects { PlatformOpenGL._wglDeleteTextures(this); } + @Override public int hashCode() { return ptr; } @@ -182,6 +190,7 @@ class OpenGLObjects { public void free() { } + @Override public int hashCode() { return ptr; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java index ff676e86..f6131b94 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java @@ -36,7 +36,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformApplication { @@ -58,6 +58,7 @@ public class PlatformApplication { super(file); } + @Override protected JDialog createDialog(Component parent) throws HeadlessException { JDialog dialog = super.createDialog(parent); dialog.setAlwaysOnTop(true); diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index 02d1fd21..541f85cb 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -15,7 +15,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformAssets { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java index b41242ab..b40ca949 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java @@ -14,7 +14,7 @@ import paulscode.sound.codecs.CodecWav; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import paulscode.sound.codecs.CodecWav; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformAudio { @@ -60,15 +60,15 @@ public class PlatformAudio { @Override public void pause(boolean setPaused) { if (setPaused) { - if (sndSystem.playing(sourceName)) { + if (!paused) { sndSystem.pause(sourceName); + paused = true; } - paused = true; } else { - if (!sndSystem.playing(sourceName)) { + if (paused) { sndSystem.play(sourceName); + paused = false; } - paused = false; } } @@ -77,6 +77,11 @@ public class PlatformAudio { sndSystem.setPitch(sourceName, f); } + @Override + public void repeat(boolean en) { + sndSystem.setLooping(sourceName, en); + } + @Override public void restart() { this.stall = PlatformRuntime.steadyTimeMillis(); @@ -116,8 +121,8 @@ public class PlatformAudio { return sndSystem != null; } - public static IAudioHandle beginPlayback(IAudioResource track, float x, float y, float z, float volume, - float pitch) { + public static IAudioHandle beginPlayback(IAudioResource track, float x, float y, float z, float volume, float pitch, + boolean repeat) { if (sndSystem == null) { return null; } @@ -133,12 +138,13 @@ public class PlatformAudio { sndSystem.setTemporary(srcName, true); sndSystem.setPitch(srcName, pitch); sndSystem.setVolume(srcName, volume); + sndSystem.setLooping(srcName, repeat); sndSystem.play(srcName); return new PaulscodeAudioHandle(srcName); } - public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch) { + public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch, boolean repeat) { if (sndSystem == null) { return null; } @@ -149,6 +155,7 @@ public class PlatformAudio { sndSystem.setTemporary(srcName, true); sndSystem.setPitch(srcName, pitch); sndSystem.setVolume(srcName, volume); + sndSystem.setLooping(srcName, repeat); sndSystem.play(srcName); return new PaulscodeAudioHandle(srcName); @@ -183,6 +190,7 @@ public class PlatformAudio { SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); SoundSystemConfig.setCodec("wav", CodecWav.class); SoundSystemConfig.setLogger(new SoundSystemLogger() { + @Override public void errorMessage(String parString1, String parString2, int parInt1) { if (!parString2.isEmpty()) { logger.error("Error in class \"{}\"!", parString1); @@ -190,12 +198,14 @@ public class PlatformAudio { } } + @Override public void importantMessage(String parString1, int parInt1) { if (!parString1.isEmpty()) { logger.warn(parString1); } } + @Override public void message(String parString1, int parInt1) { if (!parString1.isEmpty()) { logger.info(parString1); diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java index 33058896..3cea8028 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformFilesystem { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java index d43d2904..9d9b0eb9 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java @@ -70,11 +70,9 @@ import org.lwjgl.glfw.GLFWGamepadState; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.system.MemoryStack; -import net.lax1dude.eaglercraft.v1_8.Display; - /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -86,7 +84,7 @@ import net.lax1dude.eaglercraft.v1_8.Display; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformInput { @@ -207,7 +205,7 @@ public class PlatformInput { private static int[] lastPos = new int[4]; - private static final long[] syncTimer = new long[1]; + private static long syncTimer = 0l; public static boolean contextLost() { return glfwGetWindowAttrib(win, GLFW_ICONIFIED) == GLFW_TRUE; @@ -863,14 +861,6 @@ public class PlatformInput { } public static float touchGetEventTouchRadiusMixed(int pointId) { - return touchGetEventTouchRadiusX(pointId) * 0.5f + touchGetEventTouchRadiusY(pointId) * 0.5f; - } - - public static float touchGetEventTouchRadiusX(int pointId) { - return 0.0f; - } - - public static float touchGetEventTouchRadiusY(int pointId) { return 0.0f; } @@ -915,14 +905,6 @@ public class PlatformInput { } public static float touchRadiusMixed(int pointId) { - return touchRadiusX(pointId) * 0.5f + touchRadiusY(pointId) * 0.5f; - } - - public static float touchRadiusX(int pointId) { - return 0.0f; - } - - public static float touchRadiusY(int pointId) { return 0.0f; } @@ -941,10 +923,23 @@ public class PlatformInput { glfwVSyncState = vsync; } glfwSwapBuffers(win); - if (limitFps > 0 && !vsync) { - Display.sync(limitFps, syncTimer); + if(!vsync && limitFps > 0 && limitFps <= 1000) { + long frameNanos = (1000000000l / limitFps); + if(syncTimer == 0l) { + syncTimer = System.nanoTime() + frameNanos; + }else { + long nanos = System.nanoTime(); + int remaining = (int)((syncTimer - nanos) / 1000000l); + if(remaining > 0) { + PlatformRuntime.sleep(remaining); + nanos = System.nanoTime(); + } + if((syncTimer += frameNanos) < nanos) { + syncTimer = nanos; + } + } } else { - syncTimer[0] = 0l; + syncTimer = 0l; } } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java index e2d3290f..cea04011 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformNetworking { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java index 32e4487f..512e89d0 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java @@ -124,7 +124,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -136,7 +136,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformOpenGL { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index 06318c86..d15a19ee 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -84,7 +84,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -96,7 +96,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformRuntime { @@ -168,8 +168,8 @@ public class PlatformRuntime { private static EnumPlatformOS currentPlatformOS = null; private static EnumPlatformANGLE requestedANGLEPlatform = EnumPlatformANGLE.DEFAULT; - private static int requestedGLVersion = 300; + private static boolean requestedDisableKHRDebug = false; private static final Random seedProvider = new Random(); @@ -397,83 +397,86 @@ public class PlatformRuntime { glfwSwapInterval(0); - KHRDebug.glDebugMessageCallbackKHR(new GLDebugMessageKHRCallbackI() { - @Override - public void invoke(int source, int type, int id, int severity, int length, long message, long userParam) { - StringBuilder b = new StringBuilder(); - b.append("[KHR DEBUG #"); - b.append(id); - b.append("] "); + if (!requestedDisableKHRDebug) { + KHRDebug.glDebugMessageCallbackKHR(new GLDebugMessageKHRCallbackI() { + @Override + public void invoke(int source, int type, int id, int severity, int length, long message, + long userParam) { + StringBuilder b = new StringBuilder(); + b.append("[KHR DEBUG #"); + b.append(id); + b.append("] "); - switch (source) { - case KHRDebug.GL_DEBUG_SOURCE_API_KHR: - b.append("[API - "); - break; - case KHRDebug.GL_DEBUG_SOURCE_APPLICATION_KHR: - b.append("[APPLICATION - "); - break; - case KHRDebug.GL_DEBUG_SOURCE_SHADER_COMPILER_KHR: - b.append("[SHADER COMPILER - "); - break; - case KHRDebug.GL_DEBUG_SOURCE_THIRD_PARTY_KHR: - b.append("[THIRD PARTY - "); - break; - case KHRDebug.GL_DEBUG_SOURCE_OTHER_KHR: - default: - b.append("[OTHER - "); - break; + switch (source) { + case KHRDebug.GL_DEBUG_SOURCE_API_KHR: + b.append("[API - "); + break; + case KHRDebug.GL_DEBUG_SOURCE_APPLICATION_KHR: + b.append("[APPLICATION - "); + break; + case KHRDebug.GL_DEBUG_SOURCE_SHADER_COMPILER_KHR: + b.append("[SHADER COMPILER - "); + break; + case KHRDebug.GL_DEBUG_SOURCE_THIRD_PARTY_KHR: + b.append("[THIRD PARTY - "); + break; + case KHRDebug.GL_DEBUG_SOURCE_OTHER_KHR: + default: + b.append("[OTHER - "); + break; + } + + switch (type) { + case KHRDebug.GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR: + b.append("DEPRECATED BEHAVIOR] "); + break; + case KHRDebug.GL_DEBUG_TYPE_ERROR_KHR: + b.append("ERROR] "); + break; + default: + case KHRDebug.GL_DEBUG_TYPE_OTHER_KHR: + b.append("OTHER] "); + break; + case KHRDebug.GL_DEBUG_TYPE_PERFORMANCE_KHR: + b.append("PERFORMANCE] "); + break; + case KHRDebug.GL_DEBUG_TYPE_PORTABILITY_KHR: + b.append("PORTABILITY] "); + break; + case KHRDebug.GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR: + b.append("UNDEFINED BEHAVIOR] "); + break; + } + + switch (severity) { + default: + case KHRDebug.GL_DEBUG_SEVERITY_LOW_KHR: + b.append("[LOW Severity] "); + break; + case KHRDebug.GL_DEBUG_SEVERITY_MEDIUM_KHR: + b.append("[MEDIUM Severity] "); + break; + case KHRDebug.GL_DEBUG_SEVERITY_HIGH_KHR: + b.append("[SEVERE] "); + break; + } + + String message2 = GLDebugMessageKHRCallback.getMessage(length, message); + if (message2.contains("GPU stall due to ReadPixels")) + return; + b.append(message2); + logger.error(b.toString()); + + StackTraceElement[] ex = new RuntimeException().getStackTrace(); + for (int i = 0; i < ex.length; ++i) { + logger.error(" at {}", ex[i]); + } } + }, 0l); - switch (type) { - case KHRDebug.GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR: - b.append("DEPRECATED BEHAVIOR] "); - break; - case KHRDebug.GL_DEBUG_TYPE_ERROR_KHR: - b.append("ERROR] "); - break; - default: - case KHRDebug.GL_DEBUG_TYPE_OTHER_KHR: - b.append("OTHER] "); - break; - case KHRDebug.GL_DEBUG_TYPE_PERFORMANCE_KHR: - b.append("PERFORMANCE] "); - break; - case KHRDebug.GL_DEBUG_TYPE_PORTABILITY_KHR: - b.append("PORTABILITY] "); - break; - case KHRDebug.GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR: - b.append("UNDEFINED BEHAVIOR] "); - break; - } - - switch (severity) { - default: - case KHRDebug.GL_DEBUG_SEVERITY_LOW_KHR: - b.append("[LOW Severity] "); - break; - case KHRDebug.GL_DEBUG_SEVERITY_MEDIUM_KHR: - b.append("[MEDIUM Severity] "); - break; - case KHRDebug.GL_DEBUG_SEVERITY_HIGH_KHR: - b.append("[SEVERE] "); - break; - } - - String message2 = GLDebugMessageKHRCallback.getMessage(length, message); - if (message2.contains("GPU stall due to ReadPixels")) - return; - b.append(message2); - logger.error(b.toString()); - - StackTraceElement[] ex = new RuntimeException().getStackTrace(); - for (int i = 0; i < ex.length; ++i) { - logger.error(" at {}", ex[i]); - } - } - }, 0l); - - GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_KHR); - GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR); + GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_KHR); + GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR); + } logger.info("Initializing Audio..."); PlatformAudio.platformInitialize(); @@ -497,6 +500,11 @@ public class PlatformRuntime { glfwTerminate(); } + public static void downloadRemoteURIByteArray(String assetPackageURI, boolean forceCache, + final Consumer cb) { + downloadRemoteURIByteArray(assetPackageURI, cb); + } + public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer cb) { logger.info("Downloading: {}"); try (InputStream is = (new URL(assetPackageURI)).openStream()) { @@ -636,8 +644,7 @@ public class PlatformRuntime { private static boolean probablyGLES2(String glVersion) { if (glVersion == null) return false; - glVersion = glVersion.toLowerCase(); - return glVersion.contains("opengl es 2.0") || glVersion.contains("ES 2.0"); + return glVersion.toLowerCase().contains("opengl es 2.0") || glVersion.contains("ES 2.0"); } public static long randomSeed() { @@ -650,6 +657,10 @@ public class PlatformRuntime { requestedANGLEPlatform = plaf; } + public static void requestDisableKHRDebug(boolean dis) { + requestedDisableKHRDebug = dis; + } + public static void requestGL(int i) { requestedGLVersion = i; } @@ -701,4 +712,8 @@ public class PlatformRuntime { PlatformRuntime.logger.fatal("Crash report was written to: {}", file2.getAbsolutePath()); } + public static boolean immediateContinueSupported() { + return false; + } + } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java index 47de5efc..2f3d4fa2 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.recording.EnumScreenRecordingCodec; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.recording.EnumScreenRecordingCodec; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformScreenRecord { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java index 4128a9a3..45852f00 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateResultObj; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateResultObj; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformUpdateSvc { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java index ef2e6503..9673bfc7 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java @@ -1,12 +1,11 @@ package net.lax1dude.eaglercraft.v1_8.internal; import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; -import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelPeerState; import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState; /** * Copyright (c) 2022-2024 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformVoiceClient { @@ -26,26 +25,6 @@ public class PlatformVoiceClient { } - public static EnumVoiceChannelPeerState getPeerState() { - return EnumVoiceChannelPeerState.LOADING; - } - - public static EnumVoiceChannelPeerState getPeerStateConnect() { - return EnumVoiceChannelPeerState.LOADING; - } - - public static EnumVoiceChannelPeerState getPeerStateDesc() { - return EnumVoiceChannelPeerState.LOADING; - } - - public static EnumVoiceChannelPeerState getPeerStateIce() { - return EnumVoiceChannelPeerState.LOADING; - } - - public static EnumVoiceChannelPeerState getPeerStateInitial() { - return EnumVoiceChannelPeerState.LOADING; - } - public static EnumVoiceChannelReadyState getReadyState() { return EnumVoiceChannelReadyState.NONE; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java index 183fe615..a5cef16d 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java @@ -42,21 +42,10 @@ import dev.onvoid.webrtc.RTCSessionDescription; import dev.onvoid.webrtc.SetSessionDescriptionObserver; import dev.onvoid.webrtc.internal.NativeLoader; import net.lax1dude.eaglercraft.v1_8.EagRuntime; -import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; import net.lax1dude.eaglercraft.v1_8.sp.lan.LANPeerEvent; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayLoggerImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQuery; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryRateLimitDummy; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerRateLimitTracker; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketRateLimitDummy; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQuery; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryRateLimitDummy; /** * Copyright (c) 2022-2024 ayunami2000. All Rights Reserved. @@ -130,10 +119,18 @@ public class PlatformWebRTC { synchronized (lock1) { if (iceCandidate.sdp != null && !iceCandidate.sdp.isEmpty()) { if (iceCandidates.isEmpty()) { - scheduleTask(3000l, () -> { + final int[] candidateState = new int[2]; + final Runnable[] runnable = new Runnable[1]; + scheduleTask(2000l, runnable[0] = () -> { synchronized (lock1) { if (peerConnection != null && peerConnection .getConnectionState() != RTCPeerConnectionState.DISCONNECTED) { + int trial = ++candidateState[1]; + if (candidateState[0] != iceCandidates.size() && trial < 3) { + candidateState[0] = iceCandidates.size(); + scheduleTask(2000l, runnable[0]); + return; + } clientICECandidate = JSONWriter.valueToString(iceCandidates); iceCandidates.clear(); } @@ -209,14 +206,19 @@ public class PlatformWebRTC { @Override public void onStateChange() { if (dataChannel != null && dataChannel.getState() == RTCDataChannelState.OPEN) { - scheduleTask(-1l, () -> { - while (true) { + final Runnable[] retry = new Runnable[1]; + final int[] loopCount = new int[1]; + scheduleTask(-1l, retry[0] = () -> { + f: { synchronized (lock1) { if (iceCandidates.isEmpty()) { - break; + break f; } } - EagUtils.sleep(1); + if (++loopCount[0] < 5) { + scheduleTask(1000l, retry[0]); + } + return; } synchronized (lock2) { clientDataChannelClosed = false; @@ -321,6 +323,8 @@ public class PlatformWebRTC { public LANServer client; public String peerId; public RTCPeerConnection peerConnection; + public RTCDataChannel dataChannel; + public String ipcChannel; public LANPeer(LANServer client, String peerId, RTCPeerConnection peerConnection) { this.client = client; @@ -336,26 +340,39 @@ public class PlatformWebRTC { peerConnection.addIceCandidate(new RTCIceCandidate(null, candidate.getInt("sdpMLineIndex"), candidate.getString("candidate"))); } - if (client.peerStateIce != PEERSTATE_SUCCESS) - client.peerStateIce = PEERSTATE_SUCCESS; } catch (Throwable err) { logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); - if (client.peerStateIce == PEERSTATE_LOADING) - client.peerStateIce = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } } public void disconnect() { - synchronized (fuckTeaVM) { - if (fuckTeaVM.get(peerId) != null) { - fuckTeaVM.remove(peerId).close(); - } + if (dataChannel != null) { + dataChannel.close(); + dataChannel = null; } peerConnection.close(); peerConnection = null; } + public void mapIPC(String ipcChannel) { + if (this.ipcChannel == null) { + if (ipcChannel != null) { + this.ipcChannel = ipcChannel; + synchronized (this.client.ipcMapList) { + this.client.ipcMapList.put(ipcChannel, this); + } + } + } else { + if (ipcChannel == null) { + synchronized (this.client.ipcMapList) { + this.client.ipcMapList.remove(this.ipcChannel); + } + this.ipcChannel = null; + } + } + } + public void setRemoteDescription(String descJSON) { try { JSONObject remoteDesc = new JSONObject(descJSON); @@ -366,8 +383,6 @@ public class PlatformWebRTC { @Override public void onFailure(String s) { logger.error("Failed to set remote description for \"{}\"! {}", peerId, s); - if (client.peerStateDesc == PEERSTATE_LOADING) - client.peerStateDesc = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } @@ -379,8 +394,6 @@ public class PlatformWebRTC { @Override public void onFailure(String s) { logger.error("Failed to create answer for \"{}\"! {}", peerId, s); - if (client.peerStateDesc == PEERSTATE_LOADING) - client.peerStateDesc = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } @@ -393,8 +406,6 @@ public class PlatformWebRTC { logger.error( "Failed to set local description for \"{}\"! {}", peerId, s); - if (client.peerStateDesc == PEERSTATE_LOADING) - client.peerStateDesc = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } @@ -409,8 +420,6 @@ public class PlatformWebRTC { synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(peerId, e); } - if (client.peerStateDesc != PEERSTATE_SUCCESS) - client.peerStateDesc = PEERSTATE_SUCCESS; } }); } @@ -420,8 +429,6 @@ public class PlatformWebRTC { }); } catch (Throwable err) { logger.error("Failed to parse remote description for \"{}\"! {}", peerId, err.getMessage()); - if (client.peerStateDesc == PEERSTATE_LOADING) - client.peerStateDesc = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } } @@ -430,39 +437,48 @@ public class PlatformWebRTC { public static class LANServer { public Set> iceServers = new HashSet<>(); public Map peerList = new HashMap<>(); - public byte peerState = PEERSTATE_LOADING; - public byte peerStateConnect = PEERSTATE_LOADING; - public byte peerStateInitial = PEERSTATE_LOADING; - public byte peerStateDesc = PEERSTATE_LOADING; - public byte peerStateIce = PEERSTATE_LOADING; + public Map ipcMapList = new HashMap<>(); + private final Object lock3 = new Object(); public int countPeers() { - return peerList.size(); + synchronized (peerList) { + return peerList.size(); + } } - public void resetPeerStates() { - peerState = peerStateConnect = peerStateInitial = peerStateDesc = peerStateIce = PEERSTATE_LOADING; + public void sendPacketToRemoteClient(LANPeer thePeer, RTCDataChannelBuffer buffer) { + boolean b = false; + if (thePeer.dataChannel != null && thePeer.dataChannel.getState() == RTCDataChannelState.OPEN) { + try { + thePeer.dataChannel.send(buffer); + } catch (Exception e) { + b = true; + } + } else { + b = true; + } + if (b) { + signalRemoteDisconnect(thePeer.peerId); + } } public void sendPacketToRemoteClient(String peerId, RTCDataChannelBuffer buffer) { - LANPeer thePeer = this.peerList.get(peerId); + LANPeer thePeer; + synchronized (peerList) { + thePeer = peerList.get(peerId); + } if (thePeer != null) { - boolean b = false; - synchronized (fuckTeaVM) { - if (fuckTeaVM.get(thePeer.peerId) != null - && fuckTeaVM.get(thePeer.peerId).getState() == RTCDataChannelState.OPEN) { - try { - fuckTeaVM.get(thePeer.peerId).send(buffer); - } catch (Throwable e) { - b = true; - } - } else { - b = true; - } - } - if (b) { - signalRemoteDisconnect(peerId); - } + sendPacketToRemoteClient(thePeer, buffer); + } + } + + public void serverPeerMapIPC(String peer, String ipcChannel) { + LANPeer peerr; + synchronized (peerList) { + peerr = peerList.get(peer); + } + if (peerr != null) { + peerr.mapIPC(ipcChannel); } } @@ -495,38 +511,40 @@ public class PlatformWebRTC { iceServer.password = server.getOrDefault("credential", null); rtcConfig.iceServers.add(iceServer); } - RTCPeerConnection[] peerConnection = new RTCPeerConnection[1]; + final RTCPeerConnection[] peerConnection = new RTCPeerConnection[1]; + final LANPeer[] peerInstance = new LANPeer[1]; peerConnection[0] = pcFactory.createPeerConnection(rtcConfig, new PeerConnectionObserver() { @Override public void onConnectionChange(RTCPeerConnectionState connectionState) { - if (connectionState == RTCPeerConnectionState.DISCONNECTED) { - LANServer.this.signalRemoteDisconnect(peerId); - } else if (connectionState == RTCPeerConnectionState.CONNECTED) { - if (LANServer.this.peerState != PEERSTATE_SUCCESS) - LANServer.this.peerState = PEERSTATE_SUCCESS; - } else if (connectionState == RTCPeerConnectionState.FAILED) { - if (LANServer.this.peerState == PEERSTATE_LOADING) - LANServer.this.peerState = PEERSTATE_FAILED; + if (connectionState == RTCPeerConnectionState.DISCONNECTED + || connectionState == RTCPeerConnectionState.FAILED) { LANServer.this.signalRemoteDisconnect(peerId); } } @Override public void onDataChannel(RTCDataChannel dataChannel) { - scheduleTask(-1l, () -> { - while (true) { + final Runnable[] retry = new Runnable[1]; + final int[] loopCount = new int[1]; + scheduleTask(-1l, retry[0] = () -> { + f: { synchronized (lock3) { if (iceCandidates.isEmpty()) { - break; + break f; } } - EagUtils.sleep(1); + if (++loopCount[0] < 5) { + scheduleTask(1000l, retry[0]); + } + return; } if (dataChannel == null) return; - synchronized (fuckTeaVM) { - fuckTeaVM.put(peerId, dataChannel); + if (peerInstance[0].dataChannel != null) { + dataChannel.close(); + return; } + peerInstance[0].dataChannel = dataChannel; synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(peerId, new LANPeerEvent.LANPeerDataChannelEvent(peerId)); } @@ -542,10 +560,15 @@ public class PlatformWebRTC { return; byte[] data = new byte[buffer.data.remaining()]; buffer.data.get(data); - LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, - data); - synchronized (serverLANEventBuffer) { - serverLANEventBuffer.put(peerId, e); + LANPeer peer = peerInstance[0]; + if (peer.ipcChannel != null) { + ClientPlatformSingleplayer.sendPacket(new IPCPacketData(peer.ipcChannel, data)); + } else { + LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, + data); + synchronized (serverLANEventBuffer) { + serverLANEventBuffer.put(peerId, e); + } } } @@ -562,10 +585,18 @@ public class PlatformWebRTC { synchronized (lock3) { if (iceCandidate.sdp != null && !iceCandidate.sdp.isEmpty()) { if (iceCandidates.isEmpty()) { - scheduleTask(3000l, () -> { + final int[] candidateState = new int[2]; + final Runnable[] runnable = new Runnable[1]; + scheduleTask(2000l, runnable[0] = () -> { synchronized (lock3) { if (peerConnection[0] != null && peerConnection[0] .getConnectionState() != RTCPeerConnectionState.DISCONNECTED) { + int trial = ++candidateState[1]; + if (candidateState[0] != iceCandidates.size() && trial < 3) { + candidateState[0] = iceCandidates.size(); + scheduleTask(2000l, runnable[0]); + return; + } LANPeerEvent.LANPeerICECandidateEvent e = new LANPeerEvent.LANPeerICECandidateEvent( peerId, JSONWriter.valueToString(iceCandidates)); synchronized (serverLANEventBuffer) { @@ -584,18 +615,22 @@ public class PlatformWebRTC { } } }); - LANPeer peerInstance = new LANPeer(this, peerId, peerConnection[0]); - peerList.put(peerId, peerInstance); - if (peerStateConnect != PEERSTATE_SUCCESS) - peerStateConnect = PEERSTATE_SUCCESS; + peerInstance[0] = new LANPeer(this, peerId, peerConnection[0]); + synchronized (peerList) { + peerList.put(peerId, peerInstance[0]); + } } catch (Throwable e) { - if (peerStateConnect == PEERSTATE_LOADING) - peerStateConnect = PEERSTATE_FAILED; + logger.error("Failed to create peer for \"{}\"", peerId); + logger.error(e); + signalRemoteDisconnect(peerId); } } public void signalRemoteDescription(String peerId, String descJSON) { - LANPeer thePeer = peerList.get(peerId); + LANPeer thePeer; + synchronized (peerList) { + thePeer = peerList.get(peerId); + } if (thePeer != null) { thePeer.setRemoteDescription(descJSON); } @@ -603,7 +638,12 @@ public class PlatformWebRTC { public void signalRemoteDisconnect(String peerId) { if (peerId == null || peerId.isEmpty()) { - for (LANPeer thePeer : peerList.values()) { + List cpy; + synchronized (peerList) { + cpy = new ArrayList<>(peerList.values()); + peerList.clear(); + } + for (LANPeer thePeer : cpy) { if (thePeer != null) { try { thePeer.disconnect(); @@ -615,22 +655,22 @@ public class PlatformWebRTC { } } } - peerList.clear(); - synchronized (fuckTeaVM) { - fuckTeaVM.clear(); - } return; } - LANPeer thePeer = peerList.get(peerId); + LANPeer thePeer; + synchronized (peerList) { + thePeer = peerList.remove(peerId); + } if (thePeer != null) { - peerList.remove(peerId); + if (thePeer.ipcChannel != null) { + synchronized (ipcMapList) { + ipcMapList.remove(thePeer.ipcChannel); + } + } try { thePeer.disconnect(); } catch (Throwable ignored) { } - synchronized (fuckTeaVM) { - fuckTeaVM.remove(peerId); - } synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(thePeer.peerId, new LANPeerEvent.LANPeerDisconnectEvent(peerId)); } @@ -638,7 +678,10 @@ public class PlatformWebRTC { } public void signalRemoteICECandidate(String peerId, String candidate) { - LANPeer thePeer = peerList.get(peerId); + LANPeer thePeer; + synchronized (peerList) { + thePeer = peerList.get(peerId); + } if (thePeer != null) { thePeer.addICECandidate(candidate); } @@ -659,22 +702,16 @@ public class PlatformWebRTC { private static final Logger logger = LogManager.getLogger("PlatformWebRTC"); - private static final RelayLoggerImpl loggerImpl = new RelayLoggerImpl(LogManager.getLogger("RelayPacket")); - private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); - private static final Object lock3 = new Object(); - private static final List scheduledRunnables = new LinkedList<>(); public static PeerConnectionFactory pcFactory; private static boolean supported = true; - private static final Map fuckTeaVM = new HashMap<>(); - private static final Comparator sortTasks = (r1, r2) -> { return (int) (r1.runAt - r2.runAt); }; @@ -696,7 +733,6 @@ public class PlatformWebRTC { private static boolean clientDataChannelClosed = true; private static LANServer rtcLANServer = null; - private static final ListMultimap serverLANEventBuffer = LinkedListMultimap.create(); public static void clearLANClientState() { @@ -800,30 +836,6 @@ public class PlatformWebRTC { return rtcLANServer.countPeers(); } - public static RelayServerSocket openRelayConnection(String addr, int timeout) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayServerSocketRateLimitDummy(limit); - } - return new RelayServerSocketImpl(addr, timeout); - } - - public static RelayQuery openRelayQuery(String addr) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayQueryRateLimitDummy(limit); - } - return new RelayQueryImpl(addr); - } - - public static RelayWorldsQuery openRelayWorldsQuery(String addr) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayWorldsQueryRateLimitDummy(limit); - } - return new RelayWorldsQueryImpl(addr); - } - public static void runScheduledTasks() { List toRun = null; synchronized (scheduledRunnables) { @@ -902,7 +914,6 @@ public class PlatformWebRTC { synchronized (serverLANEventBuffer) { serverLANEventBuffer.clear(); } - rtcLANServer.resetPeerStates(); rtcLANServer.setIceServers(servers); } @@ -914,6 +925,28 @@ public class PlatformWebRTC { rtcLANServer.signalRemoteICECandidate(peer, iceCandidates); } + public static void serverLANPeerMapIPC(String peer, String ipcChannel) { + rtcLANServer.serverPeerMapIPC(peer, ipcChannel); + } + + public static boolean serverLANPeerPassIPC(IPCPacketData ipcPacket) { + if (rtcLANServer != null) { + LANPeer peer; + synchronized (rtcLANServer.ipcMapList) { + peer = rtcLANServer.ipcMapList.get(ipcPacket.channel); + } + if (peer != null) { + rtcLANServer.sendPacketToRemoteClient(peer, + new RTCDataChannelBuffer(ByteBuffer.wrap(ipcPacket.contents), true)); + return true; + } else { + return false; + } + } else { + return false; + } + } + public static void serverLANWritePacket(String peer, byte[] data) { rtcLANServer.sendPacketToRemoteClient(peer, new RTCDataChannelBuffer(ByteBuffer.wrap(data), true)); } @@ -949,4 +982,5 @@ public class PlatformWebRTC { } return supported; } -} \ No newline at end of file + +} diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java index ecb6162b..a4a04b79 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformWebView { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java index 3a3ccd51..8b684229 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLAllocator.java @@ -4,7 +4,7 @@ import org.lwjgl.system.jemalloc.JEmalloc; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import org.lwjgl.system.jemalloc.JEmalloc; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLWJGLAllocator { @@ -26,43 +26,77 @@ public class EaglerLWJGLAllocator { } } + private static final boolean enableAllocCount = false; + private static volatile int allocCount = 0; + + private static final ByteBuffer ZERO_LENGTH_BYTE_BUFFER = new EaglerLWJGLByteBuffer(0l, 0, true); + public static ByteBuffer allocByteBuffer(int len) { - long ret = JEmalloc.nje_malloc(len); - if (ret == 0l) { - throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + if(len != 0) { + long ret = JEmalloc.nje_malloc(len); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + if(enableAllocCount) ++allocCount; + return new EaglerLWJGLByteBuffer(ret, len, true); + }else { + return ZERO_LENGTH_BYTE_BUFFER; } - return new EaglerLWJGLByteBuffer(ret, len, true); } + private static final FloatBuffer ZERO_LENGTH_FLOAT_BUFFER = new EaglerLWJGLFloatBuffer(0l, 0, true); + public static FloatBuffer allocFloatBuffer(int len) { - long ret = JEmalloc.nje_malloc(len << 2); - if (ret == 0l) { - throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + if(len != 0) { + long ret = JEmalloc.nje_malloc(len << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + if(enableAllocCount) ++allocCount; + return new EaglerLWJGLFloatBuffer(ret, len, true); + }else { + return ZERO_LENGTH_FLOAT_BUFFER; } - return new EaglerLWJGLFloatBuffer(ret, len, true); } + private static final IntBuffer ZERO_LENGTH_INT_BUFFER = new EaglerLWJGLIntBuffer(0l, 0, true); + public static IntBuffer allocIntBuffer(int len) { - long ret = JEmalloc.nje_malloc(len << 2); - if (ret == 0l) { - throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + if(len != 0) { + long ret = JEmalloc.nje_malloc(len << 2); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + if(enableAllocCount) ++allocCount; + return new EaglerLWJGLIntBuffer(ret, len, true); + }else { + return ZERO_LENGTH_INT_BUFFER; } - return new EaglerLWJGLIntBuffer(ret, len, true); } + private static final ShortBuffer ZERO_LENGTH_SHORT_BUFFER = new EaglerLWJGLShortBuffer(0l, 0, true); + public static ShortBuffer allocShortBuffer(int len) { - long ret = JEmalloc.nje_malloc(len << 1); - if (ret == 0l) { - throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + if(len != 0) { + long ret = JEmalloc.nje_malloc(len << 1); + if(ret == 0l) { + throw new OutOfMemoryError("Native je_malloc call returned null pointer!"); + } + if(enableAllocCount) ++allocCount; + return new EaglerLWJGLShortBuffer(ret, len, true); + }else { + return ZERO_LENGTH_SHORT_BUFFER; } - return new EaglerLWJGLShortBuffer(ret, len, true); } public static void freeByteBuffer(ByteBuffer buffer) { if (buffer instanceof EaglerLWJGLByteBuffer) { EaglerLWJGLByteBuffer buf = (EaglerLWJGLByteBuffer) buffer; if (buf.original) { - JEmalloc.nje_free(buf.address); + if(buf.address != 0l) { + JEmalloc.nje_free(buf.address); + if(enableAllocCount) --allocCount; + } } else { throwNotOriginal(buffer); } @@ -75,7 +109,10 @@ public class EaglerLWJGLAllocator { if (buffer instanceof EaglerLWJGLFloatBuffer) { EaglerLWJGLFloatBuffer buf = (EaglerLWJGLFloatBuffer) buffer; if (buf.original) { - JEmalloc.nje_free(buf.address); + if(buf.address != 0l) { + JEmalloc.nje_free(buf.address); + if(enableAllocCount) --allocCount; + } } else { throwNotOriginal(buffer); } @@ -88,7 +125,10 @@ public class EaglerLWJGLAllocator { if (buffer instanceof EaglerLWJGLIntBuffer) { EaglerLWJGLIntBuffer buf = (EaglerLWJGLIntBuffer) buffer; if (buf.original) { - JEmalloc.nje_free(buf.address); + if(buf.address != 0l) { + JEmalloc.nje_free(buf.address); + if(enableAllocCount) --allocCount; + } } else { throwNotOriginal(buffer); } @@ -101,7 +141,10 @@ public class EaglerLWJGLAllocator { if (buffer instanceof EaglerLWJGLShortBuffer) { EaglerLWJGLShortBuffer buf = (EaglerLWJGLShortBuffer) buffer; if (buf.original) { - JEmalloc.nje_free(buf.address); + if(buf.address != 0l) { + JEmalloc.nje_free(buf.address); + if(enableAllocCount) --allocCount; + } } else { throwNotOriginal(buffer); } @@ -146,6 +189,12 @@ public class EaglerLWJGLAllocator { } } + public static int getAllocCount() { + if (!enableAllocCount) + throw new UnsupportedOperationException(); + return allocCount; + } + private static WrongBufferClassType notEagler(Object clazz) { return new WrongBufferClassType( "Tried to pass a " + clazz.getClass().getSimpleName() + " which is not a native eagler buffer"); diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java index 38ebb856..15cfc02c 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLByteBuffer.java @@ -5,7 +5,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLWJGLByteBuffer implements ByteBuffer { @@ -288,7 +288,7 @@ public class EaglerLWJGLByteBuffer implements ByteBuffer { if (position + l > limit) throw Buffer.makeIOOBE(position + l - 1); for (int i = 0; i < l; ++i) { - UnsafeUtils.setMemByte(address + position + l, src.get()); + UnsafeUtils.setMemByte(address + position + i, src.get()); } position += l; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java index ee51c038..e7618a7e 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLFloatBuffer.java @@ -5,7 +5,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLWJGLFloatBuffer implements FloatBuffer { @@ -202,7 +202,7 @@ public class EaglerLWJGLFloatBuffer implements FloatBuffer { if (position + l > limit) throw Buffer.makeIOOBE(position + l - 1); for (int i = 0; i < l; ++i) { - UnsafeUtils.setMemFloat(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemFloat(address + ((position + i) << SHIFT), src.get()); } position += l; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java index e0fd5785..c87e1dce 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLIntBuffer.java @@ -5,7 +5,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLWJGLIntBuffer implements IntBuffer { @@ -210,7 +210,7 @@ public class EaglerLWJGLIntBuffer implements IntBuffer { if (position + l > limit) throw Buffer.makeIOOBE(position + l - 1); for (int i = 0; i < l; ++i) { - UnsafeUtils.setMemInt(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemInt(address + ((position + i) << SHIFT), src.get()); } position += l; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java index 12bf3d35..3b63cde9 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerLWJGLShortBuffer.java @@ -5,7 +5,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.unsafememcpy.UnsafeUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLWJGLShortBuffer implements ShortBuffer { @@ -210,7 +210,7 @@ public class EaglerLWJGLShortBuffer implements ShortBuffer { if (position + l > limit) throw Buffer.makeIOOBE(position + l - 1); for (int i = 0; i < l; ++i) { - UnsafeUtils.setMemInt(address + ((position + l) << SHIFT), src.get()); + UnsafeUtils.setMemInt(address + ((position + i) << SHIFT), src.get()); } position += l; } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java index 0638250f..390cdd1b 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DebugFilesystem.java @@ -15,7 +15,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DebugFilesystem implements IEaglerFilesystem { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java index d63cb371..8911d9ad 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayEntry; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayEntry; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DesktopClientConfigAdapter implements IClientConfigAdapter { @@ -199,6 +199,11 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { return true; } + @Override + public boolean isEnforceVSync() { + return false; + } + @Override public boolean isForceProfanityFilter() { return false; diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketClient.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketClient.java index be295f94..25ffe88a 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketClient.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketClient.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DesktopWebSocketClient extends AbstractWebSocketClient { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameBinary.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameBinary.java index a2370767..c7539240 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameBinary.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameBinary.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DesktopWebSocketFrameBinary implements IWebSocketFrame { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameString.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameString.java index d8d67cc6..681c4a56 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameString.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopWebSocketFrameString.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DesktopWebSocketFrameString implements IWebSocketFrame { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewHTTPD.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewHTTPD.java index ea39fd2c..bce166a7 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewHTTPD.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewHTTPD.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class FallbackWebViewHTTPD extends NanoHTTPD { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewProtocol.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewProtocol.java index a4f8cb71..54712e40 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewProtocol.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewProtocol.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.PermissionsCache; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.PermissionsCache; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class FallbackWebViewProtocol { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewServer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewServer.java index 50a1922b..16cd3f8b 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewServer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewServer.java @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FallbackWebViewServer { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewWSD.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewWSD.java index ef326579..c6724f16 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewWSD.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FallbackWebViewWSD.java @@ -32,7 +32,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -44,7 +44,7 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class FallbackWebViewWSD extends WebSocketServer { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java index a7dc6739..db3b8269 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/FilesystemConvertingDialog.java @@ -15,7 +15,7 @@ import javax.swing.border.EmptyBorder; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import javax.swing.border.EmptyBorder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FilesystemConvertingDialog extends JFrame { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java index bf186d8d..ed493930 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystem.java @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JDBCFilesystem implements IEaglerFilesystem { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java index e27a49a1..0020cfab 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/JDBCFilesystemConverter.java @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JDBCFilesystemConverter { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java index 121e8d6a..24ecb866 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LWJGLEntryPoint.java @@ -14,7 +14,7 @@ import net.minecraft.client.main.Main; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.main.Main; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LWJGLEntryPoint { @@ -44,6 +44,8 @@ public class LWJGLEntryPoint { PlatformRuntime.requestGL(300); } else if (args[i].equalsIgnoreCase("gles=310")) { PlatformRuntime.requestGL(310); + } else if (args[i].equalsIgnoreCase("disableKHRDebug")) { + PlatformRuntime.requestDisableKHRDebug(true); } else { EnumPlatformANGLE angle = EnumPlatformANGLE.fromId(args[i]); if (angle != EnumPlatformANGLE.DEFAULT) { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LaunchRenderDocDialog.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LaunchRenderDocDialog.java index 7d9f6427..defe05be 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LaunchRenderDocDialog.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/LaunchRenderDocDialog.java @@ -22,7 +22,7 @@ import javax.swing.border.EmptyBorder; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import javax.swing.border.EmptyBorder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LaunchRenderDocDialog extends JDialog { @@ -85,6 +85,7 @@ public class LaunchRenderDocDialog extends JDialog { okButton.setPreferredSize(new Dimension(60, 20)); okButton.setMargin(new Insets(0, 0, 0, 0)); okButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { LaunchRenderDocDialog.this.setVisible(false); } @@ -98,6 +99,7 @@ public class LaunchRenderDocDialog extends JDialog { cancelButton.setPreferredSize(new Dimension(60, 20)); cancelButton.setMargin(new Insets(0, 0, 0, 0)); cancelButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { System.exit(0); } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/MainMenuCreditsDialog.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/MainMenuCreditsDialog.java index 29c6a95f..0c1892c6 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/MainMenuCreditsDialog.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/MainMenuCreditsDialog.java @@ -13,7 +13,7 @@ import javax.swing.ScrollPaneConstants; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import javax.swing.ScrollPaneConstants; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MainMenuCreditsDialog extends JFrame { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/WebSocketClientImpl.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/WebSocketClientImpl.java index 3893706b..4250672d 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/WebSocketClientImpl.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/WebSocketClientImpl.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.EnumEaglerConnectionState; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.EnumEaglerConnectionState; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class WebSocketClientImpl extends WebSocketClient { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/ChannelLWJGLOpenAL.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/ChannelLWJGLOpenAL.java index 96f8da9c..963dc6f4 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/ChannelLWJGLOpenAL.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/ChannelLWJGLOpenAL.java @@ -100,7 +100,7 @@ public class ChannelLWJGLOpenAL extends Channel { * IntBuffer identifier to use for this channel. Possible values for channel * type can be found in the {@link paulscode.sound.SoundSystemConfig * SoundSystemConfig} class. - * + * * @param type Type of channel (normal or streaming). * @param src Handle to the OpenAL source identifier. */ @@ -113,7 +113,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Attaches an OpenAL sound-buffer identifier for the sound data to be played * back for a normal source. - * + * * @param buf Intbuffer identifier for the sound data to play. * @return False if an error occurred. */ @@ -137,7 +137,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Returns the number of queued byte[] buffers that have finished playing. - * + * * @return Number of buffers processed. */ @Override @@ -159,7 +159,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Checks for OpenAL errors, and prints a message if there is an error. - * + * * @return True if there was an error, False if not. */ private boolean checkALError() { @@ -230,7 +230,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Feeds raw data to the stream. - * + * * @param buffer Buffer containing raw audio data to stream. * @return Number of prior buffers that have been processed., or -1 if error. */ @@ -324,7 +324,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Calculates the number of milliseconds since the channel began playing. - * + * * @return Milliseconds, or -1 if unable to calculate. */ @Override @@ -362,7 +362,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Returns the number of milliseconds of audio contained in specified buffer. - * + * * @return milliseconds, or 0 if unable to calculate. */ public float millisInBuffer(int alBufferi) { @@ -394,7 +394,7 @@ public class ChannelLWJGLOpenAL extends Channel { * Used to determine if a channel is actively playing a source. This method will * return false if the channel is paused or stopped and when no data is queued * to be streamed. - * + * * @return True if this channel is playing a source. */ @Override @@ -408,7 +408,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Queues up the initial byte[] buffers of data to be streamed. - * + * * @param bufferList List of the first buffers to be played for a streaming * source. * @return False if problem occurred or if end of stream was reached. @@ -494,7 +494,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Queues up a byte[] buffer of data to be streamed. - * + * * @param buffer The next buffer to be played for a streaming source. * @return False if an error occurred or if the channel is shutting down. */ @@ -546,7 +546,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Sets the channel up to receive the specified audio format. - * + * * @param audioFormat Format to use when playing the stream data. */ @Override @@ -581,7 +581,7 @@ public class ChannelLWJGLOpenAL extends Channel { /** * Sets the channel up to receive the specified OpenAL audio format and sample * rate. - * + * * @param format Format to use. * @param rate Sample rate (speed) to use. */ diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/LibraryLWJGLOpenAL.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/LibraryLWJGLOpenAL.java index 48a5b86a..2e300869 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/LibraryLWJGLOpenAL.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/LibraryLWJGLOpenAL.java @@ -132,7 +132,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Constructor: Generates a standard "unknown error" exception with the * specified message. - * + * * @param message A brief description of the problem that occurred. */ public Exception(String message) { @@ -142,7 +142,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Constructor: Generates an exception of the specified type, with the specified * message. - * + * * @param message A brief description of the problem that occurred. * @param type Identifier indicating they type of error. */ @@ -174,7 +174,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Whether or not the AL_PITCH control is supported. - * + * * @return True if AL_PITCH is supported. */ public static boolean alPitchSupported() { @@ -183,7 +183,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Sets or returns the value of boolean 'alPitchSupported'. - * + * * @param action Action to perform (GET or SET). * @param value New value if action is SET, otherwise XXX. * @return value of boolean 'alPitchSupported'. @@ -196,7 +196,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Returns a longer description of this library type. - * + * * @return A longer description. */ public static String getDescription() { @@ -205,7 +205,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Returns the short title of this library type. - * + * * @return A short title. */ public static String getTitle() { @@ -214,7 +214,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Checks if the OpenAL library type is compatible. - * + * * @return True or false. */ public static boolean libraryCompatible() { @@ -257,7 +257,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Checks for OpenAL errors, and prints a message if there is an error. - * + * * @return True if there was an error, False if not. */ private boolean checkALError() { @@ -324,7 +324,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Creates sources based on the source map provided. - * + * * @param srcMap Sources to copy. */ @Override @@ -372,7 +372,7 @@ public class LibraryLWJGLOpenAL extends Library { * Creates a new channel of the specified type (normal or streaming). Possible * values for channel type can be found in the * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class. - * + * * @param type Type of channel. */ @Override @@ -410,7 +410,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Returns the name of the class. - * + * * @return "Library" + library title. */ @Override @@ -509,7 +509,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Pre-loads a sound into memory. - * + * * @param filenameURL Filename/URL of the sound file to load. * @return True if the sound loaded properly. */ @@ -606,7 +606,7 @@ public class LibraryLWJGLOpenAL extends Library { * Saves the specified sample data, under the specified identifier. This * identifier can be later used in place of 'filename' parameters to reference * the sample data. - * + * * @param buffer the sample data and audio format to save. * @param identifier What to call the sample. * @return True if there weren't any problems. @@ -686,7 +686,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Creates a new source and places it into the source map. - * + * * @param priority Setting this to true will prevent other sounds from * overriding this one. * @param toStream Setting this to true will load the sound in pieces rather @@ -757,7 +757,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Creates and immediately plays a new source. - * + * * @param priority Setting this to true will prevent other sounds from * overriding this one. * @param toStream Setting this to true will load the sound in pieces rather @@ -827,7 +827,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Opens a direct line for streaming audio data. - * + * * @param audioFormat Format that the data will be in. * @param priority Setting this to true will prevent other sounds from * overriding this one. @@ -850,7 +850,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Changes the listeners orientation to the specified 'angle' radians * counterclockwise around the y-Axis. - * + * * @param angle Radians. */ @Override @@ -869,7 +869,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Changes the listeners position and orientation using the specified listener * data. - * + * * @param l Listener data to use. */ @Override @@ -900,7 +900,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Changes the listeners orientation using the specified coordinates. - * + * * @param lookX X element of the look-at direction. * @param lookY Y element of the look-at direction. * @param lookZ Z element of the look-at direction. @@ -923,7 +923,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Changes the listener's position. - * + * * @param x Destination X coordinate. * @param y Destination Y coordinate. * @param z Destination Z coordinate. @@ -944,7 +944,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Sets the listener's velocity, for use in Doppler effect. - * + * * @param x Velocity along world x-axis. * @param y Velocity along world y-axis. * @param z Velocity along world z-axis. @@ -961,7 +961,7 @@ public class LibraryLWJGLOpenAL extends Library { /** * Sets the overall volume to the specified value, affecting all sources. - * + * * @param value New volume, float value ( 0.0f - 1.0f ). */ @Override @@ -977,7 +977,7 @@ public class LibraryLWJGLOpenAL extends Library { * freeing up memory after a large sound file is no longer needed. NOTE: the * source will remain in memory after this method has been called, for as long * as the sound is attached to an existing source. - * + * * @param filename Filename/identifier of the sound file to unload. */ @Override diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/SourceLWJGLOpenAL.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/SourceLWJGLOpenAL.java index f03067aa..f0ba5641 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/SourceLWJGLOpenAL.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/paulscode/lwjgl3/SourceLWJGLOpenAL.java @@ -105,7 +105,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Constructor: Creates a new streaming source that will be directly fed with * raw audio data. - * + * * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. * @param audioFormat Format that the data will be in. * @param priority Setting this to true will prevent other sounds from @@ -130,7 +130,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Constructor: Creates a new source using the specified parameters. - * + * * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a * new normal source. @@ -169,7 +169,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Constructor: Creates a new source matching the specified source. - * + * * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a * new normal source. @@ -227,7 +227,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Changes the peripheral information about the source using the specified * parameters. - * + * * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a * new normal source. @@ -263,7 +263,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Checks for OpenAL errors, and prints a message if there is an error. - * + * * @return True if there was an error, False if not. */ private boolean checkALError() { @@ -316,7 +316,7 @@ public class SourceLWJGLOpenAL extends Source { * this source. This method has no effect on non-streaming sources. This method * is used internally by SoundSystem, and it is unlikely that the user will ever * need to use it. - * + * * @return True if there was something in the queue. */ @Override @@ -387,7 +387,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Plays the source on the specified channel. - * + * * @param c Channel to play on. */ @Override @@ -532,7 +532,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Queues up the initial stream-buffers for the stream. - * + * * @return False if the end of the stream was reached. */ @Override @@ -575,7 +575,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Sets this source's attenuation model. - * + * * @param model Attenuation model to use. */ @Override @@ -601,7 +601,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Sets this source's fade distance or rolloff factor, depending on the * attenuation model. - * + * * @param dr New value for fade distance or rolloff factor. */ @Override @@ -621,7 +621,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Sets whether this source should loop or only play once. - * + * * @param lp True or false. */ @Override @@ -641,7 +641,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Manually sets this source's pitch. - * + * * @param value A float value ( 0.5f - 2.0f ). */ @Override @@ -652,7 +652,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Moves the source to the specified position. - * + * * @param x X coordinate to move to. * @param y Y coordinate to move to. * @param z Z coordinate to move to. @@ -683,7 +683,7 @@ public class SourceLWJGLOpenAL extends Source { /** * Sets this source's velocity, for use in Doppler effect. - * + * * @param x Velocity along world x-axis. * @param y Velocity along world y-axis. * @param z Velocity along world z-axis. diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java index 88cd7b47..244b7fde 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.lwjgl.MemoryConnection; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.lwjgl.MemoryConnection; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientPlatformSingleplayer { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java index dcc807fc..5906ccf4 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/ServerPlatformSingleplayer.java @@ -8,12 +8,14 @@ import net.lax1dude.eaglercraft.v1_8.Filesystem; import net.lax1dude.eaglercraft.v1_8.internal.IClientConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.IEaglerFilesystem; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.internal.lwjgl.DesktopClientConfigAdapter; +import net.lax1dude.eaglercraft.v1_8.sp.server.IWASMCrashCallback; import net.lax1dude.eaglercraft.v1_8.sp.server.internal.lwjgl.MemoryConnection; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.lwjgl.MemoryConnection; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerPlatformSingleplayer { @@ -83,9 +85,20 @@ public class ServerPlatformSingleplayer { } public static void sendPacket(IPCPacketData packet) { + if (PlatformWebRTC.serverLANPeerPassIPC(packet)) { + return; + } synchronized (MemoryConnection.serverToClientQueue) { MemoryConnection.serverToClientQueue.add(packet); } } + public static void setCrashCallbackWASM(IWASMCrashCallback callback) { + + } + + public static boolean isTabAboutToCloseWASM() { + return false; + } + } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/CrashScreenPopup.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/CrashScreenPopup.java index efe27d75..028dd737 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/CrashScreenPopup.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/CrashScreenPopup.java @@ -13,7 +13,7 @@ import javax.swing.ScrollPaneConstants; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import javax.swing.ScrollPaneConstants; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CrashScreenPopup extends JFrame { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/DesktopIntegratedServer.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/DesktopIntegratedServer.java index 56f8b136..df7d0092 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/DesktopIntegratedServer.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/DesktopIntegratedServer.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DesktopIntegratedServer implements Runnable { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/MemoryConnection.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/MemoryConnection.java index c9293b0f..0a5c9d53 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/MemoryConnection.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/sp/server/internal/lwjgl/MemoryConnection.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MemoryConnection { diff --git a/src/main/java/com/google/common/base/CharMatcher.java b/src/main/java/com/google/common/base/CharMatcher.java index 9ddceb2a..afa7fa90 100644 --- a/src/main/java/com/google/common/base/CharMatcher.java +++ b/src/main/java/com/google/common/base/CharMatcher.java @@ -48,7 +48,7 @@ import com.google.common.annotations.GwtIncompatible; * *

* Example usages: - * + * *

  *   String trimmed = {@link #WHITESPACE WHITESPACE}.{@link #trimFrom trimFrom}(userInput);
  *   if ({@link #ASCII ASCII}.{@link #matchesAllOf matchesAllOf}(s)) { ... }
@@ -948,7 +948,7 @@ public abstract class CharMatcher implements Predicate {
 	 * Returns a string copy of the input character sequence, with each group of
 	 * consecutive characters that match this matcher replaced by a single
 	 * replacement character. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1220,7 +1220,7 @@ public abstract class CharMatcher implements Predicate {
 	/**
 	 * Returns a string containing all non-matching characters of a character
 	 * sequence, in order. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1263,7 +1263,7 @@ public abstract class CharMatcher implements Predicate {
 	 * Returns a string copy of the input character sequence, with each character
 	 * that matches this matcher replaced by a given replacement character. For
 	 * example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1304,7 +1304,7 @@ public abstract class CharMatcher implements Predicate {
 	 * Returns a string copy of the input character sequence, with each character
 	 * that matches this matcher replaced by a given replacement sequence. For
 	 * example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1357,7 +1357,7 @@ public abstract class CharMatcher implements Predicate {
 	/**
 	 * Returns a string containing all matching characters of a character sequence,
 	 * in order. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1419,7 +1419,7 @@ public abstract class CharMatcher implements Predicate {
 	 * Returns a substring of the input character sequence that omits all characters
 	 * this matcher matches from the beginning and from the end of the string. For
 	 * example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1431,7 +1431,7 @@ public abstract class CharMatcher implements Predicate {
 	 *
 	 * 

* Note that: - * + * *

 	 *    {@code
 	 *
@@ -1464,7 +1464,7 @@ public abstract class CharMatcher implements Predicate {
 	/**
 	 * Returns a substring of the input character sequence that omits all characters
 	 * this matcher matches from the beginning of the string. For example:
-	 * 
+	 *
 	 * 
 	 *  {@code
 	 *
@@ -1488,7 +1488,7 @@ public abstract class CharMatcher implements Predicate {
 	/**
 	 * Returns a substring of the input character sequence that omits all characters
 	 * this matcher matches from the end of the string. For example:
-	 * 
+	 *
 	 * 
 	 *  {@code
 	 *
diff --git a/src/main/java/com/google/common/base/Converter.java b/src/main/java/com/google/common/base/Converter.java
index baa90238..91eb9869 100644
--- a/src/main/java/com/google/common/base/Converter.java
+++ b/src/main/java/com/google/common/base/Converter.java
@@ -64,7 +64,7 @@ import com.google.common.annotations.GwtCompatible;
  * {@link #doBackward} are guaranteed to never be passed {@code null}, and must
  * never return {@code null}.
  *
- * 
+ *
  * 

Common ways to use

* *

diff --git a/src/main/java/com/google/common/base/Equivalence.java b/src/main/java/com/google/common/base/Equivalence.java index ea368b0a..76dac970 100644 --- a/src/main/java/com/google/common/base/Equivalence.java +++ b/src/main/java/com/google/common/base/Equivalence.java @@ -304,7 +304,7 @@ public abstract class Equivalence { /** * Returns a predicate that evaluates to true if and only if the input is * equivalent to {@code target} according to this equivalence relation. - * + * * @since 10.0 */ @Beta @@ -356,10 +356,10 @@ public abstract class Equivalence { * Equivalence SAME_AGE = Equivalence.equals().onResultOf(GET_PERSON_AGE); * } *

- * + * *

* {@code function} will never be invoked with a null value. - * + * *

* Note that {@code function} must be consistent according to {@code this} * equivalence relation. That is, invoking {@link Function#apply} multiple times @@ -367,7 +367,7 @@ public abstract class Equivalence { * {@code Equivalence.identity().onResultOf(Functions.toStringFunction())} is * broken because it's not guaranteed that {@link Object#toString}) always * returns the same string instance. - * + * * @since 10.0 */ public final Equivalence onResultOf(Function function) { @@ -380,7 +380,7 @@ public abstract class Equivalence { * both contain the same number of elements, and each pair of corresponding * elements is equivalent according to {@code this}. Null iterables are * equivalent to one another. - * + * *

* Note that this method performs a similar function for equivalences as * {@link com.google.common.collect.Ordering#lexicographical} does for @@ -401,7 +401,7 @@ public abstract class Equivalence { * Returns a wrapper of {@code reference} that implements * {@link Wrapper#equals(Object) Object.equals()} such that * {@code wrap(a).equals(wrap(b))} if and only if {@code equivalent(a, b)}. - * + * * @since 10.0 */ public final Wrapper wrap(@Nullable S reference) { diff --git a/src/main/java/com/google/common/base/Functions.java b/src/main/java/com/google/common/base/Functions.java index 6ac96a89..5da52847 100644 --- a/src/main/java/com/google/common/base/Functions.java +++ b/src/main/java/com/google/common/base/Functions.java @@ -33,7 +33,7 @@ import com.google.common.annotations.GwtCompatible; *

* All methods return serializable functions as long as they're given * serializable parameters. - * + * *

* See the Guava User Guide article on the use @@ -366,7 +366,7 @@ public final class Functions { * Returns a function that always returns the result of invoking * {@link Supplier#get} on {@code * supplier}, regardless of its input. - * + * * @since 10.0 */ @Beta diff --git a/src/main/java/com/google/common/base/Joiner.java b/src/main/java/com/google/common/base/Joiner.java index e55cf581..b3f88aca 100644 --- a/src/main/java/com/google/common/base/Joiner.java +++ b/src/main/java/com/google/common/base/Joiner.java @@ -36,7 +36,7 @@ import com.google.common.annotations.GwtCompatible; * {@link Iterable}, varargs or even a {@link Map}) with a separator. It either * appends the results to an {@link Appendable} or returns them as a * {@link String}. Example: - * + * *

  *    {@code
  *
@@ -62,7 +62,7 @@ import com.google.common.annotations.GwtCompatible;
  * and use the new joiner instance returned by the method. This makes joiners
  * thread-safe, and safe to store as {@code
  * static final} constants.
- * 
+ *
  * 
  * {
  * 	@code
@@ -73,7 +73,7 @@ import com.google.common.annotations.GwtCompatible;
  * 	return joiner.join("wrong", null, "wrong");
  * }
  * 
- * + * *

* See the Guava User Guide article on {@code Joiner}. diff --git a/src/main/java/com/google/common/base/Objects.java b/src/main/java/com/google/common/base/Objects.java index 9915a3a7..11b9c529 100644 --- a/src/main/java/com/google/common/base/Objects.java +++ b/src/main/java/com/google/common/base/Objects.java @@ -330,7 +330,7 @@ public final class Objects { * This is useful for implementing {@link Object#hashCode()}. For example, in an * object that has three properties, {@code x}, {@code y}, and {@code z}, one * could write: - * + * *

 	 *    {@code
 	 * public int hashCode() {
@@ -390,7 +390,7 @@ public final class Objects {
 	 * 

* This is helpful for implementing {@link Object#toString()}. Specification by * example: - * + * *

 	 *    {@code
 	 * // Returns "ClassName{}"
diff --git a/src/main/java/com/google/common/base/Optional.java b/src/main/java/com/google/common/base/Optional.java
index 1c29e6c8..68246ebe 100644
--- a/src/main/java/com/google/common/base/Optional.java
+++ b/src/main/java/com/google/common/base/Optional.java
@@ -205,7 +205,7 @@ public abstract class Optional implements Serializable {
 	 * overly restrictive. However, the ideal signature,
 	 * {@code public  S or(S)}, is not legal Java. As a result, some
 	 * sensible operations involving subtypes are compile errors:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -225,7 +225,7 @@ public abstract class Optional implements Serializable {
 	 * to {@code
 	 * Optional} (where {@code Number} is the desired output type) solves
 	 * the problem:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/base/Preconditions.java b/src/main/java/com/google/common/base/Preconditions.java
index e414864f..c168c76d 100644
--- a/src/main/java/com/google/common/base/Preconditions.java
+++ b/src/main/java/com/google/common/base/Preconditions.java
@@ -28,7 +28,7 @@ import com.google.common.annotations.GwtCompatible;
  * method throws an unchecked exception, which helps the calling method
  * communicate to its caller that that caller has made a mistake.
  * Example:
- * 
+ *
  * 
  *    {@code
  *
@@ -62,7 +62,7 @@ import com.google.common.annotations.GwtCompatible;
  * production). In some circumstances these wasted CPU cycles and allocations
  * can add up to a real problem. Performance-sensitive precondition checks can
  * always be converted to the customary form:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/base/Splitter.java b/src/main/java/com/google/common/base/Splitter.java
index 5a1a62c2..816c2dd3 100644
--- a/src/main/java/com/google/common/base/Splitter.java
+++ b/src/main/java/com/google/common/base/Splitter.java
@@ -45,7 +45,7 @@ import com.google.common.annotations.GwtIncompatible;
  *
  * 

* For example, this expression: - * + * *

  *    {@code
  *
@@ -59,7 +59,7 @@ import com.google.common.annotations.GwtIncompatible;
  * 

* By default, {@code Splitter}'s behavior is simplistic and unassuming. The * following expression: - * + * *

  *    {@code
  *
@@ -70,7 +70,7 @@ import com.google.common.annotations.GwtIncompatible;
  * ... yields the substrings {@code [" foo", "", "", "  bar ", ""]}. If this is
  * not the desired behavior, use configuration methods to obtain a new
  * splitter instance with modified behavior:
- * 
+ *
  * 
  * {
  * 	@code
@@ -88,7 +88,7 @@ import com.google.common.annotations.GwtIncompatible;
  * Warning: Splitter instances are immutable. Invoking a configuration
  * method has no effect on the receiving instance; you must store and use the
  * new splitter instance it returns instead.
- * 
+ *
  * 
  * {
  * 	@code
diff --git a/src/main/java/com/google/common/base/Throwables.java b/src/main/java/com/google/common/base/Throwables.java
index bef79732..5d0d1fa1 100644
--- a/src/main/java/com/google/common/base/Throwables.java
+++ b/src/main/java/com/google/common/base/Throwables.java
@@ -74,7 +74,7 @@ public final class Throwables {
 	 * Returns the innermost cause of {@code throwable}. The first throwable in a
 	 * chain provides context from when the error or exception was initially
 	 * detected. Example usage:
-	 * 
+	 *
 	 * 
 	 * assertEquals("Unable to assign a customer id", Throwables.getRootCause(e).getMessage());
 	 * 
@@ -106,7 +106,7 @@ public final class Throwables { * This method always throws an exception. The {@code RuntimeException} return * type is only for client code to make Java type system happy in case a return * value is required by the enclosing method. Example usage: - * + * *
 	 * T doSomething() {
 	 * 	try {
@@ -131,7 +131,7 @@ public final class Throwables {
 	/**
 	 * Propagates {@code throwable} exactly as-is, if and only if it is an instance
 	 * of {@code declaredType}. Example usage:
-	 * 
+	 *
 	 * 
 	 * try {
 	 * 	someMethodThatCouldThrowAnything();
@@ -155,7 +155,7 @@ public final class Throwables {
 	/**
 	 * Propagates {@code throwable} exactly as-is, if and only if it is an instance
 	 * of {@link RuntimeException} or {@link Error}. Example usage:
-	 * 
+	 *
 	 * 
 	 * try {
 	 * 	someMethodThatCouldThrowAnything();
@@ -176,7 +176,7 @@ public final class Throwables {
 	 * Propagates {@code throwable} exactly as-is, if and only if it is an instance
 	 * of {@link RuntimeException}, {@link Error}, or {@code declaredType}. Example
 	 * usage:
-	 * 
+	 *
 	 * 
 	 * try {
 	 * 	someMethodThatCouldThrowAnything();
diff --git a/src/main/java/com/google/common/base/Verify.java b/src/main/java/com/google/common/base/Verify.java
index a471014a..3fd4a7a1 100644
--- a/src/main/java/com/google/common/base/Verify.java
+++ b/src/main/java/com/google/common/base/Verify.java
@@ -28,7 +28,7 @@ import com.google.common.annotations.GwtCompatible;
  * assertions, except that they are always enabled. These methods should be
  * used instead of Java assertions whenever there is a chance the check may fail
  * "in real life". Example:
- * 
+ *
  * 
  * {
  * 	@code
@@ -74,7 +74,7 @@ import com.google.common.annotations.GwtCompatible;
  * eagerly, and autoboxing and varargs array creation may happen as well, even
  * when the verification succeeds and the message ends up unneeded.
  * Performance-sensitive verification checks should continue to use usual form:
- * 
+ *
  * 
  * {
  * 	@code
diff --git a/src/main/java/com/google/common/collect/AbstractIterator.java b/src/main/java/com/google/common/collect/AbstractIterator.java
index ae130ead..cea90ab0 100644
--- a/src/main/java/com/google/common/collect/AbstractIterator.java
+++ b/src/main/java/com/google/common/collect/AbstractIterator.java
@@ -40,7 +40,7 @@ import com.google.common.annotations.GwtCompatible;
  * 

* Another example is an iterator that skips over null elements in a backing * iterator. This could be implemented as: - * + * *

  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/AbstractMultimap.java b/src/main/java/com/google/common/collect/AbstractMultimap.java
index 2520a749..946e65ca 100644
--- a/src/main/java/com/google/common/collect/AbstractMultimap.java
+++ b/src/main/java/com/google/common/collect/AbstractMultimap.java
@@ -32,7 +32,7 @@ import com.google.common.annotations.GwtCompatible;
 /**
  * A skeleton {@code Multimap} implementation, not necessarily in terms of a
  * {@code Map}.
- * 
+ *
  * @author Louis Wasserman
  */
 @GwtCompatible
diff --git a/src/main/java/com/google/common/collect/AbstractNavigableMap.java b/src/main/java/com/google/common/collect/AbstractNavigableMap.java
index 9955ee7a..523d3839 100644
--- a/src/main/java/com/google/common/collect/AbstractNavigableMap.java
+++ b/src/main/java/com/google/common/collect/AbstractNavigableMap.java
@@ -29,7 +29,7 @@ import javax.annotation.Nullable;
 
 /**
  * Skeletal implementation of {@link NavigableMap}.
- * 
+ *
  * @author Louis Wasserman
  */
 abstract class AbstractNavigableMap extends AbstractMap implements NavigableMap {
diff --git a/src/main/java/com/google/common/collect/AbstractSequentialIterator.java b/src/main/java/com/google/common/collect/AbstractSequentialIterator.java
index 2c1f0c15..75561e44 100644
--- a/src/main/java/com/google/common/collect/AbstractSequentialIterator.java
+++ b/src/main/java/com/google/common/collect/AbstractSequentialIterator.java
@@ -30,7 +30,7 @@ import com.google.common.annotations.GwtCompatible;
  *
  * 

* Example: - * + * *

  * {
  * 	@code
diff --git a/src/main/java/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java b/src/main/java/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java
index f1d5b67a..1068692d 100644
--- a/src/main/java/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java
+++ b/src/main/java/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java
@@ -24,11 +24,11 @@ import com.google.common.annotations.GwtCompatible;
 
 /**
  * Basic implementation of a {@link SortedSetMultimap} with a sorted key set.
- * 
+ *
  * This superclass allows {@code TreeMultimap} to override methods to return
  * navigable set and map types in non-GWT only, while GWT code will inherit the
  * SortedMap/SortedSet overrides.
- * 
+ *
  * @author Louis Wasserman
  */
 @GwtCompatible
diff --git a/src/main/java/com/google/common/collect/AbstractTable.java b/src/main/java/com/google/common/collect/AbstractTable.java
index 063c9886..7af8ad7b 100644
--- a/src/main/java/com/google/common/collect/AbstractTable.java
+++ b/src/main/java/com/google/common/collect/AbstractTable.java
@@ -28,7 +28,7 @@ import com.google.common.annotations.GwtCompatible;
 /**
  * Skeletal, implementation-agnostic implementation of the {@link Table}
  * interface.
- * 
+ *
  * @author Louis Wasserman
  */
 @GwtCompatible
diff --git a/src/main/java/com/google/common/collect/ArrayListMultimap.java b/src/main/java/com/google/common/collect/ArrayListMultimap.java
index c75b8b79..0825a6ce 100644
--- a/src/main/java/com/google/common/collect/ArrayListMultimap.java
+++ b/src/main/java/com/google/common/collect/ArrayListMultimap.java
@@ -61,7 +61,7 @@ import com.google.common.annotations.VisibleForTesting;
  * multimap. Concurrent read operations will work correctly. To allow concurrent
  * update operations, wrap your multimap with a call to
  * {@link Multimaps#synchronizedListMultimap}.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/BiMap.java b/src/main/java/com/google/common/collect/BiMap.java index 7afce11a..f41576a2 100644 --- a/src/main/java/com/google/common/collect/BiMap.java +++ b/src/main/java/com/google/common/collect/BiMap.java @@ -28,7 +28,7 @@ import com.google.common.annotations.GwtCompatible; * its values as well as that of its keys. This constraint enables bimaps to * support an "inverse view", which is another bimap containing the same entries * as this bimap but with reversed keys and values. - * + * *

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/CartesianList.java b/src/main/java/com/google/common/collect/CartesianList.java index 0fcd819c..decd8894 100644 --- a/src/main/java/com/google/common/collect/CartesianList.java +++ b/src/main/java/com/google/common/collect/CartesianList.java @@ -28,7 +28,7 @@ import com.google.common.math.IntMath; /** * Implementation of {@link Lists#cartesianProduct(List)}. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/ClassToInstanceMap.java b/src/main/java/com/google/common/collect/ClassToInstanceMap.java index 3945eddc..090781dc 100644 --- a/src/main/java/com/google/common/collect/ClassToInstanceMap.java +++ b/src/main/java/com/google/common/collect/ClassToInstanceMap.java @@ -32,7 +32,7 @@ import com.google.common.annotations.GwtCompatible; * Like any other {@code Map}, this map may contain entries for * primitive types, and a primitive type and its corresponding wrapper type may * map to different values. - * + * *

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Collections2.java b/src/main/java/com/google/common/collect/Collections2.java index 146d0b1a..fe2cc270 100644 --- a/src/main/java/com/google/common/collect/Collections2.java +++ b/src/main/java/com/google/common/collect/Collections2.java @@ -537,7 +537,7 @@ public final class Collections2 { * *

* Examples: - * + * *

 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/ComparisonChain.java b/src/main/java/com/google/common/collect/ComparisonChain.java
index dcf1716a..c980d39e 100644
--- a/src/main/java/com/google/common/collect/ComparisonChain.java
+++ b/src/main/java/com/google/common/collect/ComparisonChain.java
@@ -27,7 +27,7 @@ import com.google.common.primitives.Longs;
 
 /**
  * A utility for performing a chained comparison statement. For example:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/Constraint.java b/src/main/java/com/google/common/collect/Constraint.java
index 64f1aed5..3cfd5f0e 100644
--- a/src/main/java/com/google/common/collect/Constraint.java
+++ b/src/main/java/com/google/common/collect/Constraint.java
@@ -22,7 +22,7 @@ import com.google.common.annotations.GwtCompatible;
  * A constraint that an element must satisfy in order to be added to a
  * collection. For example, {@link Constraints#notNull()}, which prevents a
  * collection from including any null elements, could be implemented like this:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/ContiguousSet.java b/src/main/java/com/google/common/collect/ContiguousSet.java
index d9252f25..b8b04965 100644
--- a/src/main/java/com/google/common/collect/ContiguousSet.java
+++ b/src/main/java/com/google/common/collect/ContiguousSet.java
@@ -113,7 +113,8 @@ public abstract class ContiguousSet extends ImmutableSorte
 	 * These methods perform most headSet, subSet, and tailSet logic, besides
 	 * parameter validation.
 	 */
-	/* @Override */ abstract ContiguousSet headSetImpl(C toElement, boolean inclusive);
+	/* @Override */ @Override
+	abstract ContiguousSet headSetImpl(C toElement, boolean inclusive);
 
 	/**
 	 * Returns the set of values that are contained in both this set and the other.
@@ -169,8 +170,8 @@ public abstract class ContiguousSet extends ImmutableSorte
 		return subSetImpl(fromElement, true, toElement, false);
 	}
 
-	/* @Override */ abstract ContiguousSet subSetImpl(C fromElement, boolean fromInclusive, C toElement,
-			boolean toInclusive);
+	/* @Override */ @Override
+	abstract ContiguousSet subSetImpl(C fromElement, boolean fromInclusive, C toElement, boolean toInclusive);
 
 	@Override
 	public ContiguousSet tailSet(C fromElement) {
@@ -186,7 +187,8 @@ public abstract class ContiguousSet extends ImmutableSorte
 		return tailSetImpl(checkNotNull(fromElement), inclusive);
 	}
 
-	/* @Override */ abstract ContiguousSet tailSetImpl(C fromElement, boolean inclusive);
+	/* @Override */ @Override
+	abstract ContiguousSet tailSetImpl(C fromElement, boolean inclusive);
 
 	/**
 	 * Returns a short-hand representation of the contents such as
diff --git a/src/main/java/com/google/common/collect/DescendingMultiset.java b/src/main/java/com/google/common/collect/DescendingMultiset.java
index 6876ac19..c302190c 100644
--- a/src/main/java/com/google/common/collect/DescendingMultiset.java
+++ b/src/main/java/com/google/common/collect/DescendingMultiset.java
@@ -26,7 +26,7 @@ import com.google.common.annotations.GwtCompatible;
 /**
  * A skeleton implementation of a descending multiset. Only needs
  * {@code forwardMultiset()} and {@code entryIterator()}.
- * 
+ *
  * @author Louis Wasserman
  */
 @GwtCompatible(emulated = true)
@@ -148,4 +148,4 @@ abstract class DescendingMultiset extends ForwardingMultiset implements So
 	public String toString() {
 		return entrySet().toString();
 	}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/google/common/collect/DiscreteDomain.java b/src/main/java/com/google/common/collect/DiscreteDomain.java
index 3e58bee8..e94ace13 100644
--- a/src/main/java/com/google/common/collect/DiscreteDomain.java
+++ b/src/main/java/com/google/common/collect/DiscreteDomain.java
@@ -182,7 +182,7 @@ public abstract class DiscreteDomain {
 
 	/**
 	 * Returns the discrete domain for values of type {@code Integer}.
-	 * 
+	 *
 	 * @since 14.0 (since 10.0 as {@code DiscreteDomains.integers()})
 	 */
 	public static DiscreteDomain integers() {
@@ -191,7 +191,7 @@ public abstract class DiscreteDomain {
 
 	/**
 	 * Returns the discrete domain for values of type {@code Long}.
-	 * 
+	 *
 	 * @since 14.0 (since 10.0 as {@code DiscreteDomains.longs()})
 	 */
 	public static DiscreteDomain longs() {
diff --git a/src/main/java/com/google/common/collect/EmptyContiguousSet.java b/src/main/java/com/google/common/collect/EmptyContiguousSet.java
index 08f1512f..13829a9a 100644
--- a/src/main/java/com/google/common/collect/EmptyContiguousSet.java
+++ b/src/main/java/com/google/common/collect/EmptyContiguousSet.java
@@ -54,6 +54,7 @@ final class EmptyContiguousSet extends ContiguousSet {
 		return ImmutableList.of();
 	}
 
+	@Override
 	@GwtIncompatible("NavigableSet")
 	ImmutableSortedSet createDescendingSet() {
 		return new EmptyImmutableSortedSet(Ordering.natural().reverse());
diff --git a/src/main/java/com/google/common/collect/EnumBiMap.java b/src/main/java/com/google/common/collect/EnumBiMap.java
index 624376e3..b30cee60 100644
--- a/src/main/java/com/google/common/collect/EnumBiMap.java
+++ b/src/main/java/com/google/common/collect/EnumBiMap.java
@@ -32,7 +32,7 @@ import com.google.common.annotations.GwtIncompatible;
  * A {@code BiMap} backed by two {@code EnumMap} instances. Null keys and values
  * are not permitted. An {@code EnumBiMap} and its inverse are both
  * serializable.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/EnumHashBiMap.java b/src/main/java/com/google/common/collect/EnumHashBiMap.java index 9af77207..ae54f298 100644 --- a/src/main/java/com/google/common/collect/EnumHashBiMap.java +++ b/src/main/java/com/google/common/collect/EnumHashBiMap.java @@ -35,7 +35,7 @@ import com.google.common.annotations.GwtIncompatible; * a {@code HashMap} instance for values-to-keys. Null keys are not permitted, * but null values are. An {@code EnumHashBiMap} and its inverse are both * serializable. - * + * *

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/EnumMultiset.java b/src/main/java/com/google/common/collect/EnumMultiset.java index 30609bbd..7cde4b69 100644 --- a/src/main/java/com/google/common/collect/EnumMultiset.java +++ b/src/main/java/com/google/common/collect/EnumMultiset.java @@ -27,7 +27,7 @@ import com.google.common.annotations.GwtIncompatible; /** * Multiset implementation backed by an {@link EnumMap}. - * + * *

* See the Guava User Guide article on @@ -68,7 +68,7 @@ public final class EnumMultiset> extends AbstractMapBasedMulti * Returns a new {@code EnumMultiset} instance containing the given elements. * Unlike {@link EnumMultiset#create(Iterable)}, this method does not produce an * exception on an empty iterable. - * + * * @since 14.0 */ public static > EnumMultiset create(Iterable elements, Class type) { diff --git a/src/main/java/com/google/common/collect/FilteredEntryMultimap.java b/src/main/java/com/google/common/collect/FilteredEntryMultimap.java index d0f549ec..a6c86fa4 100644 --- a/src/main/java/com/google/common/collect/FilteredEntryMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredEntryMultimap.java @@ -38,7 +38,7 @@ import com.google.common.collect.Maps.ImprovedAbstractMap; /** * Implementation of {@link Multimaps#filterEntries(Multimap, Predicate)}. - * + * * @author Jared Levy * @author Louis Wasserman */ diff --git a/src/main/java/com/google/common/collect/FilteredEntrySetMultimap.java b/src/main/java/com/google/common/collect/FilteredEntrySetMultimap.java index 44c3ade4..171c34e5 100644 --- a/src/main/java/com/google/common/collect/FilteredEntrySetMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredEntrySetMultimap.java @@ -24,7 +24,7 @@ import com.google.common.base.Predicate; /** * Implementation of {@link Multimaps#filterEntries(SetMultimap, Predicate)}. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FilteredKeyListMultimap.java b/src/main/java/com/google/common/collect/FilteredKeyListMultimap.java index d64a8c77..1b7f058b 100644 --- a/src/main/java/com/google/common/collect/FilteredKeyListMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredKeyListMultimap.java @@ -25,7 +25,7 @@ import com.google.common.base.Predicate; /** * Implementation of {@link Multimaps#filterKeys(ListMultimap, Predicate)}. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FilteredKeySetMultimap.java b/src/main/java/com/google/common/collect/FilteredKeySetMultimap.java index 21903ade..84c89793 100644 --- a/src/main/java/com/google/common/collect/FilteredKeySetMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredKeySetMultimap.java @@ -26,7 +26,7 @@ import com.google.common.base.Predicate; /** * Implementation of {@link Multimaps#filterKeys(SetMultimap, Predicate)}. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FilteredMultimap.java b/src/main/java/com/google/common/collect/FilteredMultimap.java index 3521fd25..57ac02d8 100644 --- a/src/main/java/com/google/common/collect/FilteredMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredMultimap.java @@ -23,7 +23,7 @@ import com.google.common.base.Predicate; /** * An interface for all filtered multimap types. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FilteredMultimapValues.java b/src/main/java/com/google/common/collect/FilteredMultimapValues.java index ecef3955..24933dc0 100644 --- a/src/main/java/com/google/common/collect/FilteredMultimapValues.java +++ b/src/main/java/com/google/common/collect/FilteredMultimapValues.java @@ -31,7 +31,7 @@ import com.google.common.base.Predicates; /** * Implementation for {@link FilteredMultimap#values()}. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FilteredSetMultimap.java b/src/main/java/com/google/common/collect/FilteredSetMultimap.java index cfa921ef..15072c7b 100644 --- a/src/main/java/com/google/common/collect/FilteredSetMultimap.java +++ b/src/main/java/com/google/common/collect/FilteredSetMultimap.java @@ -20,7 +20,7 @@ import com.google.common.annotations.GwtCompatible; /** * A supertype for filtered {@link SetMultimap} implementations. - * + * * @author Louis Wasserman */ @GwtCompatible diff --git a/src/main/java/com/google/common/collect/FluentIterable.java b/src/main/java/com/google/common/collect/FluentIterable.java index 4e32094d..95b6ddec 100644 --- a/src/main/java/com/google/common/collect/FluentIterable.java +++ b/src/main/java/com/google/common/collect/FluentIterable.java @@ -54,7 +54,7 @@ import com.google.common.base.Predicate; * Here is an example that merges the lists returned by two separate database * calls, transforms it by invoking {@code toString()} on each element, and * returns the first 10 elements as an {@code ImmutableList}: - * + * *

  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/ForwardingMultiset.java b/src/main/java/com/google/common/collect/ForwardingMultiset.java
index 9a8cb473..547f3e1e 100644
--- a/src/main/java/com/google/common/collect/ForwardingMultiset.java
+++ b/src/main/java/com/google/common/collect/ForwardingMultiset.java
@@ -135,7 +135,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * A sensible definition of {@link #add(Object)} in terms of
 	 * {@link #add(Object, int)}. If you override {@link #add(Object, int)}, you may
 	 * wish to override {@link #add(Object)} to forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected boolean standardAdd(E element) {
@@ -148,7 +148,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * {@link #add(Object)} and {@link #add(Object, int)}. If you override either of
 	 * these methods, you may wish to override {@link #addAll(Collection)} to
 	 * forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	@Beta
@@ -173,7 +173,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * A sensible definition of {@link #contains} in terms of {@link #count}. If you
 	 * override {@link #count}, you may wish to override {@link #contains} to
 	 * forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	@Override
@@ -185,7 +185,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * A sensible, albeit inefficient, definition of {@link #count} in terms of
 	 * {@link #entrySet}. If you override {@link #entrySet}, you may wish to
 	 * override {@link #count} to forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	@Beta
@@ -225,7 +225,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * A sensible definition of {@link #iterator} in terms of {@link #entrySet} and
 	 * {@link #remove(Object)}. If you override either of these methods, you may
 	 * wish to override {@link #iterator} to forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected Iterator standardIterator() {
@@ -237,7 +237,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * {@link #remove(Object, int)}. If you override {@link #remove(Object, int)},
 	 * you may wish to override {@link #remove(Object)} to forward to this
 	 * implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	@Override
@@ -277,7 +277,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * {@link #remove(Object, int)}. {@link #entrySet()}. If you override any of
 	 * these methods, you may wish to override {@link #setCount(Object, int)} to
 	 * forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected int standardSetCount(E element, int count) {
@@ -300,7 +300,7 @@ public abstract class ForwardingMultiset extends ForwardingCollection impl
 	 * A sensible, albeit inefficient, definition of {@link #size} in terms of
 	 * {@link #entrySet}. If you override {@link #entrySet}, you may wish to
 	 * override {@link #size} to forward to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected int standardSize() {
diff --git a/src/main/java/com/google/common/collect/ForwardingQueue.java b/src/main/java/com/google/common/collect/ForwardingQueue.java
index 1604a2cd..0a321461 100644
--- a/src/main/java/com/google/common/collect/ForwardingQueue.java
+++ b/src/main/java/com/google/common/collect/ForwardingQueue.java
@@ -83,7 +83,7 @@ public abstract class ForwardingQueue extends ForwardingCollection impleme
 	 * A sensible definition of {@link #offer} in terms of {@link #add}. If you
 	 * override {@link #add}, you may wish to override {@link #offer} to forward to
 	 * this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected boolean standardOffer(E e) {
@@ -98,7 +98,7 @@ public abstract class ForwardingQueue extends ForwardingCollection impleme
 	 * A sensible definition of {@link #peek} in terms of {@link #element}. If you
 	 * override {@link #element}, you may wish to override {@link #peek} to forward
 	 * to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected E standardPeek() {
@@ -113,7 +113,7 @@ public abstract class ForwardingQueue extends ForwardingCollection impleme
 	 * A sensible definition of {@link #poll} in terms of {@link #remove}. If you
 	 * override {@link #remove}, you may wish to override {@link #poll} to forward
 	 * to this implementation.
-	 * 
+	 *
 	 * @since 7.0
 	 */
 	protected E standardPoll() {
diff --git a/src/main/java/com/google/common/collect/HashBasedTable.java b/src/main/java/com/google/common/collect/HashBasedTable.java
index 27dd8981..ed088180 100644
--- a/src/main/java/com/google/common/collect/HashBasedTable.java
+++ b/src/main/java/com/google/common/collect/HashBasedTable.java
@@ -47,7 +47,7 @@ import com.google.common.base.Supplier;
  * Note that this implementation is not synchronized. If multiple threads access
  * this table concurrently and one of the threads modifies the table, it must be
  * synchronized externally.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/HashMultiset.java b/src/main/java/com/google/common/collect/HashMultiset.java index 0da02ae9..2107a059 100644 --- a/src/main/java/com/google/common/collect/HashMultiset.java +++ b/src/main/java/com/google/common/collect/HashMultiset.java @@ -57,11 +57,11 @@ public final class HashMultiset extends AbstractMapBasedMultiset { /** * Creates a new {@code HashMultiset} containing the specified elements. - * + * *

* This implementation is highly efficient when {@code elements} is itself a * {@link Multiset}. - * + * * @param elements the elements that the multiset should contain */ public static HashMultiset create(Iterable elements) { diff --git a/src/main/java/com/google/common/collect/ImmutableBiMap.java b/src/main/java/com/google/common/collect/ImmutableBiMap.java index 7a8a568a..a0ceca03 100644 --- a/src/main/java/com/google/common/collect/ImmutableBiMap.java +++ b/src/main/java/com/google/common/collect/ImmutableBiMap.java @@ -45,7 +45,7 @@ public abstract class ImmutableBiMap extends ImmutableMap implements /** * A builder for creating immutable bimap instances, especially {@code public * static final} bimaps ("constant bimaps"). Example: - * + * *

 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableClassToInstanceMap.java b/src/main/java/com/google/common/collect/ImmutableClassToInstanceMap.java
index 777b0a1e..46d23998 100644
--- a/src/main/java/com/google/common/collect/ImmutableClassToInstanceMap.java
+++ b/src/main/java/com/google/common/collect/ImmutableClassToInstanceMap.java
@@ -37,7 +37,7 @@ public final class ImmutableClassToInstanceMap extends ForwardingMap
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableList.java b/src/main/java/com/google/common/collect/ImmutableList.java
index 3b0f037b..aaeb18d9 100644
--- a/src/main/java/com/google/common/collect/ImmutableList.java
+++ b/src/main/java/com/google/common/collect/ImmutableList.java
@@ -69,7 +69,7 @@ public abstract class ImmutableList extends ImmutableCollection implements
 	/**
 	 * A builder for creating immutable list instances, especially {@code public
 	 * static final} lists ("constant lists"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableListMultimap.java b/src/main/java/com/google/common/collect/ImmutableListMultimap.java
index cde988c6..4be39550 100644
--- a/src/main/java/com/google/common/collect/ImmutableListMultimap.java
+++ b/src/main/java/com/google/common/collect/ImmutableListMultimap.java
@@ -61,7 +61,7 @@ public class ImmutableListMultimap extends ImmutableMultimap impleme
 	/**
 	 * A builder for creating immutable {@code ListMultimap} instances, especially
 	 * {@code public static final} multimaps ("constant multimaps"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableMap.java b/src/main/java/com/google/common/collect/ImmutableMap.java
index b2acd433..f3c79ac0 100644
--- a/src/main/java/com/google/common/collect/ImmutableMap.java
+++ b/src/main/java/com/google/common/collect/ImmutableMap.java
@@ -67,7 +67,7 @@ public abstract class ImmutableMap implements Map, Serializable {
 	/**
 	 * A builder for creating immutable map instances, especially {@code public
 	 * static final} maps ("constant maps"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableMultimap.java b/src/main/java/com/google/common/collect/ImmutableMultimap.java
index 9784f547..82db300e 100644
--- a/src/main/java/com/google/common/collect/ImmutableMultimap.java
+++ b/src/main/java/com/google/common/collect/ImmutableMultimap.java
@@ -70,7 +70,7 @@ public abstract class ImmutableMultimap extends AbstractMultimap imp
 	/**
 	 * A builder for creating immutable multimap instances, especially
 	 * {@code public static final} multimaps ("constant multimaps"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableMultiset.java b/src/main/java/com/google/common/collect/ImmutableMultiset.java
index b3d603f9..6cf2a9b0 100644
--- a/src/main/java/com/google/common/collect/ImmutableMultiset.java
+++ b/src/main/java/com/google/common/collect/ImmutableMultiset.java
@@ -55,7 +55,7 @@ public abstract class ImmutableMultiset extends ImmutableCollection implem
 	/**
 	 * A builder for creating immutable multiset instances, especially {@code
 	 * public static final} multisets ("constant multisets"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -248,6 +248,7 @@ public abstract class ImmutableMultiset extends ImmutableCollection implem
 		// We can't label this with @Override, because it doesn't override anything
 		// in the GWT emulated version.
 		// TODO(cpovirk): try making all copies of this method @GwtIncompatible instead
+		@Override
 		Object writeReplace() {
 			return new EntrySetSerializedForm(ImmutableMultiset.this);
 		}
@@ -597,6 +598,7 @@ public abstract class ImmutableMultiset extends ImmutableCollection implem
 
 	// We can't label this with @Override, because it doesn't override anything
 	// in the GWT emulated version.
+	@Override
 	Object writeReplace() {
 		return new SerializedForm(this);
 	}
diff --git a/src/main/java/com/google/common/collect/ImmutableSet.java b/src/main/java/com/google/common/collect/ImmutableSet.java
index 2c4cbe04..526902fb 100644
--- a/src/main/java/com/google/common/collect/ImmutableSet.java
+++ b/src/main/java/com/google/common/collect/ImmutableSet.java
@@ -80,7 +80,7 @@ public abstract class ImmutableSet extends ImmutableCollection implements
 	/**
 	 * A builder for creating immutable set instances, especially {@code public
 	 * static final} sets ("constant sets"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableSetMultimap.java b/src/main/java/com/google/common/collect/ImmutableSetMultimap.java
index ba420a31..2edde589 100644
--- a/src/main/java/com/google/common/collect/ImmutableSetMultimap.java
+++ b/src/main/java/com/google/common/collect/ImmutableSetMultimap.java
@@ -70,7 +70,7 @@ public class ImmutableSetMultimap extends ImmutableMultimap implemen
 	/**
 	 * A builder for creating immutable {@code SetMultimap} instances, especially
 	 * {@code public static final} multimaps ("constant multimaps"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -426,6 +426,7 @@ public class ImmutableSetMultimap extends ImmutableMultimap implemen
 	 *
 	 * @since 11.0
 	 */
+	@Override
 	public ImmutableSetMultimap inverse() {
 		ImmutableSetMultimap result = inverse;
 		return (result == null) ? (inverse = invert()) : result;
diff --git a/src/main/java/com/google/common/collect/ImmutableSortedMap.java b/src/main/java/com/google/common/collect/ImmutableSortedMap.java
index bc487797..a9620e13 100644
--- a/src/main/java/com/google/common/collect/ImmutableSortedMap.java
+++ b/src/main/java/com/google/common/collect/ImmutableSortedMap.java
@@ -64,7 +64,7 @@ public abstract class ImmutableSortedMap extends ImmutableSortedMapFauxver
 	/**
 	 * A builder for creating immutable sorted map instances, especially {@code
 	 * public static final} maps ("constant maps"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/src/main/java/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java
index a705e498..ad2674a8 100644
--- a/src/main/java/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java
+++ b/src/main/java/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java
@@ -21,7 +21,7 @@ package com.google.common.collect;
  *
  * 
  *    {@code
- * 
+ *
  *   List objects = ...;
  *   // Sort them:
  *   Set sorted = ImmutableSortedMultiset.copyOf(objects);
diff --git a/src/main/java/com/google/common/collect/ImmutableSortedSet.java b/src/main/java/com/google/common/collect/ImmutableSortedSet.java
index 57d76f4e..764af51c 100644
--- a/src/main/java/com/google/common/collect/ImmutableSortedSet.java
+++ b/src/main/java/com/google/common/collect/ImmutableSortedSet.java
@@ -64,7 +64,7 @@ import com.google.common.annotations.GwtIncompatible;
  * use {@link Object#equals} to determine if two elements are equivalent.
  * Instead, with an explicit comparator, the following relation determines
  * whether elements {@code x} and {@code y} are equivalent:
- * 
+ *
  * 
  *    {@code
  *
@@ -74,7 +74,7 @@ import com.google.common.annotations.GwtIncompatible;
  * 

* With natural ordering of elements, the following relation determines whether * two elements are equivalent: - * + * *

  *    {@code
  *
@@ -112,7 +112,7 @@ public abstract class ImmutableSortedSet extends ImmutableSortedSetFauxveride
 	 * A builder for creating immutable sorted set instances, especially {@code
 	 * public static final} sets ("constant sets"), with a given comparator.
 	 * Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -395,7 +395,7 @@ public abstract class ImmutableSortedSet extends ImmutableSortedSetFauxveride
 	 * {@link #copyOfSorted} instead. This method iterates over {@code elements} at
 	 * most once.
 	 *
-	 * 
+	 *
 	 * 

* Note that if {@code s} is a {@code Set}, then {@code * ImmutableSortedSet.copyOf(s)} returns an {@code ImmutableSortedSet} diff --git a/src/main/java/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/src/main/java/com/google/common/collect/ImmutableSortedSetFauxverideShim.java index c0a32e8f..4c26668a 100644 --- a/src/main/java/com/google/common/collect/ImmutableSortedSetFauxverideShim.java +++ b/src/main/java/com/google/common/collect/ImmutableSortedSetFauxverideShim.java @@ -20,7 +20,7 @@ package com.google.common.collect; * "Overrides" the {@link ImmutableSet} static methods that lack * {@link ImmutableSortedSet} equivalents with deprecated, exception-throwing * versions. This prevents accidents like the following: - * + * *

  *    {@code
  *
@@ -164,7 +164,7 @@ abstract class ImmutableSortedSetFauxverideShim extends ImmutableSet {
 	 * with that version and with any other compilers that interpret the JLS
 	 * similarly, there is no definition of copyOf() here, and the definition in
 	 * ImmutableSortedSet matches that in ImmutableSet.
-	 * 
+	 *
 	 * The result is that ImmutableSortedSet.copyOf() may be called on
 	 * non-Comparable elements. We have not discovered a better solution. In
 	 * retrospect, the static factory methods should have gone in a separate class
diff --git a/src/main/java/com/google/common/collect/ImmutableTable.java b/src/main/java/com/google/common/collect/ImmutableTable.java
index 11de739e..bd2628e3 100644
--- a/src/main/java/com/google/common/collect/ImmutableTable.java
+++ b/src/main/java/com/google/common/collect/ImmutableTable.java
@@ -51,7 +51,7 @@ public abstract class ImmutableTable extends AbstractTable {
 	/**
 	 * A builder for creating immutable table instances, especially {@code public
 	 * static final} tables ("constant tables"). Example:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/Iterators.java b/src/main/java/com/google/common/collect/Iterators.java
index ddaa5b07..282042de 100644
--- a/src/main/java/com/google/common/collect/Iterators.java
+++ b/src/main/java/com/google/common/collect/Iterators.java
@@ -1069,7 +1069,7 @@ public final class Iterators {
 	 * next} do not affect the iteration, and hence return the same object each
 	 * time. A subsequent call to {@code next} is guaranteed to return the same
 	 * object again. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/LinkedHashMultiset.java b/src/main/java/com/google/common/collect/LinkedHashMultiset.java
index 678867d6..1c71f1b0 100644
--- a/src/main/java/com/google/common/collect/LinkedHashMultiset.java
+++ b/src/main/java/com/google/common/collect/LinkedHashMultiset.java
@@ -31,7 +31,7 @@ import com.google.common.annotations.GwtIncompatible;
  * element, those instances are consecutive in the iteration order. If all
  * occurrences of an element are removed, after which that element is added to
  * the multiset, the element will appear at the end of the iteration.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/LinkedListMultimap.java b/src/main/java/com/google/common/collect/LinkedListMultimap.java index e0367525..5999f3b6 100644 --- a/src/main/java/com/google/common/collect/LinkedListMultimap.java +++ b/src/main/java/com/google/common/collect/LinkedListMultimap.java @@ -47,7 +47,7 @@ import com.google.common.annotations.GwtIncompatible; * iteration order for both keys and values. The iteration order is preserved * across non-distinct key values. For example, for the following multimap * definition: - * + * *

  * {
  * 	@code
@@ -63,7 +63,7 @@ import com.google.common.annotations.GwtIncompatible;
  * and similarly for {@link #entries()}. Unlike {@link LinkedHashMultimap}, the
  * iteration order is kept consistent between keys, entries and values. For
  * example, calling:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/ListMultimap.java b/src/main/java/com/google/common/collect/ListMultimap.java
index 7c574c1a..83bea57b 100644
--- a/src/main/java/com/google/common/collect/ListMultimap.java
+++ b/src/main/java/com/google/common/collect/ListMultimap.java
@@ -33,7 +33,7 @@ import com.google.common.annotations.GwtCompatible;
  * The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods each
  * return a {@link List} of values. Though the method signature doesn't say so
  * explicitly, the map returned by {@link #asMap} has {@code List} values.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Lists.java b/src/main/java/com/google/common/collect/Lists.java index 74934bdf..5b181d97 100644 --- a/src/main/java/com/google/common/collect/Lists.java +++ b/src/main/java/com/google/common/collect/Lists.java @@ -583,7 +583,7 @@ public final class Lists { * each of the given lists in order; the "n-ary * Cartesian * product" of the lists. For example: - * + * *

 	 *    {@code
 	 *
@@ -606,7 +606,7 @@ public final class Lists {
 	 * 

* The result is guaranteed to be in the "traditional", lexicographical order * for Cartesian products that you would get from nesting for loops: - * + * *

 	 *    {@code
 	 *
@@ -654,7 +654,7 @@ public final class Lists {
 	 * each of the given lists in order; the "n-ary
 	 * Cartesian
 	 * product" of the lists. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -677,7 +677,7 @@ public final class Lists {
 	 * 

* The result is guaranteed to be in the "traditional", lexicographical order * for Cartesian products that you would get from nesting for loops: - * + * *

 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/MapConstraint.java b/src/main/java/com/google/common/collect/MapConstraint.java
index 67392caa..ddf8fd56 100644
--- a/src/main/java/com/google/common/collect/MapConstraint.java
+++ b/src/main/java/com/google/common/collect/MapConstraint.java
@@ -26,7 +26,7 @@ import com.google.common.annotations.GwtCompatible;
  * {@code Multimap}. For example, {@link MapConstraints#notNull()}, which
  * prevents a map from including any null keys or values, could be implemented
  * like this:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/collect/MapDifference.java b/src/main/java/com/google/common/collect/MapDifference.java
index 40fe5c71..2e40f816 100644
--- a/src/main/java/com/google/common/collect/MapDifference.java
+++ b/src/main/java/com/google/common/collect/MapDifference.java
@@ -105,7 +105,7 @@ public interface MapDifference {
 
 	/**
 	 * Returns the hash code for this instance. This is defined as the hash code of
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/Maps.java b/src/main/java/com/google/common/collect/Maps.java
index 07362590..435dcad3 100644
--- a/src/main/java/com/google/common/collect/Maps.java
+++ b/src/main/java/com/google/common/collect/Maps.java
@@ -3426,7 +3426,7 @@ public final class Maps {
 	 * 

* It is imperative that the user manually synchronize on the returned map when * accessing any of its collection views: - * + * *

 	 *    {@code
 	 *
@@ -3468,7 +3468,7 @@ public final class Maps {
 	 * map when iterating over any of its collection views, or the collections views
 	 * of any of its {@code descendingMap}, {@code subMap}, {@code headMap} or
 	 * {@code tailMap} views.
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -3489,7 +3489,7 @@ public final class Maps {
 	 *
 	 * 

* or: - * + * *

 	 * {
 	 * 	@code
@@ -3586,7 +3586,7 @@ public final class Maps {
 	 * 

* All other properties of the transformed map, such as iteration order, are * left intact. For example, the code: - * + * *

 	 * {
 	 * 	@code
@@ -3654,7 +3654,7 @@ public final class Maps {
 	 * 

* All other properties of the transformed map, such as iteration order, are * left intact. For example, the code: - * + * *

 	 * {
 	 * 	@code
@@ -3721,7 +3721,7 @@ public final class Maps {
 	 * 

* All other properties of the transformed map, such as iteration order, are * left intact. For example, the code: - * + * *

 	 * {
 	 * 	@code
@@ -3806,7 +3806,7 @@ public final class Maps {
 	 * Returns a view of a map where each value is transformed by a function. All
 	 * other properties of the map, such as iteration order, are left intact. For
 	 * example, the code:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -3855,7 +3855,7 @@ public final class Maps {
 	 * Returns a view of a navigable map where each value is transformed by a
 	 * function. All other properties of the map, such as iteration order, are left
 	 * intact. For example, the code:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -3909,7 +3909,7 @@ public final class Maps {
 	 * Returns a view of a sorted map where each value is transformed by a function.
 	 * All other properties of the map, such as iteration order, are left intact.
 	 * For example, the code:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/Multimap.java b/src/main/java/com/google/common/collect/Multimap.java
index 2f0e031d..d49067fd 100644
--- a/src/main/java/com/google/common/collect/Multimap.java
+++ b/src/main/java/com/google/common/collect/Multimap.java
@@ -58,7 +58,7 @@ import com.google.common.annotations.GwtCompatible;
  *
  * 

* The following code: - * + * *

  * {
  * 	@code
@@ -75,7 +75,7 @@ import com.google.common.annotations.GwtCompatible;
  * 
* * ... produces output such as: - * + * *
  *    {@code
  *
@@ -161,7 +161,7 @@ import com.google.common.annotations.GwtCompatible;
  * multimaps.
  *
  * 

Other Notes

- * + * *

* As with {@code Map}, the behavior of a {@code Multimap} is not specified if * key objects already present in the multimap change in a manner that affects @@ -333,16 +333,16 @@ public interface Multimap { * Stores a key-value pair in this multimap for each of {@code values}, all * using the same key, {@code key}. Equivalent to (but expected to be more * efficient than): - * + * *

 	 *    {@code
-	 * 
+	 *
 	 * for (V value : values) {
 	 * 	put(key, value);
 	 * }
 	 * }
 	 * 
- * + * *

* In particular, this is a no-op if {@code values} is empty. * @@ -369,7 +369,7 @@ public interface Multimap { /** * Removes all values associated with the key {@code key}. - * + * *

* Once this method returns, {@code key} will not be mapped to any values, so it * will not appear in {@link #keySet()}, {@link #asMap()}, or any other views. @@ -383,7 +383,7 @@ public interface Multimap { /** * Stores a collection of values with the same key, replacing any existing * values for that key. - * + * *

* If {@code values} is empty, this is equivalent to {@link #removeAll(Object) * removeAll(key)}. diff --git a/src/main/java/com/google/common/collect/Multimaps.java b/src/main/java/com/google/common/collect/Multimaps.java index c1855311..42fab383 100644 --- a/src/main/java/com/google/common/collect/Multimaps.java +++ b/src/main/java/com/google/common/collect/Multimaps.java @@ -1387,7 +1387,7 @@ public final class Multimaps { * *

* For example, - * + * *

 	 *    {@code
 	 *
@@ -1401,7 +1401,7 @@ public final class Multimaps {
 	 *
 	 * 

* prints - * + * *

 	 *    {@code
 	 *
@@ -1445,7 +1445,7 @@ public final class Multimaps {
 	 *
 	 * 

* For example, - * + * *

 	 *    {@code
 	 *
@@ -1459,7 +1459,7 @@ public final class Multimaps {
 	 *
 	 * 

* prints - * + * *

 	 *    {@code
 	 *
@@ -1725,7 +1725,7 @@ public final class Multimaps {
 	 * 

* It is imperative that the user manually synchronize on the returned multimap * when accessing any of its collection views: - * + * *

 	 *    {@code
 	 *
@@ -1806,7 +1806,7 @@ public final class Multimaps {
 	 * 

* All other properties of the transformed multimap, such as iteration order, * are left intact. For example, the code: - * + * *

 	 * {
 	 * 	@code
@@ -1871,7 +1871,7 @@ public final class Multimaps {
 	 * 

* All other properties of the transformed multimap, such as iteration order, * are left intact. For example, the code: - * + * *

 	 * {
 	 * 	@code
@@ -1936,7 +1936,7 @@ public final class Multimaps {
 	 * Returns a view of a {@code ListMultimap} where each value is transformed by a
 	 * function. All other properties of the multimap, such as iteration order, are
 	 * left intact. For example, the code:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -1991,7 +1991,7 @@ public final class Multimaps {
 	 * Returns a view of a multimap where each value is transformed by a function.
 	 * All other properties of the multimap, such as iteration order, are left
 	 * intact. For example, the code:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/collect/Multiset.java b/src/main/java/com/google/common/collect/Multiset.java
index 712e9786..e593997d 100644
--- a/src/main/java/com/google/common/collect/Multiset.java
+++ b/src/main/java/com/google/common/collect/Multiset.java
@@ -84,7 +84,7 @@ import com.google.common.annotations.GwtCompatible;
  * wish to use {@link com.google.common.util.concurrent.AtomicLongMap} instead.
  * Note, however, that unlike {@code Multiset}, {@code AtomicLongMap} does not
  * automatically remove zeros.
- * 
+ *
  * 

* See the Guava User Guide article on @@ -116,7 +116,7 @@ public interface Multiset extends Collection { * Returns {@code true} if the given object is also a multiset entry and the two * entries represent the same element and count. That is, two entries {@code a} * and {@code b} are equal if: - * + * *

 		 *    {@code
 		 *
@@ -154,7 +154,7 @@ public interface Multiset extends Collection {
 		 * 

* The hash code of a multiset entry for element {@code element} and count * {@code count} is defined as: - * + * *

 		 *    {@code
 		 *
@@ -339,7 +339,7 @@ public interface Multiset extends Collection {
 
 	/**
 	 * Returns the hash code for this multiset. This is defined as the sum of
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -403,7 +403,7 @@ public interface Multiset extends Collection {
 	 * {@code c}, and only cares whether or not an element appears at all. If you
 	 * wish to remove one occurrence in this multiset for every occurrence in
 	 * {@code c}, see {@link Multisets#removeOccurrences(Multiset, Multiset)}.
-	 * 
+	 *
 	 * 

* This method refines {@link Collection#removeAll} to further specify that it * may not throw an exception in response to any of {@code elements} @@ -420,12 +420,12 @@ public interface Multiset extends Collection { * {@code c}, and only cares whether or not an element appears at all. If you * wish to remove one occurrence in this multiset for every occurrence in * {@code c}, see {@link Multisets#retainOccurrences(Multiset, Multiset)}. - * + * *

* This method refines {@link Collection#retainAll} to further specify that it * may not throw an exception in response to any of {@code elements} * being null or of the wrong type. - * + * * @see Multisets#retainOccurrences(Multiset, Multiset) */ @Override diff --git a/src/main/java/com/google/common/collect/Multisets.java b/src/main/java/com/google/common/collect/Multisets.java index b5bbfde1..354774e5 100644 --- a/src/main/java/com/google/common/collect/Multisets.java +++ b/src/main/java/com/google/common/collect/Multisets.java @@ -744,7 +744,7 @@ public final class Multisets { * removes all occurrences of elements that appear in * {@code occurrencesToRemove}. However, this operation is equivalent to, * albeit more efficient than, the following: - * + * *

 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/MutableClassToInstanceMap.java b/src/main/java/com/google/common/collect/MutableClassToInstanceMap.java
index b22b8a81..37e1243b 100644
--- a/src/main/java/com/google/common/collect/MutableClassToInstanceMap.java
+++ b/src/main/java/com/google/common/collect/MutableClassToInstanceMap.java
@@ -25,7 +25,7 @@ import com.google.common.primitives.Primitives;
 /**
  * A mutable class-to-instance map backed by an arbitrary user-provided map. See
  * also {@link ImmutableClassToInstanceMap}.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Ordering.java b/src/main/java/com/google/common/collect/Ordering.java index a38c7e91..375ebe66 100644 --- a/src/main/java/com/google/common/collect/Ordering.java +++ b/src/main/java/com/google/common/collect/Ordering.java @@ -129,7 +129,7 @@ public abstract class Ordering implements Comparator { * *

* Example: - * + * *

 	 *    {@code
 	 *
@@ -804,7 +804,7 @@ public abstract class Ordering implements Comparator {
 	 * function to them, then comparing those results using {@code this}. For
 	 * example, to compare objects by their string forms, in a case-insensitive
 	 * manner, use:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/PeekingIterator.java b/src/main/java/com/google/common/collect/PeekingIterator.java
index 8a9e023b..ecf29dd4 100644
--- a/src/main/java/com/google/common/collect/PeekingIterator.java
+++ b/src/main/java/com/google/common/collect/PeekingIterator.java
@@ -23,7 +23,7 @@ import com.google.common.annotations.GwtCompatible;
 
 /**
  * An iterator that supports a one-element lookahead while iterating.
- * 
+ *
  * 

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Range.java b/src/main/java/com/google/common/collect/Range.java index 8fdbe8cc..45ce46c5 100644 --- a/src/main/java/com/google/common/collect/Range.java +++ b/src/main/java/com/google/common/collect/Range.java @@ -627,11 +627,11 @@ public final class Range implements Predicate, Serializ *

* The connectedness relation is both reflexive and symmetric, but does not form * an {@linkplain Equivalence equivalence relation} as it is not transitive. - * + * *

* Note that certain discrete ranges are not considered connected, even though * there are no elements "between them." For example, {@code [3, 5]} is not - * considered connected to {@code + * considered connected to {@code * [6, 10]}. In these cases, it may be desirable for both input ranges to be * preprocessed with {@link #canonical(DiscreteDomain)} before testing for * connectedness. diff --git a/src/main/java/com/google/common/collect/RangeMap.java b/src/main/java/com/google/common/collect/RangeMap.java index 150a9c76..a4645eb3 100644 --- a/src/main/java/com/google/common/collect/RangeMap.java +++ b/src/main/java/com/google/common/collect/RangeMap.java @@ -125,17 +125,17 @@ public interface RangeMap { /** * Returns a view of the part of this range map that intersects with * {@code range}. - * + * *

* For example, if {@code rangeMap} had the entries * {@code [1, 5] => "foo", (6, 8) => "bar", (10, \u2025) => "baz"} then * {@code rangeMap.subRangeMap(Range.open(3, 12))} would return a range map with * the entries {@code (3, 5) => "foo", (6, 8) => "bar", (10, 12) => "baz"}. - * + * *

* The returned range map supports all optional operations that this range map * supports, except for {@code asMapOfRanges().iterator().remove()}. - * + * *

* The returned range map will throw an {@link IllegalArgumentException} on an * attempt to insert a range not {@linkplain Range#encloses(Range) enclosed} by diff --git a/src/main/java/com/google/common/collect/RangeSet.java b/src/main/java/com/google/common/collect/RangeSet.java index 22318921..79faa4df 100644 --- a/src/main/java/com/google/common/collect/RangeSet.java +++ b/src/main/java/com/google/common/collect/RangeSet.java @@ -28,7 +28,7 @@ import com.google.common.annotations.Beta; *

* Implementations that choose to support the {@link #add(Range)} operation are * required to ignore empty ranges and coalesce connected ranges. For example: - * + * *

  *    {@code
  *
@@ -101,10 +101,10 @@ public interface RangeSet {
 	/**
 	 * Removes all ranges from this {@code RangeSet} (optional operation). After
 	 * this operation, {@code this.contains(c)} will return false for all {@code c}.
-	 * 
+	 *
 	 * 

* This is equivalent to {@code remove(Range.all())}. - * + * * @throws UnsupportedOperationException if this range set does not support the * {@code clear} operation */ diff --git a/src/main/java/com/google/common/collect/RegularImmutableBiMap.java b/src/main/java/com/google/common/collect/RegularImmutableBiMap.java index 45d7e7c3..91945db6 100644 --- a/src/main/java/com/google/common/collect/RegularImmutableBiMap.java +++ b/src/main/java/com/google/common/collect/RegularImmutableBiMap.java @@ -234,7 +234,7 @@ class RegularImmutableBiMap extends ImmutableBiMap { * Constructor for RegularImmutableBiMap that takes as input an array of * {@code TerminalEntry} entries. Assumes that these entries have already been * checked for null. - * + * *

* This allows reuse of the entry objects from the array in the actual * implementation. diff --git a/src/main/java/com/google/common/collect/RegularImmutableMap.java b/src/main/java/com/google/common/collect/RegularImmutableMap.java index 306ecd07..293a435c 100644 --- a/src/main/java/com/google/common/collect/RegularImmutableMap.java +++ b/src/main/java/com/google/common/collect/RegularImmutableMap.java @@ -129,7 +129,7 @@ final class RegularImmutableMap extends ImmutableMap { * Constructor for RegularImmutableMap that takes as input an array of * {@code TerminalEntry} entries. Assumes that these entries have already been * checked for null. - * + * *

* This allows reuse of the entry objects from the array in the actual * implementation. diff --git a/src/main/java/com/google/common/collect/SetMultimap.java b/src/main/java/com/google/common/collect/SetMultimap.java index 0c016fcc..2785033e 100644 --- a/src/main/java/com/google/common/collect/SetMultimap.java +++ b/src/main/java/com/google/common/collect/SetMultimap.java @@ -39,7 +39,7 @@ import com.google.common.annotations.GwtCompatible; * If the values corresponding to a single key should be ordered according to a * {@link java.util.Comparator} (or the natural order), see the * {@link SortedSetMultimap} subinterface. - * + * *

* Since the value collections are sets, the behavior of a {@code SetMultimap} * is not specified if key or value objects already present in the diff --git a/src/main/java/com/google/common/collect/Sets.java b/src/main/java/com/google/common/collect/Sets.java index 9d99490b..765ef3d2 100644 --- a/src/main/java/com/google/common/collect/Sets.java +++ b/src/main/java/com/google/common/collect/Sets.java @@ -662,7 +662,7 @@ public final class Sets { * each of the given sets in order; the "n-ary * Cartesian * product" of the sets. For example: - * + * *

 	 *    {@code
 	 *
@@ -685,7 +685,7 @@ public final class Sets {
 	 * 

* The result is guaranteed to be in the "traditional", lexicographical order * for Cartesian products that you would get from nesting for loops: - * + * *

 	 *    {@code
 	 *
@@ -729,7 +729,7 @@ public final class Sets {
 	 * each of the given sets in order; the "n-ary
 	 * Cartesian
 	 * product" of the sets. For example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -752,7 +752,7 @@ public final class Sets {
 	 * 

* The result is guaranteed to be in the "traditional", lexicographical order * for Cartesian products that you would get from nesting for loops: - * + * *

 	 *    {@code
 	 *
@@ -1121,7 +1121,7 @@ public final class Sets {
 	 * Unfortunately, since this method sets the generic type of the returned set
 	 * based on the type of the first set passed, this could in rare cases force you
 	 * to make a cast, for example:
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1372,7 +1372,7 @@ public final class Sets {
 	 * are ensured if the map is created empty, passed directly to this method, and
 	 * no reference to the map is retained, as illustrated in the following code
 	 * fragment:
-	 * 
+	 *
 	 * 
 	 * {
 	 * 	@code
@@ -1545,7 +1545,7 @@ public final class Sets {
 	 * It is imperative that the user manually synchronize on the returned sorted
 	 * set when iterating over it or any of its {@code descendingSet},
 	 * {@code subSet}, {@code headSet}, or {@code tailSet} views.
-	 * 
+	 *
 	 * 
 	 *    {@code
 	 *
@@ -1562,7 +1562,7 @@ public final class Sets {
 	 *
 	 * 

* or: - * + * *

 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/collect/SortedMultiset.java b/src/main/java/com/google/common/collect/SortedMultiset.java
index c011afcf..97ecff55 100644
--- a/src/main/java/com/google/common/collect/SortedMultiset.java
+++ b/src/main/java/com/google/common/collect/SortedMultiset.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2011 The Guava Authors
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -33,18 +33,18 @@ import com.google.common.annotations.GwtCompatible;
  * implementation uses {@link Comparable#compareTo} or
  * {@link Comparator#compare} instead of {@link Object#equals} to determine
  * equivalence of instances.
- * 
+ *
  * 

* Warning: The comparison must be consistent with equals as * explained by the {@link Comparable} class specification. Otherwise, the * resulting multiset will violate the {@link Collection} contract, which it is * specified in terms of {@link Object#equals}. - * + * *

* See the Guava User Guide article on * {@code Multiset}. - * + * * @author Louis Wasserman * @since 11.0 */ @@ -55,6 +55,7 @@ public interface SortedMultiset extends SortedMultisetBridge, SortedIterab * Returns the comparator that orders this multiset, or * {@link Ordering#natural()} if the natural ordering of the elements is used. */ + @Override Comparator comparator(); /** @@ -66,7 +67,7 @@ public interface SortedMultiset extends SortedMultisetBridge, SortedIterab /** * Returns a {@link NavigableSet} view of the distinct elements in this * multiset. - * + * * @since 14.0 (present with return type {@code SortedSet} since 11.0) */ @Override @@ -94,7 +95,7 @@ public interface SortedMultiset extends SortedMultisetBridge, SortedIterab * returned multiset is a view of this multiset, so changes to one will be * reflected in the other. The returned multiset supports all operations that * this multiset supports. - * + * *

* The returned multiset will throw an {@link IllegalArgumentException} on * attempts to add elements outside its range. @@ -134,11 +135,11 @@ public interface SortedMultiset extends SortedMultisetBridge, SortedIterab * {@code lowerBound} and {@code upperBound}. The returned multiset is a view of * this multiset, so changes to one will be reflected in the other. The returned * multiset supports all operations that this multiset supports. - * + * *

* The returned multiset will throw an {@link IllegalArgumentException} on * attempts to add elements outside its range. - * + * *

* This method is equivalent to * {@code tailMultiset(lowerBound, lowerBoundType).headMultiset(upperBound, @@ -152,7 +153,7 @@ public interface SortedMultiset extends SortedMultisetBridge, SortedIterab * returned multiset is a view of this multiset, so changes to one will be * reflected in the other. The returned multiset supports all operations that * this multiset supports. - * + * *

* The returned multiset will throw an {@link IllegalArgumentException} on * attempts to add elements outside its range. diff --git a/src/main/java/com/google/common/collect/SortedMultisetBridge.java b/src/main/java/com/google/common/collect/SortedMultisetBridge.java index 7efb55a3..4d4c2087 100644 --- a/src/main/java/com/google/common/collect/SortedMultisetBridge.java +++ b/src/main/java/com/google/common/collect/SortedMultisetBridge.java @@ -22,7 +22,7 @@ import java.util.SortedSet; * Superinterface of {@link SortedMultiset} to introduce a bridge method for * {@code elementSet()}, to ensure binary compatibility with older Guava * versions that specified {@code elementSet()} to return {@code SortedSet}. - * + * * @author Louis Wasserman */ interface SortedMultisetBridge extends Multiset { diff --git a/src/main/java/com/google/common/collect/SortedSetMultimap.java b/src/main/java/com/google/common/collect/SortedSetMultimap.java index b80a659d..cdbab8d8 100644 --- a/src/main/java/com/google/common/collect/SortedSetMultimap.java +++ b/src/main/java/com/google/common/collect/SortedSetMultimap.java @@ -40,7 +40,7 @@ import com.google.common.annotations.GwtCompatible; * returns a {@link Set} of map entries. Though the method signature doesn't say * so explicitly, the map returned by {@link #asMap} has {@code SortedSet} * values. - * + * *

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Table.java b/src/main/java/com/google/common/collect/Table.java index fde30a93..731fd5da 100644 --- a/src/main/java/com/google/common/collect/Table.java +++ b/src/main/java/com/google/common/collect/Table.java @@ -46,7 +46,7 @@ import com.google.common.base.Objects; * All methods that modify the table are optional, and the views returned by the * table may or may not be modifiable. When modification isn't supported, those * methods will throw an {@link UnsupportedOperationException}. - * + * *

* See the Guava User Guide article on diff --git a/src/main/java/com/google/common/collect/Tables.java b/src/main/java/com/google/common/collect/Tables.java index 8613ac3b..4e862db6 100644 --- a/src/main/java/com/google/common/collect/Tables.java +++ b/src/main/java/com/google/common/collect/Tables.java @@ -39,7 +39,7 @@ import com.google.common.collect.Table.Cell; /** * Provides static methods that involve a {@code Table}. - * + * *

* See the Guava User Guide article on @@ -578,11 +578,11 @@ public final class Tables { * Query operations on the returned table "read through" to the specified table, * and attemps to modify the returned table, whether direct or via its * collection views, result in an {@code UnsupportedOperationException}. - * + * *

* The returned table will be serializable if the specified table is * serializable. - * + * * @param table the row-sorted table for which an unmodifiable view is to be * returned * @return an unmodifiable view of the specified table @@ -606,7 +606,7 @@ public final class Tables { * operations on the returned table "read through" to the specified table, and * attempts to modify the returned table, whether direct or via its collection * views, result in an {@code UnsupportedOperationException}. - * + * *

* The returned table will be serializable if the specified table is * serializable. @@ -614,7 +614,7 @@ public final class Tables { *

* Consider using an {@link ImmutableTable}, which is guaranteed never to * change. - * + * * @param table the table for which an unmodifiable view is to be returned * @return an unmodifiable view of the specified table * @since 11.0 diff --git a/src/main/java/com/google/common/collect/TransformedIterator.java b/src/main/java/com/google/common/collect/TransformedIterator.java index 3389a583..f58d8aca 100644 --- a/src/main/java/com/google/common/collect/TransformedIterator.java +++ b/src/main/java/com/google/common/collect/TransformedIterator.java @@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.Iterator; import com.google.common.annotations.GwtCompatible; +import com.google.common.base.Function; /** * An iterator that transforms a backing iterator; for internal use. This avoids diff --git a/src/main/java/com/google/common/collect/TreeBasedTable.java b/src/main/java/com/google/common/collect/TreeBasedTable.java index 33a2098f..1a19263f 100644 --- a/src/main/java/com/google/common/collect/TreeBasedTable.java +++ b/src/main/java/com/google/common/collect/TreeBasedTable.java @@ -332,7 +332,7 @@ public class TreeBasedTable extends StandardRowSortedTable { * Because a {@code TreeBasedTable} has unique sorted values for a given row, * this method returns a {@link SortedMap}, instead of the {@link Map} specified * in the {@link Table} interface. - * + * * @since 10.0 * (mostly source-compatible since 7.0) diff --git a/src/main/java/com/google/common/collect/TreeMultimap.java b/src/main/java/com/google/common/collect/TreeMultimap.java index f8943455..2e4d2f3b 100644 --- a/src/main/java/com/google/common/collect/TreeMultimap.java +++ b/src/main/java/com/google/common/collect/TreeMultimap.java @@ -141,7 +141,7 @@ public class TreeMultimap extends AbstractSortedKeySortedSetMultimap * Because a {@code TreeMultimap} has unique sorted keys, this method returns a * {@link NavigableMap}, instead of the {@link java.util.Map} specified in the * {@link Multimap} interface. - * + * * @since 14.0 (present with return type {@code SortedMap} since 2.0) */ @Override @@ -218,7 +218,7 @@ public class TreeMultimap extends AbstractSortedKeySortedSetMultimap * Because a {@code TreeMultimap} has unique sorted keys, this method returns a * {@link NavigableSet}, instead of the {@link java.util.Set} specified in the * {@link Multimap} interface. - * + * * @since 14.0 (present with return type {@code SortedSet} since 2.0) */ @Override diff --git a/src/main/java/com/google/common/collect/UnmodifiableSortedMultiset.java b/src/main/java/com/google/common/collect/UnmodifiableSortedMultiset.java index ce4588ce..178b4352 100644 --- a/src/main/java/com/google/common/collect/UnmodifiableSortedMultiset.java +++ b/src/main/java/com/google/common/collect/UnmodifiableSortedMultiset.java @@ -27,7 +27,7 @@ import com.google.common.collect.Multisets.UnmodifiableMultiset; * {@link Multisets#unmodifiableSortedMultiset(SortedMultiset)}, split out into * its own file so it can be GWT emulated (to deal with the differing * elementSet() types in GWT and non-GWT). - * + * * @author Louis Wasserman */ @GwtCompatible(emulated = true) @@ -107,4 +107,4 @@ final class UnmodifiableSortedMultiset extends UnmodifiableMultiset implem public SortedMultiset tailMultiset(E lowerBound, BoundType boundType) { return Multisets.unmodifiableSortedMultiset(delegate().tailMultiset(lowerBound, boundType)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/google/common/hash/Funnel.java b/src/main/java/com/google/common/hash/Funnel.java index 2b1677a7..f7cd550b 100644 --- a/src/main/java/com/google/common/hash/Funnel.java +++ b/src/main/java/com/google/common/hash/Funnel.java @@ -29,12 +29,12 @@ import com.google.common.annotations.Beta; * funnels be implemented as a single-element enum to maintain serialization * guarantees. See Effective Java (2nd Edition), Item 3: "Enforce the singleton * property with a private constructor or an enum type". For example: - * + * *

  *    {@code
  * public enum PersonFunnel implements Funnel {
  * 	INSTANCE;
- * 
+ *
  * 	public void funnel(Person person, PrimitiveSink into) {
  * 		into.putUnencodedChars(person.getFirstName()).putUnencodedChars(person.getLastName())
  * 				.putInt(person.getAge());
diff --git a/src/main/java/com/google/common/hash/Funnels.java b/src/main/java/com/google/common/hash/Funnels.java
index 9b082d31..da8e8b00 100644
--- a/src/main/java/com/google/common/hash/Funnels.java
+++ b/src/main/java/com/google/common/hash/Funnels.java
@@ -34,6 +34,7 @@ public final class Funnels {
 	private enum ByteArrayFunnel implements Funnel {
 		INSTANCE;
 
+		@Override
 		public void funnel(byte[] from, PrimitiveSink into) {
 			into.putBytes(from);
 		}
@@ -47,6 +48,7 @@ public final class Funnels {
 	private enum IntegerFunnel implements Funnel {
 		INSTANCE;
 
+		@Override
 		public void funnel(Integer from, PrimitiveSink into) {
 			into.putInt(from);
 		}
@@ -60,6 +62,7 @@ public final class Funnels {
 	private enum LongFunnel implements Funnel {
 		INSTANCE;
 
+		@Override
 		public void funnel(Long from, PrimitiveSink into) {
 			into.putLong(from);
 		}
@@ -86,6 +89,7 @@ public final class Funnels {
 			return false;
 		}
 
+		@Override
 		public void funnel(Iterable from, PrimitiveSink into) {
 			for (E e : from) {
 				elementFunnel.funnel(e, into);
@@ -161,6 +165,7 @@ public final class Funnels {
 			return false;
 		}
 
+		@Override
 		public void funnel(CharSequence from, PrimitiveSink into) {
 			into.putString(from, charset);
 		}
@@ -183,6 +188,7 @@ public final class Funnels {
 	private enum UnencodedCharsFunnel implements Funnel {
 		INSTANCE;
 
+		@Override
 		public void funnel(CharSequence from, PrimitiveSink into) {
 			into.putUnencodedChars(from);
 		}
@@ -197,11 +203,11 @@ public final class Funnels {
 	 * Wraps a {@code PrimitiveSink} as an {@link OutputStream}, so it is easy to
 	 * {@link Funnel#funnel funnel} an object to a {@code PrimitiveSink} if there is
 	 * already a way to write the contents of the object to an {@code OutputStream}.
-	 * 
+	 *
 	 * 

* The {@code close} and {@code flush} methods of the returned * {@code OutputStream} do nothing, and no method throws {@code IOException}. - * + * * @since 13.0 */ public static OutputStream asOutputStream(PrimitiveSink sink) { @@ -226,7 +232,7 @@ public final class Funnels { /** * Returns a funnel for longs. - * + * * @since 13.0 */ public static Funnel longFunnel() { diff --git a/src/main/java/com/google/common/hash/HashFunction.java b/src/main/java/com/google/common/hash/HashFunction.java index 36dc5e18..0a42c3f6 100644 --- a/src/main/java/com/google/common/hash/HashFunction.java +++ b/src/main/java/com/google/common/hash/HashFunction.java @@ -224,7 +224,7 @@ public interface HashFunction { * Begins a new hash code computation by returning an initialized, stateful * {@code * Hasher} instance that is ready to receive data. Example: - * + * *

 	 * {
 	 * 	@code
diff --git a/src/main/java/com/google/common/hash/Hasher.java b/src/main/java/com/google/common/hash/Hasher.java
index 6febb855..87e92a21 100644
--- a/src/main/java/com/google/common/hash/Hasher.java
+++ b/src/main/java/com/google/common/hash/Hasher.java
@@ -41,7 +41,7 @@ import com.google.common.annotations.Beta;
  * inserted, and the order in which they were inserted, not how those bytes were
  * chunked into discrete put() operations. For example, the following three
  * expressions all generate colliding hash codes:
- * 
+ *
  * 
  *    {@code
  *
diff --git a/src/main/java/com/google/common/hash/HashingInputStream.java b/src/main/java/com/google/common/hash/HashingInputStream.java
index 1bc73b9f..1daa100b 100644
--- a/src/main/java/com/google/common/hash/HashingInputStream.java
+++ b/src/main/java/com/google/common/hash/HashingInputStream.java
@@ -62,7 +62,7 @@ public final class HashingInputStream extends FilterInputStream {
 
 	/**
 	 * mark() is not supported for HashingInputStream
-	 * 
+	 *
 	 * @return {@code false} always
 	 */
 	@Override
@@ -98,7 +98,7 @@ public final class HashingInputStream extends FilterInputStream {
 
 	/**
 	 * reset() is not supported for HashingInputStream.
-	 * 
+	 *
 	 * @throws IOException this operation is not supported
 	 */
 	@Override
diff --git a/src/main/java/com/google/common/io/BaseEncoding.java b/src/main/java/com/google/common/io/BaseEncoding.java
index 695ee7d8..e676cc71 100644
--- a/src/main/java/com/google/common/io/BaseEncoding.java
+++ b/src/main/java/com/google/common/io/BaseEncoding.java
@@ -64,7 +64,7 @@ import com.google.common.io.GwtWorkarounds.CharOutput;
  *
  * 

* returns the string {@code "MZXW6==="}, and - * + * *

  * {
  * 	@code
diff --git a/src/main/java/com/google/common/io/Closeables.java b/src/main/java/com/google/common/io/Closeables.java
index a7384480..92558a7c 100644
--- a/src/main/java/com/google/common/io/Closeables.java
+++ b/src/main/java/com/google/common/io/Closeables.java
@@ -51,7 +51,7 @@ public final class Closeables {
 	 *
 	 * 

* Example: - * + * *

 	 *    {@code
 	 *
diff --git a/src/main/java/com/google/common/io/LittleEndianDataInputStream.java b/src/main/java/com/google/common/io/LittleEndianDataInputStream.java
index f005df66..cea7563c 100644
--- a/src/main/java/com/google/common/io/LittleEndianDataInputStream.java
+++ b/src/main/java/com/google/common/io/LittleEndianDataInputStream.java
@@ -55,7 +55,7 @@ public final class LittleEndianDataInputStream extends FilterInputStream impleme
 	/**
 	 * Reads a byte from the input stream checking that the end of file (EOF) has
 	 * not been encountered.
-	 * 
+	 *
 	 * @return byte read from input
 	 * @throws IOException  if an error is encountered while reading
 	 * @throws EOFException if the end of file (EOF) is encountered.
diff --git a/src/main/java/com/google/common/io/Resources.java b/src/main/java/com/google/common/io/Resources.java
index 1df798c9..9229d036 100644
--- a/src/main/java/com/google/common/io/Resources.java
+++ b/src/main/java/com/google/common/io/Resources.java
@@ -102,7 +102,7 @@ public final class Resources {
 	/**
 	 * Given a {@code resourceName} that is relative to {@code contextClass},
 	 * returns a {@code URL} pointing to the named resource.
-	 * 
+	 *
 	 * @throws IllegalArgumentException if the resource is not found
 	 */
 	public static URL getResource(Class contextClass, String resourceName) {
@@ -122,7 +122,7 @@ public final class Resources {
 	 * 

* In the unusual case where the context class loader is null, the class loader * that loaded this class ({@code Resources}) will be used instead. - * + * * @throws IllegalArgumentException if the resource is not found */ public static URL getResource(String resourceName) { diff --git a/src/main/java/com/google/common/math/IntMath.java b/src/main/java/com/google/common/math/IntMath.java index 66d4d811..26db53e5 100644 --- a/src/main/java/com/google/common/math/IntMath.java +++ b/src/main/java/com/google/common/math/IntMath.java @@ -477,7 +477,7 @@ public final class IntMath { * *

* For example: - * + * *

 	 *  {@code
 	 *
@@ -577,7 +577,7 @@ public final class IntMath {
 			 * We wish to test whether or not x <= (sqrtFloor + 0.5)^2 = halfSquare + 0.25.
 			 * Since both x and halfSquare are integers, this is equivalent to testing
 			 * whether or not x <= halfSquare. (We have to deal with overflow, though.)
-			 * 
+			 *
 			 * If we treat halfSquare as an unsigned int, we know that sqrtFloor^2 <= x <
 			 * (sqrtFloor + 1)^2 halfSquare - sqrtFloor <= x < halfSquare + sqrtFloor + 1 so
 			 * |x - halfSquare| <= sqrtFloor. Therefore, it's safe to treat x - halfSquare
diff --git a/src/main/java/com/google/common/math/LongMath.java b/src/main/java/com/google/common/math/LongMath.java
index a420ffe1..edf8fb01 100644
--- a/src/main/java/com/google/common/math/LongMath.java
+++ b/src/main/java/com/google/common/math/LongMath.java
@@ -697,7 +697,7 @@ public final class LongMath {
 		}
 		/*
 		 * Let k be the true value of floor(sqrt(x)), so that
-		 * 
+		 *
 		 * k * k <= x < (k + 1) * (k + 1) (double) (k * k) <= (double) x <= (double) ((k
 		 * + 1) * (k + 1)) since casting to double is nondecreasing. Note that the
 		 * right-hand inequality is no longer strict. Math.sqrt(k * k) <= Math.sqrt(x)
@@ -738,7 +738,7 @@ public final class LongMath {
 			 * We wish to test whether or not x <= (sqrtFloor + 0.5)^2 = halfSquare + 0.25.
 			 * Since both x and halfSquare are integers, this is equivalent to testing
 			 * whether or not x <= halfSquare. (We have to deal with overflow, though.)
-			 * 
+			 *
 			 * If we treat halfSquare as an unsigned long, we know that sqrtFloor^2 <= x <
 			 * (sqrtFloor + 1)^2 halfSquare - sqrtFloor <= x < halfSquare + sqrtFloor + 1 so
 			 * |x - halfSquare| <= sqrtFloor. Therefore, it's safe to treat x - halfSquare
diff --git a/src/main/java/com/google/common/math/package-info.java b/src/main/java/com/google/common/math/package-info.java
index a0742892..f34c1cde 100644
--- a/src/main/java/com/google/common/math/package-info.java
+++ b/src/main/java/com/google/common/math/package-info.java
@@ -21,7 +21,7 @@
  * 

* This package is a part of the open-source * Guava libraries. - * + * *

* See the Guava User Guide article on * math diff --git a/src/main/java/com/google/common/primitives/Primitives.java b/src/main/java/com/google/common/primitives/Primitives.java index 8c2d2f77..86d3c07e 100644 --- a/src/main/java/com/google/common/primitives/Primitives.java +++ b/src/main/java/com/google/common/primitives/Primitives.java @@ -97,7 +97,7 @@ public final class Primitives { /** * Returns the corresponding primitive type of {@code type} if it is a wrapper * type; otherwise returns {@code type} itself. Idempotent. - * + * *

 	 *     unwrap(Integer.class) == int.class
 	 *     unwrap(int.class) == int.class
@@ -116,7 +116,7 @@ public final class Primitives {
 	/**
 	 * Returns the corresponding wrapper type of {@code type} if it is a primitive
 	 * type; otherwise returns {@code type} itself. Idempotent.
-	 * 
+	 *
 	 * 
 	 *     wrap(int.class) == Integer.class
 	 *     wrap(Integer.class) == Integer.class
diff --git a/src/main/java/com/google/common/primitives/SignedBytes.java b/src/main/java/com/google/common/primitives/SignedBytes.java
index eb6490ea..63007beb 100644
--- a/src/main/java/com/google/common/primitives/SignedBytes.java
+++ b/src/main/java/com/google/common/primitives/SignedBytes.java
@@ -28,7 +28,7 @@ import com.google.common.annotations.GwtCompatible;
  * values as signed. The corresponding methods that treat the values as unsigned
  * are found in {@link UnsignedBytes}, and the methods for which signedness is
  * not an issue are in {@link Bytes}.
- * 
+ *
  * 

* See the Guava User Guide article on * diff --git a/src/main/java/com/google/common/primitives/package-info.java b/src/main/java/com/google/common/primitives/package-info.java index 465583ef..366ebbd3 100644 --- a/src/main/java/com/google/common/primitives/package-info.java +++ b/src/main/java/com/google/common/primitives/package-info.java @@ -21,7 +21,7 @@ *

* This package is a part of the open-source * Guava libraries. - * + * *

* See the Guava User Guide article on * diff --git a/src/main/java/com/logisticscraft/occlusionculling/DataProvider.java b/src/main/java/com/logisticscraft/occlusionculling/DataProvider.java new file mode 100644 index 00000000..c3c01a07 --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/DataProvider.java @@ -0,0 +1,34 @@ +package com.logisticscraft.occlusionculling; + +import com.logisticscraft.occlusionculling.util.Vec3d; + +public interface DataProvider { + + default void checkingPosition(Vec3d[] targetPoints, int size, Vec3d viewerPosition) { + } + + default void cleanup() { + } + + /** + * Location is inside the chunk. + * + * @param x + * @param y + * @param z + * @return + */ + boolean isOpaqueFullCube(int x, int y, int z); + + /** + * Prepares the requested chunk. Returns true if the chunk is ready, false when + * not loaded. Should not reload the chunk when the x and y are the same as the + * last request! + * + * @param chunkX + * @param chunkZ + * @return + */ + boolean prepareChunk(int chunkX, int chunkZ); + +} diff --git a/src/main/java/com/logisticscraft/occlusionculling/OcclusionCullingInstance.java b/src/main/java/com/logisticscraft/occlusionculling/OcclusionCullingInstance.java new file mode 100644 index 00000000..e9fe5962 --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/OcclusionCullingInstance.java @@ -0,0 +1,512 @@ +package com.logisticscraft.occlusionculling; + +import java.util.Arrays; +import java.util.BitSet; + +import com.logisticscraft.occlusionculling.cache.ArrayOcclusionCache; +import com.logisticscraft.occlusionculling.cache.OcclusionCache; +import com.logisticscraft.occlusionculling.util.MathUtilities; +import com.logisticscraft.occlusionculling.util.Vec3d; + +public class OcclusionCullingInstance { + + private enum Relative { + INSIDE, POSITIVE, NEGATIVE; + + public static Relative from(int min, int max, int pos) { + if (max > pos && min > pos) { + return POSITIVE; + } else if (min < pos && max < pos) { + return NEGATIVE; + } + return INSIDE; + } + } + + private static final int ON_MIN_X = 0x01; + private static final int ON_MAX_X = 0x02; + private static final int ON_MIN_Y = 0x04; + private static final int ON_MAX_Y = 0x08; + private static final int ON_MIN_Z = 0x10; + + private static final int ON_MAX_Z = 0x20; + private final int reach; + private final double aabbExpansion; + private final DataProvider provider; + + private final OcclusionCache cache; + // Reused allocated data structures + private final BitSet skipList = new BitSet(); // Grows bigger in case some mod introduces giant hitboxes + private final Vec3d[] targetPoints = new Vec3d[15]; + private final Vec3d targetPos = new Vec3d(0, 0, 0); + private final int[] cameraPos = new int[3]; + private final boolean[] dotselectors = new boolean[14]; + private boolean allowRayChecks = false; + private final int[] lastHitBlock = new int[3]; + + private boolean allowWallClipping = false; + + public OcclusionCullingInstance(int maxDistance, DataProvider provider) { + this(maxDistance, provider, new ArrayOcclusionCache(maxDistance), 0.5); + } + + public OcclusionCullingInstance(int maxDistance, DataProvider provider, OcclusionCache cache, + double aabbExpansion) { + this.reach = maxDistance; + this.provider = provider; + this.cache = cache; + this.aabbExpansion = aabbExpansion; + for (int i = 0; i < targetPoints.length; i++) { + targetPoints[i] = new Vec3d(0, 0, 0); + } + } + + private void cacheResult(int x, int y, int z, boolean result) { + int cx = x - cameraPos[0] + reach; + int cy = y - cameraPos[1] + reach; + int cz = z - cameraPos[2] + reach; + if (result) { + cache.setVisible(cx, cy, cz); + } else { + cache.setHidden(cx, cy, cz); + } + } + + private void cacheResult(Vec3d vector, boolean result) { + int cx = MathUtilities.floor(vector.x) - cameraPos[0] + reach; + int cy = MathUtilities.floor(vector.y) - cameraPos[1] + reach; + int cz = MathUtilities.floor(vector.z) - cameraPos[2] + reach; + if (result) { + cache.setVisible(cx, cy, cz); + } else { + cache.setHidden(cx, cy, cz); + } + } + + // -1 = invalid location, 0 = not checked yet, 1 = visible, 2 = occluding + private int getCacheValue(int x, int y, int z) { + x -= cameraPos[0]; + y -= cameraPos[1]; + z -= cameraPos[2]; + if (Math.abs(x) > reach - 2 || Math.abs(y) > reach - 2 || Math.abs(z) > reach - 2) { + return -1; + } + + // check if target is already known + return cache.getState(x + reach, y + reach, z + reach); + } + + public boolean isAABBVisible(Vec3d aabbMin, Vec3d aabbMax, Vec3d viewerPosition) { + try { + int maxX = MathUtilities.floor(aabbMax.x + aabbExpansion); + int maxY = MathUtilities.floor(aabbMax.y + aabbExpansion); + int maxZ = MathUtilities.floor(aabbMax.z + aabbExpansion); + int minX = MathUtilities.floor(aabbMin.x - aabbExpansion); + int minY = MathUtilities.floor(aabbMin.y - aabbExpansion); + int minZ = MathUtilities.floor(aabbMin.z - aabbExpansion); + + cameraPos[0] = MathUtilities.floor(viewerPosition.x); + cameraPos[1] = MathUtilities.floor(viewerPosition.y); + cameraPos[2] = MathUtilities.floor(viewerPosition.z); + + Relative relX = Relative.from(minX, maxX, cameraPos[0]); + Relative relY = Relative.from(minY, maxY, cameraPos[1]); + Relative relZ = Relative.from(minZ, maxZ, cameraPos[2]); + + if (relX == Relative.INSIDE && relY == Relative.INSIDE && relZ == Relative.INSIDE) { + return true; // We are inside of the AABB, don't cull + } + + skipList.clear(); + + // Just check the cache first + int id = 0; + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + int cachedValue = getCacheValue(x, y, z); + + if (cachedValue == 1) { + // non-occluding + return true; + } + + if (cachedValue != 0) { + // was checked and it wasn't visible + skipList.set(id); + } + id++; + } + } + } + + // only after the first hit wall the cache becomes valid. + allowRayChecks = false; + + // since the cache wasn't helpfull + id = 0; + for (int x = minX; x <= maxX; x++) { + byte visibleOnFaceX = 0; + byte faceEdgeDataX = 0; + faceEdgeDataX |= (x == minX) ? ON_MIN_X : 0; + faceEdgeDataX |= (x == maxX) ? ON_MAX_X : 0; + visibleOnFaceX |= (x == minX && relX == Relative.POSITIVE) ? ON_MIN_X : 0; + visibleOnFaceX |= (x == maxX && relX == Relative.NEGATIVE) ? ON_MAX_X : 0; + for (int y = minY; y <= maxY; y++) { + byte faceEdgeDataY = faceEdgeDataX; + byte visibleOnFaceY = visibleOnFaceX; + faceEdgeDataY |= (y == minY) ? ON_MIN_Y : 0; + faceEdgeDataY |= (y == maxY) ? ON_MAX_Y : 0; + visibleOnFaceY |= (y == minY && relY == Relative.POSITIVE) ? ON_MIN_Y : 0; + visibleOnFaceY |= (y == maxY && relY == Relative.NEGATIVE) ? ON_MAX_Y : 0; + for (int z = minZ; z <= maxZ; z++) { + byte faceEdgeData = faceEdgeDataY; + byte visibleOnFace = visibleOnFaceY; + faceEdgeData |= (z == minZ) ? ON_MIN_Z : 0; + faceEdgeData |= (z == maxZ) ? ON_MAX_Z : 0; + visibleOnFace |= (z == minZ && relZ == Relative.POSITIVE) ? ON_MIN_Z : 0; + visibleOnFace |= (z == maxZ && relZ == Relative.NEGATIVE) ? ON_MAX_Z : 0; + if (skipList.get(id)) { // was checked and it wasn't visible + id++; + continue; + } + + if (visibleOnFace != 0) { + targetPos.set(x, y, z); + if (isVoxelVisible(viewerPosition, targetPos, faceEdgeData, visibleOnFace)) { + return true; + } + } + id++; + } + } + } + + return false; + } catch (Throwable t) { + // Failsafe + t.printStackTrace(); + } + return true; + } + + /** + * returns the grid cells that intersect with this Vec3d
+ *
http://playtechs.blogspot.de/2007/03/raytracing-on-grid.html + *

+ * Caching assumes that all Vec3d's are inside the same block + */ + private boolean isVisible(Vec3d start, Vec3d[] targets, int size) { + // start cell coordinate + int x = cameraPos[0]; + int y = cameraPos[1]; + int z = cameraPos[2]; + + for (int v = 0; v < size; v++) { + // ray-casting target + Vec3d target = targets[v]; + + double relativeX = start.x - target.getX(); + double relativeY = start.y - target.getY(); + double relativeZ = start.z - target.getZ(); + + if (allowRayChecks + && rayIntersection(lastHitBlock, start, new Vec3d(relativeX, relativeY, relativeZ).normalize())) { + continue; + } + + // horizontal and vertical cell amount spanned + double dimensionX = Math.abs(relativeX); + double dimensionY = Math.abs(relativeY); + double dimensionZ = Math.abs(relativeZ); + + // distance between horizontal intersection points with cell border as a + // fraction of the total Vec3d length + double dimFracX = 1f / dimensionX; + // distance between vertical intersection points with cell border as a fraction + // of the total Vec3d length + double dimFracY = 1f / dimensionY; + double dimFracZ = 1f / dimensionZ; + + // total amount of intersected cells + int intersectCount = 1; + + // 1, 0 or -1 + // determines the direction of the next cell (horizontally / vertically) + int x_inc, y_inc, z_inc; + + // the distance to the next horizontal / vertical intersection point with a cell + // border as a fraction of the total Vec3d length + double t_next_y, t_next_x, t_next_z; + + if (dimensionX == 0f) { + x_inc = 0; + t_next_x = dimFracX; // don't increment horizontally because the Vec3d is perfectly vertical + } else if (target.x > start.x) { + x_inc = 1; // target point is horizontally greater than starting point so increment every + // step by 1 + intersectCount += MathUtilities.floor(target.x) - x; // increment total amount of intersecting cells + t_next_x = (float) ((x + 1 - start.x) * dimFracX); // calculate the next horizontal + // intersection + // point based on the position inside + // the first cell + } else { + x_inc = -1; // target point is horizontally smaller than starting point so reduce every step + // by 1 + intersectCount += x - MathUtilities.floor(target.x); // increment total amount of intersecting cells + t_next_x = (float) ((start.x - x) * dimFracX); // calculate the next horizontal + // intersection point + // based on the position inside + // the first cell + } + + if (dimensionY == 0f) { + y_inc = 0; + t_next_y = dimFracY; // don't increment vertically because the Vec3d is perfectly horizontal + } else if (target.y > start.y) { + y_inc = 1; // target point is vertically greater than starting point so increment every + // step by 1 + intersectCount += MathUtilities.floor(target.y) - y; // increment total amount of intersecting cells + t_next_y = (float) ((y + 1 - start.y) * dimFracY); // calculate the next vertical + // intersection + // point based on the position inside + // the first cell + } else { + y_inc = -1; // target point is vertically smaller than starting point so reduce every step + // by 1 + intersectCount += y - MathUtilities.floor(target.y); // increment total amount of intersecting cells + t_next_y = (float) ((start.y - y) * dimFracY); // calculate the next vertical intersection + // point + // based on the position inside + // the first cell + } + + if (dimensionZ == 0f) { + z_inc = 0; + t_next_z = dimFracZ; // don't increment vertically because the Vec3d is perfectly horizontal + } else if (target.z > start.z) { + z_inc = 1; // target point is vertically greater than starting point so increment every + // step by 1 + intersectCount += MathUtilities.floor(target.z) - z; // increment total amount of intersecting cells + t_next_z = (float) ((z + 1 - start.z) * dimFracZ); // calculate the next vertical + // intersection + // point based on the position inside + // the first cell + } else { + z_inc = -1; // target point is vertically smaller than starting point so reduce every step + // by 1 + intersectCount += z - MathUtilities.floor(target.z); // increment total amount of intersecting cells + t_next_z = (float) ((start.z - z) * dimFracZ); // calculate the next vertical intersection + // point + // based on the position inside + // the first cell + } + + boolean finished = stepRay(start, x, y, z, dimFracX, dimFracY, dimFracZ, intersectCount, x_inc, y_inc, + z_inc, t_next_y, t_next_x, t_next_z); + provider.cleanup(); + if (finished) { + cacheResult(targets[0], true); + return true; + } else { + allowRayChecks = true; + } + } + cacheResult(targets[0], false); + return false; + } + + /** + * @param viewerPosition + * @param position + * @param faceData contains rather this Block is on the outside for a + * given face + * @param visibleOnFace contains rather a face should be concidered + * @return + */ + private boolean isVoxelVisible(Vec3d viewerPosition, Vec3d position, byte faceData, byte visibleOnFace) { + int targetSize = 0; + Arrays.fill(dotselectors, false); + if ((visibleOnFace & ON_MIN_X) == ON_MIN_X) { + dotselectors[0] = true; + if ((faceData & ~ON_MIN_X) != 0) { + dotselectors[1] = true; + dotselectors[4] = true; + dotselectors[5] = true; + } + dotselectors[8] = true; + } + if ((visibleOnFace & ON_MIN_Y) == ON_MIN_Y) { + dotselectors[0] = true; + if ((faceData & ~ON_MIN_Y) != 0) { + dotselectors[3] = true; + dotselectors[4] = true; + dotselectors[7] = true; + } + dotselectors[9] = true; + } + if ((visibleOnFace & ON_MIN_Z) == ON_MIN_Z) { + dotselectors[0] = true; + if ((faceData & ~ON_MIN_Z) != 0) { + dotselectors[1] = true; + dotselectors[4] = true; + dotselectors[5] = true; + } + dotselectors[10] = true; + } + if ((visibleOnFace & ON_MAX_X) == ON_MAX_X) { + dotselectors[4] = true; + if ((faceData & ~ON_MAX_X) != 0) { + dotselectors[5] = true; + dotselectors[6] = true; + dotselectors[7] = true; + } + dotselectors[11] = true; + } + if ((visibleOnFace & ON_MAX_Y) == ON_MAX_Y) { + dotselectors[1] = true; + if ((faceData & ~ON_MAX_Y) != 0) { + dotselectors[2] = true; + dotselectors[5] = true; + dotselectors[6] = true; + } + dotselectors[12] = true; + } + if ((visibleOnFace & ON_MAX_Z) == ON_MAX_Z) { + dotselectors[2] = true; + if ((faceData & ~ON_MAX_Z) != 0) { + dotselectors[3] = true; + dotselectors[6] = true; + dotselectors[7] = true; + } + dotselectors[13] = true; + } + + if (dotselectors[0]) + targetPoints[targetSize++].setAdd(position, 0.05, 0.05, 0.05); + if (dotselectors[1]) + targetPoints[targetSize++].setAdd(position, 0.05, 0.95, 0.05); + if (dotselectors[2]) + targetPoints[targetSize++].setAdd(position, 0.05, 0.95, 0.95); + if (dotselectors[3]) + targetPoints[targetSize++].setAdd(position, 0.05, 0.05, 0.95); + if (dotselectors[4]) + targetPoints[targetSize++].setAdd(position, 0.95, 0.05, 0.05); + if (dotselectors[5]) + targetPoints[targetSize++].setAdd(position, 0.95, 0.95, 0.05); + if (dotselectors[6]) + targetPoints[targetSize++].setAdd(position, 0.95, 0.95, 0.95); + if (dotselectors[7]) + targetPoints[targetSize++].setAdd(position, 0.95, 0.05, 0.95); + // middle points + if (dotselectors[8]) + targetPoints[targetSize++].setAdd(position, 0.05, 0.5, 0.5); + if (dotselectors[9]) + targetPoints[targetSize++].setAdd(position, 0.5, 0.05, 0.5); + if (dotselectors[10]) + targetPoints[targetSize++].setAdd(position, 0.5, 0.5, 0.05); + if (dotselectors[11]) + targetPoints[targetSize++].setAdd(position, 0.95, 0.5, 0.5); + if (dotselectors[12]) + targetPoints[targetSize++].setAdd(position, 0.5, 0.95, 0.5); + if (dotselectors[13]) + targetPoints[targetSize++].setAdd(position, 0.5, 0.5, 0.95); + + return isVisible(viewerPosition, targetPoints, targetSize); + } + + private boolean rayIntersection(int[] b, Vec3d rayOrigin, Vec3d rayDir) { + Vec3d rInv = new Vec3d(1, 1, 1).div(rayDir); + + double t1 = (b[0] - rayOrigin.x) * rInv.x; + double t2 = (b[0] + 1 - rayOrigin.x) * rInv.x; + double t3 = (b[1] - rayOrigin.y) * rInv.y; + double t4 = (b[1] + 1 - rayOrigin.y) * rInv.y; + double t5 = (b[2] - rayOrigin.z) * rInv.z; + double t6 = (b[2] + 1 - rayOrigin.z) * rInv.z; + + double tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)), Math.min(t5, t6)); + double tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)), Math.max(t5, t6)); + + // if tmax > 0, ray (line) is intersecting AABB, but the whole AABB is behind us + if (tmax > 0) { + return false; + } + + // if tmin > tmax, ray doesn't intersect AABB + if (tmin > tmax) { + return false; + } + + return true; + } + + public void resetCache() { + this.cache.resetCache(); + } + + private boolean stepRay(Vec3d start, int currentX, int currentY, int currentZ, double distInX, double distInY, + double distInZ, int n, int x_inc, int y_inc, int z_inc, double t_next_y, double t_next_x, double t_next_z) { + allowWallClipping = true; // initially allow rays to go through walls till they are on the outside + // iterate through all intersecting cells (n times) + for (; n > 1; n--) { // n-1 times because we don't want to check the last block + // towards - where from + + // get cached value, 0 means uncached (default) + int cVal = getCacheValue(currentX, currentY, currentZ); + + if (cVal == 2 && !allowWallClipping) { + // block cached as occluding, stop ray + lastHitBlock[0] = currentX; + lastHitBlock[1] = currentY; + lastHitBlock[2] = currentZ; + return false; + } + + if (cVal == 0) { + // save current cell + int chunkX = currentX >> 4; + int chunkZ = currentZ >> 4; + if (!provider.prepareChunk(chunkX, chunkZ)) { // Chunk not ready + return false; + } + + if (provider.isOpaqueFullCube(currentX, currentY, currentZ)) { + if (!allowWallClipping) { + cache.setLastHidden(); + lastHitBlock[0] = currentX; + lastHitBlock[1] = currentY; + lastHitBlock[2] = currentZ; + return false; + } + } else { + // outside of wall, now clipping is not allowed + allowWallClipping = false; + cache.setLastVisible(); + } + } + + if (cVal == 1) { + // outside of wall, now clipping is not allowed + allowWallClipping = false; + } + + if (t_next_y < t_next_x && t_next_y < t_next_z) { // next cell is upwards/downwards because the distance to + // the next vertical + // intersection point is smaller than to the next horizontal intersection point + currentY += y_inc; // move up/down + t_next_y += distInY; // update next vertical intersection point + } else if (t_next_x < t_next_y && t_next_x < t_next_z) { // next cell is right/left + currentX += x_inc; // move right/left + t_next_x += distInX; // update next horizontal intersection point + } else { + currentZ += z_inc; // move right/left + t_next_z += distInZ; // update next horizontal intersection point + } + + } + return true; + } + +} diff --git a/src/main/java/com/logisticscraft/occlusionculling/cache/ArrayOcclusionCache.java b/src/main/java/com/logisticscraft/occlusionculling/cache/ArrayOcclusionCache.java new file mode 100644 index 00000000..4978f61a --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/cache/ArrayOcclusionCache.java @@ -0,0 +1,57 @@ +package com.logisticscraft.occlusionculling.cache; + +import java.util.Arrays; + +public class ArrayOcclusionCache implements OcclusionCache { + + private final int reachX2; + private final byte[] cache; + private int positionKey; + private int entry; + private int offset; + + public ArrayOcclusionCache(int reach) { + this.reachX2 = reach * 2; + this.cache = new byte[(reachX2 * reachX2 * reachX2) / 4]; + } + + @Override + public int getState(int x, int y, int z) { + positionKey = x + y * reachX2 + z * reachX2 * reachX2; + entry = positionKey / 4; + offset = (positionKey % 4) * 2; + return cache[entry] >> offset & 3; + } + + @Override + public void resetCache() { + Arrays.fill(cache, (byte) 0); + } + + @Override + public void setHidden(int x, int y, int z) { + positionKey = x + y * reachX2 + z * reachX2 * reachX2; + entry = positionKey / 4; + offset = (positionKey % 4) * 2; + cache[entry] |= 1 << offset + 1; + } + + @Override + public void setLastHidden() { + cache[entry] |= 1 << offset + 1; + } + + @Override + public void setLastVisible() { + cache[entry] |= 1 << offset; + } + + @Override + public void setVisible(int x, int y, int z) { + positionKey = x + y * reachX2 + z * reachX2 * reachX2; + entry = positionKey / 4; + offset = (positionKey % 4) * 2; + cache[entry] |= 1 << offset; + } + +} diff --git a/src/main/java/com/logisticscraft/occlusionculling/cache/OcclusionCache.java b/src/main/java/com/logisticscraft/occlusionculling/cache/OcclusionCache.java new file mode 100644 index 00000000..60a360f4 --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/cache/OcclusionCache.java @@ -0,0 +1,17 @@ +package com.logisticscraft.occlusionculling.cache; + +public interface OcclusionCache { + + int getState(int x, int y, int z); + + void resetCache(); + + void setHidden(int x, int y, int z); + + void setLastHidden(); + + void setLastVisible(); + + void setVisible(int x, int y, int z); + +} diff --git a/src/main/java/com/logisticscraft/occlusionculling/util/MathUtilities.java b/src/main/java/com/logisticscraft/occlusionculling/util/MathUtilities.java new file mode 100644 index 00000000..84a25d60 --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/util/MathUtilities.java @@ -0,0 +1,25 @@ +package com.logisticscraft.occlusionculling.util; + +/** + * Contains MathHelper methods + */ +public final class MathUtilities { + + public static int ceil(double d) { + int i = (int) d; + return d > (double) i ? i + 1 : i; + } + + public static int fastFloor(double d) { + return (int) (d + 1024.0) - 1024; + } + + public static int floor(double d) { + int i = (int) d; + return d < (double) i ? i - 1 : i; + } + + private MathUtilities() { + } + +} diff --git a/src/main/java/com/logisticscraft/occlusionculling/util/Vec3d.java b/src/main/java/com/logisticscraft/occlusionculling/util/Vec3d.java new file mode 100644 index 00000000..aa3d6798 --- /dev/null +++ b/src/main/java/com/logisticscraft/occlusionculling/util/Vec3d.java @@ -0,0 +1,88 @@ +package com.logisticscraft.occlusionculling.util; + +public class Vec3d { + + public double x; + public double y; + public double z; + + public Vec3d(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Vec3d div(Vec3d rayDir) { + this.x /= rayDir.x; + this.z /= rayDir.z; + this.y /= rayDir.y; + return this; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof Vec3d)) { + return false; + } + Vec3d vec3d = (Vec3d) other; + if (Double.compare(vec3d.x, x) != 0) { + return false; + } + if (Double.compare(vec3d.y, y) != 0) { + return false; + } + return Double.compare(vec3d.z, z) == 0; + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getZ() { + return z; + } + + @Override + public int hashCode() { + long l = Double.doubleToLongBits(x); + int i = (int) (l ^ l >>> 32); + l = Double.doubleToLongBits(y); + i = 31 * i + (int) (l ^ l >>> 32); + l = Double.doubleToLongBits(z); + i = 31 * i + (int) (l ^ l >>> 32); + return i; + } + + public Vec3d normalize() { + double mag = Math.sqrt(x * x + y * y + z * z); + this.x /= mag; + this.y /= mag; + this.z /= mag; + return this; + } + + public void set(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public void setAdd(Vec3d vec, double x, double y, double z) { + this.x = vec.x + x; + this.y = vec.y + y; + this.z = vec.z + z; + } + + @Override + public String toString() { + return "(" + x + ", " + y + ", " + z + ")"; + } + +} diff --git a/src/main/java/javax/annotation/Generated.java b/src/main/java/javax/annotation/Generated.java index e7761c17..839dd7fd 100644 --- a/src/main/java/javax/annotation/Generated.java +++ b/src/main/java/javax/annotation/Generated.java @@ -75,7 +75,7 @@ import java.lang.annotation.Target; * The comment element is a place holder for any comments that the * code generator may want to include in the generated code. *

- * + * * @since 1.6, Common Annotations 1.0 */ diff --git a/src/main/java/javax/annotation/MatchesPattern.java b/src/main/java/javax/annotation/MatchesPattern.java index a794c96c..2dc3804e 100644 --- a/src/main/java/javax/annotation/MatchesPattern.java +++ b/src/main/java/javax/annotation/MatchesPattern.java @@ -21,6 +21,7 @@ import javax.annotation.meta.When; @Retention(RetentionPolicy.RUNTIME) public @interface MatchesPattern { static class Checker implements TypeQualifierValidator { + @Override public When forConstantValue(MatchesPattern annotation, Object value) { Pattern p = Pattern.compile(annotation.value(), annotation.flags()); if (p.matcher(((String) value)).matches()) diff --git a/src/main/java/javax/annotation/Nonnegative.java b/src/main/java/javax/annotation/Nonnegative.java index 18f50cbf..079278bd 100644 --- a/src/main/java/javax/annotation/Nonnegative.java +++ b/src/main/java/javax/annotation/Nonnegative.java @@ -21,6 +21,7 @@ import javax.annotation.meta.When; public @interface Nonnegative { class Checker implements TypeQualifierValidator { + @Override public When forConstantValue(Nonnegative annotation, Object v) { if (!(v instanceof Number)) return When.NEVER; diff --git a/src/main/java/javax/annotation/Nonnull.java b/src/main/java/javax/annotation/Nonnull.java index 2b05d3e8..219d5104 100644 --- a/src/main/java/javax/annotation/Nonnull.java +++ b/src/main/java/javax/annotation/Nonnull.java @@ -22,6 +22,7 @@ import javax.annotation.meta.When; public @interface Nonnull { class Checker implements TypeQualifierValidator { + @Override public When forConstantValue(Nonnull qualifierArgument, Object value) { if (value == null) return When.NEVER; diff --git a/src/main/java/javax/annotation/RegEx.java b/src/main/java/javax/annotation/RegEx.java index 2b332f20..c803e6a5 100644 --- a/src/main/java/javax/annotation/RegEx.java +++ b/src/main/java/javax/annotation/RegEx.java @@ -24,6 +24,7 @@ import javax.annotation.meta.When; public @interface RegEx { static class Checker implements TypeQualifierValidator { + @Override public When forConstantValue(RegEx annotation, Object value) { if (!(value instanceof String)) return When.NEVER; diff --git a/src/main/java/javax/annotation/concurrent/NotThreadSafe.java b/src/main/java/javax/annotation/concurrent/NotThreadSafe.java index 596f0b2f..dce4e3aa 100644 --- a/src/main/java/javax/annotation/concurrent/NotThreadSafe.java +++ b/src/main/java/javax/annotation/concurrent/NotThreadSafe.java @@ -17,7 +17,7 @@ import java.lang.annotation.Target; * annotation primarily exists for clarifying the non-thread-safety of a class * that might otherwise be assumed to be thread-safe, despite the fact that it * is a bad idea to assume a class is thread-safe without good reason. - * + * * @see ThreadSafe */ @Documented diff --git a/src/main/java/javax/annotation/meta/Exclusive.java b/src/main/java/javax/annotation/meta/Exclusive.java index a9dae890..37fa8da8 100644 --- a/src/main/java/javax/annotation/meta/Exclusive.java +++ b/src/main/java/javax/annotation/meta/Exclusive.java @@ -7,12 +7,12 @@ import java.lang.annotation.RetentionPolicy; /** * This annotation can be applied to the value() element of an annotation that * is annotated as a TypeQualifier. - * + * *

* For example, the following defines a type qualifier such that if you know a * value is {@literal @Foo(1)}, then the value cannot be {@literal @Foo(2)} or * {{@literal @Foo(3)}. - * + * *

  * @TypeQualifier
  * @interface Foo {
@@ -20,7 +20,7 @@ import java.lang.annotation.RetentionPolicy;
  * 	int value();
  * }
  * 
- * + * */ @Documented diff --git a/src/main/java/javax/annotation/meta/Exhaustive.java b/src/main/java/javax/annotation/meta/Exhaustive.java index 9b1cb863..f921824d 100644 --- a/src/main/java/javax/annotation/meta/Exhaustive.java +++ b/src/main/java/javax/annotation/meta/Exhaustive.java @@ -8,25 +8,25 @@ import java.lang.annotation.RetentionPolicy; * This annotation can be applied to the value() element of an annotation that * is annotated as a TypeQualifier. This is only appropriate if the value field * returns a value that is an Enumeration. - * + * *

* Applications of the type qualifier with different values are exclusive, and * the enumeration is an exhaustive list of the possible values. - * + * *

* For example, the following defines a type qualifier such that if you know a * value is neither {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)}, * then the value must be {@literal @Foo(Color.Green)}. And if you know it is * {@literal @Foo(Color.Green)}, you know it cannot be * {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)} - * + * *

  * @TypeQualifier
  * @interface Foo {
  * 	enum Color {
  * 		RED, BLUE, GREEN
  * 	};
- * 
+ *
  * 	@Exhaustive
  * 	Color value();
  * }
diff --git a/src/main/java/javax/annotation/meta/TypeQualifierNickname.java b/src/main/java/javax/annotation/meta/TypeQualifierNickname.java
index d24e271b..19f39dc9 100644
--- a/src/main/java/javax/annotation/meta/TypeQualifierNickname.java
+++ b/src/main/java/javax/annotation/meta/TypeQualifierNickname.java
@@ -9,11 +9,11 @@ import java.lang.annotation.Target;
  * a qualifier nickname. Applying a nickname annotation X to a element Y should
  * be interpreted as having the same meaning as applying all of annotations of X
  * (other than QualifierNickname) to Y.
- * 
+ *
  * 

* Thus, you might define a qualifier SocialSecurityNumber as follows: *

- * + * *
  * @Documented
  * @TypeQualifierNickname
diff --git a/src/main/java/javax/annotation/meta/TypeQualifierValidator.java b/src/main/java/javax/annotation/meta/TypeQualifierValidator.java
index 597f139a..e1624c5a 100644
--- a/src/main/java/javax/annotation/meta/TypeQualifierValidator.java
+++ b/src/main/java/javax/annotation/meta/TypeQualifierValidator.java
@@ -8,7 +8,7 @@ public interface TypeQualifierValidator {
 	/**
 	 * Given a type qualifier, check to see if a known specific constant value is an
 	 * instance of the set of values denoted by the qualifier.
-	 * 
+	 *
 	 * @param annotation the type qualifier
 	 * @param value      the value to check
 	 * @return a value indicating whether or not the value is an member of the
diff --git a/src/main/java/javax/annotation/meta/When.java b/src/main/java/javax/annotation/meta/When.java
index 15faf384..9f6c0b29 100644
--- a/src/main/java/javax/annotation/meta/When.java
+++ b/src/main/java/javax/annotation/meta/When.java
@@ -3,12 +3,12 @@ package javax.annotation.meta;
 /**
  * Used to describe the relationship between a qualifier T and the set of values
  * S possible on an annotated element.
- * 
+ *
  * In particular, an issues should be reported if an ALWAYS or MAYBE value is
  * used where a NEVER value is required, or if a NEVER or MAYBE value is used
  * where an ALWAYS value is required.
- * 
- * 
+ *
+ *
  */
 public enum When {
 	/** S is a subset of T */
diff --git a/src/main/java/javax/annotation/sql/DataSourceDefinition.java b/src/main/java/javax/annotation/sql/DataSourceDefinition.java
index 03a14cee..cf80e80d 100644
--- a/src/main/java/javax/annotation/sql/DataSourceDefinition.java
+++ b/src/main/java/javax/annotation/sql/DataSourceDefinition.java
@@ -70,7 +70,7 @@ import java.lang.annotation.Target;
  * annotation element, the precedence order is undefined and implementation
  * specific:
  * 

- * + * *

  *   @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
  *      className="org.apache.derby.jdbc.ClientDataSource",
@@ -92,7 +92,7 @@ import java.lang.annotation.Target;
  * annotation element, the annotation element value takes precedence. For
  * example:
  * 

- * + * *

  *   @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
  *      className="org.apache.derby.jdbc.ClientDataSource",
@@ -129,7 +129,7 @@ import java.lang.annotation.Target;
  * configuration property may be ignored.
  * 

* Examples:
- * + * *

  *   @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
  *      className="com.foobar.MyDataSource",
@@ -138,11 +138,11 @@ import java.lang.annotation.Target;
  *      user="lance",
  *      password="secret"
  *   )
- * 
+ *
  * 
*

* Using a URL:
- * + * *

  *  @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
  *    className="org.apache.derby.jdbc.ClientDataSource",
@@ -153,7 +153,7 @@ import java.lang.annotation.Target;
  * 
*

* An example lookup of the DataSource from an EJB: - * + * *

  * @Stateless
  * public class MyStatelessEJB {
@@ -163,7 +163,7 @@ import java.lang.annotation.Target;
  * }
  * 
*

- * + * * @see javax.sql.DataSource * @see javax.sql.XADataSource * @see javax.sql.ConnectionPoolDataSource @@ -178,21 +178,21 @@ public @interface DataSourceDefinition { * Name of a DataSource class that implements javax.sql.DataSource * or javax.sql.XADataSource or * javax.sql.ConnectionPoolDataSource. - * + * * @since 1.1 */ String className(); /** * Name of a database on a server. - * + * * @since 1.1 */ String databaseName() default ""; /** * Description of this data source - * + * * @since 1.1 */ String description() default ""; @@ -202,7 +202,7 @@ public @interface DataSourceDefinition { * initialized. *

* Default is vendor-specific - * + * * @since 1.1 */ int initialPoolSize() default -1; @@ -220,7 +220,7 @@ public @interface DataSourceDefinition { * *

* Default is vendor-specific. - * + * * @since 1.1 */ int isolationLevel() default -1; @@ -232,7 +232,7 @@ public @interface DataSourceDefinition { * specifies that there is no timeout. *

* Default is vendor-specific. - * + * * @since 1.1 */ int loginTimeout() default 0; @@ -242,7 +242,7 @@ public @interface DataSourceDefinition { * pool before the connection is closed for a connection pool. *

* Default is vendor-specific - * + * * @since 1.1 */ int maxIdleTime() default -1; @@ -252,7 +252,7 @@ public @interface DataSourceDefinition { * connection pool. *

* Default is vendor-specific. - * + * * @since 1.1 */ int maxPoolSize() default -1; @@ -263,7 +263,7 @@ public @interface DataSourceDefinition { * connection pool. *

* Default is vendor-specific - * + * * @since 1.1 */ int maxStatements() default -1; @@ -272,28 +272,28 @@ public @interface DataSourceDefinition { * Minimum number of connections that should be allocated for a connection pool. *

* Default is vendor-specific. - * + * * @since 1.1 */ int minPoolSize() default -1; /** * JNDI name by which the data source will be registered. - * + * * @since 1.1 */ String name(); /** * Password to use for connection authentication. - * + * * @since 1.1 */ String password() default ""; /** * Port number where a server is listening for requests. - * + * * @since 1.1 */ int portNumber() default -1; @@ -315,14 +315,14 @@ public @interface DataSourceDefinition { * If a DataSource property is specified in the properties element * and the annotation element for the property is also specified, the annotation * element value takes precedence. - * + * * @since 1.1 */ String[] properties() default {}; /** * Database server name. - * + * * @since 1.1 */ String serverName() default "localhost"; @@ -332,7 +332,7 @@ public @interface DataSourceDefinition { * transactions. *

* Default is to enlist in a transaction when one is active or becomes active. - * + * * @since 1.1 */ boolean transactional() default true; @@ -341,14 +341,14 @@ public @interface DataSourceDefinition { * A JDBC URL. If the url annotation element contains a DataSource * property that was also specified using the corresponding annotation element, * the precedence order is undefined and implementation specific. - * + * * @since 1.1 */ String url() default ""; /** * User name to use for connection authentication. - * + * * @since 1.1 */ String user() default ""; diff --git a/src/main/java/javax/annotation/sql/DataSourceDefinitions.java b/src/main/java/javax/annotation/sql/DataSourceDefinitions.java index d2a0ec4c..ca1288be 100644 --- a/src/main/java/javax/annotation/sql/DataSourceDefinitions.java +++ b/src/main/java/javax/annotation/sql/DataSourceDefinitions.java @@ -47,7 +47,7 @@ import java.lang.annotation.Target; /** * Declares one or more DataSourceDefinition annotations. - * + * * @see javax.annotation.sql.DataSourceDefinition * @since Common Annotations 1.1 */ diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/ArrayUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/ArrayUtils.java index 13826f29..abaade4f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/ArrayUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/ArrayUtils.java @@ -6,7 +6,7 @@ import net.minecraft.client.settings.KeyBinding; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.settings.KeyBinding; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ArrayUtils { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Base64.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Base64.java index ad892688..1e17001e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Base64.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Base64.java @@ -283,7 +283,7 @@ public class Base64 extends BaseNCodec { * Encodes binary data using a URL-safe variation of the base64 algorithm but * does not chunk the output. The url-safe variation emits - and _ instead of + * and / characters. Note: no padding is added. - * + * * @param binaryData binary data to encode * @return byte[] containing Base64 characters in their UTF-8 representation. * @since 1.4 @@ -296,7 +296,7 @@ public class Base64 extends BaseNCodec { * Encodes binary data using a URL-safe variation of the base64 algorithm but * does not chunk the output. The url-safe variation emits - and _ instead of + * and / characters. Note: no padding is added. - * + * * @param binaryData binary data to encode * @return String containing Base64 characters * @since 1.4 @@ -864,4 +864,4 @@ public class Base64 extends BaseNCodec { } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/BaseNCodec.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/BaseNCodec.java index 3f02e473..834452e6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/BaseNCodec.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/BaseNCodec.java @@ -213,7 +213,7 @@ public abstract class BaseNCodec { /** * Checks if a byte value is whitespace or not. Whitespace is taken to mean: * space, tab, CR, LF - * + * * @param byteToCheck the byte to check * @return true if byte is whitespace, false otherwise */ @@ -231,7 +231,7 @@ public abstract class BaseNCodec { /** * Increases our buffer by the {@link #DEFAULT_BUFFER_RESIZE_FACTOR}. - * + * * @param context the context to be used * @param minCapacity the minimum required capacity * @return the resized byte[] buffer @@ -312,7 +312,7 @@ public abstract class BaseNCodec { * Note {@code lineLength} is rounded down to the nearest multiple of the * encoded block size. If {@code chunkSeparatorLength} is zero, then chunking is * disabled. - * + * * @param unencodedBlockSize the size of an unencoded block (e.g. Base64 = 3) * @param encodedBlockSize the size of an encoded block (e.g. Base64 = 4) * @param lineLength if > 0, use chunking with a length @@ -328,7 +328,7 @@ public abstract class BaseNCodec { * Note {@code lineLength} is rounded down to the nearest multiple of the * encoded block size. If {@code chunkSeparatorLength} is zero, then chunking is * disabled. - * + * * @param unencodedBlockSize the size of an unencoded block (e.g. Base64 = 3) * @param encodedBlockSize the size of an encoded block (e.g. Base64 = 4) * @param lineLength if > 0, use chunking with a length @@ -345,7 +345,7 @@ public abstract class BaseNCodec { * Note {@code lineLength} is rounded down to the nearest multiple of the * encoded block size. If {@code chunkSeparatorLength} is zero, then chunking is * disabled. - * + * * @param unencodedBlockSize the size of an unencoded block (e.g. Base64 = 3) * @param encodedBlockSize the size of an encoded block (e.g. Base64 = 4) * @param lineLength if > 0, use chunking with a length @@ -550,7 +550,7 @@ public abstract class BaseNCodec { /** * Returns the decoding behavior policy. - * + * *

* The default is lenient. If the decoding policy is strict, then decoding will * raise an {@link IllegalArgumentException} if trailing bits are not part of a @@ -691,4 +691,4 @@ public abstract class BaseNCodec { } return context.eof ? EOF : 0; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/ClientUUIDLoadingCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/ClientUUIDLoadingCache.java index 117ae6e3..8cedc15a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/ClientUUIDLoadingCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/ClientUUIDLoadingCache.java @@ -14,7 +14,7 @@ import net.minecraft.entity.player.EntityPlayerMP; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.entity.player.EntityPlayerMP; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientUUIDLoadingCache { @@ -77,9 +77,9 @@ public class ClientUUIDLoadingCache { /** * For client devs, allows you to get EaglercraftVersion.clientBrandUUID of * other players on a server, to detect other players who also use your client. - * + * * Requires EaglerXBungee 1.3.0 or EaglerXVelocity 1.1.0 - * + * * @return NULL_UUID if not found, PENDING_UUID if pending, VANILLA_UUID if * vanilla, or the remote player's client's * EaglercraftVersion.clientBrandUUID diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/DecoderException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/DecoderException.java index febc3d51..e816744c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/DecoderException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/DecoderException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DecoderException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Display.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Display.java index c71a3c7d..800e2ae8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Display.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Display.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,16 +16,13 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Display { - private static long lastSwap = 0l; private static long lastDPIUpdate = -250l; private static float cacheDPI = 1.0f; - private static final long[] defaultSyncPtr = new long[1]; - public static boolean contextLost() { return PlatformInput.contextLost(); } @@ -95,39 +92,6 @@ public class Display { return PlatformInput.supportsFullscreen(); } - public static void sync(int limitFramerate) { - sync(limitFramerate, defaultSyncPtr); - } - - public static boolean sync(int limitFramerate, long[] timerPtr) { - boolean limitFPS = limitFramerate > 0 && limitFramerate < 1000; - boolean blocked = false; - - if (limitFPS) { - if (timerPtr[0] == 0l) { - timerPtr[0] = EagRuntime.steadyTimeMillis(); - } else { - long millis = EagRuntime.steadyTimeMillis(); - long frameMillis = (1000l / limitFramerate); - long frameTime = millis - timerPtr[0]; - if (frameTime > 2000l || frameTime < 0l) { - frameTime = frameMillis; - timerPtr[0] = millis; - } else { - timerPtr[0] += frameMillis; - } - if (frameTime >= 0l && frameTime < frameMillis) { - EagUtils.sleep(frameMillis - frameTime); - blocked = true; - } - } - } else { - timerPtr[0] = 0l; - } - - return blocked; - } - public static void toggleFullscreen() { PlatformInput.toggleFullscreen(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java index bb993fc3..535d3300 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java @@ -30,7 +30,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -42,7 +42,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EagRuntime { @@ -264,6 +264,9 @@ public class EagRuntime { } public static String getStackTrace(Throwable t) { + if (t == null) { + return "[null]"; + } StringBuilder sb = new StringBuilder(); getStackTrace0(t, sb); Throwable c = t.getCause(); @@ -276,6 +279,8 @@ public class EagRuntime { } public static void getStackTrace(Throwable t, Consumer ret) { + if (t == null) + return; PlatformRuntime.getStackTrace(t, ret); } @@ -287,6 +292,8 @@ public class EagRuntime { } public static String[] getStackTraceElements(Throwable t) { + if (t == null) + return new String[0]; List lst = new ArrayList<>(); PlatformRuntime.getStackTrace(t, (s) -> { lst.add(s); @@ -310,6 +317,10 @@ public class EagRuntime { PlatformRuntime.immediateContinue(); } + public static boolean immediateContinueSupported() { + return PlatformRuntime.immediateContinueSupported(); + } + public static boolean isOfflineDownloadURL() { return offlineDownloadURL; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagUtils.java index 9bcf82ea..21738964 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagUtils.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EagUtils { @@ -79,6 +79,11 @@ public class EagUtils { PlatformRuntime.sleep(reduced); } + public static void sleepPrint(String string) { + System.out.println(string); + PlatformRuntime.sleep(500); + } + public static String toASCIIEagler(String str) { char[] ascii = new char[str.length()]; for (int i = 0; i < ascii.length; ++i) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java index 47f6aa40..41c2b556 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerInputStream.java @@ -8,7 +8,7 @@ import java.util.Arrays; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerInputStream extends InputStream { @@ -46,6 +46,16 @@ public class EaglerInputStream extends InputStream { } } + public static byte[] inputStreamToBytesNoClose(InputStream is) throws IOException { + EaglerOutputStream os = new EaglerOutputStream(1024); + byte[] buf = new byte[1024]; + int i; + while ((i = is.read(buf)) != -1) { + os.write(buf, 0, i); + } + return os.toByteArray(); + } + public static byte[] inputStreamToBytesQuiet(InputStream is) { if (is == null) { return null; @@ -58,6 +68,7 @@ public class EaglerInputStream extends InputStream { } protected byte buf[]; + protected int pos; protected int mark = 0; @@ -77,6 +88,7 @@ public class EaglerInputStream extends InputStream { this.count = buf.length; } + @Override public int available() { return count - pos; } @@ -85,6 +97,7 @@ public class EaglerInputStream extends InputStream { return pos == 0 && count == buf.length; } + @Override public void close() throws IOException { } @@ -110,18 +123,22 @@ public class EaglerInputStream extends InputStream { return pos; } + @Override public void mark(int readAheadLimit) { mark = pos; } + @Override public boolean markSupported() { return true; } + @Override public int read() { return (pos < count) ? (buf[pos++] & 0xff) : -1; } + @Override public int read(byte b[], int off, int len) { if (pos >= count) { return -1; @@ -139,21 +156,25 @@ public class EaglerInputStream extends InputStream { return len; } + @Override public byte[] readAllBytes() { byte[] result = Arrays.copyOfRange(buf, pos, count); pos = count; return result; } + @Override public int readNBytes(byte[] b, int off, int len) { int n = read(b, off, len); return n == -1 ? 0 : n; } + @Override public void reset() { pos = mark; } + @Override public long skip(long n) { long k = count - pos; if (n < k) { @@ -164,6 +185,7 @@ public class EaglerInputStream extends InputStream { return k; } + @Override public long transferTo(OutputStream out) throws IOException { int len = count - pos; out.write(buf, pos, len); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerOutputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerOutputStream.java index cfd40b80..7a78441b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerOutputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerOutputStream.java @@ -6,7 +6,7 @@ import java.util.Arrays; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerOutputStream extends OutputStream { @@ -36,6 +36,7 @@ public class EaglerOutputStream extends OutputStream { buf = new byte[size]; } + @Override public void close() throws IOException { } @@ -63,12 +64,14 @@ public class EaglerOutputStream extends OutputStream { return Arrays.copyOf(buf, count); } + @Override public void write(byte b[], int off, int len) { ensureCapacity(count + len); System.arraycopy(b, off, buf, count, len); count += len; } + @Override public void write(int b) { ensureCapacity(count + 1); buf[count] = (byte) b; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerXBungeeVersion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerXBungeeVersion.java index 343692b5..1547a1cf 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerXBungeeVersion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerXBungeeVersion.java @@ -4,7 +4,7 @@ import org.json.JSONObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import org.json.JSONObject; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerXBungeeVersion { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerZLIB.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerZLIB.java index a32f1427..e991924b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerZLIB.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglerZLIB.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerZLIB { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java index 4225f8e7..f06c9ba2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftRandom.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglercraftRandom { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftSoundManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftSoundManager.java index 4760b6ec..299341dc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftSoundManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftSoundManager.java @@ -21,13 +21,12 @@ import net.minecraft.client.audio.SoundHandler; import net.minecraft.client.audio.SoundPoolEntry; import net.minecraft.client.settings.GameSettings; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ITickable; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,11 +38,11 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglercraftSoundManager { - protected static class ActiveSoundEvent { + protected class ActiveSoundEvent { protected final EaglercraftSoundManager manager; @@ -89,15 +88,12 @@ public class EaglercraftSoundManager { activeZ = z; } if (pitch != activePitch) { - soundHandle.pitch(MathHelper.clamp_float(pitch * (float) soundConfig.getPitch(), 0.5f, 2.0f)); + soundHandle.pitch(EaglercraftSoundManager.this.getNormalizedPitch(soundInstance, soundConfig)); activePitch = pitch; } if (gain != activeGain) { - float attenuatedGain = gain * manager.categoryVolumes[SoundCategory.MASTER.getCategoryId()] - * (soundCategory == SoundCategory.MASTER ? 1.0f - : manager.categoryVolumes[soundCategory.getCategoryId()]) - * (float) soundConfig.getVolume(); - soundHandle.gain(MathHelper.clamp_float(attenuatedGain, 0.0f, 1.0f)); + soundHandle.gain( + EaglercraftSoundManager.this.getNormalizedVolume(soundInstance, soundConfig, soundCategory)); activeGain = gain; } } @@ -146,6 +142,17 @@ public class EaglercraftSoundManager { queuedSounds = new LinkedList<>(); } + private float getNormalizedPitch(ISound sound, SoundPoolEntry entry) { + return MathHelper.clamp_float(sound.getPitch() * (float) entry.getPitch(), 0.5f, 2.0f); + } + + private float getNormalizedVolume(ISound sound, SoundPoolEntry entry, SoundCategory category) { + return (float) MathHelper.clamp_double((double) sound.getVolume() * entry.getVolume(), 0.0D, 1.0D) + * (category.getCategoryId() == SoundCategory.MASTER.getCategoryId() ? 1.0f + : categoryVolumes[category.getCategoryId()]) + * categoryVolumes[SoundCategory.MASTER.getCategoryId()]; + } + public boolean isSoundPlaying(ISound sound) { Iterator soundItr = activeSounds.iterator(); while (soundItr.hasNext()) { @@ -206,19 +213,17 @@ public class EaglercraftSoundManager { ActiveSoundEvent newSound = new ActiveSoundEvent(this, sound, accessor.getSoundCategory(), etr, null); - float pitch = MathHelper.clamp_float(newSound.activePitch * (float) etr.getPitch(), 0.5f, 2.0f); - float attenuatedGain = newSound.activeGain - * categoryVolumes[SoundCategory.MASTER.getCategoryId()] - * (accessor.getSoundCategory() == SoundCategory.MASTER ? 1.0f - : categoryVolumes[accessor.getSoundCategory().getCategoryId()]) - * (float) etr.getVolume(); + float pitch = getNormalizedPitch(sound, etr); + float attenuatedGain = getNormalizedVolume(sound, etr, accessor.getSoundCategory()); + boolean repeat = sound.canRepeat(); AttenuationType tp = sound.getAttenuationType(); if (tp == AttenuationType.LINEAR) { newSound.soundHandle = PlatformAudio.beginPlayback(trk, newSound.activeX, newSound.activeY, - newSound.activeZ, attenuatedGain, pitch); + newSound.activeZ, attenuatedGain, pitch, repeat); } else { - newSound.soundHandle = PlatformAudio.beginPlaybackStatic(trk, attenuatedGain, pitch); + newSound.soundHandle = PlatformAudio.beginPlaybackStatic(trk, attenuatedGain, pitch, + repeat); } if (newSound.soundHandle == null) { @@ -277,12 +282,7 @@ public class EaglercraftSoundManager { while (soundItr.hasNext()) { ActiveSoundEvent evt = soundItr.next(); if ((category == SoundCategory.MASTER || evt.soundCategory == category) && !evt.soundHandle.shouldFree()) { - float newVolume = (evt.activeGain = evt.soundInstance.getVolume()) - * categoryVolumes[SoundCategory.MASTER.getCategoryId()] - * (evt.soundCategory == SoundCategory.MASTER ? 1.0f - : categoryVolumes[evt.soundCategory.getCategoryId()]) - * (float) evt.soundConfig.getVolume(); - newVolume = MathHelper.clamp_float(newVolume, 0.0f, 1.0f); + float newVolume = getNormalizedVolume(evt.soundInstance, evt.soundConfig, evt.soundCategory); if (newVolume > 0.0f) { evt.soundHandle.gain(newVolume); } else { @@ -332,34 +332,34 @@ public class EaglercraftSoundManager { Iterator soundItr = activeSounds.iterator(); while (soundItr.hasNext()) { ActiveSoundEvent evt = soundItr.next(); - if (!evt.paused && (evt.soundInstance instanceof ITickable)) { + boolean persist = false; + if (!evt.paused && (evt.soundInstance instanceof ITickableSound)) { boolean destroy = false; - try { - ((ITickable) evt.soundInstance).update(); - if ((evt.soundInstance instanceof ITickableSound) - && ((ITickableSound) evt.soundInstance).isDonePlaying()) { + ITickableSound snd = (ITickableSound) evt.soundInstance; + lbl: { + try { + snd.update(); + if (snd.isDonePlaying()) { + destroy = true; + break lbl; + } + persist = true; + } catch (Throwable t) { + logger.error("Error ticking sound: {}", t.toString()); + logger.error(t); destroy = true; } - } catch (Throwable t) { - logger.error("Error ticking sound: {}", t.toString()); - logger.error(t); - destroy = true; } if (destroy) { if (!evt.soundHandle.shouldFree()) { evt.soundHandle.end(); } soundItr.remove(); + continue; } } if (evt.soundHandle.shouldFree()) { - if (evt.soundInstance.canRepeat()) { - if (!evt.paused && ++evt.repeatCounter > evt.soundInstance.getRepeatDelay()) { - evt.repeatCounter = 0; - evt.updateLocation(); - evt.soundHandle.restart(); - } - } else { + if (!persist) { soundItr.remove(); } } else { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftUUID.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftUUID.java index 2136ce43..0ce181e7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftUUID.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftUUID.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.MD5Digest; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.MD5Digest; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglercraftUUID implements Comparable { @@ -255,4 +255,4 @@ public class EaglercraftUUID implements Comparable { + "-" + digits(lsb, 12)); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java index 344c09c2..eadeda59 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java @@ -2,15 +2,17 @@ package net.lax1dude.eaglercraft.v1_8; import java.math.BigInteger; +import net.starlikeclient.StarlikeClient; + public class EaglercraftVersion { ////////////////////////////////////////////////////////////////////// /// Customize these to fit your fork: - public static final String projectForkName = "Starlike Client"; - public static final String projectForkVersion = "0.3.1"; - public static final String projectForkVendor = "SpeedSlicer and zumbiepig"; + public static final String projectForkName = StarlikeClient.Config.General.projectForkName; + public static final String projectForkVersion = StarlikeClient.Config.General.projectForkVersion; + public static final String projectForkVendor = StarlikeClient.Config.General.projectForkVendor; public static final String projectForkURL = ""; @@ -19,26 +21,27 @@ public class EaglercraftVersion { public static final String projectOriginName = "EaglercraftX"; public static final String projectOriginAuthor = "lax1dude"; public static final String projectOriginRevision = "1.8"; - public static final String projectOriginVersion = "u40"; + public static final String projectOriginVersion = "u46"; public static final String projectOriginURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; // rest in peace // EPK Version Identifier - public static final String EPKVersionIdentifier = projectForkVersion; // Set to null to disable EPK version check + public static final String EPKVersionIdentifier = !StarlikeClient.Config.General.isDevBuild ? projectForkVersion + : null; // Set to null to disable EPK version check // Updating configuration - public static final boolean enableUpdateService = true; + public static final boolean enableUpdateService = false; - public static final String updateBundlePackageName = "dev.zumbiepig.starlikeclient.client"; - public static final int updateBundlePackageVersionInt = 301; // (0.2.1 would be 000201 or just 201) + public static final String updateBundlePackageName = "net.lax1dude.eaglercraft.v1_8.client"; + public static final int updateBundlePackageVersionInt = 46; public static final String updateLatestLocalStorageKey = "latestUpdate_" + updateBundlePackageName; // public key modulus for official 1.8 updates public static final BigInteger updateSignatureModulus = new BigInteger( - "28154007251851793016096675136645490267059674193477673066016405606156842861664902840486152246081162714389866569681190683516064018400350723835699291801143446801871211423563444580124984720927762511096224794499752181575422000985856618499073349425764147909008336707018656178546729409024747183847557655756025152351818612306562908429371421145128154560905733480315537161717618356180392502066269414984054854075976130472279535788141377012879285566510859864540548496184877426481234244151342696367793929688648467759736793075080029025728010655173323780256289815694871723570008993011506495225395230611688881103726309118671731354057"); + "14419476194820052109078379102436982757438300194194974078260570958862225232043861026588258585967060437391326494976080031137298500457111529693806931143421725626747051503616606418909609840275122831550688481329699012469742002429706330734797679859799085213517354399295425740214330234086361416936984593337389989505613123225737002654977194421571825036717017788527234114501215218715499682638139386636103589791643964827904791195488978835113700772208317974307363542114867750505953323167521731238542123593257269990619007858952216110012513121779359926747737258698347806747854986471035713105133999027704095451858121831297923962641"); // Client brand identification system configuration @@ -50,11 +53,11 @@ public class EaglercraftVersion { // Miscellaneous variables: // bottom-left - public static final String mainMenuStringA = "Minecraft 1.8.8*"; - public static final String mainMenuStringB = projectForkName + " " + projectForkVersion; + public static final String[] mainMenuStringLeft = StarlikeClient.Config.General.mainMenuStringLeft; + // bottom-right - public static final String mainMenuStringC = null; - public static final String mainMenuStringD = "Copyright Mojang AB. Do not distribute!"; + public static final String[] mainMenuStringRight = StarlikeClient.Config.General.mainMenuStringRight; + // below logo public static final String mainMenuStringE = null; public static final String mainMenuStringF = null; @@ -62,6 +65,8 @@ public class EaglercraftVersion { public static final String mainMenuStringG = null; public static final String mainMenuStringH = null; + public static final String screenRecordingFilePrefix = StarlikeClient.Config.General.screenRecordingFilePrefix; + public static final long demoWorldSeed = (long) "North Carolina".hashCode(); public static final boolean mainMenuEnableGithubButton = false; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EncoderException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EncoderException.java index 6527c7e9..d4655468 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EncoderException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EncoderException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EncoderException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/ExceptionUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/ExceptionUtils.java index e16af0a0..0a526c1b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/ExceptionUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/ExceptionUtils.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ExceptionUtils { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Filesystem.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Filesystem.java index 6526b8bd..b6d4d526 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Filesystem.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Filesystem.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Filesystem { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Gamepad.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Gamepad.java index ee1681d3..b84b7385 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Gamepad.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Gamepad.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Gamepad { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/HFormatter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/HFormatter.java index c3a12956..d08a271d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/HFormatter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/HFormatter.java @@ -4,9 +4,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -31,8 +31,6 @@ import java.math.BigInteger; import java.math.MathContext; import java.nio.CharBuffer; import java.nio.charset.Charset; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.text.DateFormatSymbols; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -2109,12 +2107,7 @@ public final class HFormatter implements Closeable, Flushable { } if (null == lineSeparator) { - lineSeparator = AccessController.doPrivileged(new PrivilegedAction() { - - public String run() { - return System.getProperty("line.separator"); //$NON-NLS-1$ - } - }); + lineSeparator = System.getProperty("line.separator"); } return lineSeparator; } @@ -2252,11 +2245,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter}. - * + * * The output is written to a {@code StringBuilder} which can be acquired by * invoking {@link #out()} and whose content can be obtained by calling * {@code toString()}. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. */ public HFormatter() { @@ -2266,9 +2259,9 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output will be written to the specified * {@code Appendable}. - * + * * The locale for the {@code Formatter} is the default {@code Locale}. - * + * * @param a the output destination of the {@code Formatter}. If {@code a} is * {@code null}, then a {@code StringBuilder} will be used. */ @@ -2279,7 +2272,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the specified {@code Locale} and whose * output will be written to the specified {@code Appendable}. - * + * * @param a the output destination of the {@code Formatter}. If {@code a} is * {@code null}, then a {@code StringBuilder} will be used. * @param l the {@code Locale} of the {@code Formatter}. If {@code l} is @@ -2297,11 +2290,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output is written to the specified * {@code File}. - * + * * The charset of the {@code Formatter} is the default charset. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param file the {@code File} that is used as the output destination for the * {@code Formatter}. The {@code File} will be truncated to zero * size if the {@code File} exists, or else a new {@code File} will @@ -2322,9 +2315,9 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the given charset, and whose output is * written to the specified {@code File}. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param file the {@code File} that is used as the output destination for the * {@code Formatter}. The {@code File} will be truncated to zero * size if the {@code File} exists, or else a new {@code File} will @@ -2349,7 +2342,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the given {@code Locale} and charset, and * whose output is written to the specified {@code File}. - * + * * @param file the {@code File} that is used as the output destination for the * {@code Formatter}. The {@code File} will be truncated to zero * size if the {@code File} exists, or else a new {@code File} will @@ -2388,11 +2381,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the specified {@code Locale}. - * + * * The output is written to a {@code StringBuilder} which can be acquired by * invoking {@link #out()} and whose content can be obtained by calling * {@code toString()}. - * + * * @param l the {@code Locale} of the {@code Formatter}. If {@code l} is * {@code null}, then no localization will be used. */ @@ -2403,11 +2396,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output is written to the specified * {@code OutputStream}. - * + * * The charset of the {@code Formatter} is the default charset. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param os the stream to be used as the destination of the {@code Formatter}. */ public HFormatter(OutputStream os) { @@ -2419,9 +2412,9 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the given charset, and whose output is * written to the specified {@code OutputStream}. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param os the stream to be used as the destination of the {@code Formatter}. * @param csn the name of the charset for the {@code Formatter}. * @throws UnsupportedEncodingException if the charset with the specified name @@ -2435,7 +2428,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the given {@code Locale} and charset, and * whose output is written to the specified {@code OutputStream}. - * + * * @param os the stream to be used as the destination of the {@code Formatter}. * @param csn the name of the charset for the {@code Formatter}. * @param l the {@code Locale} of the {@code Formatter}. If {@code l} is @@ -2454,11 +2447,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output is written to the specified * {@code PrintStream}. - * + * * The charset of the {@code Formatter} is the default charset. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param ps the {@code PrintStream} used as destination of the * {@code Formatter}. If {@code ps} is {@code null}, then a * {@code NullPointerException} will be raised. @@ -2473,11 +2466,11 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output is written to the specified file. - * + * * The charset of the {@code Formatter} is the default charset. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param fileName the filename of the file that is used as the output * destination for the {@code Formatter}. The file will be * truncated to zero size if the file exists, or else a new file @@ -2498,9 +2491,9 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} whose output is written to the specified file. - * + * * The {@code Locale} for the {@code Formatter} is the default {@code Locale}. - * + * * @param fileName the filename of the file that is used as the output * destination for the {@code Formatter}. The file will be * truncated to zero size if the file exists, or else a new file @@ -2526,7 +2519,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Constructs a {@code Formatter} with the given {@code Locale} and charset, and * whose output is written to the specified file. - * + * * @param fileName the filename of the file that is used as the output * destination for the {@code Formatter}. The file will be * truncated to zero size if the file exists, or else a new file @@ -2562,14 +2555,15 @@ public final class HFormatter implements Closeable, Flushable { /** * Closes the {@code Formatter}. If the output destination is {@link Closeable}, * then the method {@code close()} will be called on that destination. - * + * * If the {@code Formatter} has been closed, then calling the this method will * have no effect. - * + * * Any method but the {@link #ioException()} that is called after the * {@code Formatter} has been closed will raise a * {@code FormatterClosedException}. */ + @Override public void close() { closed = true; try { @@ -2586,9 +2580,10 @@ public final class HFormatter implements Closeable, Flushable { * Flushes the {@code Formatter}. If the output destination is * {@link Flushable}, then the method {@code flush()} will be called on that * destination. - * + * * @throws FormatterClosedException if the {@code Formatter} has been closed. */ + @Override public void flush() { checkClosed(); if (out instanceof Flushable) { @@ -2602,7 +2597,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Writes a formatted string to the output destination of the {@code Formatter}. - * + * * @param l the {@code Locale} used in the method. If {@code locale} is * {@code null}, then no localization will be applied. This * parameter does not influence the {@code Locale} specified @@ -2661,7 +2656,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Writes a formatted string to the output destination of the {@code Formatter}. - * + * * @param format a format string. * @param args the arguments list used in the {@code format()} method. If * there are more arguments than those specified by the format @@ -2704,7 +2699,7 @@ public final class HFormatter implements Closeable, Flushable { * destination. If the {@code append()} method of the destination does not throw * {@code IOException}s, the {@code ioException()} method will always return * {@code null}. - * + * * @return the last {@code IOException} thrown by the {@code Formatter}'s output * destination. */ @@ -2714,7 +2709,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Returns the {@code Locale} of the {@code Formatter}. - * + * * @return the {@code Locale} for the {@code Formatter} or {@code null} for no * {@code Locale}. * @throws FormatterClosedException if the {@code Formatter} has been closed. @@ -2726,7 +2721,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Returns the output destination of the {@code Formatter}. - * + * * @return the output destination of the {@code Formatter}. * @throws FormatterClosedException if the {@code Formatter} has been closed. */ @@ -2738,7 +2733,7 @@ public final class HFormatter implements Closeable, Flushable { /** * Returns the content by calling the {@code toString()} method of the output * destination. - * + * * @return the content by calling the {@code toString()} method of the output * destination. * @throws FormatterClosedException if the {@code Formatter} has been closed. @@ -2748,4 +2743,4 @@ public final class HFormatter implements Closeable, Flushable { checkClosed(); return out.toString(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/HString.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/HString.java index b281d3c9..68628b8c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/HString.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/HString.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HString { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/HashKey.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/HashKey.java index 693ad1d8..ba86771b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/HashKey.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/HashKey.java @@ -4,7 +4,7 @@ import java.util.Arrays; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HashKey { @@ -33,6 +33,7 @@ public class HashKey { this.hash = hashCode; } + @Override public Object clone() { return new HashKey(key, hash); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/IOUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/IOUtils.java index 6c3464f4..077ac202 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/IOUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/IOUtils.java @@ -12,7 +12,7 @@ import java.util.List; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IOUtils { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/JDKBackports.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/JDKBackports.java index 8c954b5c..205f3070 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/JDKBackports.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/JDKBackports.java @@ -4,7 +4,7 @@ import java.util.function.Supplier; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.function.Supplier; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JDKBackports { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Keyboard.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Keyboard.java index 3cf0cf0e..720d519c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Keyboard.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Keyboard.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Keyboard { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Mouse.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Mouse.java index 830787f4..de73a07f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Mouse.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Mouse.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Mouse { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/PauseMenuCustomizeState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/PauseMenuCustomizeState.java index ec8e1520..bcf41393 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/PauseMenuCustomizeState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/PauseMenuCustomizeState.java @@ -18,7 +18,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PauseMenuCustomizeState { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/PointerInputAbstraction.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/PointerInputAbstraction.java index 7a5bd953..d34a6dd2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/PointerInputAbstraction.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/PointerInputAbstraction.java @@ -5,7 +5,7 @@ import net.minecraft.client.Minecraft; /** * Copyright (c) 2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PointerInputAbstraction { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/ThreadLocalRandom.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/ThreadLocalRandom.java index f61d88b1..d18721a1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/ThreadLocalRandom.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/ThreadLocalRandom.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ThreadLocalRandom { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/Touch.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/Touch.java index 66816f18..cc1b6a89 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/Touch.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/Touch.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Touch { @@ -65,14 +65,6 @@ public class Touch { return PlatformInput.touchGetEventTouchRadiusMixed(pointId); } - public static float getEventTouchRadiusX(int pointId) { - return PlatformInput.touchGetEventTouchRadiusX(pointId); - } - - public static float getEventTouchRadiusY(int pointId) { - return PlatformInput.touchGetEventTouchRadiusY(pointId); - } - public static int getEventTouchX(int pointId) { return PlatformInput.touchGetEventTouchX(pointId); } @@ -109,14 +101,6 @@ public class Touch { return PlatformInput.touchRadiusMixed(pointId); } - public static float touchPointRadiusX(int pointId) { - return PlatformInput.touchRadiusX(pointId); - } - - public static float touchPointRadiusY(int pointId) { - return PlatformInput.touchRadiusY(pointId); - } - public static int touchPointUID(int pointId) { return PlatformInput.touchPointUID(pointId); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/boot_menu/GuiScreenEnterBootMenu.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/boot_menu/GuiScreenEnterBootMenu.java index 2fdfb7ff..c9e1d8de 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/boot_menu/GuiScreenEnterBootMenu.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/boot_menu/GuiScreenEnterBootMenu.java @@ -7,7 +7,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenEnterBootMenu extends GuiScreen { @@ -29,12 +29,14 @@ public class GuiScreenEnterBootMenu extends GuiScreen { this.parent = parent; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("enterBootMenu.title"), this.width / 2, 70, 11184810); @@ -42,12 +44,14 @@ public class GuiScreenEnterBootMenu extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { EagRuntime.setDisplayBootMenuNextRefresh(true); this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, I18n.format("gui.cancel"))); } + @Override public void onGuiClosed() { EagRuntime.setDisplayBootMenuNextRefresh(false); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerCacheProvider.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerCacheProvider.java index d098d8ef..968d2726 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerCacheProvider.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerCacheProvider.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.cache; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.cache; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface EaglerCacheProvider { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerLoadingCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerLoadingCache.java index 5c88b440..0734921c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerLoadingCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cache/EaglerLoadingCache.java @@ -5,7 +5,7 @@ import java.util.Map; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.util.Map; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerLoadingCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenInspectSessionToken.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenInspectSessionToken.java index f41c9a96..c8fd6485 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenInspectSessionToken.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenInspectSessionToken.java @@ -10,7 +10,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenInspectSessionToken extends GuiScreen { @@ -34,12 +34,14 @@ public class GuiScreenInspectSessionToken extends GuiScreen { this.cookie = cookie; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); String[][] toDraw = new String[][] { @@ -72,6 +74,7 @@ public class GuiScreenInspectSessionToken extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 106, I18n.format("gui.done"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenRevokeSessionToken.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenRevokeSessionToken.java index bf4436fb..41b01970 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenRevokeSessionToken.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenRevokeSessionToken.java @@ -13,7 +13,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRevokeSessionToken extends GuiScreen { class List extends GuiSlot { @@ -39,20 +39,24 @@ public class GuiScreenRevokeSessionToken extends GuiScreen { Collections.sort(cookieNames); } + @Override protected void drawBackground() { GuiScreenRevokeSessionToken.this.drawDefaultBackground(); } + @Override protected void drawSlot(int i, int var2, int j, int var4, int var5, int var6) { GuiScreenRevokeSessionToken.this.drawCenteredString(GuiScreenRevokeSessionToken.this.fontRendererObj, this.cookieNames.get(i), this.width / 2, j + 1, 16777215); } + @Override protected void elementClicked(int i, boolean var2, int var3, int var4) { selectedElement = i; GuiScreenRevokeSessionToken.this.updateButtons(); } + @Override protected int getContentHeight() { return this.getSize() * 18; } @@ -61,10 +65,12 @@ public class GuiScreenRevokeSessionToken extends GuiScreen { return selectedElement == -1 ? null : cookieNames.get(selectedElement); } + @Override protected int getSize() { return this.cookieNames.size(); } + @Override protected boolean isSelected(int i) { return selectedElement == i; } @@ -80,6 +86,7 @@ public class GuiScreenRevokeSessionToken extends GuiScreen { this.parentScreen = parent; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.enabled) { switch (parGuiButton.id) { @@ -115,6 +122,7 @@ public class GuiScreenRevokeSessionToken extends GuiScreen { } } + @Override public void drawScreen(int i, int j, float f) { this.list.drawScreen(i, j, f); this.drawCenteredString(this.fontRendererObj, I18n.format("revokeSessionToken.title"), this.width / 2, 16, @@ -126,16 +134,19 @@ public class GuiScreenRevokeSessionToken extends GuiScreen { super.drawScreen(i, j, f); } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); this.list.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); this.list.handleTouchInput(); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(this.inspectButton = new GuiButton(10, this.width / 2 - 154, this.height - 38, 100, 20, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenSendRevokeRequest.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenSendRevokeRequest.java index 3149645a..55516cdf 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenSendRevokeRequest.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/GuiScreenSendRevokeRequest.java @@ -15,7 +15,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenSendRevokeRequest extends GuiScreen { @@ -49,6 +49,7 @@ public class GuiScreenSendRevokeRequest extends GuiScreen { this.message = I18n.format("revokeSendingScreen.message.opening", cookie.server); } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { cancelRequested = true; @@ -56,6 +57,7 @@ public class GuiScreenSendRevokeRequest extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, title, this.width / 2, 70, 11184810); @@ -63,11 +65,13 @@ public class GuiScreenSendRevokeRequest extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, I18n.format("gui.cancel"))); } + @Override public void updateScreen() { ++timer; if (timer > 1) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/HardwareFingerprint.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/HardwareFingerprint.java index 0da31213..3e7a56e7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/HardwareFingerprint.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/HardwareFingerprint.java @@ -77,7 +77,7 @@ import net.minecraft.client.renderer.texture.TextureUtil; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -89,7 +89,7 @@ import net.minecraft.client.renderer.texture.TextureUtil; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HardwareFingerprint { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/ServerCookieDataStore.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/ServerCookieDataStore.java index db00d134..cebd30b3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/ServerCookieDataStore.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/cookie/ServerCookieDataStore.java @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerCookieDataStore { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/AESLightEngine.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/AESLightEngine.java index 565e269c..bdb67afd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/AESLightEngine.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/AESLightEngine.java @@ -1,9 +1,9 @@ /* * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * @@ -16,7 +16,7 @@ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ package net.lax1dude.eaglercraft.v1_8.crypto; @@ -139,12 +139,12 @@ public class AESLightEngine { /* * The following defines provide alternative definitions of FFmulX that might * give improved performance if a fast 32-bit multiply is not available. - * + * * private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) * << 1) ^ ((u >>> 3) | (u >>> 6)); } private static final int m4 = 0x1b1b1b1b; * private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u * >>> 7)) & m4); } - * + * */ public static void intToLittleEndian(int n, byte[] bs, int off) { @@ -526,4 +526,4 @@ public class AESLightEngine { public void reset() { } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/GeneralDigest.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/GeneralDigest.java index eb5584b1..6b86ff3e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/GeneralDigest.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/GeneralDigest.java @@ -1,9 +1,9 @@ /* * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * @@ -16,7 +16,7 @@ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ package net.lax1dude.eaglercraft.v1_8.crypto; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/MD5Digest.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/MD5Digest.java index 6d2f051b..616254bd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/MD5Digest.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/MD5Digest.java @@ -1,9 +1,9 @@ /* * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * @@ -16,7 +16,7 @@ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ package net.lax1dude.eaglercraft.v1_8.crypto; @@ -118,6 +118,7 @@ public class MD5Digest extends GeneralDigest { return v ^ (u | ~w); } + @Override protected void processBlock() { int a = H1; int b = H2; @@ -218,6 +219,7 @@ public class MD5Digest extends GeneralDigest { } } + @Override protected void processLength(long bitLength) { if (xOff > 14) { processBlock(); @@ -227,6 +229,7 @@ public class MD5Digest extends GeneralDigest { X[15] = (int) (bitLength >>> 32); } + @Override protected void processWord(byte[] in, int inOff) { X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); @@ -239,6 +242,7 @@ public class MD5Digest extends GeneralDigest { /** * reset the chaining variables to the IV values. */ + @Override public void reset() { super.reset(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA1Digest.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA1Digest.java index 9e78aa3f..66fa3726 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA1Digest.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA1Digest.java @@ -1,9 +1,9 @@ /* * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * @@ -16,7 +16,7 @@ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ package net.lax1dude.eaglercraft.v1_8.crypto; @@ -104,6 +104,7 @@ public class SHA1Digest extends GeneralDigest { return (u ^ v ^ w); } + @Override protected void processBlock() { // // expand 16 word block into 80 word block. @@ -188,6 +189,7 @@ public class SHA1Digest extends GeneralDigest { } } + @Override protected void processLength(long bitLength) { if (xOff > 14) { processBlock(); @@ -197,6 +199,7 @@ public class SHA1Digest extends GeneralDigest { X[15] = (int) (bitLength & 0xffffffff); } + @Override protected void processWord(byte[] in, int inOff) { X[xOff++] = ((in[inOff] & 0xff) << 24) | ((in[inOff + 1] & 0xff) << 16) | ((in[inOff + 2] & 0xff) << 8) | ((in[inOff + 3] & 0xff)); @@ -209,6 +212,7 @@ public class SHA1Digest extends GeneralDigest { /** * reset the chaining variables */ + @Override public void reset() { super.reset(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA256Digest.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA256Digest.java index 3b6246fc..7157b7de 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA256Digest.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/crypto/SHA256Digest.java @@ -1,9 +1,9 @@ /* * Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * @@ -16,7 +16,7 @@ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ package net.lax1dude.eaglercraft.v1_8.crypto; @@ -120,6 +120,7 @@ public class SHA256Digest extends GeneralDigest { return DIGEST_LENGTH; } + @Override protected void processBlock() { // // expand 16 word block into 64 word blocks. @@ -209,6 +210,7 @@ public class SHA256Digest extends GeneralDigest { } } + @Override protected void processLength(long bitLength) { if (xOff > 14) { processBlock(); @@ -218,6 +220,7 @@ public class SHA256Digest extends GeneralDigest { X[15] = (int) (bitLength & 0xffffffff); } + @Override protected void processWord(byte[] in, int inOff) { X[xOff] = bigEndianToInt(in, inOff); @@ -229,6 +232,7 @@ public class SHA256Digest extends GeneralDigest { /** * reset the chaining variables */ + @Override public void reset() { super.reset(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/CancellationException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/CancellationException.java index d3511fe8..e21f53b8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/CancellationException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/CancellationException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.futures; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.futures; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CancellationException extends IllegalStateException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ExecutionException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ExecutionException.java index d15376fd..2661e9ff 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ExecutionException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ExecutionException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.futures; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.futures; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ExecutionException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Executors.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Executors.java index f925282f..8ba4730d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Executors.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Executors.java @@ -4,7 +4,7 @@ import java.util.concurrent.Callable; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.concurrent.Callable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Executors { @@ -29,6 +29,7 @@ public class Executors { this.result = result; } + @Override public T call() { task.run(); return result; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Future.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Future.java index 47a20660..274702ab 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Future.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Future.java @@ -4,7 +4,7 @@ import java.util.concurrent.TimeUnit; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface Future { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/FutureTask.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/FutureTask.java index 1ec3ba99..8f236511 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/FutureTask.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/FutureTask.java @@ -5,7 +5,7 @@ import java.util.concurrent.TimeUnit; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.util.concurrent.TimeUnit; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FutureTask implements RunnableFuture { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Futures.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Futures.java index b4ff68cb..2101c7c3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Futures.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/Futures.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Futures { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFuture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFuture.java index 0231bb8d..a85a960f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFuture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFuture.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ListenableFuture extends Future { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFutureTask.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFutureTask.java index 612fa9c7..58a209e0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFutureTask.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/ListenableFutureTask.java @@ -7,7 +7,7 @@ import java.util.concurrent.Executor; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import java.util.concurrent.Executor; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ListenableFutureTask extends FutureTask implements ListenableFuture { @@ -45,6 +45,7 @@ public class ListenableFutureTask extends FutureTask implements Listenable }); } + @Override protected void done() { for (int i = 0, l = listeners.size(); i < l; ++i) { Runnable r = listeners.get(i); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/RunnableFuture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/RunnableFuture.java index 08685b08..935dc319 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/RunnableFuture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/futures/RunnableFuture.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.futures; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,8 +14,9 @@ package net.lax1dude.eaglercraft.v1_8.futures; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface RunnableFuture extends Runnable, Future { + @Override void run(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/AbstractWebSocketClient.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/AbstractWebSocketClient.java index 3ce5c9c3..f8fcd0ad 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/AbstractWebSocketClient.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/AbstractWebSocketClient.java @@ -7,7 +7,7 @@ import java.util.List; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AbstractWebSocketClient implements IWebSocketClient { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EaglerMissingResourceException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EaglerMissingResourceException.java index 1fcc8729..e2378e8f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EaglerMissingResourceException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EaglerMissingResourceException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerMissingResourceException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumCursorType.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumCursorType.java index 4a24f030..f1994c6c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumCursorType.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumCursorType.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumCursorType { DEFAULT, HAND, TEXT; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumEaglerConnectionState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumEaglerConnectionState.java index 93408a0d..6cab9e6b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumEaglerConnectionState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumEaglerConnectionState.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumEaglerConnectionState { CLOSED(true, false), CONNECTING(false, false), CONNECTED(false, true), FAILED(true, false); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireKeyboardEvent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireKeyboardEvent.java index e1481505..19041e99 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireKeyboardEvent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireKeyboardEvent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumFireKeyboardEvent { KEY_DOWN, KEY_UP, KEY_REPEAT; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireMouseEvent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireMouseEvent.java index d49f344b..f108bab0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireMouseEvent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumFireMouseEvent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumFireMouseEvent { MOUSE_DOWN, MOUSE_UP, MOUSE_MOVE, MOUSE_WHEEL; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformANGLE.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformANGLE.java index f423031a..551e2c1f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformANGLE.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformANGLE.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPlatformANGLE { @@ -75,6 +75,7 @@ public enum EnumPlatformANGLE { this.name = name; } + @Override public String toString() { return id; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformAgent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformAgent.java index 9230369b..d339bb8d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformAgent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformAgent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPlatformAgent { DESKTOP("LWJGL3"), CHROME("Chrome"), EDGE("Edge"), IE("IE"), FIREFOX("Firefox"), SAFARI("Safari"), OPERA("Opera"), @@ -58,6 +58,7 @@ public enum EnumPlatformAgent { return name; } + @Override public String toString() { return name; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformOS.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformOS.java index eccb40e6..600f41c2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformOS.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformOS.java @@ -4,7 +4,7 @@ import net.minecraft.util.Util; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.util.Util; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPlatformOS { WINDOWS("Windows", Util.EnumOS.WINDOWS), MACOS("MacOS", Util.EnumOS.OSX), LINUX("Linux", Util.EnumOS.LINUX), @@ -75,6 +75,7 @@ public enum EnumPlatformOS { return name; } + @Override public String toString() { return name; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformType.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformType.java index 59af2dec..526c5e8f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformType.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumPlatformType.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,10 +14,10 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumPlatformType { - DESKTOP("Desktop"), JAVASCRIPT("JavaScript"), ASM("ASM"); + DESKTOP("Desktop"), JAVASCRIPT("JS"), WASM_GC("WASM-GC"); private final String name; @@ -29,6 +29,7 @@ public enum EnumPlatformType { return name; } + @Override public String toString() { return name; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumServerRateLimit.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumServerRateLimit.java index 122f9eb9..ed76f14d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumServerRateLimit.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumServerRateLimit.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumServerRateLimit { OK, BLOCKED, LOCKED_OUT diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumTouchEvent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumTouchEvent.java index fd9d01b4..23a1bd88 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumTouchEvent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumTouchEvent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumTouchEvent { TOUCHSTART(0), TOUCHMOVE(1), TOUCHEND(2); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumWebViewContentMode.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumWebViewContentMode.java index 1a19b614..98e993bc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumWebViewContentMode.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/EnumWebViewContentMode.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumWebViewContentMode { URL_BASED, BLOB_BASED; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/FileChooserResult.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/FileChooserResult.java index 24926ba6..b7e41144 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/FileChooserResult.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/FileChooserResult.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FileChooserResult { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GLObjectMap.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GLObjectMap.java index 75ec8888..94cfbf21 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GLObjectMap.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GLObjectMap.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GLObjectMap { private Object[] values; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GamepadConstants.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GamepadConstants.java index 109eea12..e53ec0c0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GamepadConstants.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/GamepadConstants.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GamepadConstants { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioCacheLoader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioCacheLoader.java index 1a6fc92e..071d162b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioCacheLoader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioCacheLoader.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,10 +14,10 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAudioCacheLoader { byte[] loadFile(String filename); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioHandle.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioHandle.java index 952090d4..f5db0a43 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioHandle.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioHandle.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAudioHandle { @@ -28,6 +28,8 @@ public interface IAudioHandle { void pitch(float f); + void repeat(boolean en); + void restart(); boolean shouldFree(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioResource.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioResource.java index 58923df4..7c558b6a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioResource.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IAudioResource.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAudioResource { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferArrayGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferArrayGL.java index aba05534..de656dbd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferArrayGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferArrayGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBufferArrayGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferGL.java index 3d1abca6..cf75348c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IBufferGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBufferGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java index 8c696836..e66897a6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayEntry; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayEntry; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IClientConfigAdapter { @@ -90,6 +90,8 @@ public interface IClientConfigAdapter { boolean isEnableWebViewCSP(); + boolean isEnforceVSync(); + boolean isForceProfanityFilter(); boolean isForceWebViewSupport(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java index 3e01419d..d5af0b8e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.function.Consumer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IClientConfigAdapterHooks { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IEaglerFilesystem.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IEaglerFilesystem.java index 950b0641..dcaeab41 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IEaglerFilesystem.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IEaglerFilesystem.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IEaglerFilesystem { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IFramebufferGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IFramebufferGL.java index 1a3f0ff3..85664592 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IFramebufferGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IFramebufferGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IFramebufferGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IObjectGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IObjectGL.java index 1ee6a60a..311d163e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IObjectGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IObjectGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IPCPacketData.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IPCPacketData.java index 06f14f5a..c51dde6a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IPCPacketData.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IPCPacketData.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacketData { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IProgramGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IProgramGL.java index 47a3957d..2db2dedb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IProgramGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IProgramGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProgramGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IQueryGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IQueryGL.java index 80449cd5..0481a183 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IQueryGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IQueryGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IQueryGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IRenderbufferGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IRenderbufferGL.java index 766c39a7..8410095d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IRenderbufferGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IRenderbufferGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRenderbufferGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IResourceHandle.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IResourceHandle.java index ce1428ed..1188c82e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IResourceHandle.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IResourceHandle.java @@ -4,7 +4,7 @@ import java.io.InputStream; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IResourceHandle { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IServerQuery.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IServerQuery.java index db675c49..58b25fbe 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IServerQuery.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IServerQuery.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.EagUtils; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.EagUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IServerQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IShaderGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IShaderGL.java index fa638c59..da3f551c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IShaderGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IShaderGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IShaderGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ITextureGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ITextureGL.java index d1eeb2f9..63cc6e5d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ITextureGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ITextureGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ITextureGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IUniformGL.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IUniformGL.java index 782faa4b..8ba41c27 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IUniformGL.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IUniformGL.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IUniformGL extends IObjectGL { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketClient.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketClient.java index b46f3a00..94a7ada9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketClient.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketClient.java @@ -4,7 +4,7 @@ import java.util.List; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IWebSocketClient { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketFrame.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketFrame.java index 9aa73e34..ff92a700 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketFrame.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IWebSocketFrame.java @@ -4,7 +4,7 @@ import java.io.InputStream; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IWebSocketFrame { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/KeyboardConstants.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/KeyboardConstants.java index 9b66d6b9..a88862b7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/KeyboardConstants.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/KeyboardConstants.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class KeyboardConstants { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformIncompatibleException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformIncompatibleException.java index dd2f518b..c0f5ebf2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformIncompatibleException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformIncompatibleException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformIncompatibleException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/QueryResponse.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/QueryResponse.java index 1ea6be13..794348ee 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/QueryResponse.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/QueryResponse.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class QueryResponse { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RamdiskFilesystemImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RamdiskFilesystemImpl.java index 08059485..6802d329 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RamdiskFilesystemImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RamdiskFilesystemImpl.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RamdiskFilesystemImpl implements IEaglerFilesystem { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RuntimeInitializationFailureException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RuntimeInitializationFailureException.java index 9615fe91..315e21b1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RuntimeInitializationFailureException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/RuntimeInitializationFailureException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RuntimeInitializationFailureException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ScreenRecordParameters.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ScreenRecordParameters.java index 9fe22845..af3ceee0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ScreenRecordParameters.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/ScreenRecordParameters.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.recording.EnumScreenRecordingCodec; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.recording.EnumScreenRecordingCodec; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScreenRecordParameters { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIterator.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIterator.java index 35f5a95f..d6a368e9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIterator.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIterator.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2.BreakLoop; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface VFSFilenameIterator { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIteratorNonRecursive.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIteratorNonRecursive.java index 702901ad..0f2aa7ab 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIteratorNonRecursive.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/VFSFilenameIteratorNonRecursive.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VFSFilenameIteratorNonRecursive implements VFSFilenameIterator { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/WebViewOptions.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/WebViewOptions.java index 8c60a62d..f940ac5b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/WebViewOptions.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/WebViewOptions.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WebViewOptions { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/Buffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/Buffer.java index f4ab0284..b15b41ef 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/Buffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/Buffer.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface Buffer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ByteBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ByteBuffer.java index 19667c3e..95b13691 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ByteBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ByteBuffer.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,10 +14,11 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ByteBuffer extends Buffer { + @Override byte[] array(); FloatBuffer asFloatBuffer(); @@ -26,10 +27,12 @@ public interface ByteBuffer extends Buffer { ShortBuffer asShortBuffer(); + @Override ByteBuffer clear(); ByteBuffer duplicate(); + @Override ByteBuffer flip(); byte get(); @@ -60,10 +63,13 @@ public interface ByteBuffer extends Buffer { short getShort(int index); + @Override ByteBuffer limit(int newLimit); + @Override ByteBuffer mark(); + @Override ByteBuffer position(int newPosition); ByteBuffer put(byte b); @@ -96,8 +102,10 @@ public interface ByteBuffer extends Buffer { ByteBuffer putShort(short value); + @Override ByteBuffer reset(); + @Override ByteBuffer rewind(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerBufferInputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerBufferInputStream.java index 41b0b977..83f8cfb6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerBufferInputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerBufferInputStream.java @@ -5,7 +5,7 @@ import java.io.InputStream; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerBufferInputStream extends InputStream { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/FloatBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/FloatBuffer.java index 3574fee5..5e7ec240 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/FloatBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/FloatBuffer.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,16 +14,19 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface FloatBuffer extends Buffer { + @Override float[] array(); + @Override FloatBuffer clear(); FloatBuffer duplicate(); + @Override FloatBuffer flip(); float get(); @@ -36,12 +39,16 @@ public interface FloatBuffer extends Buffer { float getElement(int index); + @Override boolean isDirect(); + @Override FloatBuffer limit(int newLimit); + @Override FloatBuffer mark(); + @Override FloatBuffer position(int newPosition); FloatBuffer put(float b); @@ -56,8 +63,10 @@ public interface FloatBuffer extends Buffer { void putElement(int index, float value); + @Override FloatBuffer reset(); + @Override FloatBuffer rewind(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/IntBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/IntBuffer.java index 304ada1d..99e70127 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/IntBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/IntBuffer.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,16 +14,19 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IntBuffer extends Buffer { + @Override int[] array(); + @Override IntBuffer clear(); IntBuffer duplicate(); + @Override IntBuffer flip(); int get(); @@ -36,12 +39,16 @@ public interface IntBuffer extends Buffer { int getElement(int index); + @Override boolean isDirect(); + @Override IntBuffer limit(int newLimit); + @Override IntBuffer mark(); + @Override IntBuffer position(int newPosition); IntBuffer put(int b); @@ -56,8 +63,10 @@ public interface IntBuffer extends Buffer { void putElement(int index, int value); + @Override IntBuffer reset(); + @Override IntBuffer rewind(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ShortBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ShortBuffer.java index e4100d8c..5eed856d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ShortBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/ShortBuffer.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,16 +14,19 @@ package net.lax1dude.eaglercraft.v1_8.internal.buffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ShortBuffer extends Buffer { + @Override short[] array(); + @Override ShortBuffer clear(); ShortBuffer duplicate(); + @Override ShortBuffer flip(); short get(); @@ -36,12 +39,16 @@ public interface ShortBuffer extends Buffer { short getElement(int index); + @Override boolean isDirect(); + @Override ShortBuffer limit(int newLimit); + @Override ShortBuffer mark(); + @Override ShortBuffer position(int newPosition); ShortBuffer put(int index, short b); @@ -56,8 +63,10 @@ public interface ShortBuffer extends Buffer { void putElement(int index, short value); + @Override ShortBuffer reset(); + @Override ShortBuffer rewind(); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/EaglerFileSystemException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/EaglerFileSystemException.java index ee4b7d24..3fcef1b4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/EaglerFileSystemException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/EaglerFileSystemException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.vfs2; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.vfs2; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerFileSystemException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSFilenameIteratorImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSFilenameIteratorImpl.java index 2e5e2449..4344af60 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSFilenameIteratorImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSFilenameIteratorImpl.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class VFSFilenameIteratorImpl implements VFSFilenameIterator { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSIterator2.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSIterator2.java index f8de9542..482832be 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSIterator2.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSIterator2.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.vfs2; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.vfs2; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface VFSIterator2 { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilenamesIteratorImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilenamesIteratorImpl.java index 3d40cdcc..df3bd9b7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilenamesIteratorImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilenamesIteratorImpl.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class VFSListFilenamesIteratorImpl implements VFSFilenameIterator { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilesIteratorImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilesIteratorImpl.java index c2307c73..27c69bfb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilesIteratorImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFSListFilesIteratorImpl.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.VFSFilenameIterator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class VFSListFilesIteratorImpl implements VFSFilenameIterator { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFile2.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFile2.java index 3e89fe0e..276c76c3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFile2.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFile2.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VFile2 { @@ -161,6 +161,7 @@ public class VFile2 { return !isRelative() && getFS().eaglerDelete(path); } + @Override public boolean equals(Object o) { return path != null && o != null && (o instanceof VFile2) && path.equals(((VFile2) o).path); } @@ -245,6 +246,7 @@ public class VFile2 { return path.equals("unnamed") ? null : path; } + @Override public int hashCode() { return path == null ? 0 : path.hashCode(); } @@ -308,7 +310,8 @@ public class VFile2 { setAllBytes(bytes.getBytes(StandardCharsets.UTF_8)); } + @Override public String toString() { return path; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileInputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileInputStream.java index 2547957b..83ed4f36 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileInputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileInputStream.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class VFileInputStream extends InputStream { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileOutputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileOutputStream.java index a0e8faa3..baf016a2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileOutputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/vfs2/VFileOutputStream.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class VFileOutputStream extends EaglerOutputStream { @@ -40,11 +40,9 @@ class VFileOutputStream extends EaglerOutputStream { try { copyBuffer.put(buf, 0, count); copyBuffer.flip(); - try { - vfsFile.getFS().eaglerWrite(vfsFile.path, copyBuffer); - } catch (Throwable t) { - throw new IOException("Could not write stream contents to file!", t); - } + vfsFile.getFS().eaglerWrite(vfsFile.path, copyBuffer); + } catch (Throwable t) { + throw new IOException("Could not write stream contents to file!", t); } finally { PlatformRuntime.freeByteBuffer(copyBuffer); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONDataParserImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONDataParserImpl.java index 9e765d15..5c8a79e0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONDataParserImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONDataParserImpl.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.json; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.json; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface JSONDataParserImpl { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeCodec.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeCodec.java index 43d56c06..79ffc09a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeCodec.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeCodec.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.json; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.json; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface JSONTypeCodec extends JSONTypeSerializer, JSONTypeDeserializer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeDeserializer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeDeserializer.java index d74067fe..721b8d6f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeDeserializer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeDeserializer.java @@ -4,7 +4,7 @@ import org.json.JSONException; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import org.json.JSONException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface JSONTypeDeserializer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeProvider.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeProvider.java index b843221a..d203ceb7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeProvider.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeProvider.java @@ -39,7 +39,7 @@ import net.minecraft.world.gen.ChunkProviderSettings; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -51,7 +51,7 @@ import net.minecraft.world.gen.ChunkProviderSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JSONTypeProvider { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeSerializer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeSerializer.java index b2b0d690..1c6caa19 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeSerializer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/JSONTypeSerializer.java @@ -4,7 +4,7 @@ import org.json.JSONException; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import org.json.JSONException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface JSONTypeSerializer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserReader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserReader.java index b5072988..f539a396 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserReader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserReader.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,10 +22,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JSONDataParserReader implements JSONDataParserImpl { + @Override public boolean accepts(Object type) { return type instanceof Reader; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserStream.java index 4d0602f0..12fd9b5d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserStream.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,10 +24,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JSONDataParserStream implements JSONDataParserImpl { + @Override public boolean accepts(Object type) { return type instanceof InputStream; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserString.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserString.java index 44ba7c9b..24d5132e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserString.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/JSONDataParserString.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONDataParserImpl; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,10 +20,11 @@ import net.lax1dude.eaglercraft.v1_8.json.JSONDataParserImpl; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JSONDataParserString implements JSONDataParserImpl { + @Override public boolean accepts(Object type) { return type instanceof String; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/SoundMapDeserializer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/SoundMapDeserializer.java index 55df2469..67d02ea4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/SoundMapDeserializer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/json/impl/SoundMapDeserializer.java @@ -13,7 +13,7 @@ import net.minecraft.client.audio.SoundList; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.audio.SoundList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SoundMapDeserializer implements JSONTypeDeserializer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/ILogRedirector.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/ILogRedirector.java index 4d92b489..004cec73 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/ILogRedirector.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/ILogRedirector.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.log4j; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.log4j; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ILogRedirector { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Level.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Level.java index a6b23d35..c30f8a67 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Level.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Level.java @@ -4,7 +4,7 @@ import java.io.PrintStream; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.io.PrintStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum Level { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java index 8a020018..eff7b1ce 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java @@ -5,7 +5,7 @@ import java.util.Map; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.util.Map; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LogManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java index 7c3eaadd..32854dd9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Logger { @@ -139,6 +139,10 @@ public class Logger { } private void logExcp(final Level level, String h, Throwable msg) { + if (msg == null) { + log(level, "{}: ", h); + return; + } log(level, "{}: {}", h, msg.toString()); EagRuntime.getStackTrace(msg, (e) -> log(level, " at {}", e)); PlatformRuntime.printJSExceptionIfBrowser(msg); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java index d57bda3e..eddf30da 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java @@ -8,7 +8,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AcceleratedEffectRenderer implements IAcceleratedParticleEngine { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/ChunkUpdateManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/ChunkUpdateManager.java index 11f959c0..d2341279 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/ChunkUpdateManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/ChunkUpdateManager.java @@ -115,7 +115,6 @@ public class ChunkUpdateManager { generator.setStatus(ChunkCompileTaskGenerator.Status.DONE); } } - generator.getRenderChunk().setCompiledChunk(compiledchunk); } else if (chunkcompiletaskgenerator$type == ChunkCompileTaskGenerator.Type.RESORT_TRANSPARENCY) { if (!compiledchunk.isLayerEmpty(EnumWorldBlockLayer.TRANSLUCENT)) { this.uploadChunk( @@ -129,7 +128,6 @@ public class ChunkUpdateManager { .getWorldRendererByLayer(EnumWorldBlockLayer.REALISTIC_WATER), generator.getRenderChunk(), compiledchunk); } - generator.getRenderChunk().setCompiledChunk(compiledchunk); generator.setStatus(ChunkCompileTaskGenerator.Status.DONE); } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFolderResourcePack.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFolderResourcePack.java index ba3c0354..a72ffd90 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFolderResourcePack.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFolderResourcePack.java @@ -29,7 +29,7 @@ import net.minecraft.client.resources.AbstractResourcePack; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.client.resources.AbstractResourcePack; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerFolderResourcePack extends AbstractResourcePack { @@ -218,7 +218,7 @@ public class EaglerFolderResourcePack extends AbstractResourcePack { i += j; } } else { - buffer = EaglerInputStream.inputStreamToBytes(ziss); + buffer = EaglerInputStream.inputStreamToBytesNoClose(ziss); } (new VFile2(prefix, folderName, fn.substring(prefixLen))).setAllBytes(buffer); totalSize += buffer.length; @@ -295,7 +295,7 @@ public class EaglerFolderResourcePack extends AbstractResourcePack { return; } } - PlatformRuntime.downloadRemoteURIByteArray(url, arr -> { + PlatformRuntime.downloadRemoteURIByteArray(url, true, arr -> { ast.accept(() -> { if (arr == null) { cb.accept(null); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java index cd094e29..dbc16c39 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java @@ -13,7 +13,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerFontRenderer extends FontRenderer { @@ -74,6 +74,7 @@ public class EaglerFontRenderer extends FontRenderer { return true; } + @Override public int drawString(String text, float x, float y, int color, boolean dropShadow) { if (text == null || text.length() == 0) { this.posX = x + (dropShadow ? 1 : 0); @@ -98,6 +99,7 @@ public class EaglerFontRenderer extends FontRenderer { return (int) this.posX; } + @Override protected void renderStringAtPos(String parString1, boolean parFlag) { if (parString1 == null) return; @@ -221,11 +223,15 @@ public class EaglerFontRenderer extends FontRenderer { if (hasStrike) { GlStateManager.color(0.25f, 0.25f, 0.25f, 1.0f); GlStateManager.translate(1.0f, 1.0f, 0.0f); + GlStateManager.disableTexture2D(); tessellator.draw(); GlStateManager.translate(-1.0f, -1.0f, 0.0f); GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + GlStateManager.enableTexture2D(); InstancedFontRenderer.render(8, 8, texScale, texScale, true); + GlStateManager.disableTexture2D(); EaglercraftGPU.renderAgain(); + GlStateManager.enableTexture2D(); } else { GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); InstancedFontRenderer.render(8, 8, texScale, texScale, true); @@ -233,7 +239,9 @@ public class EaglerFontRenderer extends FontRenderer { } else { GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); if (hasStrike) { + GlStateManager.disableTexture2D(); tessellator.draw(); + GlStateManager.enableTexture2D(); } InstancedFontRenderer.render(8, 8, texScale, texScale, false); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerTextureAtlasSprite.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerTextureAtlasSprite.java index b99b5f00..0a768d6c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerTextureAtlasSprite.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerTextureAtlasSprite.java @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerTextureAtlasSprite { @@ -150,6 +150,7 @@ public class EaglerTextureAtlasSprite { CrashReportCategory crashreportcategory = crashreport.makeCategory("Frame being iterated"); crashreportcategory.addCrashSection("Frame index", Integer.valueOf(i)); crashreportcategory.addCrashSectionCallable("Frame sizes", new Callable() { + @Override public String call() throws Exception { StringBuilder stringbuilder = new StringBuilder(); @@ -341,6 +342,7 @@ public class EaglerTextureAtlasSprite { this.width = newWidth; } + @Override public String toString() { return "TextureAtlasSprite{name=\'" + this.iconName + '\'' + ", frameCount=" + this.framesTextureData.size() + ", rotated=" + this.rotated + ", x=" + this.originX + ", y=" + this.originY + ", height=" @@ -387,4 +389,4 @@ public class EaglerTextureAtlasSprite { logger.error(t); } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EntityConstructor.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EntityConstructor.java index e6d48277..e99633f7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EntityConstructor.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EntityConstructor.java @@ -4,7 +4,7 @@ import net.minecraft.world.World; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface EntityConstructor { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EnumInputEvent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EnumInputEvent.java index 567d6bc0..7798ee88 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EnumInputEvent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EnumInputEvent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.minecraft; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumInputEvent { CLIPBOARD_COPY, CLIPBOARD_PASTE; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/FontMappingHelper.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/FontMappingHelper.java index dddbff09..9e13fc7e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/FontMappingHelper.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/FontMappingHelper.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.minecraft; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FontMappingHelper { @@ -518,6 +518,8 @@ public class FontMappingHelper { return 253; case 9632: return 254; + case 160: + return 32; // nbsp default: return -1; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiButtonWithStupidIcons.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiButtonWithStupidIcons.java index 14047619..65ca55ec 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiButtonWithStupidIcons.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiButtonWithStupidIcons.java @@ -13,7 +13,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiButtonWithStupidIcons extends GuiButton { @@ -60,6 +60,7 @@ public class GuiButtonWithStupidIcons extends GuiButton { this.rightIconAspect = rightIconAspect; } + @Override public void drawButton(Minecraft mc, int mouseX, int mouseY) { if (this.visible) { FontRenderer fontrenderer = mc.fontRendererObj; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenGenericErrorMessage.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenGenericErrorMessage.java index d5bd274a..28914b52 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenGenericErrorMessage.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenGenericErrorMessage.java @@ -8,7 +8,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenGenericErrorMessage extends GuiScreen { @@ -34,12 +34,14 @@ public class GuiScreenGenericErrorMessage extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(cont); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, str1, this.width / 2, 70, 11184810); @@ -47,6 +49,7 @@ public class GuiScreenGenericErrorMessage extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, I18n.format("gui.done"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVSyncReEnabled.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVSyncReEnabled.java new file mode 100644 index 00000000..d752e56f --- /dev/null +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVSyncReEnabled.java @@ -0,0 +1,60 @@ +package net.lax1dude.eaglercraft.v1_8.minecraft; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class GuiScreenVSyncReEnabled extends GuiScreen { + + private GuiScreen cont; + + public GuiScreenVSyncReEnabled(GuiScreen cont) { + this.cont = cont; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) { + if (par1GuiButton.id == 0) { + this.mc.displayGuiScreen(cont); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) { + this.drawDefaultBackground(); + this.drawCenteredString(fontRendererObj, I18n.format("options.vsyncReEnabled.title"), this.width / 2, 70, + 11184810); + this.drawCenteredString(fontRendererObj, I18n.format("options.vsyncReEnabled.0"), this.width / 2, 95, 16777215); + this.drawCenteredString(fontRendererObj, I18n.format("options.vsyncReEnabled.1"), this.width / 2, 120, + 16777215); + this.drawCenteredString(fontRendererObj, I18n.format("options.vsyncReEnabled.2"), this.width / 2, 145, + 16777215); + this.drawCenteredString(fontRendererObj, I18n.format("options.vsyncReEnabled.3"), this.width / 2, 160, + 16777215); + super.drawScreen(par1, par2, par3); + } + + @Override + public void initGui() { + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 136, + I18n.format("options.vsyncReEnabled.continue"))); + } + +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVideoSettingsWarning.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVideoSettingsWarning.java new file mode 100644 index 00000000..1873fd47 --- /dev/null +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVideoSettingsWarning.java @@ -0,0 +1,122 @@ +package net.lax1dude.eaglercraft.v1_8.minecraft; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.EnumChatFormatting; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class GuiScreenVideoSettingsWarning extends GuiScreen { + + public static final int WARNING_VSYNC = 1; + public static final int WARNING_RENDER_DISTANCE = 2; + public static final int WARNING_FRAME_LIMIT = 4; + private final GuiScreen cont; + + private final int mask; + private final List messages = new ArrayList<>(); + private int top = 0; + + public GuiScreenVideoSettingsWarning(GuiScreen cont, int mask) { + this.cont = cont; + this.mask = mask; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) { + if (par1GuiButton.id == 0) { + mc.gameSettings.fixBadVideoSettings(); + mc.gameSettings.saveOptions(); + if ((mask & WARNING_RENDER_DISTANCE) != 0) { + mc.renderGlobal.loadRenderers(); + } + mc.displayGuiScreen(cont); + } else if (par1GuiButton.id == 1) { + mc.displayGuiScreen(cont); + } else if (par1GuiButton.id == 2) { + mc.gameSettings.hideVideoSettingsWarning = true; + mc.gameSettings.saveOptions(); + mc.displayGuiScreen(cont); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) { + this.drawDefaultBackground(); + int j = 0; + for (int i = 0, l = messages.size(); i < l; ++i) { + String str = messages.get(i); + if (str != null) { + this.drawCenteredString(fontRendererObj, str, this.width / 2, top + j, 16777215); + j += 9; + } else { + j += 5; + } + } + super.drawScreen(par1, par2, par3); + } + + @Override + public void initGui() { + messages.clear(); + messages.add(EnumChatFormatting.RED + I18n.format("options.badVideoSettingsDetected.title")); + messages.add(null); + messages.add(EnumChatFormatting.GRAY + I18n.format("options.badVideoSettingsDetected.0")); + messages.add(EnumChatFormatting.GRAY + I18n.format("options.badVideoSettingsDetected.1")); + if ((mask & WARNING_VSYNC) != 0) { + messages.add(null); + messages.add(I18n.format("options.badVideoSettingsDetected.vsync.0")); + messages.add(I18n.format("options.badVideoSettingsDetected.vsync.1")); + messages.add(I18n.format("options.badVideoSettingsDetected.vsync.2")); + messages.add(I18n.format("options.badVideoSettingsDetected.vsync.3")); + messages.add(I18n.format("options.badVideoSettingsDetected.vsync.4")); + } + if ((mask & WARNING_RENDER_DISTANCE) != 0) { + messages.add(null); + messages.add(I18n.format("options.badVideoSettingsDetected.renderDistance.0", + mc.gameSettings.renderDistanceChunks)); + messages.add(I18n.format("options.badVideoSettingsDetected.renderDistance.1")); + messages.add(I18n.format("options.badVideoSettingsDetected.renderDistance.2")); + } + if ((mask & WARNING_FRAME_LIMIT) != 0) { + messages.add(null); + messages.add(I18n.format("options.badVideoSettingsDetected.frameLimit.0", mc.gameSettings.limitFramerate)); + } + int j = 0; + for (int i = 0, l = messages.size(); i < l; ++i) { + if (messages.get(i) != null) { + j += 9; + } else { + j += 5; + } + } + top = this.height / 6 + j / -12; + j += top; + buttonList.clear(); + buttonList.add(new GuiButton(0, this.width / 2 - 100, j + 16, + I18n.format("options.badVideoSettingsDetected.fixSettings"))); + buttonList.add(new GuiButton(1, this.width / 2 - 100, j + 40, + I18n.format("options.badVideoSettingsDetected.continueAnyway"))); + buttonList.add(new GuiButton(2, this.width / 2 - 100, j + 64, + I18n.format("options.badVideoSettingsDetected.doNotShowAgain"))); + } + +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVisualViewport.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVisualViewport.java index 17301176..7ddf5fdd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVisualViewport.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/GuiScreenVisualViewport.java @@ -7,7 +7,7 @@ import net.minecraft.client.gui.GuiScreen; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.client.gui.GuiScreen; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenVisualViewport extends GuiScreen { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/IAcceleratedParticleEngine.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/IAcceleratedParticleEngine.java index 59a68054..784631f9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/IAcceleratedParticleEngine.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/IAcceleratedParticleEngine.java @@ -4,7 +4,7 @@ import net.minecraft.entity.Entity; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IAcceleratedParticleEngine { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/TextureAnimationCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/TextureAnimationCache.java index 05bba76c..fdb2ee43 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/TextureAnimationCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/TextureAnimationCache.java @@ -29,7 +29,7 @@ import net.minecraft.client.renderer.GLAllocation; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.client.renderer.GLAllocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureAnimationCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/GameProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/GameProfile.java index 5b17dd32..55eefbe0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/GameProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/GameProfile.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameProfile { @@ -46,6 +46,7 @@ public class GameProfile { this.properties = properties; } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -78,6 +79,7 @@ public class GameProfile { return textures; } + @Override public int hashCode() { int result = (this.id != null) ? this.id.hashCode() : 0; result = 31 * result + ((this.name != null) ? this.name.hashCode() : 0); @@ -92,6 +94,7 @@ public class GameProfile { return false; } + @Override public String toString() { return (new ToStringBuilder(this)).append("id", this.id).append("name", this.name).append("legacy", false) .toString(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/Property.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/Property.java index f89a10f9..1c0c5e29 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/Property.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/Property.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.mojang.authlib; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.mojang.authlib; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Property { private final String name; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/TexturesProperty.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/TexturesProperty.java index 7e719ba1..b7073249 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/TexturesProperty.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/TexturesProperty.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.Base64; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.Base64; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TexturesProperty { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/UUIDTypeAdapter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/UUIDTypeAdapter.java index 8cf615ec..82f5c1a4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/UUIDTypeAdapter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/mojang/authlib/UUIDTypeAdapter.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UUIDTypeAdapter { public static EaglercraftUUID fromString(String input) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBuf.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBuf.java index b33a5c9a..790a11ed 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBuf.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBuf.java @@ -376,7 +376,7 @@ public abstract class ByteBuf implements Comparable { * The reader and writer marks will not be duplicated. Also be aware that this * method will NOT call {@link #retain()} and so the reference count will NOT be * increased. - * + * * @return A buffer whose readable content is equivalent to the buffer returned * by {@link #slice()}. However this buffer will share the capacity of * the underlying buffer, and therefore allows access to all of the diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java index 3f3c80a5..fdc93f8c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java @@ -8,7 +8,7 @@ import java.nio.ByteOrder; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.nio.ByteOrder; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ByteBufEaglercraftImpl extends AbstractByteBuf { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufInputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufInputStream.java index 5cf33218..905af287 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufInputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufInputStream.java @@ -56,7 +56,7 @@ public class ByteBufInputStream extends InputStream implements DataInput { * Creates a new stream which reads data from the specified {@code buffer} * starting at the current {@code readerIndex} and ending at the current * {@code writerIndex}. - * + * * @param buffer The buffer which provides the content for this * {@link InputStream}. */ @@ -68,7 +68,7 @@ public class ByteBufInputStream extends InputStream implements DataInput { * Creates a new stream which reads data from the specified {@code buffer} * starting at the current {@code readerIndex} and ending at the current * {@code writerIndex}. - * + * * @param buffer The buffer which provides the content for this * {@link InputStream}. * @param releaseOnClose {@code true} means that when {@link #close()} is called @@ -83,7 +83,7 @@ public class ByteBufInputStream extends InputStream implements DataInput { * Creates a new stream which reads data from the specified {@code buffer} * starting at the current {@code readerIndex} and ending at * {@code readerIndex + length}. - * + * * @param buffer The buffer which provides the content for this * {@link InputStream}. * @param length The length of the buffer to use for this {@link InputStream}. @@ -98,7 +98,7 @@ public class ByteBufInputStream extends InputStream implements DataInput { * Creates a new stream which reads data from the specified {@code buffer} * starting at the current {@code readerIndex} and ending at * {@code readerIndex + length}. - * + * * @param buffer The buffer which provides the content for this * {@link InputStream}. * @param length The length of the buffer to use for this diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufUtil.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufUtil.java index 5ff5c772..2f21c0be 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufUtil.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufUtil.java @@ -579,7 +579,7 @@ public final class ByteBufUtil { * Encode a {@link CharSequence} in * UTF-8 and write it to a * {@link ByteBuf} allocated with {@code alloc}. - * + * * @param alloc The allocator used to allocate a new {@link ByteBuf}. * @param seq The characters to write into a buffer. * @return The {@link ByteBuf} which contains the diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/MathUtil.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/MathUtil.java index 85c959ed..bf81a415 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/MathUtil.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/MathUtil.java @@ -34,7 +34,7 @@ public final class MathUtil { /** * Compare two {@code long} values. - * + * * @param x the first {@code long} to compare. * @param y the second {@code long} to compare. * @return @@ -67,7 +67,7 @@ public final class MathUtil { /** * Determine if the requested {@code index} and {@code length} will fit within * {@code capacity}. - * + * * @param index The starting index. * @param length The length which will be utilized (starting from * {@code index}). @@ -87,7 +87,7 @@ public final class MathUtil { *

* This method will do runtime bounds checking and call * {@link #findNextPositivePowerOfTwo(int)} if within a valid range. - * + * * @param value from which to search for next power of 2 * @return The next power of 2 or the value itself if it is a power of 2. *

diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ObjectUtil.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ObjectUtil.java index e26b1250..d35a19fd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ObjectUtil.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ObjectUtil.java @@ -304,7 +304,7 @@ public final class ObjectUtil { /** * Resolves a possibly null Integer to a primitive int, using a default value. - * + * * @param wrapper the wrapper * @param defaultValue the default value * @return the primitive value @@ -315,7 +315,7 @@ public final class ObjectUtil { /** * Resolves a possibly null Long to a primitive long, using a default value. - * + * * @param wrapper the wrapper * @param defaultValue the default value * @return the primitive value diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/Unpooled.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/Unpooled.java index f0bf15d9..4c6fb60c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/Unpooled.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/Unpooled.java @@ -4,7 +4,7 @@ import java.nio.ByteBuffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.nio.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Unpooled { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/CachedNotifBadgeTexture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/CachedNotifBadgeTexture.java index eafa4af9..1f9000d4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/CachedNotifBadgeTexture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/CachedNotifBadgeTexture.java @@ -6,7 +6,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CachedNotifBadgeTexture { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ClickEventZone.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ClickEventZone.java index ff0774ad..b2bfac74 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ClickEventZone.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ClickEventZone.java @@ -4,7 +4,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClickEventZone { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiButtonNotifBell.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiButtonNotifBell.java index 258486de..4618ae59 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiButtonNotifBell.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiButtonNotifBell.java @@ -9,7 +9,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiButtonNotifBell extends GuiButton { @@ -33,6 +33,7 @@ public class GuiButtonNotifBell extends GuiButton { super(buttonID, xPos, yPos, 20, 20, ""); } + @Override public void drawButton(Minecraft minecraft, int i, int j) { if (this.visible) { minecraft.getTextureManager().bindTexture(eaglerTextures); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiScreenNotifications.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiScreenNotifications.java index ea5dd790..06291370 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiScreenNotifications.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiScreenNotifications.java @@ -15,7 +15,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenNotifications extends GuiScreen { @@ -54,6 +54,7 @@ public class GuiScreenNotifications extends GuiScreen { this.parent = parent; } + @Override public void actionPerformed(GuiButton btn) { switch (btn.id) { case 0: @@ -78,6 +79,7 @@ public class GuiScreenNotifications extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { if (mc.thePlayer == null) return; @@ -86,16 +88,19 @@ public class GuiScreenNotifications extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); slots.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); slots.handleTouchInput(); } + @Override public void initGui() { selected = -1; buttonList.clear(); @@ -112,6 +117,7 @@ public class GuiScreenNotifications extends GuiScreen { updateButtons(); } + @Override public void onGuiClosed() { if (mc.thePlayer != null) { mc.thePlayer.sendQueue.getNotifManager().commitUnreadFlag(); @@ -161,6 +167,7 @@ public class GuiScreenNotifications extends GuiScreen { } } + @Override public void updateScreen() { if (mc.thePlayer == null) { mc.displayGuiScreen(parent); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiSlotNotifications.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiSlotNotifications.java index f6c0250c..067ba621 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiSlotNotifications.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/GuiSlotNotifications.java @@ -20,7 +20,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSlotNotifications extends GuiSlot { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationBadge.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationBadge.java index cb43d619..6053b222 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationBadge.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationBadge.java @@ -10,7 +10,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NotificationBadge { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationIcon.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationIcon.java index fb1585ac..36ddcbe2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationIcon.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/NotificationIcon.java @@ -6,7 +6,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NotificationIcon { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationManager.java index ccb741d2..6f1d0f62 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationManager.java @@ -29,7 +29,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerNotificationManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationRenderer.java index 5a8631d0..e11110f3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/notifications/ServerNotificationRenderer.java @@ -52,7 +52,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -64,7 +64,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerNotificationRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DisplayList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DisplayList.java index 5c34dad7..593438a9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DisplayList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DisplayList.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class DisplayList { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DrawUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DrawUtils.java index 26f9d264..e722d760 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DrawUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/DrawUtils.java @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DrawUtils { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java index 746d1588..6f47f341 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglerMeshLoader.java @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerMeshLoader implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java index 9c66ac89..88b7e60a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EaglercraftGPU.java @@ -78,7 +78,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -90,7 +90,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglercraftGPU { @@ -179,7 +179,7 @@ public class EaglercraftGPU { static boolean texStorageCapable = false; - static boolean textureLODCapable = false; + static boolean textureLODCapable = true; static boolean shader5Capable = false; @@ -538,6 +538,8 @@ public class EaglercraftGPU { InstancedParticleRenderer.destroy(); EffectPipelineFXAA.destroy(); TextureCopyUtil.destroy(); + FixedFunctionPipeline.flushCache(); + StreamBuffer.destroyPool(); emulatedVAOs = false; emulatedVAOState = null; glesVers = -1; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EffectPipelineFXAA.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EffectPipelineFXAA.java index 379dc95a..3db11231 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EffectPipelineFXAA.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/EffectPipelineFXAA.java @@ -55,7 +55,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -67,7 +67,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EffectPipelineFXAA { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java index 3b130f84..59ac4638 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionPipeline.java @@ -117,7 +117,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -129,7 +129,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FixedFunctionPipeline { @@ -381,8 +381,8 @@ public class FixedFunctionPipeline { StreamBufferInstance sb = self.streamBuffer.getBuffer(buffer.remaining()); self.currentVertexArray = sb; - EaglercraftGPU.bindGLBufferArray(sb.vertexArray); - EaglercraftGPU.bindGLArrayBuffer(sb.vertexBuffer); + EaglercraftGPU.bindGLBufferArray(sb.getVertexArray()); + EaglercraftGPU.bindGLArrayBuffer(sb.getVertexBuffer()); _wglBufferSubData(GL_ARRAY_BUFFER, 0, buffer); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionShader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionShader.java index 2a57d452..8b49bcf6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionShader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/FixedFunctionShader.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FixedFunctionShader { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GLSLHeader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GLSLHeader.java index 8e3e5b91..c80303f3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GLSLHeader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GLSLHeader.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GLSLHeader { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GameOverlayFramebuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GameOverlayFramebuffer.java index 3b73c936..94e51d72 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GameOverlayFramebuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GameOverlayFramebuffer.java @@ -28,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameOverlayFramebuffer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java index 81637ed2..89c7e3d7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java @@ -53,7 +53,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -65,7 +65,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GlStateManager { @@ -1301,4 +1301,4 @@ public class GlStateManager { viewportH = h; } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java index 393a05fa..2d9c2fa7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/HighPolyMesh.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.FixedFunctionShader.FixedFunctionSta /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.FixedFunctionShader.FixedFunctionSta * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HighPolyMesh { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/IExtPipelineCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/IExtPipelineCompiler.java index 7323eeb9..01942c6a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/IExtPipelineCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/IExtPipelineCompiler.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IExtPipelineCompiler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java index 35b65610..6ad9e7ed 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformAssets; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformAssets; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ImageData { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java index 86571560..ed57b132 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java @@ -51,7 +51,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -63,7 +63,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InstancedFontRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java index db5e8998..e563d8b1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedParticleRenderer.java @@ -50,7 +50,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -62,7 +62,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class InstancedParticleRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/OpenGlHelper.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/OpenGlHelper.java index 9c673b88..1b2349e6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/OpenGlHelper.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/OpenGlHelper.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class OpenGlHelper { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/RealOpenGLEnums.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/RealOpenGLEnums.java index b960c8b0..3ef659db 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/RealOpenGLEnums.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/RealOpenGLEnums.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RealOpenGLEnums { @@ -825,4 +825,4 @@ public class RealOpenGLEnums { public static final int GL_TEXTURE_MAX_ANISOTROPY = 34046; public static final int GL_CONTEXT_LOST_WEBGL = -100; -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferArray.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferArray.java index 850a05f0..4cb1b657 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferArray.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferArray.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class SoftGLBufferArray implements IBufferArrayGL { @@ -49,6 +49,7 @@ class SoftGLBufferArray implements IBufferArrayGL { + stride) * 31 + offset; } + @Override public boolean equals(Object obj) { if (obj == this) return true; @@ -64,6 +65,7 @@ class SoftGLBufferArray implements IBufferArrayGL { && o2.stride == stride && o2.offset == offset); } + @Override public int hashCode() { return hash; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferState.java index dfe4abfe..e98f5502 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SoftGLBufferState.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.SoftGLBufferArray.Attrib; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.SoftGLBufferArray.Attrib; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class SoftGLBufferState { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SpriteLevelMixer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SpriteLevelMixer.java index 11a4ae04..be6f0014 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SpriteLevelMixer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/SpriteLevelMixer.java @@ -34,7 +34,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Matrix3f; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Matrix3f; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SpriteLevelMixer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/StreamBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/StreamBuffer.java index c611b4a4..ccede0e1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/StreamBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/StreamBuffer.java @@ -10,8 +10,8 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferArrayGL; import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; /** - * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class StreamBuffer { @@ -31,12 +31,18 @@ public class StreamBuffer { void initialize(IBufferArrayGL vertexArray, IBufferGL vertexBuffer); } - public static class StreamBufferInstance { + protected static class PoolInstance { - protected IBufferArrayGL vertexArray = null; protected IBufferGL vertexBuffer = null; protected int vertexBufferSize = 0; + } + + public static class StreamBufferInstance { + + protected PoolInstance poolInstance = null; + protected IBufferArrayGL vertexArray = null; + public boolean bindQuad16 = false; public boolean bindQuad32 = false; @@ -45,16 +51,58 @@ public class StreamBuffer { } public IBufferGL getVertexBuffer() { - return vertexBuffer; + return poolInstance.vertexBuffer; } } + public static final int poolSize = 16; + + protected static final PoolInstance[] pool = new PoolInstance[poolSize]; + + protected static int poolBufferID = 0; + + static { + for (int i = 0; i < poolSize; ++i) { + pool[i] = new PoolInstance(); + } + } + + public static void destroyPool() { + for (int i = 0; i < pool.length; ++i) { + if (pool[i].vertexBuffer != null) { + _wglDeleteBuffers(pool[i].vertexBuffer); + pool[i].vertexBuffer = null; + } + } + } + + private static PoolInstance fillPoolInstance() { + PoolInstance ret = pool[poolBufferID++]; + if (poolBufferID > poolSize - 1) { + poolBufferID = 0; + } + return ret; + } + + private static void resizeInstance(PoolInstance instance, int requiredMemory) { + if (instance.vertexBuffer == null) { + instance.vertexBuffer = _wglGenBuffers(); + } + if (instance.vertexBufferSize < requiredMemory) { + int newSize = (requiredMemory & 0xFFFFF000) + 0x2000; + EaglercraftGPU.bindGLArrayBuffer(instance.vertexBuffer); + _wglBufferData(GL_ARRAY_BUFFER, newSize, GL_STREAM_DRAW); + instance.vertexBufferSize = newSize; + } + } + public final int initialSize; public final int initialCount; public final int maxCount; + protected StreamBufferInstance[] buffers; protected int currentBufferId = 0; @@ -64,9 +112,14 @@ public class StreamBuffer { protected final IStreamBufferInitializer initializer; public StreamBuffer(int initialSize, int initialCount, int maxCount, IStreamBufferInitializer initializer) { + if (maxCount > poolSize) { + maxCount = poolSize; + } this.buffers = new StreamBufferInstance[initialCount]; for (int i = 0; i < this.buffers.length; ++i) { - this.buffers[i] = new StreamBufferInstance(); + StreamBufferInstance j = new StreamBufferInstance(); + j.poolInstance = fillPoolInstance(); + this.buffers[i] = j; } this.initialSize = initialSize; this.initialCount = initialCount; @@ -80,30 +133,21 @@ public class StreamBuffer { if (next.vertexArray != null) { EaglercraftGPU.destroyGLBufferArray(next.vertexArray); } - if (next.vertexBuffer != null) { - _wglDeleteBuffers(next.vertexBuffer); - } } buffers = new StreamBufferInstance[initialCount]; - for (int i = 0; i < buffers.length; ++i) { - buffers[i] = new StreamBufferInstance(); + for (int i = 0; i < initialCount; ++i) { + StreamBufferInstance j = new StreamBufferInstance(); + j.poolInstance = fillPoolInstance(); + buffers[i] = j; } } public StreamBufferInstance getBuffer(int requiredMemory) { StreamBufferInstance next = buffers[(currentBufferId++) % buffers.length]; - if (next.vertexBuffer == null) { - next.vertexBuffer = _wglGenBuffers(); - } + resizeInstance(next.poolInstance, requiredMemory); if (next.vertexArray == null) { next.vertexArray = EaglercraftGPU.createGLBufferArray(); - initializer.initialize(next.vertexArray, next.vertexBuffer); - } - if (next.vertexBufferSize < requiredMemory) { - int newSize = (requiredMemory & 0xFFFFF000) + 0x2000; - EaglercraftGPU.bindGLArrayBuffer(next.vertexBuffer); - _wglBufferData(GL_ARRAY_BUFFER, newSize, GL_STREAM_DRAW); - next.vertexBufferSize = newSize; + initializer.initialize(next.vertexArray, next.poolInstance.vertexBuffer); } return next; } @@ -124,12 +168,10 @@ public class StreamBuffer { if (buffers[i].vertexArray != null) { EaglercraftGPU.destroyGLBufferArray(buffers[i].vertexArray); } - if (buffers[i].vertexBuffer != null) { - _wglDeleteBuffers(buffers[i].vertexBuffer); - } } } buffers = newArray; + refill(); } overflowCounter = 0; } else if (overflowCounter > 15) { @@ -147,10 +189,28 @@ public class StreamBuffer { } } buffers = newArray; + refill(); } overflowCounter = 0; } currentBufferId = 0; } + private void refill() { + for (int i = 0; i < buffers.length; ++i) { + PoolInstance j = fillPoolInstance(); + StreamBufferInstance k = buffers[i]; + if (j != k.poolInstance) { + PoolInstance l = k.poolInstance; + k.poolInstance = j; + if (k.vertexArray != null) { + if (j.vertexBuffer == null) { + resizeInstance(j, l.vertexBufferSize); + } + initializer.initialize(k.vertexArray, j.vertexBuffer); + } + } + } + } + } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureCopyUtil.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureCopyUtil.java index 9f83a541..f6a0e546 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureCopyUtil.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureCopyUtil.java @@ -34,7 +34,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureCopyUtil { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureFormatHelper.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureFormatHelper.java index 82f4fae9..ef667c7e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureFormatHelper.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/TextureFormatHelper.java @@ -16,7 +16,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ExtGLEnums._GL_R /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ExtGLEnums._GL_R * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureFormatHelper { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VSHInputLayoutParser.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VSHInputLayoutParser.java index f31c9807..57a1efef 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VSHInputLayoutParser.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VSHInputLayoutParser.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VSHInputLayoutParser { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VertexFormat.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VertexFormat.java index 4b47cc26..2274df6a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VertexFormat.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/VertexFormat.java @@ -7,7 +7,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_UNSIGNED_S /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_UNSIGNED_S * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum VertexFormat { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java index 90c58f93..d8710904 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java @@ -9,13 +9,14 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.lax1dude.eaglercraft.v1_8.vector.Vector3f; import net.minecraft.client.renderer.GLAllocation; import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,32 +28,48 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldRenderer { public class State { - private final int[] stateRawBuffer; + private final IntBuffer stateRawBuffer; private final VertexFormat stateVertexFormat; + private int refCount = 1; - public State(int[] parArrayOfInt, VertexFormat parVertexFormat) { + public State(IntBuffer parArrayOfInt, VertexFormat parVertexFormat) { this.stateRawBuffer = parArrayOfInt; this.stateVertexFormat = parVertexFormat; } - public int[] getRawBuffer() { + public IntBuffer getRawBuffer() { return this.stateRawBuffer; } public int getVertexCount() { - return this.stateRawBuffer.length / (this.stateVertexFormat.attribStride >> 2); + return this.stateRawBuffer.remaining() / (this.stateVertexFormat.attribStride >> 2); } public VertexFormat getVertexFormat() { return this.stateVertexFormat; } + + public void release() { + if (--refCount == 0) { + EagRuntime.freeIntBuffer(stateRawBuffer); + } + if (refCount < 0) { + logger.error("WorldRenderer.State released multiple times"); + } + } + + public void retain() { + ++refCount; + } } + private static final Logger logger = LogManager.getLogger("WorldRenderer"); + private static float func_181665_a(FloatBuffer parFloatBuffer, float parFloat1, float parFloat2, float parFloat3, int parInt1, int parInt2) { float f = parFloatBuffer.get(parInt2 + parInt1 * 0 + 0); @@ -164,6 +181,7 @@ public class WorldRenderer { this.grow(this.vertexFormat.attribStride >> 2); } + @Override public void finalize() { free(); } @@ -185,17 +203,15 @@ public class WorldRenderer { } } - /** - * SLOW AND STUPID UPLOAD QUEUE SYSTEM, MUST BE REPLACED - */ public WorldRenderer.State func_181672_a() { - this.intBuffer.position(0); VertexFormat fmt = this.vertexFormat; int i = (fmt.attribStride >> 2) * vertexCount; + IntBuffer buf = EagRuntime.allocateIntBuffer(i); + this.intBuffer.position(0); this.intBuffer.limit(i); - int[] aint = new int[i]; - this.intBuffer.get(aint); - return new WorldRenderer.State(aint, fmt); + buf.put(this.intBuffer); + buf.flip(); + return new WorldRenderer.State(buf, fmt); } /** @@ -218,6 +234,7 @@ public class WorldRenderer { } Arrays.sort(ainteger, new Comparator() { + @Override public int compare(Integer integer, Integer integer1) { return Float.compare(afloat[integer1.intValue()], afloat[integer.intValue()]); } @@ -338,8 +355,8 @@ public class WorldRenderer { int i = this.byteBuffer.capacity() >> 2; if (parInt1 > (i - pos)) { int k = (((pos + parInt1 + (parInt1 >> 1)) >> 16) + 1) << 16; - LogManager.getLogger().warn("Needed to grow BufferBuilder buffer: Old size " + (i << 2) - + " bytes, new size " + (k << 2) + " bytes."); + logger.warn("Needed to grow BufferBuilder buffer: Old size " + (i << 2) + " bytes, new size " + (k << 2) + + " bytes."); ByteBuffer bytebuffer = GLAllocation.createDirectByteBuffer(k << 2); this.byteBuffer.position(0); bytebuffer.put(this.byteBuffer); @@ -528,14 +545,14 @@ public class WorldRenderer { this.zOffset = z; } - /** - * SLOW AND STUPID COMPANION FUNCTION TO 'func_181672_a' - */ public void setVertexState(WorldRenderer.State state) { - this.grow(state.getRawBuffer().length); + IntBuffer buf = state.getRawBuffer(); + int pp = buf.position(); + this.grow(buf.remaining()); int p = intBuffer.position(); this.intBuffer.position(0); - this.intBuffer.put(state.getRawBuffer()); + this.intBuffer.put(buf); + buf.position(pp); this.intBuffer.position(p); this.vertexCount = state.getVertexCount(); this.vertexFormat = state.getVertexFormat(); @@ -548,4 +565,4 @@ public class WorldRenderer { this.byteBuffer.putFloat(i + 4, (float) parDouble2); return this; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldVertexBufferUploader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldVertexBufferUploader.java index 70918bdd..823fe783 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldVertexBufferUploader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldVertexBufferUploader.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldVertexBufferUploader { public void func_181679_a(WorldRenderer parWorldRenderer) { @@ -29,4 +29,4 @@ public class WorldVertexBufferUploader { parWorldRenderer.reset(); } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/AbstractAcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/AbstractAcceleratedEffectRenderer.java index 62c03da9..5f7312f0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/AbstractAcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/AbstractAcceleratedEffectRenderer.java @@ -6,7 +6,7 @@ import net.minecraft.entity.Entity; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AbstractAcceleratedEffectRenderer implements IAcceleratedParticleEngine { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ArrayListSerial.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ArrayListSerial.java index 91d0ebad..99d5f355 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ArrayListSerial.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ArrayListSerial.java @@ -4,7 +4,7 @@ import java.util.ArrayList; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.ArrayList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ArrayListSerial extends ArrayList implements ListSerial { @@ -31,22 +31,27 @@ public class ArrayListSerial extends ArrayList implements ListSerial { super(initialSize); } + @Override public boolean eaglerCheck() { return mark != getEaglerSerial(); } + @Override public void eaglerIncrSerial() { ++modCountEagler; } + @Override public void eaglerResetCheck() { mark = getEaglerSerial(); } + @Override public int getEaglerSerial() { return (modCount << 8) + modCountEagler; } + @Override public E set(int index, E element) { ++modCountEagler; return super.set(index, element); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BetterFrustum.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BetterFrustum.java index 67b3a2ba..e054ca85 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BetterFrustum.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BetterFrustum.java @@ -35,7 +35,7 @@ import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; * This class is preferred over the frustum intersection methods in * {@link Matrix4fc} when many objects need to be culled by the same static * frustum. - * + * * @author Kai Burjack */ public class BetterFrustum { @@ -176,9 +176,9 @@ public class BetterFrustum { *

* In order to update the compute frustum planes later on, call * {@link #set(Matrix4fc)}. - * + * * @see #set(Matrix4fc) - * + * * @param m the {@link Matrix4fc} to create the frustum culler from */ public BetterFrustum(Matrix4f m) { @@ -191,9 +191,9 @@ public class BetterFrustum { *

* In order to update the compute frustum planes later on, call * {@link #set(Matrix4fc)}. - * + * * @see #set(Matrix4fc) - * + * * @param m the {@link Matrix4fc} to create the frustum culler * from * @param allowTestSpheres whether the methods @@ -211,7 +211,7 @@ public class BetterFrustum { /** * Compute the signed distance from the given axis-aligned box to the * plane. - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner @@ -248,7 +248,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner @@ -266,7 +266,7 @@ public class BetterFrustum { /* * This is an implementation of the "2.4 Basic intersection test" of the * mentioned site. - * + * * In addition to the algorithm in the paper, this method also returns the index * of the first plane that culled the box. */ @@ -332,7 +332,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner @@ -355,7 +355,7 @@ public class BetterFrustum { /* * This is an implementation of the first algorithm in * "2.5 Plane masking and coherency" of the mentioned site. - * + * * In addition to the algorithm in the paper, this method also returns the index * of the first plane that culled the box. */ @@ -432,7 +432,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner @@ -460,7 +460,7 @@ public class BetterFrustum { /* * This is an implementation of the second algorithm in * "2.5 Plane masking and coherency" of the mentioned site. - * + * * In addition to the algorithm in the paper, this method also returns the index * of the first plane that culled the box. */ @@ -523,7 +523,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param min the minimum corner coordinates of the axis-aligned box * @param max the maximum corner coordinates of the axis-aligned box * @return the index of the first plane that culled the box, if the box does not @@ -556,7 +556,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param min the minimum corner coordinates of the axis-aligned box * @param max the maximum corner coordinates of the axis-aligned box * @param mask contains as bitset all the planes that should be tested. This @@ -603,7 +603,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param min the minimum corner coordinates of the axis-aligned box * @param max the maximum corner coordinates of the axis-aligned box * @param mask contains as bitset all the planes that should be tested. @@ -636,7 +636,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param x the x-coordinate of the sphere's center * @param y the y-coordinate of the sphere's center * @param z the z-coordinate of the sphere's center @@ -686,7 +686,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param center the sphere's center * @param radius the sphere's radius * @return {@link #INSIDE} if the given sphere is completely inside the frustum, @@ -705,7 +705,7 @@ public class BetterFrustum { * "http://gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf"> * Fast Extraction of Viewing Frustum Planes from the World-View-Projection * Matrix - * + * * @param m the {@link Matrix4fc matrix} to update this frustum * culler's frustum planes from * @return this @@ -724,7 +724,7 @@ public class BetterFrustum { * "http://gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf"> * Fast Extraction of Viewing Frustum Planes from the World-View-Projection * Matrix - * + * * @param m the {@link Matrix4fc matrix} to update * this frustum culler's frustum planes * from @@ -829,7 +829,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner @@ -866,7 +866,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param min the minimum corner coordinates of the axis-aligned box * @param max the maximum corner coordinates of the axis-aligned box * @return true if the axis-aligned box is completely or partly @@ -880,7 +880,7 @@ public class BetterFrustum { * Test whether the given line segment, defined by the end points * (aX, aY, aZ) and (bX, bY, bZ), is partly or * completely within the frustum defined by this frustum culler. - * + * * @param aX the x coordinate of the line segment's first end point * @param aY the y coordinate of the line segment's first end point * @param aZ the z coordinate of the line segment's first end point @@ -986,7 +986,7 @@ public class BetterFrustum { * Test whether the given line segment, defined by the end points a * and b, is partly or completely within the frustum defined by * this frustum culler. - * + * * @param a the line segment's first end point * @param b the line segment's second end point * @return true if the given line segment is partly or completely @@ -1012,7 +1012,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minY the y-coordinate of the minimum corner * @param maxX the x-coordinate of the maximum corner @@ -1046,7 +1046,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param min the minimum corner coordinates of the XY-plane * @param max the maximum corner coordinates of the XY-plane * @return true if the XY-plane is completely or partly inside of @@ -1072,7 +1072,7 @@ public class BetterFrustum { * Reference: * Efficient View * Frustum Culling - * + * * @param minX the x-coordinate of the minimum corner * @param minZ the z-coordinate of the minimum corner * @param maxX the x-coordinate of the maximum corner @@ -1097,7 +1097,7 @@ public class BetterFrustum { /** * Test whether the given point (x, y, z) is within the frustum * defined by this frustum culler. - * + * * @param x the x-coordinate of the point * @param y the y-coordinate of the point * @param z the z-coordinate of the point @@ -1113,7 +1113,7 @@ public class BetterFrustum { /** * Test whether the given point is within the frustum defined by * this frustum culler. - * + * * @param point the point to test * @return true if the given point is inside the frustum; * false otherwise @@ -1132,7 +1132,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param x the x-coordinate of the sphere's center * @param y the y-coordinate of the sphere's center * @param z the z-coordinate of the sphere's center @@ -1156,7 +1156,7 @@ public class BetterFrustum { * iquilezles.org * for an examination of this problem. - * + * * @param center the sphere's center * @param radius the sphere's radius * @return true if the given sphere is partly or completely inside @@ -1166,4 +1166,4 @@ public class BetterFrustum { return testSphere(center.x, center.y, center.z, radius); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BlockVertexIDs.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BlockVertexIDs.java index 868e9f02..b5ddd6d5 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BlockVertexIDs.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/BlockVertexIDs.java @@ -15,7 +15,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BlockVertexIDs implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/CloudRenderWorker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/CloudRenderWorker.java index 15e12736..46dbfca1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/CloudRenderWorker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/CloudRenderWorker.java @@ -63,7 +63,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -75,7 +75,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CloudRenderWorker { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DebugFramebufferView.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DebugFramebufferView.java index 15e51237..54f1f688 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DebugFramebufferView.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DebugFramebufferView.java @@ -29,7 +29,7 @@ import net.minecraft.client.gui.Gui; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.client.gui.Gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DebugFramebufferView { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java index ac7d0b26..4042e155 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DeferredStateManager.java @@ -17,7 +17,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DeferredStateManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightInstance.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightInstance.java index 6c5cf7b0..50455ca9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightInstance.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightInstance.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class DynamicLightInstance { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightManager.java index 38355f4b..35db5257 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/DynamicLightManager.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredConfig.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredConfig.java index 9b07d830..61b65443 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredConfig.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredConfig.java @@ -15,7 +15,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerDeferredConfig { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java index 440e7c61..727167a6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/EaglerDeferredPipeline.java @@ -160,7 +160,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -172,7 +172,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerDeferredPipeline { @@ -2747,11 +2747,15 @@ public class EaglerDeferredPipeline { GlStateManager.enableDepth(); GlStateManager.depthFunc(GL_ALWAYS); GlStateManager.depthMask(true); + GlStateManager.colorMask(false, false, false, false); + _wglDrawBuffers(GL_NONE); GlStateManager.bindTexture(lightingHDRFramebufferDepthTexture); TextureCopyUtil.blitTextureDepth(); GlStateManager.disableDepth(); GlStateManager.depthFunc(GL_LEQUAL); GlStateManager.depthMask(false); + GlStateManager.colorMask(true, true, true, true); + _wglDrawBuffers(GL_BACK); } else { _wglBindFramebuffer(_GL_READ_FRAMEBUFFER, lightingHDRFramebuffer); _wglBindFramebuffer(_GL_DRAW_FRAMEBUFFER, null); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ExtGLEnums.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ExtGLEnums.java index cb52b5d5..28ce6dd8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ExtGLEnums.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ExtGLEnums.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ExtGLEnums { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java index aa210862..9561a259 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardAcceleratedEffectRenderer.java @@ -38,7 +38,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ForwardAcceleratedEffectRenderer extends AbstractAcceleratedEffectRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardRenderCallbackHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardRenderCallbackHandler.java index ed450bc4..b3a8043f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardRenderCallbackHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ForwardRenderCallbackHandler.java @@ -7,7 +7,7 @@ import java.util.List; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ForwardRenderCallbackHandler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java index c441d08a..cdd73156 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferAcceleratedEffectRenderer.java @@ -38,7 +38,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -50,7 +50,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GBufferAcceleratedEffectRenderer extends AbstractAcceleratedEffectRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineCompiler.java index 9bbabe3b..4b6c8861 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineCompiler.java @@ -23,7 +23,7 @@ import net.minecraft.client.renderer.GLAllocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.client.renderer.GLAllocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GBufferPipelineCompiler implements IExtPipelineCompiler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineProgramInstance.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineProgramInstance.java index 19f02d9e..438bce23 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineProgramInstance.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/GBufferPipelineProgramInstance.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.GBufferExtPipel /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.GBufferExtPipel * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GBufferPipelineProgramInstance { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LensFlareMeshRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LensFlareMeshRenderer.java index 9d2ac364..204a82a4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LensFlareMeshRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LensFlareMeshRenderer.java @@ -58,7 +58,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -70,7 +70,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LensFlareMeshRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LightSourceMesh.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LightSourceMesh.java index 716e2186..cb9f5fbe 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LightSourceMesh.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/LightSourceMesh.java @@ -33,7 +33,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -45,7 +45,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LightSourceMesh { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ListSerial.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ListSerial.java index 8f92913a..2b57d5d8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ListSerial.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ListSerial.java @@ -4,7 +4,7 @@ import java.util.List; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ListSerial extends List { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/NameTagRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/NameTagRenderer.java index bb9d5a0c..5e17e074 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/NameTagRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/NameTagRenderer.java @@ -4,7 +4,7 @@ import net.minecraft.entity.Entity; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NameTagRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfo.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfo.java index bab25f15..56169902 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfo.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfo.java @@ -9,7 +9,7 @@ import org.json.JSONObject; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import org.json.JSONObject; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderPackInfo { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfoReloadListener.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfoReloadListener.java index 509c564e..a17f8e6f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfoReloadListener.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShaderPackInfoReloadListener.java @@ -11,7 +11,7 @@ import net.minecraft.client.resources.IResourceManagerReloadListener; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.IResourceManagerReloadListener; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderPackInfoReloadListener implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShadersRenderPassFuture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShadersRenderPassFuture.java index a8a56230..87ea7fd2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShadersRenderPassFuture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/ShadersRenderPassFuture.java @@ -5,7 +5,7 @@ import net.minecraft.entity.Entity; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.entity.Entity; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ShadersRenderPassFuture { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/SkyboxRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/SkyboxRenderer.java index cdade29f..f4c2c489 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/SkyboxRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/SkyboxRenderer.java @@ -45,7 +45,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -57,7 +57,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkyboxRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/VertexMarkerState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/VertexMarkerState.java index 503502e4..c8733335 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/VertexMarkerState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/VertexMarkerState.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VertexMarkerState { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfig.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfig.java index 7b8b735c..74edd029 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfig.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfig.java @@ -14,7 +14,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiShaderConfig extends GuiScreen { @@ -45,6 +45,7 @@ public class GuiShaderConfig extends GuiScreen { this.shaderStartState = Minecraft.getMinecraft().gameSettings.shaders; } + @Override protected void actionPerformed(GuiButton btn) { if (btn.id == 0) { mc.gameSettings.shaders = !mc.gameSettings.shaders; @@ -56,6 +57,7 @@ public class GuiShaderConfig extends GuiScreen { } } + @Override public void drawScreen(int i, int j, float f) { this.drawBackground(0); listView.drawScreen(i, j, f); @@ -72,16 +74,19 @@ public class GuiShaderConfig extends GuiScreen { return mc; } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); listView.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); listView.handleTouchInput(); } + @Override public void initGui() { this.title = I18n.format("shaders.gui.title"); this.buttonList.clear(); @@ -96,16 +101,19 @@ public class GuiShaderConfig extends GuiScreen { } } + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); listView.mouseClicked(parInt1, parInt2, parInt3); } + @Override protected void mouseReleased(int i, int j, int k) { super.mouseReleased(i, j, k); listView.mouseReleased(i, j, k); } + @Override public void onGuiClosed() { if (shaderStartState != mc.gameSettings.shaders || listView.isDirty()) { mc.gameSettings.saveOptions(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfigList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfigList.java index 9b766231..3604f399 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfigList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShaderConfigList.java @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiShaderConfigList extends GuiListExtended { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShadersNotSupported.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShadersNotSupported.java index d4be1823..3eef042c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShadersNotSupported.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/gui/GuiShadersNotSupported.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiShadersNotSupported extends GuiScreen { @@ -30,12 +30,14 @@ public class GuiShadersNotSupported extends GuiScreen { this.reason = reason; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int i, int j, float var3) { this.drawBackground(0); drawCenteredString(fontRendererObj, I18n.format("shaders.gui.unsupported.title"), width / 2, height / 2 - 30, @@ -44,6 +46,7 @@ public class GuiShadersNotSupported extends GuiScreen { super.drawScreen(i, j, var3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, width / 2 - 100, height / 2 + 10, I18n.format("gui.back"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/GBufferExtPipelineShader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/GBufferExtPipelineShader.java index 5e03f813..bd2c8834 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/GBufferExtPipelineShader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/GBufferExtPipelineShader.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GBufferExtPipelineShader extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/IProgramUniforms.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/IProgramUniforms.java index 7f3800f5..2247620d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/IProgramUniforms.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/IProgramUniforms.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProgramUniforms { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java index 61829c7d..0fc19901 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleForward.java @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderAccelParticleForward extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleGBuffer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleGBuffer.java index 2dc92c0e..6aa631b5 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleGBuffer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderAccelParticleGBuffer.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderAccelParticleGBuffer extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBlurPass.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBlurPass.java index b267a08e..04e6a986 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBlurPass.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBlurPass.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderBloomBlurPass extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBrightPass.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBrightPass.java index 8311b663..c16ecef9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBrightPass.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderBloomBrightPass.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderBloomBrightPass extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsNoise3D.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsNoise3D.java index 1d34b7b1..1589de73 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsNoise3D.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsNoise3D.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderCloudsNoise3D extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSample.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSample.java index f65f8af3..78880cd1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSample.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSample.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderCloudsSample extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsShapes.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsShapes.java index 0b5f553e..bfa46397 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsShapes.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsShapes.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderCloudsShapes extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSunOcclusion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSunOcclusion.java index 461dbf2f..eb74001a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSunOcclusion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderCloudsSunOcclusion.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderCloudsSunOcclusion extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderFXAA.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderFXAA.java index 952fc044..fb5bf1b8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderFXAA.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderFXAA.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderFXAA extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferCombine.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferCombine.java index df739be1..a028a053 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferCombine.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferCombine.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderGBufferCombine extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferDebugView.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferDebugView.java index 7db5c04b..d4560302 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferDebugView.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferDebugView.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderGBufferDebugView extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferFog.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferFog.java index bf49777c..60ea9ab6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferFog.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderGBufferFog.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderGBufferFog extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderHandDepthMask.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderHandDepthMask.java index 08854821..c11bf3eb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderHandDepthMask.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderHandDepthMask.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderHandDepthMask extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensDistortion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensDistortion.java index b993e48b..fe681b96 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensDistortion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensDistortion.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLensDistortion extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensFlares.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensFlares.java index ce7ac387..b5575d6d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensFlares.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensFlares.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLensFlares extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensSunOcclusion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensSunOcclusion.java index a28fb9bf..8f01d52e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensSunOcclusion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLensSunOcclusion.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLensSunOcclusion extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightShaftsSample.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightShaftsSample.java index 6e7b2692..342010e9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightShaftsSample.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightShaftsSample.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLightShaftsSample extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingPoint.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingPoint.java index 1e0cf70c..9d4cd2a4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingPoint.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingPoint.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLightingPoint extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingSun.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingSun.java index c4fb9887..87492d32 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingSun.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderLightingSun.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderLightingSun extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderMoonRender.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderMoonRender.java index 19e31e4e..43d0efe3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderMoonRender.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderMoonRender.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderMoonRender extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureAvg.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureAvg.java index 053eade9..f59723b0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureAvg.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureAvg.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderPostExposureAvg extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureFinal.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureFinal.java index fddbd253..43404ddc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureFinal.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderPostExposureFinal.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderPostExposureFinal extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterControl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterControl.java index 358b15a6..6470d936 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterControl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterControl.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderRealisticWaterControl extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNoise.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNoise.java index 502e498c..b5ff0c3c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNoise.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNoise.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderRealisticWaterNoise extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNormalMap.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNormalMap.java index 70295cba..df683ba0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNormalMap.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderRealisticWaterNormalMap.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderRealisticWaterNormalMap extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojControl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojControl.java index 3e9added..61aa0c64 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojControl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojControl.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderReprojControl extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojSSR.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojSSR.java index b51dd2b8..4697ca6e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojSSR.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderReprojSSR.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderReprojSSR extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSSAOGenerate.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSSAOGenerate.java index db5fea5a..85b9d962 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSSAOGenerate.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSSAOGenerate.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderSSAOGenerate extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderShadowsSun.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderShadowsSun.java index 3cf8a96c..6b00b928 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderShadowsSun.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderShadowsSun.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderShadowsSun extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxAtmosphere.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxAtmosphere.java index dd765ba5..c8f4b457 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxAtmosphere.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxAtmosphere.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderSkyboxAtmosphere extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxIrradiance.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxIrradiance.java index b5387572..7cced8a3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxIrradiance.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxIrradiance.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderSkyboxIrradiance extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRender.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRender.java index c490adda..704d6f95 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRender.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRender.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderSkyboxRender extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRenderEnd.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRenderEnd.java index 91a1a483..61ba7023 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRenderEnd.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderSkyboxRenderEnd.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderSkyboxRenderEnd extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderTonemap.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderTonemap.java index 84db7f02..f19d02f0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderTonemap.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/PipelineShaderTonemap.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IUniformGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PipelineShaderTonemap extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompileException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompileException.java index fdbc5e54..9f32d1b2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompileException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompileException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderCompileException extends ShaderException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompiler.java index aa4e6ba4..b20eae98 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderCompiler.java @@ -31,7 +31,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +43,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderCompiler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderException.java index 8e2a83a7..2832b27a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderException extends IllegalStateException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderLinkException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderLinkException.java index 8d4bfc25..82ba448b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderLinkException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderLinkException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderLinkException extends ShaderException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderProgram.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderProgram.java index 4d00be30..98e5dd8a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderProgram.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderProgram.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderSource.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderSource.java index ee79bde4..6895de04 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderSource.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/ShaderSource.java @@ -17,7 +17,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ShaderSource { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/SharedPipelineShaders.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/SharedPipelineShaders.java index 4c0bc675..31317bf9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/SharedPipelineShaders.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/program/SharedPipelineShaders.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IShaderGL; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SharedPipelineShaders { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java index 69a64123..ffdef6e5 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerBitwisePackedTexture.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerBitwisePackedTexture { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerTextureAtlasSpritePBR.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerTextureAtlasSpritePBR.java index 796d5041..01fd60b7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerTextureAtlasSpritePBR.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EaglerTextureAtlasSpritePBR.java @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { @@ -60,6 +60,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { super(spriteName); } + @Override protected void allocateFrameTextureData(int index) { for (int j = 0; j < 3; ++j) { if (this.frameTextureDataPBR[j].size() <= index) { @@ -70,6 +71,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void bakeAnimationCache() { if (animationMetadata != null) { for (int i = 0; i < 3; ++i) { @@ -86,6 +88,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void clearFramesTextureData() { for (int i = 0; i < 3; ++i) { this.frameTextureDataPBR[i].clear(); @@ -96,6 +99,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void generateMipmaps(int level) { List[] arraylist = new List[] { Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList() }; @@ -116,6 +120,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { crashreportcategory.addCrashSection("PBR Layer", Integer.valueOf(j)); crashreportcategory.addCrashSection("Frame index", Integer.valueOf(i)); crashreportcategory.addCrashSectionCallable("Frame sizes", new Callable() { + @Override public String call() throws Exception { StringBuilder stringbuilder = new StringBuilder(); @@ -141,6 +146,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { this.bakeAnimationCache(); } + @Override public int getFrameCount() { return frameTextureDataPBR[0].size(); } @@ -150,10 +156,12 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { frameTextureDataPBR[2].get(index) }; } + @Override public int[][] getFrameTextureData(int index) { return frameTextureDataPBR[0].get(index); } + @Override public void loadSprite(ImageData[] images, AnimationMetadataSection meta) throws IOException { Throwable t = new UnsupportedOperationException( "Cannot call regular loadSprite in PBR mode, use loadSpritePBR"); @@ -164,6 +172,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void loadSpritePBR(ImageData[][] imageDatas, AnimationMetadataSection meta, boolean dontAnimateNormals, boolean dontAnimateMaterial) { this.resetSprite(); @@ -244,6 +253,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override protected void resetSprite() { this.animationMetadata = null; this.setFramesTextureDataPBR(new List[] { Lists.newArrayList(), Lists.newArrayList(), Lists.newArrayList() }); @@ -257,6 +267,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void setFramesTextureData(List newFramesTextureData) { Throwable t = new UnsupportedOperationException( "Cannot call regular setFramesTextureData in PBR mode, use setFramesTextureDataPBR"); @@ -271,6 +282,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { frameTextureDataPBR = newFramesTextureData; } + @Override public String toString() { return "EaglerTextureAtlasSpritePBR{name=\'" + this.iconName + '\'' + ", frameCount=" + this.framesTextureData.size() + ", rotated=" + this.rotated + ", x=" + this.originX + ", y=" @@ -278,6 +290,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { + this.maxU + ", v0=" + this.minV + ", v1=" + this.maxV + '}'; } + @Override public void updateAnimation(IFramebufferGL[] fb) { Throwable t = new UnsupportedOperationException( "Cannot call regular updateAnimation in PBR mode, use updateAnimationPBR"); @@ -288,6 +301,7 @@ public class EaglerTextureAtlasSpritePBR extends EaglerTextureAtlasSprite { } } + @Override public void updateAnimationPBR(IFramebufferGL[] copyColorFramebuffer, IFramebufferGL[] copyMaterialFramebuffer, int materialTexOffset) { if (animationCachePBR[0] == null || (!dontAnimateNormals && animationCachePBR[1] == null) diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EmissiveItems.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EmissiveItems.java index e8e7c785..b5734a5f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EmissiveItems.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/EmissiveItems.java @@ -17,7 +17,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EmissiveItems implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/MetalsLUT.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/MetalsLUT.java index a1c1cef0..b2b27386 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/MetalsLUT.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/MetalsLUT.java @@ -29,7 +29,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MetalsLUT implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRMaterialConstants.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRMaterialConstants.java index c7aaea76..f9d13ef6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRMaterialConstants.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRMaterialConstants.java @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PBRMaterialConstants implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java index 8844ec64..61c70a39 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/PBRTextureMapUtils.java @@ -12,7 +12,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PBRTextureMapUtils { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TemperaturesLUT.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TemperaturesLUT.java index 3b251669..3be631db 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TemperaturesLUT.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TemperaturesLUT.java @@ -12,7 +12,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TemperaturesLUT implements IResourceManagerReloadListener { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureClockPBRImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureClockPBRImpl.java index cb4988ec..55e91de3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureClockPBRImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureClockPBRImpl.java @@ -6,7 +6,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureClockPBRImpl extends EaglerTextureAtlasSpritePBR { private double smoothParam1; @@ -28,6 +28,7 @@ public class TextureClockPBRImpl extends EaglerTextureAtlasSpritePBR { super(spriteName); } + @Override public void updateAnimationPBR(IFramebufferGL[] copyColorFramebuffer, IFramebufferGL[] copyMaterialFramebuffer, int materialTexOffset) { if (!this.frameTextureDataPBR[0].isEmpty()) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureCompassPBRImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureCompassPBRImpl.java index 27986dcd..b48a1834 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureCompassPBRImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/deferred/texture/TextureCompassPBRImpl.java @@ -8,7 +8,7 @@ import net.minecraft.world.World; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.world.World; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TextureCompassPBRImpl extends EaglerTextureAtlasSpritePBR { public double currentAngle; @@ -30,6 +30,7 @@ public class TextureCompassPBRImpl extends EaglerTextureAtlasSpritePBR { super(spriteName); } + @Override public void updateAnimationPBR(IFramebufferGL[] copyColorFramebuffer, IFramebufferGL[] copyMaterialFramebuffer, int materialOffset) { Minecraft minecraft = Minecraft.getMinecraft(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java index 2f4b90f2..ab17d7f1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightBucketLoader.java @@ -22,7 +22,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightBucketLoader { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java index f00b20ea..5bed39e2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightInstance.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.opengl.ext.dynamiclights; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class DynamicLightInstance { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java index a7722042..fa58a7ec 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsAcceleratedEffectRenderer.java @@ -42,7 +42,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -54,7 +54,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightsAcceleratedEffectRenderer extends AbstractAcceleratedEffectRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java index 2d572696..9c15fd79 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsPipelineCompiler.java @@ -12,7 +12,7 @@ import net.minecraft.client.renderer.GLAllocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.renderer.GLAllocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightsPipelineCompiler implements IExtPipelineCompiler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java index 25ff4e2e..7c94078d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/DynamicLightsStateManager.java @@ -16,7 +16,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightsStateManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java index 49c93ee4..861c4750 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsAccelParticleShader.java @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderSource; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderSource; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightsAccelParticleShader extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java index 8b857fdd..e3466a65 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ext/dynamiclights/program/DynamicLightsExtPipelineShader.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderProgram; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.program.ShaderProgram; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DynamicLightsExtPipelineShader extends ShaderProgram { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/GuiScreenContentWarning.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/GuiScreenContentWarning.java index 30ba7d7c..147d70ae 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/GuiScreenContentWarning.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/GuiScreenContentWarning.java @@ -7,7 +7,7 @@ import net.minecraft.util.EnumChatFormatting; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenContentWarning extends GuiScreen { @@ -45,6 +45,7 @@ public class GuiScreenContentWarning extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float pt) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, EnumChatFormatting.BOLD + I18n.format("profanityFilterWarning.title"), @@ -60,6 +61,7 @@ public class GuiScreenContentWarning extends GuiScreen { super.drawScreen(mx, my, pt); } + @Override public void initGui() { this.buttonList.clear(); enableState = mc.gameSettings.enableProfanityFilter; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/LookAlikeUnicodeConv.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/LookAlikeUnicodeConv.java index 84c53e1d..72ab7999 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/LookAlikeUnicodeConv.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/LookAlikeUnicodeConv.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.profanity_filter; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.profanity_filter; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LookAlikeUnicodeConv { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/ProfanityFilter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/ProfanityFilter.java index aceb0331..3a98699b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/ProfanityFilter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profanity_filter/ProfanityFilter.java @@ -22,7 +22,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ProfanityFilter { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java index 8468c5cf..45a529e1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.profile; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.profile; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CapePackets { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java index 04d08589..f93fa84e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomCape.java @@ -5,7 +5,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CustomCape { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomSkin.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomSkin.java index afd1e84a..5038fe69 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomSkin.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CustomSkin.java @@ -5,7 +5,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CustomSkin { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java index 40b09b87..fd6950d8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java @@ -4,7 +4,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum DefaultCapes { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java index cdde470c..1f80d7c8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultSkins.java @@ -4,7 +4,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum DefaultSkins { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java index 6fcefdc0..f87d5a65 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerProfile.java @@ -18,7 +18,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerProfile { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerSkinTexture.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerSkinTexture.java index a3a28ff3..e5b39c80 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerSkinTexture.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/EaglerSkinTexture.java @@ -10,7 +10,7 @@ import net.minecraft.client.resources.IResourceManager; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.client.resources.IResourceManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerSkinTexture implements ITextureObject { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiAuthenticationScreen.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiAuthenticationScreen.java index b31872bd..83f26170 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiAuthenticationScreen.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiAuthenticationScreen.java @@ -12,7 +12,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiAuthenticationScreen extends GuiScreen { @@ -62,6 +62,7 @@ public class GuiAuthenticationScreen extends GuiScreen { this.message = message; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 1) { this.mc.displayGuiScreen(new GuiConnecting(retAfterAuthScreen, password.getText())); @@ -70,6 +71,7 @@ public class GuiAuthenticationScreen extends GuiScreen { } } + @Override public void drawScreen(int i, int j, float var3) { drawBackground(0); this.password.drawTextBox(); @@ -84,6 +86,7 @@ public class GuiAuthenticationScreen extends GuiScreen { password.fireInputEvent(event, param); } + @Override public void initGui() { if (authTypeForWarning != Integer.MAX_VALUE) { GuiScreen scr = ConnectionHandshake.displayAuthProtocolConfirm(authTypeForWarning, parent, this); @@ -107,6 +110,7 @@ public class GuiAuthenticationScreen extends GuiScreen { this.password.setCanLoseFocus(false); } + @Override protected void keyTyped(char parChar1, int parInt1) { String pass = password.getText(); if (parInt1 == KeyboardConstants.KEY_RETURN && pass.length() > 0) { @@ -117,11 +121,13 @@ public class GuiAuthenticationScreen extends GuiScreen { } } + @Override protected void mouseClicked(int parInt1, int parInt2, int parInt3) { super.mouseClicked(parInt1, parInt2, parInt3); this.password.mouseClicked(parInt1, parInt2, parInt3); } + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiPasswordTextField.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiPasswordTextField.java index c6dd6a5b..bba32d65 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiPasswordTextField.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiPasswordTextField.java @@ -5,7 +5,7 @@ import net.minecraft.client.gui.GuiTextField; /** * Copyright (c) 2023 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.client.gui.GuiTextField; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiPasswordTextField extends GuiTextField { @@ -42,6 +42,7 @@ public class GuiPasswordTextField extends GuiTextField { super(componentId, fontrendererObj, x, y, par5Width, par6Height); } + @Override public void drawTextBox() { String oldText = text; text = stars(text.length()); @@ -49,6 +50,7 @@ public class GuiPasswordTextField extends GuiTextField { text = oldText; } + @Override public void mouseClicked(int parInt1, int parInt2, int parInt3) { String oldText = text; text = stars(text.length()); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenDefaultUsernameNote.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenDefaultUsernameNote.java index fdfc26b8..75b33900 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenDefaultUsernameNote.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenDefaultUsernameNote.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenDefaultUsernameNote extends GuiScreen { @@ -43,6 +43,7 @@ public class GuiScreenDefaultUsernameNote extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("defaultUsernameDetected.title"), this.width / 2, 70, @@ -56,6 +57,7 @@ public class GuiScreenDefaultUsernameNote extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 112, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java index e50037b2..cbc8a39d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditCape.java @@ -19,7 +19,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,7 +31,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenEditCape extends GuiScreen { @@ -55,6 +55,7 @@ public class GuiScreenEditCape extends GuiScreen { this.parent = parent; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (!dropDownOpen) { if (par1GuiButton.id == 0) { @@ -71,6 +72,7 @@ public class GuiScreenEditCape extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float partialTicks) { drawDefaultBackground(); drawCenteredString(fontRendererObj, screenTitle, width / 2, 15, 16777215); @@ -208,6 +210,7 @@ public class GuiScreenEditCape extends GuiScreen { SkinPreviewRenderer.renderPreview(xx, yy, mx, my, true, model, skinTexture, capeTexture); } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); if (dropDownOpen) { @@ -224,6 +227,7 @@ public class GuiScreenEditCape extends GuiScreen { } } + @Override public void initGui() { Keyboard.enableRepeatEvents(true); screenTitle = I18n.format("editCape.title"); @@ -236,6 +240,7 @@ public class GuiScreenEditCape extends GuiScreen { updateOptions(); } + @Override protected void keyTyped(char c, int k) { if (k == 200 && selectedSlot > 0) { --selectedSlot; @@ -247,6 +252,7 @@ public class GuiScreenEditCape extends GuiScreen { } } + @Override protected void mouseClicked(int mx, int my, int button) { if (button == 0) { if (!EagRuntime.getConfiguration().isDemo()) { @@ -297,6 +303,7 @@ public class GuiScreenEditCape extends GuiScreen { super.mouseClicked(mx, my, button); } + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -325,6 +332,7 @@ public class GuiScreenEditCape extends GuiScreen { dropDownOptions = n; } + @Override public void updateScreen() { if (EagRuntime.fileChooserHasResult()) { FileChooserResult result = EagRuntime.getFileChooserResult(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java index f806b7ae..fd7b29da 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenEditProfile extends GuiScreen { @@ -64,6 +64,7 @@ public class GuiScreenEditProfile extends GuiScreen { this.parent = parent; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (!dropDownOpen) { if (par1GuiButton.id == 0) { @@ -87,6 +88,7 @@ public class GuiScreenEditProfile extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float partialTicks) { drawDefaultBackground(); drawCenteredString(fontRendererObj, screenTitle, width / 2, 15, 16777215); @@ -301,6 +303,7 @@ public class GuiScreenEditProfile extends GuiScreen { usernameField.fireInputEvent(event, param); } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); if (dropDownOpen) { @@ -317,6 +320,7 @@ public class GuiScreenEditProfile extends GuiScreen { } } + @Override public void initGui() { Keyboard.enableRepeatEvents(true); screenTitle = I18n.format("editProfile.title"); @@ -333,6 +337,7 @@ public class GuiScreenEditProfile extends GuiScreen { updateOptions(); } + @Override protected void keyTyped(char c, int k) { usernameField.textboxKeyTyped(c, k); @@ -352,6 +357,7 @@ public class GuiScreenEditProfile extends GuiScreen { } } + @Override protected void mouseClicked(int mx, int my, int button) { usernameField.mouseClicked(mx, my, button); if (button == 0) { @@ -458,6 +464,7 @@ public class GuiScreenEditProfile extends GuiScreen { super.mouseClicked(mx, my, button); } + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -505,6 +512,7 @@ public class GuiScreenEditProfile extends GuiScreen { dropDownOptions = n; } + @Override public void updateScreen() { usernameField.updateCursorCounter(); if (EagRuntime.fileChooserHasResult()) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenExportProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenExportProfile.java index fd63ca01..d30e530a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenExportProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenExportProfile.java @@ -11,7 +11,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenExportProfile extends GuiScreen { @@ -42,6 +42,7 @@ public class GuiScreenExportProfile extends GuiScreen { this.back = back; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { if (!doExportProfile && !doExportSettings && !doExportServers && !doExportResourcePacks) { @@ -80,6 +81,7 @@ public class GuiScreenExportProfile extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("settingsBackup.export.title"), this.width / 2, @@ -87,6 +89,7 @@ public class GuiScreenExportProfile extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(exportProfile = new GuiButton(2, this.width / 2 - 100, this.height / 4, I18n.format("settingsBackup.export.option.profile") + " " diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportExportProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportExportProfile.java index 527a179d..27306cdd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportExportProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportExportProfile.java @@ -11,7 +11,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenImportExportProfile extends GuiScreen { @@ -34,6 +34,7 @@ public class GuiScreenImportExportProfile extends GuiScreen { this.back = back; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { mc.displayGuiScreen(back); @@ -45,6 +46,7 @@ public class GuiScreenImportExportProfile extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); @@ -54,6 +56,7 @@ public class GuiScreenImportExportProfile extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 40, I18n.format("settingsBackup.importExport.import"))); @@ -62,6 +65,7 @@ public class GuiScreenImportExportProfile extends GuiScreen { this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 130, I18n.format("gui.cancel"))); } + @Override public void updateScreen() { if (waitingForFile && EagRuntime.fileChooserHasResult()) { waitingForFile = false; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportProfile.java index 14c65955..ddb15d1d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenImportProfile.java @@ -13,7 +13,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenImportProfile extends GuiScreen { @@ -50,6 +50,7 @@ public class GuiScreenImportProfile extends GuiScreen { this.doImportResourcePacks = importer.hasResourcePacks(); } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { if (!doImportProfile && !doImportSettings && !doImportServers && !doImportResourcePacks) { @@ -98,6 +99,7 @@ public class GuiScreenImportProfile extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("settingsBackup.import.title"), this.width / 2, @@ -105,6 +107,7 @@ public class GuiScreenImportProfile extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(importProfile = new GuiButton(2, this.width / 2 - 100, this.height / 4, I18n.format("settingsBackup.import.option.profile") + " " diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java index 525fd9d1..f5104c59 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/HighPolySkin.java @@ -4,7 +4,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum HighPolySkin { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java index 8b700496..bc743d2f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java @@ -26,7 +26,7 @@ import net.minecraft.client.multiplayer.ServerList; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ import net.minecraft.client.multiplayer.ServerList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ProfileExporter { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileImporter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileImporter.java index 1cb0d71e..80c868ca 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileImporter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileImporter.java @@ -17,7 +17,7 @@ import net.minecraft.client.multiplayer.ServerList; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.client.multiplayer.ServerList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ProfileImporter implements Closeable { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java index c5981c96..cd4c7ebe 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java @@ -27,7 +27,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RenderHighPoly extends RenderPlayer { @@ -51,6 +51,7 @@ public class RenderHighPoly extends RenderPlayer { super(renderManager, fallbackModel, fallbackScale); } + @Override public void doRender(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2, float f, float f1) { if (!abstractclientplayer.isUser() || this.renderManager.livingPlayer == abstractclientplayer) { @@ -488,10 +489,12 @@ public class RenderHighPoly extends RenderPlayer { } } + @Override public void renderLeftArm(AbstractClientPlayer clientPlayer) { } + @Override public void renderLivingAt(AbstractClientPlayer abstractclientplayer, double d0, double d1, double d2) { if (abstractclientplayer.isEntityAlive() && abstractclientplayer.isPlayerSleeping()) { super.renderLivingAt(abstractclientplayer, d0 - (double) abstractclientplayer.renderOffsetX, @@ -501,6 +504,7 @@ public class RenderHighPoly extends RenderPlayer { } } + @Override public void renderRightArm(AbstractClientPlayer clientPlayer) { } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java index ae8e3eff..2df3970d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerCapeCache.java @@ -15,7 +15,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerCapeCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java index 8d523d46..b4abc671 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ServerSkinCache.java @@ -18,7 +18,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerSkinCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java index 55d75b2c..e63c94ad 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkinConverter { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java index 95e91773..16a4d1be 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinModel.java @@ -5,7 +5,7 @@ import java.util.Map; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.util.Map; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum SkinModel { STEVE(0, 64, 64, "default", false), ALEX(1, 64, 64, "slim", false), ZOMBIE(2, 64, 64, "zombie", true), @@ -84,4 +84,4 @@ public enum SkinModel { this.highPoly = null; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java index ed27f173..6c2e62bc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java @@ -6,7 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.MD5Digest; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.MD5Digest; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkinPackets { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java index 98995b15..6ccb5189 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPreviewRenderer.java @@ -13,7 +13,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkinPreviewRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/EnumScreenRecordingCodec.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/EnumScreenRecordingCodec.java index e24bb678..7a0e8e0d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/EnumScreenRecordingCodec.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/EnumScreenRecordingCodec.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.recording; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.recording; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumScreenRecordingCodec { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingNote.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingNote.java index d3cd5bb1..67a6139e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingNote.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingNote.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRecordingNote extends GuiScreen { @@ -30,6 +30,7 @@ public class GuiScreenRecordingNote extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { hasShown = true; @@ -37,6 +38,7 @@ public class GuiScreenRecordingNote extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("options.recordingNote.title"), this.width / 2, 70, @@ -48,6 +50,7 @@ public class GuiScreenRecordingNote extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 108, I18n.format("gui.done"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingSettings.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingSettings.java index 48d2be3a..0704fa2c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingSettings.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenRecordingSettings.java @@ -14,7 +14,7 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.MathHelper; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRecordingSettings extends GuiScreen { @@ -48,6 +48,7 @@ public class GuiScreenRecordingSettings extends GuiScreen { this.parent = parent; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { if (dirty) { @@ -76,6 +77,7 @@ public class GuiScreenRecordingSettings extends GuiScreen { } } + @Override public void drawScreen(int i, int j, float var3) { drawDefaultBackground(); drawCenteredString(fontRendererObj, I18n.format("options.screenRecording.title"), this.width / 2, 15, 16777215); @@ -118,6 +120,7 @@ public class GuiScreenRecordingSettings extends GuiScreen { } } + @Override public void initGui() { buttonList.clear(); buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 168, I18n.format("gui.done"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenSelectCodec.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenSelectCodec.java index 34d17882..bced2d9e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenSelectCodec.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiScreenSelectCodec.java @@ -10,7 +10,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenSelectCodec extends GuiScreen { @@ -44,6 +44,7 @@ public class GuiScreenSelectCodec extends GuiScreen { this.codec = codec; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { changeStateShowAll(!showAll); @@ -68,6 +69,7 @@ public class GuiScreenSelectCodec extends GuiScreen { selectedCodec = codecs.indexOf(oldCodec); } + @Override public void drawScreen(int i, int j, float var3) { slots.drawScreen(i, j, var3); this.drawCenteredString(this.fontRendererObj, I18n.format("options.recordingCodec.title"), this.width / 2, 16, @@ -75,16 +77,19 @@ public class GuiScreenSelectCodec extends GuiScreen { super.drawScreen(i, j, var3); } + @Override public void handleMouseInput() throws IOException { super.handleMouseInput(); slots.handleMouseInput(); } + @Override public void handleTouchInput() throws IOException { super.handleTouchInput(); slots.handleTouchInput(); } + @Override public void initGui() { showAll = codec.advanced; codecs = showAll ? ScreenRecordingController.advancedCodecsOrdered diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiSlotSelectCodec.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiSlotSelectCodec.java index 3e411cc6..74a0ec91 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiSlotSelectCodec.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/GuiSlotSelectCodec.java @@ -4,7 +4,7 @@ import net.minecraft.client.gui.GuiSlot; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.client.gui.GuiSlot; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSlotSelectCodec extends GuiSlot { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/ScreenRecordingController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/ScreenRecordingController.java index 3a00b059..970e05ef 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/ScreenRecordingController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/recording/ScreenRecordingController.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.ScreenRecordParameters; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.ScreenRecordParameters; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ScreenRecordingController { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/AddressResolver.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/AddressResolver.java index fd29b09a..e65e2746 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/AddressResolver.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/AddressResolver.java @@ -6,7 +6,7 @@ import net.minecraft.client.multiplayer.ServerData; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.multiplayer.ServerData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class AddressResolver { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/CompressionNotSupportedException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/CompressionNotSupportedException.java index 06c31986..256a9651 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/CompressionNotSupportedException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/CompressionNotSupportedException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CompressionNotSupportedException extends UnsupportedOperationException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java index eec44a1c..4b0c34b4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java @@ -36,7 +36,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -48,7 +48,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ConnectionHandshake { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EaglercraftNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EaglercraftNetworkManager.java index 55945493..e8debe78 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EaglercraftNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EaglercraftNetworkManager.java @@ -14,7 +14,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class EaglercraftNetworkManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EncryptionNotSupportedException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EncryptionNotSupportedException.java index 1031955e..7e058c47 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EncryptionNotSupportedException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/EncryptionNotSupportedException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EncryptionNotSupportedException extends UnsupportedOperationException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/GuiHandshakeApprove.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/GuiHandshakeApprove.java index 32e20f77..98d699da 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/GuiHandshakeApprove.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/GuiHandshakeApprove.java @@ -9,7 +9,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiHandshakeApprove extends GuiScreen { @@ -44,6 +44,7 @@ public class GuiHandshakeApprove extends GuiScreen { this.yes = yes; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { mc.displayGuiScreen(no); @@ -52,6 +53,7 @@ public class GuiHandshakeApprove extends GuiScreen { } } + @Override public void drawScreen(int xx, int yy, float partialTicks) { drawBackground(0); drawCenteredString(fontRendererObj, titleString, width / 2, bodyY, 16777215); @@ -73,6 +75,7 @@ public class GuiHandshakeApprove extends GuiScreen { } } + @Override public void initGui() { this.buttonList.clear(); titleString = I18n.format("handshakeApprove." + message + ".title"); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/HandshakePacketTypes.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/HandshakePacketTypes.java index c7fe0fef..087f4fdc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/HandshakePacketTypes.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/HandshakePacketTypes.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.socket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class HandshakePacketTypes { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/RateLimitTracker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/RateLimitTracker.java index 9a94b092..2fe7eca8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/RateLimitTracker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/RateLimitTracker.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RateLimitTracker { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryDispatch.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryDispatch.java index b211b31a..20fdc35f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryDispatch.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryDispatch.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2023 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerQueryDispatch { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryImpl.java index 3289d4bd..45b1dd7a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ServerQueryImpl.java @@ -10,14 +10,13 @@ import net.lax1dude.eaglercraft.v1_8.internal.EnumServerRateLimit; import net.lax1dude.eaglercraft.v1_8.internal.IServerQuery; import net.lax1dude.eaglercraft.v1_8.internal.IWebSocketClient; import net.lax1dude.eaglercraft.v1_8.internal.IWebSocketFrame; -import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; import net.lax1dude.eaglercraft.v1_8.internal.QueryResponse; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class ServerQueryImpl implements IServerQuery { @@ -135,7 +134,7 @@ class ServerQueryImpl implements IServerQuery { IWebSocketFrame frame = lst.get(i); alive = true; if (pingTimer == -1) { - pingTimer = PlatformRuntime.steadyTimeMillis() - pingStart; + pingTimer = frame.getTimestamp() - pingStart; if (pingTimer < 1) { pingTimer = 1; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/WebSocketNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/WebSocketNetworkManager.java index a7e4e0ca..2fc3b543 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/WebSocketNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/WebSocketNetworkManager.java @@ -16,7 +16,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WebSocketNetworkManager extends EaglercraftNetworkManager { @@ -39,6 +39,7 @@ public class WebSocketNetworkManager extends EaglercraftNetworkManager { this.webSocketClient = webSocketClient; } + @Override public boolean checkDisconnected() { if (webSocketClient.isClosed()) { try { @@ -52,6 +53,7 @@ public class WebSocketNetworkManager extends EaglercraftNetworkManager { } } + @Override public void closeChannel(IChatComponent reason) { webSocketClient.close(); if (nethandler != null) { @@ -60,13 +62,16 @@ public class WebSocketNetworkManager extends EaglercraftNetworkManager { clientDisconnected = true; } + @Override public void connect() { } + @Override public EnumEaglerConnectionState getConnectStatus() { return webSocketClient.getState(); } + @Override public void processReceivedPackets() throws IOException { if (nethandler == null) return; @@ -125,6 +130,7 @@ public class WebSocketNetworkManager extends EaglercraftNetworkManager { } } + @Override public void sendPacket(Packet pkt) { if (!isChannelOpen()) { logger.error("Packet was sent on a closed connection: {}", pkt.getClass().getSimpleName()); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV3MessageHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV3MessageHandler.java index 7b3a9a45..80de4340 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV3MessageHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV3MessageHandler.java @@ -25,7 +25,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientV3MessageHandler implements GameMessageHandler { @@ -47,6 +47,7 @@ public class ClientV3MessageHandler implements GameMessageHandler { this.netHandler = netHandler; } + @Override public void handleServer(SPacketEnableFNAWSkinsEAG packet) { netHandler.currentFNAWSkinAllowedState = packet.enableSkins; netHandler.currentFNAWSkinForcedState = packet.enableSkins; @@ -54,16 +55,19 @@ public class ClientV3MessageHandler implements GameMessageHandler { || (netHandler.currentFNAWSkinAllowedState && Minecraft.getMinecraft().gameSettings.enableFNAWSkins)); } + @Override public void handleServer(SPacketOtherCapeCustomEAG packet) { netHandler.getCapeCache().cacheCapeCustom(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.customCape); } + @Override public void handleServer(SPacketOtherCapePresetEAG packet) { netHandler.getCapeCache().cacheCapePreset(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.presetCape); } + @Override public void handleServer(SPacketOtherSkinCustomV3EAG packet) { EaglercraftUUID responseUUID = new EaglercraftUUID(packet.uuidMost, packet.uuidLeast); SkinModel modelId; @@ -81,23 +85,27 @@ public class ClientV3MessageHandler implements GameMessageHandler { this.netHandler.getSkinCache().cacheSkinCustom(responseUUID, packet.customSkin, modelId); } + @Override public void handleServer(SPacketOtherSkinPresetEAG packet) { this.netHandler.getSkinCache().cacheSkinPreset(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.presetSkin); } + @Override public void handleServer(SPacketUpdateCertEAG packet) { if (EagRuntime.getConfiguration().allowUpdateSvc()) { UpdateService.addCertificateToSet(packet.updateCert); } } + @Override public void handleServer(SPacketVoiceSignalAllowedEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeAllowed(packet.allowed, packet.iceServers); } } + @Override public void handleServer(SPacketVoiceSignalConnectV3EAG packet) { if (VoiceClientController.isClientSupported()) { if (packet.isAnnounceType) { @@ -110,6 +118,7 @@ public class ClientV3MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalDescEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeDescription( @@ -118,6 +127,7 @@ public class ClientV3MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalDisconnectPeerEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController @@ -125,12 +135,14 @@ public class ClientV3MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalGlobalEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeGlobalNew(packet.users); } } + @Override public void handleServer(SPacketVoiceSignalICEEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeICECandidate( diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV4MessageHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV4MessageHandler.java index 2c57efce..e78ca1e7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV4MessageHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/ClientV4MessageHandler.java @@ -49,7 +49,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -61,7 +61,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientV4MessageHandler implements GameMessageHandler { @@ -71,10 +71,12 @@ public class ClientV4MessageHandler implements GameMessageHandler { this.netHandler = netHandler; } + @Override public void handleServer(SPacketCustomizePauseMenuV4EAG packet) { PauseMenuCustomizeState.loadPacket(packet); } + @Override public void handleServer(SPacketEnableFNAWSkinsEAG packet) { netHandler.currentFNAWSkinAllowedState = packet.enableSkins; netHandler.currentFNAWSkinForcedState = packet.force; @@ -82,22 +84,27 @@ public class ClientV4MessageHandler implements GameMessageHandler { || (netHandler.currentFNAWSkinAllowedState && Minecraft.getMinecraft().gameSettings.enableFNAWSkins)); } + @Override public void handleServer(SPacketForceClientCapeCustomV4EAG packet) { EaglerProfile.handleForceCapeCustom(packet.customCape); } + @Override public void handleServer(SPacketForceClientCapePresetV4EAG packet) { EaglerProfile.handleForceCapePreset(packet.presetCape); } + @Override public void handleServer(SPacketForceClientSkinCustomV4EAG packet) { EaglerProfile.handleForceSkinCustom(packet.modelID, SkinPacketVersionCache.convertToV3Raw(packet.customSkin)); } + @Override public void handleServer(SPacketForceClientSkinPresetV4EAG packet) { EaglerProfile.handleForceSkinPreset(packet.presetSkin); } + @Override public void handleServer(SPacketInvalidatePlayerCacheV4EAG packet) { if (packet.players != null && packet.players.size() > 0) { for (SPacketInvalidatePlayerCacheV4EAG.InvalidateRequest req : packet.players) { @@ -112,37 +119,45 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketNotifBadgeHideV4EAG packet) { netHandler.getNotifManager().processPacketHideBadge(packet); } + @Override public void handleServer(SPacketNotifBadgeShowV4EAG packet) { netHandler.getNotifManager().processPacketShowBadge(packet); } + @Override public void handleServer(SPacketNotifIconsRegisterV4EAG packet) { netHandler.getNotifManager().processPacketAddIcons(packet); } + @Override public void handleServer(SPacketNotifIconsReleaseV4EAG packet) { netHandler.getNotifManager().processPacketRemIcons(packet); } + @Override public void handleServer(SPacketOtherCapeCustomEAG packet) { netHandler.getCapeCache().cacheCapeCustom(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.customCape); } + @Override public void handleServer(SPacketOtherCapePresetEAG packet) { netHandler.getCapeCache().cacheCapePreset(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.presetCape); } + @Override public void handleServer(SPacketOtherPlayerClientUUIDV4EAG packet) { ClientUUIDLoadingCache.handleResponse(packet.requestId, new EaglercraftUUID(packet.clientUUIDMost, packet.clientUUIDLeast)); } + @Override public void handleServer(SPacketOtherSkinCustomV4EAG packet) { EaglercraftUUID responseUUID = new EaglercraftUUID(packet.uuidMost, packet.uuidLeast); SkinModel modelId; @@ -161,19 +176,23 @@ public class ClientV4MessageHandler implements GameMessageHandler { SkinPacketVersionCache.convertToV3Raw(packet.customSkin), modelId); } + @Override public void handleServer(SPacketOtherSkinPresetEAG packet) { this.netHandler.getSkinCache().cacheSkinPreset(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.presetSkin); } + @Override public void handleServer(SPacketRedirectClientV4EAG packet) { Minecraft.getMinecraft().handleReconnectPacket(packet.redirectURI); } + @Override public void handleServer(SPacketServerInfoDataChunkV4EAG packet) { ServerInfoCache.handleChunk(packet); } + @Override public void handleServer(SPacketSetServerCookieV4EAG packet) { if (!netHandler.isClientInEaglerSingleplayerOrLAN() && Minecraft.getMinecraft().getCurrentServerData().enableCookies) { @@ -182,6 +201,7 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketUnforceClientV4EAG packet) { if (packet.resetSkin) { EaglerProfile.isServerSkinOverride = false; @@ -196,18 +216,21 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketUpdateCertEAG packet) { if (EagRuntime.getConfiguration().allowUpdateSvc()) { UpdateService.addCertificateToSet(packet.updateCert); } } + @Override public void handleServer(SPacketVoiceSignalAllowedEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeAllowed(packet.allowed, packet.iceServers); } } + @Override public void handleServer(SPacketVoiceSignalConnectAnnounceV4EAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController @@ -215,6 +238,7 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalConnectV4EAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeConnect( @@ -222,6 +246,7 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalDescEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeDescription( @@ -230,6 +255,7 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalDisconnectPeerEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController @@ -237,12 +263,14 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketVoiceSignalGlobalEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeGlobalNew(packet.users); } } + @Override public void handleServer(SPacketVoiceSignalICEEAG packet) { if (VoiceClientController.isClientSupported()) { VoiceClientController.handleVoiceSignalPacketTypeICECandidate( @@ -251,6 +279,7 @@ public class ClientV4MessageHandler implements GameMessageHandler { } } + @Override public void handleServer(SPacketWebViewMessageV4EAG packet) { WebViewOverlayController.handleMessagePacket(packet); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/GameProtocolMessageController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/GameProtocolMessageController.java index 1ab4c8cb..57945c11 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/GameProtocolMessageController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/GameProtocolMessageController.java @@ -21,7 +21,7 @@ import net.minecraft.network.PacketBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.network.PacketBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GameProtocolMessageController { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/IPluginMessageSendFunction.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/IPluginMessageSendFunction.java index c5204ae2..d4f33a2b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/IPluginMessageSendFunction.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/IPluginMessageSendFunction.java @@ -4,7 +4,7 @@ import net.minecraft.network.PacketBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.minecraft.network.PacketBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IPluginMessageSendFunction { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferInputWrapper.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferInputWrapper.java index d914ac02..488fbcc4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferInputWrapper.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferInputWrapper.java @@ -11,7 +11,7 @@ import net.minecraft.network.PacketBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.network.PacketBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PacketBufferInputWrapper implements GamePacketInputBuffer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferOutputWrapper.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferOutputWrapper.java index 23567178..341bfbb7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferOutputWrapper.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/client/PacketBufferOutputWrapper.java @@ -8,7 +8,7 @@ import net.minecraft.network.PacketBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.network.PacketBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PacketBufferOutputWrapper implements GamePacketOutputBuffer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/IntegratedServerState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/IntegratedServerState.java index 3f6e47af..db3e76f0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/IntegratedServerState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/IntegratedServerState.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.ipc.IPCPacketFFProcessKeepAlive; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.ipc.IPCPacketFFProcessKeepAlive; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedServerState { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerSaveHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerSaveHandler.java index bdfdfaa6..e8a82b72 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerSaveHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerSaveHandler.java @@ -5,7 +5,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SingleplayerSaveHandler extends SaveHandlerMP { @@ -27,6 +27,7 @@ public class SingleplayerSaveHandler extends SaveHandlerMP { this.worldInfo = worldInfo; } + @Override public WorldInfo loadWorldInfo() { return worldInfo; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java index a197bc49..26915a85 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SingleplayerServerController.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.EnumEaglerConnectionState; +import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformType; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; import net.lax1dude.eaglercraft.v1_8.internal.PlatformApplication; import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; @@ -61,7 +62,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -73,7 +74,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SingleplayerServerController implements ISaveFormat { @@ -357,7 +358,7 @@ public class SingleplayerServerController implements ISaveFormat { } public static boolean isChannelNameAllowed(String ch) { - return !IPC_CHANNEL.equals(ch) && !PLAYER_CHANNEL.equals(ch); + return !ch.startsWith("~!"); } public static boolean isChannelOpen(String ch) { @@ -464,7 +465,6 @@ public class SingleplayerServerController implements ISaveFormat { } else { openLANChannels.add(ch); sendIPCPacket(new IPCPacket0CPlayerChannel(ch, true)); - PlatformWebRTC.serverLANCreatePeer(ch); } } @@ -490,15 +490,21 @@ public class SingleplayerServerController implements ISaveFormat { packetData.contents.length); } } else { + // logger.warn("Recieved packet on IPC channel '{}', forwarding to + // PlatformWebRTC even though the channel should be mapped", + // packetData.channel); + // just to be safe PlatformWebRTC.serverLANWritePacket(packetData.channel, packetData.contents); } } } - boolean logWindowState = PlatformApplication.isShowingDebugConsole(); - if (loggingState != logWindowState) { - loggingState = logWindowState; - sendIPCPacket(new IPCPacket1BEnableLogging(logWindowState)); + if (EagRuntime.getPlatformType() == EnumPlatformType.JAVASCRIPT) { + boolean logWindowState = PlatformApplication.isShowingDebugConsole(); + if (loggingState != logWindowState) { + loggingState = logWindowState; + sendIPCPacket(new IPCPacket1BEnableLogging(logWindowState)); + } } if (ClientPlatformSingleplayer.isRunningSingleThreadMode()) { @@ -553,6 +559,7 @@ public class SingleplayerServerController implements ISaveFormat { issuesDetected.clear(); statusState = IntegratedServerState.WORLD_WORKER_BOOTING; loggingState = true; + callFailed = false; boolean singleThreadSupport = ClientPlatformSingleplayer.isSingleThreadModeSupported(); if (!singleThreadSupport && forceSingleThread) { throw new UnsupportedOperationException("Single thread mode is not supported!"); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java index 6250b98b..0c227a82 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java @@ -9,7 +9,7 @@ import net.minecraft.util.ChatComponentTranslation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.util.ChatComponentTranslation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkullCommand { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/WorkerStartupFailedException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/WorkerStartupFailedException.java index fa71e68c..7cae6939 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/WorkerStartupFailedException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/WorkerStartupFailedException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorkerStartupFailedException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/CrashScreen.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/CrashScreen.java index 259bfbd8..39cc2a9f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/CrashScreen.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/CrashScreen.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CrashScreen { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiNetworkSettingsButton.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiNetworkSettingsButton.java index c622310e..95beaf55 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiNetworkSettingsButton.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiNetworkSettingsButton.java @@ -14,7 +14,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiNetworkSettingsButton extends Gui { @@ -69,4 +69,4 @@ public class GuiNetworkSettingsButton extends Gui { } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java index 8802c780..e4d34ae5 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenAddRelay.java @@ -11,7 +11,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenAddRelay extends GuiScreen { @@ -40,6 +40,7 @@ public class GuiScreenAddRelay extends GuiScreen { * Fired when a control is clicked. This is the equivalent of * ActionListener.actionPerformed(ActionEvent e). */ + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.enabled) { if (par1GuiButton.id == 1) { @@ -56,6 +57,7 @@ public class GuiScreenAddRelay extends GuiScreen { } } + @Override public boolean blockPTTKey() { return this.serverName.isFocused() || this.serverAddress.isFocused(); } @@ -63,6 +65,7 @@ public class GuiScreenAddRelay extends GuiScreen { /** * Draws the screen and all the components in it. */ + @Override public void drawScreen(int par1, int par2, float par3) { this.drawBackground(0); this.drawCenteredString(this.fontRendererObj, I18n.format("addRelay.title"), this.width / 2, 17, 16777215); @@ -88,6 +91,7 @@ public class GuiScreenAddRelay extends GuiScreen { /** * Adds the buttons (and other controls) to the screen in question. */ + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -114,6 +118,7 @@ public class GuiScreenAddRelay extends GuiScreen { * Fired when a key is typed. This is the equivalent of * KeyListener.keyTyped(KeyEvent e). */ + @Override protected void keyTyped(char par1, int par2) { this.serverName.textboxKeyTyped(par1, par2); this.serverAddress.textboxKeyTyped(par1, par2); @@ -139,6 +144,7 @@ public class GuiScreenAddRelay extends GuiScreen { /** * Called when the mouse is clicked. */ + @Override protected void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); this.serverAddress.mouseClicked(par1, par2, par3); @@ -148,6 +154,7 @@ public class GuiScreenAddRelay extends GuiScreen { /** * Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -160,9 +167,10 @@ public class GuiScreenAddRelay extends GuiScreen { /** * Called from the main game loop to update the screen. */ + @Override public void updateScreen() { this.serverName.updateCursorCounter(); this.serverAddress.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java index 7a900897..4a26a647 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenBackupWorldSelection.java @@ -16,7 +16,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenBackupWorldSelection extends GuiScreen { @@ -53,6 +53,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { this.oldRNG = levelDat.getCompoundTag("Data").getInteger("eaglerVersionSerial") == 0; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(selectWorld); @@ -96,6 +97,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { } } + @Override public void confirmClicked(boolean par1, int par2) { if (par1) { SingleplayerServerController.clearPlayerData(worldName); @@ -106,6 +108,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); @@ -140,6 +143,7 @@ public class GuiScreenBackupWorldSelection extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(worldRecreate = new GuiButton(1, this.width / 2 - 100, this.height / 5 + 5, I18n.format("singleplayer.backup.recreate"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenChangeRelayTimeout.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenChangeRelayTimeout.java index 2bde8d67..bb3bcc55 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenChangeRelayTimeout.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenChangeRelayTimeout.java @@ -7,7 +7,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenChangeRelayTimeout extends GuiScreen { @@ -31,6 +31,7 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { this.parent = parent; } + @Override public void actionPerformed(GuiButton btn) { if (btn.id == 0) { mc.gameSettings.relayTimeout = (int) ((slider.sliderValue * 14.0f) + 1.0f); @@ -41,6 +42,7 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { drawBackground(0); drawCenteredString(fontRendererObj, title, width / 2, height / 3 - 20, 0xFFFFFF); @@ -48,6 +50,7 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { title = I18n.format("networkSettings.relayTimeoutTitle"); buttonList.clear(); @@ -55,11 +58,13 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { buttonList.add(new GuiButton(1, width / 2 - 100, height / 3 + 85, I18n.format("gui.cancel"))); slider = new GuiSlider2(0, width / 2 - 100, height / 3 + 10, 200, 20, (mc.gameSettings.relayTimeout - 1) / 14.0f, 1.0f) { + @Override public void mouseDragged(Minecraft par1Minecraft, int par2, int par3) { super.mouseDragged(par1Minecraft, par2, par3); this.displayString = "" + (int) ((sliderValue * 14.0f) + 1.0f) + "s"; } + @Override public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) { if (super.mousePressed(par1Minecraft, par2, par3)) { this.displayString = "" + (int) ((sliderValue * 14.0f) + 1.0f) + "s"; @@ -72,11 +77,13 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { slider.displayString = "" + mc.gameSettings.relayTimeout + "s"; } + @Override public void mouseClicked(int mx, int my, int button) { slider.mousePressed(mc, mx, my); super.mouseClicked(mx, my, button); } + @Override public void mouseReleased(int par1, int par2, int par3) { if (par3 == 0) { slider.mouseReleased(par1, par2); @@ -84,4 +91,4 @@ public class GuiScreenChangeRelayTimeout extends GuiScreen { super.mouseReleased(par1, par2, par3); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenConnectOption.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenConnectOption.java index ae076f9b..1eab8983 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenConnectOption.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenConnectOption.java @@ -6,10 +6,11 @@ import net.minecraft.client.gui.GuiMultiplayer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreenServerList; import net.minecraft.client.resources.I18n; +import net.starlikeclient.StarlikeClient; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +22,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenConnectOption extends GuiScreen { @@ -36,6 +37,7 @@ public class GuiScreenConnectOption extends GuiScreen { this.relaysButton = new GuiNetworkSettingsButton(this); } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { guiScreen.cancelDirectConnect(); @@ -52,6 +54,7 @@ public class GuiScreenConnectOption extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, title, this.width / 2, this.height / 4 - 60 + 20, 16777215); @@ -60,6 +63,7 @@ public class GuiScreenConnectOption extends GuiScreen { relaysButton.drawScreen(par1, par2); } + @Override public void initGui() { title = I18n.format("selectServer.direct"); prompt = I18n.format("directConnect.prompt"); @@ -67,7 +71,7 @@ public class GuiScreenConnectOption extends GuiScreen { buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 - 60 + 90, I18n.format("directConnect.serverJoin")) { { - enabled = false; + enabled = StarlikeClient.Config.Features.enableMultiplayer; } }); buttonList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 - 60 + 115, @@ -75,9 +79,10 @@ public class GuiScreenConnectOption extends GuiScreen { buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 - 60 + 155, I18n.format("gui.cancel"))); } + @Override protected void mouseClicked(int par1, int par2, int par3) { relaysButton.mouseClicked(par1, par2, par3); super.mouseClicked(par1, par2, par3); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenCreateWorldSelection.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenCreateWorldSelection.java index 4b44e7ce..8a6eb05e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenCreateWorldSelection.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenCreateWorldSelection.java @@ -9,7 +9,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenCreateWorldSelection extends GuiScreen { @@ -36,6 +36,7 @@ public class GuiScreenCreateWorldSelection extends GuiScreen { this.mainmenu = mainmenu; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(mainmenu); @@ -50,6 +51,7 @@ public class GuiScreenCreateWorldSelection extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); @@ -71,6 +73,7 @@ public class GuiScreenCreateWorldSelection extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(worldCreate = new GuiButton(1, this.width / 2 - 100, this.height / 4 + 40, I18n.format("singleplayer.create.create"))); @@ -81,6 +84,7 @@ public class GuiScreenCreateWorldSelection extends GuiScreen { this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 130, I18n.format("gui.cancel"))); } + @Override public void updateScreen() { if (EagRuntime.fileChooserHasResult() && (isImportingEPK || isImportingMCA)) { FileChooserResult fr = EagRuntime.getFileChooserResult(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerFailed.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerFailed.java index fa20adf6..3c38c9b1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerFailed.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerFailed.java @@ -5,7 +5,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenDemoIntegratedServerFailed extends GuiScreen { @@ -29,6 +29,7 @@ public class GuiScreenDemoIntegratedServerFailed extends GuiScreen { this.str2 = I18n.format("singleplayer.failed.demo.desc"); } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, str1, this.width / 2, 70, 11184810); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerStartup.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerStartup.java index 02aa6fd4..d1ff2536 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerStartup.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoIntegratedServerStartup.java @@ -11,7 +11,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenDemoIntegratedServerStartup extends GuiScreen { @@ -45,6 +45,7 @@ public class GuiScreenDemoIntegratedServerStartup extends GuiScreen { this.singleThread = singleThread; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { SingleplayerServerController.killWorker(); @@ -52,10 +53,12 @@ public class GuiScreenDemoIntegratedServerStartup extends GuiScreen { } } + @Override public boolean canCloseGui() { return false; } + @Override public void drawScreen(int i, int j, float f) { this.drawBackground(0); String txt = I18n.format("singleplayer.integratedStartup"); @@ -65,6 +68,7 @@ public class GuiScreenDemoIntegratedServerStartup extends GuiScreen { super.drawScreen(i, j, f); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(cancelButton = new GuiButton(0, this.width / 2 - 100, this.height / 3 + 50, @@ -72,6 +76,7 @@ public class GuiScreenDemoIntegratedServerStartup extends GuiScreen { cancelButton.visible = false; } + @Override public void updateScreen() { ++counter; if (counter == 2) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoPlayWorldSelection.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoPlayWorldSelection.java index 92d7e3c4..d5e3f70b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoPlayWorldSelection.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenDemoPlayWorldSelection.java @@ -8,7 +8,7 @@ import net.minecraft.world.demo.DemoWorldServer; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.world.demo.DemoWorldServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenDemoPlayWorldSelection extends GuiScreen { @@ -32,6 +32,7 @@ public class GuiScreenDemoPlayWorldSelection extends GuiScreen { this.mainmenu = mainmenu; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(mainmenu); @@ -48,6 +49,7 @@ public class GuiScreenDemoPlayWorldSelection extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); @@ -66,6 +68,7 @@ public class GuiScreenDemoPlayWorldSelection extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.add(playWorld = new GuiButton(1, this.width / 2 - 100, this.height / 4 + 40, I18n.format("singleplayer.demo.create.create"))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerBusy.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerBusy.java index 63a96d7d..2e372fde 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerBusy.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerBusy.java @@ -14,7 +14,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenIntegratedServerBusy extends GuiScreen { @@ -96,6 +96,7 @@ public class GuiScreenIntegratedServerBusy extends GuiScreen { this(menu, progressMessage, failMessage, checkTaskComplete, defaultExceptionAction, onTerminate); } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { if (areYouSure <= 0) { @@ -106,14 +107,17 @@ public class GuiScreenIntegratedServerBusy extends GuiScreen { } } + @Override public boolean canCloseGui() { return false; } + @Override public boolean doesGuiPauseGame() { return false; } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); int top = this.height / 3; @@ -147,6 +151,7 @@ public class GuiScreenIntegratedServerBusy extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { if (startStartTime == 0) this.startStartTime = EagRuntime.steadyTimeMillis(); @@ -156,10 +161,12 @@ public class GuiScreenIntegratedServerBusy extends GuiScreen { killTask.enabled = false; } + @Override public boolean shouldHangupIntegratedServer() { return false; } + @Override public void updateScreen() { long millis = EagRuntime.steadyTimeMillis(); if (millis - startStartTime > 6000l && SingleplayerServerController.canKillWorker()) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerCrashed.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerCrashed.java index c40429ad..eeb24a42 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerCrashed.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerCrashed.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenIntegratedServerCrashed extends GuiScreen { @@ -30,12 +30,14 @@ public class GuiScreenIntegratedServerCrashed extends GuiScreen { this.crashReport = crashReport; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(mainmenu); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); @@ -47,6 +49,7 @@ public class GuiScreenIntegratedServerCrashed extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add( @@ -55,8 +58,9 @@ public class GuiScreenIntegratedServerCrashed extends GuiScreen { CrashScreen.showCrashReportOverlay(crashReport, 90 * i, 60 * i, (width - 180) * i, (height - 130) * i); } + @Override public void onGuiClosed() { CrashScreen.hideCrashReportOverlay(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerFailed.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerFailed.java index d44846b0..eccda09a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerFailed.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerFailed.java @@ -9,7 +9,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenIntegratedServerFailed extends GuiScreen { @@ -41,6 +41,7 @@ public class GuiScreenIntegratedServerFailed extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(cont); @@ -52,6 +53,7 @@ public class GuiScreenIntegratedServerFailed extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, str1, this.width / 2, 70, 11184810); @@ -59,6 +61,7 @@ public class GuiScreenIntegratedServerFailed extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerStartup.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerStartup.java index 098053ca..4d309c94 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerStartup.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenIntegratedServerStartup.java @@ -13,7 +13,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenIntegratedServerStartup extends GuiScreen { @@ -47,6 +47,7 @@ public class GuiScreenIntegratedServerStartup extends GuiScreen { this.singleThread = singleThread; } + @Override protected void actionPerformed(GuiButton parGuiButton) { if (parGuiButton.id == 0) { SingleplayerServerController.killWorker(); @@ -54,10 +55,12 @@ public class GuiScreenIntegratedServerStartup extends GuiScreen { } } + @Override public boolean canCloseGui() { return false; } + @Override public void drawScreen(int i, int j, float f) { this.drawBackground(0); String txt = I18n.format("singleplayer.integratedStartup"); @@ -67,6 +70,7 @@ public class GuiScreenIntegratedServerStartup extends GuiScreen { super.drawScreen(i, j, f); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(cancelButton = new GuiButton(0, this.width / 2 - 100, this.height / 3 + 50, @@ -74,6 +78,7 @@ public class GuiScreenIntegratedServerStartup extends GuiScreen { cancelButton.visible = false; } + @Override public void updateScreen() { ++counter; if (counter == 2) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnect.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnect.java index 0385a4ec..38c44d30 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnect.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnect.java @@ -9,7 +9,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenLANConnect extends GuiScreen { @@ -36,6 +36,7 @@ public class GuiScreenLANConnect extends GuiScreen { this.relaysButton = new GuiNetworkSettingsButton(this); } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 1) { mc.displayGuiScreen(parent); @@ -44,6 +45,7 @@ public class GuiScreenLANConnect extends GuiScreen { } } + @Override public void drawScreen(int xx, int yy, float pt) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("selectServer.direct"), this.width / 2, @@ -64,6 +66,7 @@ public class GuiScreenLANConnect extends GuiScreen { codeTextField.fireInputEvent(event, param); } + @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); @@ -79,6 +82,7 @@ public class GuiScreenLANConnect extends GuiScreen { this.buttonList.get(0).enabled = this.codeTextField.getText().trim().length() > 0; } + @Override protected void keyTyped(char par1, int par2) { if (this.codeTextField.textboxKeyTyped(par1, par2)) { ((GuiButton) this.buttonList.get(0)).enabled = this.codeTextField.getText().trim().length() > 0; @@ -87,12 +91,14 @@ public class GuiScreenLANConnect extends GuiScreen { } } + @Override protected void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); this.codeTextField.mouseClicked(par1, par2, par3); this.relaysButton.mouseClicked(par1, par2, par3); } + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); lastCode = this.codeTextField.getText().trim(); @@ -103,8 +109,9 @@ public class GuiScreenLANConnect extends GuiScreen { return codeTextField.isFocused(); } + @Override public void updateScreen() { this.codeTextField.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java index eee87d58..57372f97 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java @@ -23,7 +23,7 @@ import net.minecraft.util.ChatComponentText; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ChatComponentText; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenLANConnecting extends GuiScreen { @@ -62,14 +62,17 @@ public class GuiScreenLANConnecting extends GuiScreen { Minecraft.getMinecraft().setServerData(new ServerData("Shared World", "shared:" + relay.address, false)); } + @Override public boolean canCloseGui() { return false; } + @Override public boolean doesGuiPauseGame() { return false; } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); if (completed) { @@ -119,8 +122,10 @@ public class GuiScreenLANConnecting extends GuiScreen { ConnectionHandshake.getSPHandshakeProtocolData(), EaglercraftVersion.clientBrandUUID)); } } + super.drawScreen(par1, par2, par3); } + @Override public void updateScreen() { if (networkManager != null) { if (networkManager.isChannelOpen()) { @@ -141,4 +146,4 @@ public class GuiScreenLANConnecting extends GuiScreen { } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANInfo.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANInfo.java index a64de6b1..20ff36ac 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANInfo.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANInfo.java @@ -38,12 +38,14 @@ public class GuiScreenLANInfo extends GuiScreen { this.parent = parent; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("lanInfo.title"), this.width / 2, @@ -57,9 +59,10 @@ public class GuiScreenLANInfo extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { buttonList.clear(); buttonList.add(new GuiButton(0, this.width / 2 - 100, height / 6 + 168, I18n.format("gui.continue"))); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANNotSupported.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANNotSupported.java index 72eec992..9284baaa 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANNotSupported.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANNotSupported.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenLANNotSupported extends GuiScreen { @@ -28,12 +28,14 @@ public class GuiScreenLANNotSupported extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(cont); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.notSupported.title"), this.width / 2, 70, @@ -43,6 +45,7 @@ public class GuiScreenLANNotSupported extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNameWorldImport.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNameWorldImport.java index e632c375..2d30154b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNameWorldImport.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNameWorldImport.java @@ -13,7 +13,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenNameWorldImport extends GuiScreen { private GuiScreen parentGuiScreen; @@ -55,6 +55,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { * Fired when a control is clicked. This is the equivalent of * ActionListener.actionPerformed(ActionEvent e). */ + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.enabled) { if (par1GuiButton.id == 1) { @@ -78,6 +79,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { /** * Draws the screen and all the components in it. */ + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); if (!timeToImport) { @@ -107,6 +109,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { /** * Adds the buttons (and other controls) to the screen in question. */ + @Override public void initGui() { if (!timeToImport) { Keyboard.enableRepeatEvents(true); @@ -132,6 +135,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { * Fired when a key is typed. This is the equivalent of * KeyListener.keyTyped(KeyEvent e). */ + @Override protected void keyTyped(char par1, int par2) { this.theGuiTextField.textboxKeyTyped(par1, par2); ((GuiButton) this.buttonList.get(0)).enabled = this.theGuiTextField.getText().trim().length() > 0; @@ -144,6 +148,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { /** * Called when the mouse is clicked. */ + @Override protected void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); if (!timeToImport) { @@ -154,6 +159,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { /** * Called when the screen is unloaded. Used to disable keyboard repeat events */ + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @@ -166,6 +172,7 @@ public class GuiScreenNameWorldImport extends GuiScreen { /** * Called from the main game loop to update the screen. */ + @Override public void updateScreen() { if (!timeToImport) { this.theGuiTextField.updateCursorCounter(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNoRelays.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNoRelays.java index 9efa9625..09efbe37 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNoRelays.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenNoRelays.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenNoRelays extends GuiScreen { @@ -41,6 +41,7 @@ public class GuiScreenNoRelays extends GuiScreen { this.title3 = title3; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { mc.displayGuiScreen(parent); @@ -49,6 +50,7 @@ public class GuiScreenNoRelays extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format(title1), this.width / 2, this.height / 4 - 60 + 70, @@ -64,6 +66,7 @@ public class GuiScreenNoRelays extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { buttonList.clear(); buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 - 60 + 145, I18n.format("gui.cancel"))); @@ -71,4 +74,4 @@ public class GuiScreenNoRelays extends GuiScreen { I18n.format("directConnect.lanWorldRelay"))); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java index 12c36a89..73bb851f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenOldSeedWarning.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenOldSeedWarning extends GuiScreen { @@ -28,12 +28,14 @@ public class GuiScreenOldSeedWarning extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(cont); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.oldseedwarning.title"), this.width / 2, 70, @@ -45,6 +47,7 @@ public class GuiScreenOldSeedWarning extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 96, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRAMDiskModeDetected.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRAMDiskModeDetected.java index 884c2b75..848fa75f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRAMDiskModeDetected.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRAMDiskModeDetected.java @@ -8,7 +8,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRAMDiskModeDetected extends GuiScreen { @@ -30,6 +30,7 @@ public class GuiScreenRAMDiskModeDetected extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(cont); @@ -39,6 +40,7 @@ public class GuiScreenRAMDiskModeDetected extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("singleplayer.ramdiskdetected.title"), this.width / 2, 70, @@ -50,6 +52,7 @@ public class GuiScreenRAMDiskModeDetected extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 106, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRelay.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRelay.java index c7662798..d7249cac 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRelay.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenRelay.java @@ -21,7 +21,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { @@ -70,6 +70,7 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { this.screen = screen; } + @Override public void actionPerformed(GuiButton btn) { if (btn.id == 0) { RelayManager.relayManager.save(); @@ -113,6 +114,7 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { } } + @Override public void confirmClicked(boolean par1, int par2) { if (par1) { if (addingNew) { @@ -133,6 +135,7 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { this.mc.displayGuiScreen(this); } + @Override public void drawScreen(int par1, int par2, float par3) { mx = par1; my = par2; @@ -187,6 +190,7 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { this.slots.handleTouchInput(); } + @Override public void initGui() { selected = -1; buttonList.clear(); @@ -210,6 +214,7 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { } } + @Override protected void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); if (par3 == 0) { @@ -239,8 +244,9 @@ public class GuiScreenRelay extends GuiScreen implements GuiYesNoCallback { } } + @Override public void updateScreen() { slots.relayManager.update(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java index be867987..285967f9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenSingleplayerConnecting.java @@ -20,7 +20,7 @@ import net.minecraft.util.ChatComponentText; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ChatComponentText; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenSingleplayerConnecting extends GuiScreen { @@ -50,6 +50,7 @@ public class GuiScreenSingleplayerConnecting extends GuiScreen { this.message = message; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { SingleplayerServerController.killWorker(); @@ -59,14 +60,17 @@ public class GuiScreenSingleplayerConnecting extends GuiScreen { } } + @Override public boolean canCloseGui() { return false; } + @Override public boolean doesGuiPauseGame() { return false; } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); float f = 2.0f; @@ -87,6 +91,7 @@ public class GuiScreenSingleplayerConnecting extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { if (startStartTime == 0) this.startStartTime = EagRuntime.steadyTimeMillis(); @@ -95,10 +100,12 @@ public class GuiScreenSingleplayerConnecting extends GuiScreen { killTask.enabled = false; } + @Override public boolean shouldHangupIntegratedServer() { return false; } + @Override public void updateScreen() { ++timer; if (timer > 1) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java index 648dbcf8..741ae707 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiShareToLan.java @@ -14,7 +14,7 @@ import net.minecraft.world.WorldSettings; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.minecraft.world.WorldSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiShareToLan extends GuiScreen { /** @@ -65,6 +65,7 @@ public class GuiShareToLan extends GuiScreen { * Fired when a control is clicked. This is the equivalent of * ActionListener.actionPerformed(ActionEvent e). */ + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 102) { this.mc.displayGuiScreen(this.parentScreen); @@ -104,7 +105,7 @@ public class GuiShareToLan extends GuiScreen { } this.mc.displayGuiScreen(null); LoadingScreenRenderer ls = mc.loadingScreen; - String code = LANServerController.shareToLAN(ls::resetProgressAndMessage, worldName, hiddenToggle); + String code = LANServerController.shareToLAN((msg) -> ls.eaglerShow(msg, null), worldName, hiddenToggle); if (code != null) { SingleplayerServerController.configureLAN(WorldSettings.GameType.getByName(this.gameMode), this.allowCommands); @@ -116,6 +117,7 @@ public class GuiShareToLan extends GuiScreen { } } + @Override public boolean blockPTTKey() { return this.codeTextField.isFocused(); } @@ -123,6 +125,7 @@ public class GuiShareToLan extends GuiScreen { /** * Draws the screen and all the components in it. */ + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRendererObj, I18n.format("lanServer.title"), this.width / 2, 35, 16777215); @@ -165,6 +168,7 @@ public class GuiShareToLan extends GuiScreen { /** * Adds the buttons (and other controls) to the screen in question. */ + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add( @@ -185,11 +189,13 @@ public class GuiShareToLan extends GuiScreen { this.func_74088_g(); } + @Override protected void keyTyped(char c, int k) { super.keyTyped(c, k); this.codeTextField.textboxKeyTyped(c, k); } + @Override public void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); this.relaysButton.mouseClicked(par1, par2, par3); @@ -201,9 +207,10 @@ public class GuiShareToLan extends GuiScreen { return this.codeTextField.isFocused(); } + @Override public void updateScreen() { super.updateScreen(); this.codeTextField.updateCursorCounter(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlider2.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlider2.java index fbdda6ea..e14b7359 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlider2.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlider2.java @@ -6,7 +6,7 @@ import net.minecraft.client.gui.GuiButton; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.gui.GuiButton; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiSlider2 extends GuiButton { /** The value of this slider control. */ @@ -39,10 +39,12 @@ public class GuiSlider2 extends GuiButton { * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this * button and 2 if it IS hovering over this button. */ + @Override protected int getHoverState(boolean par1) { return 0; } + @Override public boolean isSliderTouchEvents() { return true; } @@ -51,6 +53,7 @@ public class GuiSlider2 extends GuiButton { * Fired when the mouse button is dragged. Equivalent of * MouseListener.mouseDragged(MouseEvent e). */ + @Override protected void mouseDragged(Minecraft par1Minecraft, int par2, int par3) { if (this.visible) { if (this.dragging) { @@ -86,6 +89,7 @@ public class GuiSlider2 extends GuiButton { * Returns true if the mouse has been pressed on this control. Equivalent of * MouseListener.mousePressed(MouseEvent e). */ + @Override public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) { if (super.mousePressed(par1Minecraft, par2, par3)) { float oldValue = sliderValue; @@ -115,6 +119,7 @@ public class GuiSlider2 extends GuiButton { * Fired when the mouse button is released. Equivalent of * MouseListener.mouseReleased(MouseEvent e). */ + @Override public void mouseReleased(int par1, int par2) { this.dragging = false; } @@ -127,4 +132,4 @@ public class GuiSlider2 extends GuiButton { return (int) (this.sliderValue * this.sliderMax * 100.0F) + "%"; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlotRelay.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlotRelay.java index 32900c56..a8b530f1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlotRelay.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiSlotRelay.java @@ -11,7 +11,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class GuiSlotRelay extends GuiSlot { @@ -148,4 +148,4 @@ class GuiSlotRelay extends GuiSlot { return screen.selected == var1; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCInputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCInputStream.java index 150ab01a..dfa4e3b5 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCInputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCInputStream.java @@ -5,7 +5,7 @@ import java.io.InputStream; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCInputStream extends InputStream { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCOutputStream.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCOutputStream.java index e3d322a5..2cb8cefe 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCOutputStream.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCOutputStream.java @@ -5,7 +5,7 @@ import java.io.OutputStream; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.io.OutputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCOutputStream extends OutputStream { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket00StartServer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket00StartServer.java index 30a0523b..d52495ba 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket00StartServer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket00StartServer.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket00StartServer implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket01StopServer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket01StopServer.java index 353c91a3..899b6b92 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket01StopServer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket01StopServer.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket01StopServer implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket02InitWorld.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket02InitWorld.java index f771ed75..64b04afd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket02InitWorld.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket02InitWorld.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket02InitWorld implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket03DeleteWorld.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket03DeleteWorld.java index b9a31d54..270eab2e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket03DeleteWorld.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket03DeleteWorld.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket03DeleteWorld implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket04RenameWorld.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket04RenameWorld.java index aebcea4b..3a9d4ec8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket04RenameWorld.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket04RenameWorld.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket04RenameWorld implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket05RequestData.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket05RequestData.java index 496ab355..ab064601 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket05RequestData.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket05RequestData.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket05RequestData implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket06RenameWorldNBT.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket06RenameWorldNBT.java index 718ea529..22a2e8ad 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket06RenameWorldNBT.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket06RenameWorldNBT.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket06RenameWorldNBT implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket07ImportWorld.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket07ImportWorld.java index e3cceadd..db2d151c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket07ImportWorld.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket07ImportWorld.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket07ImportWorld implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket09RequestResponse.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket09RequestResponse.java index 83fa6e46..91169b4b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket09RequestResponse.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket09RequestResponse.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket09RequestResponse implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0ASetWorldDifficulty.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0ASetWorldDifficulty.java index 182a4363..a44c7a1d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0ASetWorldDifficulty.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0ASetWorldDifficulty.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0ASetWorldDifficulty implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0BPause.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0BPause.java index 58f0c154..8b61f1f8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0BPause.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0BPause.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0BPause implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0CPlayerChannel.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0CPlayerChannel.java index e1f835bd..66f9e179 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0CPlayerChannel.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0CPlayerChannel.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0CPlayerChannel implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0DProgressUpdate.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0DProgressUpdate.java index 528a5877..e3de15d9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0DProgressUpdate.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0DProgressUpdate.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0DProgressUpdate implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0EListWorlds.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0EListWorlds.java index a3231af8..eb90597e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0EListWorlds.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0EListWorlds.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0EListWorlds implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0FListFiles.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0FListFiles.java index 3e934af2..eba5f4d7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0FListFiles.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket0FListFiles.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket0FListFiles implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket10FileRead.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket10FileRead.java index 37f5b8d0..3e180b1d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket10FileRead.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket10FileRead.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket10FileRead implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket12FileWrite.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket12FileWrite.java index e0625df2..89661ac4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket12FileWrite.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket12FileWrite.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket12FileWrite implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket13FileCopyMove.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket13FileCopyMove.java index 9e5dea02..694ab17e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket13FileCopyMove.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket13FileCopyMove.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket13FileCopyMove implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket14StringList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket14StringList.java index 83cc415f..70d847e7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket14StringList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket14StringList.java @@ -8,7 +8,7 @@ import java.util.List; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket14StringList implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket15Crashed.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket15Crashed.java index bf46078f..81c9e951 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket15Crashed.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket15Crashed.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket15Crashed implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket16NBTList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket16NBTList.java index 0b5c5b32..26c5cb1c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket16NBTList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket16NBTList.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.nbt.NBTTagCompound; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket16NBTList implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket17ConfigureLAN.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket17ConfigureLAN.java index f5adb370..21b5f8bc 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket17ConfigureLAN.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket17ConfigureLAN.java @@ -8,7 +8,7 @@ import java.util.List; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket17ConfigureLAN implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket18ClearPlayers.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket18ClearPlayers.java index 0f389c8a..0ecdfab6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket18ClearPlayers.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket18ClearPlayers.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket18ClearPlayers implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket19Autosave.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket19Autosave.java index b192285c..06a15d3a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket19Autosave.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket19Autosave.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket19Autosave implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1ALoggerMessage.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1ALoggerMessage.java index a071018a..031ff227 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1ALoggerMessage.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1ALoggerMessage.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket1ALoggerMessage implements IPCPacketBase { @@ -62,4 +62,4 @@ public class IPCPacket1ALoggerMessage implements IPCPacketBase { return IPCPacketBase.strLen(logMessage) + 1; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1BEnableLogging.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1BEnableLogging.java index ef51e7fd..86bd6ce1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1BEnableLogging.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1BEnableLogging.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket1BEnableLogging implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1CIssueDetected.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1CIssueDetected.java index 38bdfa4c..b8f83abd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1CIssueDetected.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacket1CIssueDetected.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacket1CIssueDetected implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketBase.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketBase.java index 67c8489c..23233fa9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketBase.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketBase.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketFFProcessKeepAlive.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketFFProcessKeepAlive.java index a4f4e7e5..1c01ce95 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketFFProcessKeepAlive.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketFFProcessKeepAlive.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacketFFProcessKeepAlive implements IPCPacketBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java index 6728fda6..9556c078 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/ipc/IPCPacketManager.java @@ -8,7 +8,7 @@ import java.util.function.Supplier; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.util.function.Supplier; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IPCPacketManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientNetworkManager.java index 8c3c34e9..62dd3706 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientNetworkManager.java @@ -34,7 +34,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LANClientNetworkManager extends EaglercraftNetworkManager { @@ -155,7 +155,7 @@ public class LANClientNetworkManager extends EaglercraftNetworkManager { } EagUtils.sleep(20); - } while (EagRuntime.steadyTimeMillis() - lm < 5000l); + } while (EagRuntime.steadyTimeMillis() - lm < 10000l); // no channel was opened sock.writePacket(new RelayPacket06ClientFailure(ipkt.peerId)); @@ -195,7 +195,7 @@ public class LANClientNetworkManager extends EaglercraftNetworkManager { continue mainLoop; } EagUtils.sleep(20); - } while (EagRuntime.steadyTimeMillis() - lm < 5000l); + } while (EagRuntime.steadyTimeMillis() - lm < 10000l); // no ice candidates were sent sock.close(); @@ -445,4 +445,4 @@ public class LANClientNetworkManager extends EaglercraftNetworkManager { } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientPeer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientPeer.java index 7ba33319..afc19fbb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientPeer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANClientPeer.java @@ -1,10 +1,9 @@ package net.lax1dude.eaglercraft.v1_8.sp.lan; -import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import net.lax1dude.eaglercraft.v1_8.EagRuntime; -import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; @@ -16,7 +15,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket04Description; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,21 +27,29 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket04Description; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class LANClientPeer { private static final Logger logger = LogManager.getLogger("LANClientPeer"); - private static final int PRE = 0, SENT_ICE_CANDIDATE = 2, SENT_DESCRIPTION = 3, CONNECTED = 4, CLOSED = 5; + private static final int PRE = 0, RECEIVED_ICE_CANDIDATE = 1, SENT_ICE_CANDIDATE = 2, RECEIVED_DESCRIPTION = 3, + SENT_DESCRIPTION = 4, RECEIVED_SUCCESS = 5, CONNECTED = 6, CLOSED = 7; protected final String clientId; protected int state = PRE; protected boolean dead = false; + protected long startTime; + + protected String localICECandidate = null; + protected boolean localChannel = false; + protected List packetPreBuffer = null; + protected LANClientPeer(String clientId) { this.clientId = clientId; + this.startTime = EagRuntime.steadyTimeMillis(); PlatformWebRTC.serverLANCreatePeer(clientId); } @@ -60,27 +67,7 @@ class LANClientPeer { protected void handleDescription(String description) { if (state == PRE) { PlatformWebRTC.serverLANPeerDescription(clientId, description); - long millis = EagRuntime.steadyTimeMillis(); - do { - LANPeerEvent evt; - if ((evt = PlatformWebRTC.serverLANGetEvent(clientId)) != null) { - if (evt instanceof LANPeerEvent.LANPeerDescriptionEvent) { - LANServerController.lanRelaySocket.writePacket(new RelayPacket04Description(clientId, - ((LANPeerEvent.LANPeerDescriptionEvent) evt).description)); - state = SENT_DESCRIPTION; - return; - } else if (evt instanceof LANPeerEvent.LANPeerDisconnectEvent) { - logger.error("LAN client '{}' disconnected while waiting for server description", clientId); - } else { - logger.error("LAN client '{}' had an accident: {}", clientId, evt.getClass().getSimpleName()); - } - disconnect(); - return; - } - EagUtils.sleep(20); - } while (EagRuntime.steadyTimeMillis() - millis < 5000l); - logger.error("Getting server description for '{}' timed out!", clientId); - disconnect(); + state = RECEIVED_DESCRIPTION; } else { logger.error("Relay [{}] unexpected IPacket04Description for '{}'", LANServerController.lanRelaySocket.getURI(), clientId); @@ -100,27 +87,14 @@ class LANClientPeer { protected void handleICECandidates(String candidates) { if (state == SENT_DESCRIPTION) { PlatformWebRTC.serverLANPeerICECandidates(clientId, candidates); - long millis = EagRuntime.steadyTimeMillis(); - do { - LANPeerEvent evt; - if ((evt = PlatformWebRTC.serverLANGetEvent(clientId)) != null) { - if (evt instanceof LANPeerEvent.LANPeerICECandidateEvent) { - LANServerController.lanRelaySocket.writePacket(new RelayPacket03ICECandidate(clientId, - ((LANPeerEvent.LANPeerICECandidateEvent) evt).candidates)); - state = SENT_ICE_CANDIDATE; - return; - } else if (evt instanceof LANPeerEvent.LANPeerDisconnectEvent) { - logger.error("LAN client '{}' disconnected while waiting for server ICE candidates", clientId); - } else { - logger.error("LAN client '{}' had an accident: {}", clientId, evt.getClass().getSimpleName()); - } - disconnect(); - return; - } - EagUtils.sleep(20); - } while (EagRuntime.steadyTimeMillis() - millis < 5000l); - logger.error("Getting server ICE candidates for '{}' timed out!", clientId); - disconnect(); + if (localICECandidate != null) { + LANServerController.lanRelaySocket + .writePacket(new RelayPacket03ICECandidate(clientId, localICECandidate)); + localICECandidate = null; + state = SENT_ICE_CANDIDATE; + } else { + state = RECEIVED_ICE_CANDIDATE; + } } else { logger.error("Relay [{}] unexpected IPacket03ICECandidate for '{}'", LANServerController.lanRelaySocket.getURI(), clientId); @@ -129,57 +103,131 @@ class LANClientPeer { protected void handleSuccess() { if (state == SENT_ICE_CANDIDATE) { - long millis = EagRuntime.steadyTimeMillis(); - do { - LANPeerEvent evt; - while ((evt = PlatformWebRTC.serverLANGetEvent(clientId)) != null - && evt instanceof LANPeerEvent.LANPeerICECandidateEvent) { - // skip ice candidates - } - if (evt != null) { - if (evt instanceof LANPeerEvent.LANPeerDataChannelEvent) { - SingleplayerServerController.openPlayerChannel(clientId); - state = CONNECTED; - return; - } else if (evt instanceof LANPeerEvent.LANPeerDisconnectEvent) { - logger.error("LAN client '{}' disconnected while waiting for connection", clientId); - } else { - logger.error("LAN client '{}' had an accident: {}", clientId, evt.getClass().getSimpleName()); + if (localChannel) { + SingleplayerServerController.openPlayerChannel(clientId); + PlatformWebRTC.serverLANPeerMapIPC(clientId, clientId); + if (packetPreBuffer != null) { + for (byte[] b : packetPreBuffer) { + ClientPlatformSingleplayer.sendPacket(new IPCPacketData(clientId, b)); } - disconnect(); - return; + packetPreBuffer = null; } - EagUtils.sleep(20); - } while (EagRuntime.steadyTimeMillis() - millis < 5000l); - logger.error("Getting server description for '{}' timed out!", clientId); - disconnect(); - } else { + state = CONNECTED; + } else { + state = RECEIVED_SUCCESS; + } + } else if (state != CONNECTED) { logger.error("Relay [{}] unexpected IPacket05ClientSuccess for '{}'", LANServerController.lanRelaySocket.getURI(), clientId); } } protected void update() { - if (state == CONNECTED) { + if (state != CLOSED) { + if (state != CONNECTED && EagRuntime.steadyTimeMillis() - startTime > 13000l) { + logger.info("LAN client '{}' handshake timed out", clientId); + disconnect(); + return; + } List l = PlatformWebRTC.serverLANGetAllEvent(clientId); if (l == null) { return; } - Iterator itr = l.iterator(); - while (state == CONNECTED && itr.hasNext()) { - LANPeerEvent evt = itr.next(); - if (evt instanceof LANPeerEvent.LANPeerPacketEvent) { - ClientPlatformSingleplayer - .sendPacket(new IPCPacketData(clientId, ((LANPeerEvent.LANPeerPacketEvent) evt).payload)); - } else if (evt instanceof LANPeerEvent.LANPeerDisconnectEvent) { + read_loop: for (int i = 0, s = l.size(); i < s; ++i) { + LANPeerEvent evt = l.get(i); + if (evt instanceof LANPeerEvent.LANPeerDisconnectEvent) { logger.info("LAN client '{}' disconnected", clientId); disconnect(); } else { - logger.error("LAN client '{}' had an accident: {}", clientId, evt.getClass().getSimpleName()); + switch (state) { + case SENT_DESCRIPTION: { + if (evt instanceof LANPeerEvent.LANPeerICECandidateEvent) { + localICECandidate = ((LANPeerEvent.LANPeerICECandidateEvent) evt).candidates; + continue read_loop; + } + break; + } + case RECEIVED_DESCRIPTION: { + if (evt instanceof LANPeerEvent.LANPeerDescriptionEvent) { + LANServerController.lanRelaySocket.writePacket(new RelayPacket04Description(clientId, + ((LANPeerEvent.LANPeerDescriptionEvent) evt).description)); + state = SENT_DESCRIPTION; + continue read_loop; + } + break; + } + case RECEIVED_ICE_CANDIDATE: { + if (evt instanceof LANPeerEvent.LANPeerICECandidateEvent) { + LANServerController.lanRelaySocket.writePacket(new RelayPacket03ICECandidate(clientId, + ((LANPeerEvent.LANPeerICECandidateEvent) evt).candidates)); + state = SENT_ICE_CANDIDATE; + continue read_loop; + } else if (evt instanceof LANPeerEvent.LANPeerDataChannelEvent) { + localChannel = true; + continue read_loop; + } else if (evt instanceof LANPeerEvent.LANPeerPacketEvent) { + if (packetPreBuffer == null) + packetPreBuffer = new LinkedList<>(); + packetPreBuffer.add(((LANPeerEvent.LANPeerPacketEvent) evt).payload); + continue read_loop; + } + break; + } + case SENT_ICE_CANDIDATE: { + if (evt instanceof LANPeerEvent.LANPeerDataChannelEvent) { + localChannel = true; + continue read_loop; + } else if (evt instanceof LANPeerEvent.LANPeerPacketEvent) { + if (packetPreBuffer == null) + packetPreBuffer = new LinkedList<>(); + packetPreBuffer.add(((LANPeerEvent.LANPeerPacketEvent) evt).payload); + continue read_loop; + } + break; + } + case RECEIVED_SUCCESS: { + if (evt instanceof LANPeerEvent.LANPeerDataChannelEvent) { + SingleplayerServerController.openPlayerChannel(clientId); + PlatformWebRTC.serverLANPeerMapIPC(clientId, clientId); + if (packetPreBuffer != null) { + for (byte[] b : packetPreBuffer) { + ClientPlatformSingleplayer.sendPacket(new IPCPacketData(clientId, b)); + } + packetPreBuffer = null; + } + state = CONNECTED; + continue read_loop; + } else if (evt instanceof LANPeerEvent.LANPeerICECandidateEvent) { + continue read_loop; + } + break; + } + case CONNECTED: { + if (evt instanceof LANPeerEvent.LANPeerPacketEvent) { + // logger.warn("Forwarding packet for '{}' to IPC channel manually, even though + // the channel should be mapped", clientId); + // just to be safe + ClientPlatformSingleplayer.sendPacket( + new IPCPacketData(clientId, ((LANPeerEvent.LANPeerPacketEvent) evt).payload)); + continue read_loop; + } + break; + } + default: { + break; + } + } + if (state != CLOSED) { + logger.error("LAN client '{}' had an accident: {} (state {})", clientId, + evt.getClass().getSimpleName(), state); + } disconnect(); + return; } } + } else { + disconnect(); } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANPeerEvent.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANPeerEvent.java index 6559dbc0..85b89a6c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANPeerEvent.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANPeerEvent.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.lan; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.lan; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface LANPeerEvent { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java index 7af70b44..55f4f895 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java @@ -12,6 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket; import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket; @@ -26,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacketFFErrorCode; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +39,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacketFFErrorCode; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LANServerController { @@ -139,7 +140,7 @@ public class LANServerController { } } EagUtils.sleep(50); - } while (EagRuntime.steadyTimeMillis() - millis < 1000l); + } while (EagRuntime.steadyTimeMillis() - millis < 2500l); logger.info("Relay [{}] relay provide ICE servers timeout", sock.getURI()); closeLAN(); return null; @@ -157,7 +158,10 @@ public class LANServerController { while ((pkt = lanRelaySocket.readPacket()) != null) { if (pkt instanceof RelayPacket02NewClient) { RelayPacket02NewClient ipkt = (RelayPacket02NewClient) pkt; - if (clients.containsKey(ipkt.clientId)) { + if (!SingleplayerServerController.isChannelNameAllowed(ipkt.clientId)) { + logger.error("Relay [{}] relay tried to open disallowed channel name: '{}'", + lanRelaySocket.getURI(), ipkt.clientId); + } else if (clients.containsKey(ipkt.clientId)) { logger.error("Relay [{}] relay provided duplicate client '{}'", lanRelaySocket.getURI(), ipkt.clientId); } else { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerList.java index 17194aef..7196353b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerList.java @@ -12,13 +12,14 @@ import java.util.Set; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; +import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryDispatch; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServer; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQuery; import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +31,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LANServerList { @@ -90,7 +91,7 @@ public class LANServerList { for (int i = 0, l = RelayManager.relayManager.count(); i < l; ++i) { RelayServer srv = RelayManager.relayManager.get(i); if (!lanServersQueryList.containsKey(srv.address) && !deadURIs.contains(srv.address)) { - lanServersQueryList.put(srv.address, PlatformWebRTC.openRelayWorldsQuery(srv.address)); + lanServersQueryList.put(srv.address, RelayQueryDispatch.openRelayWorldsQuery(srv.address)); } } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayEntry.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayEntry.java index 637ee863..fe80743b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayEntry.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayEntry.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayEntry { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayLoggerImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayLoggerImpl.java index d470ef03..1fca92db 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayLoggerImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayLoggerImpl.java @@ -5,7 +5,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.IRelayLogger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.IRelayLogger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayLoggerImpl implements IRelayLogger { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayManager.java index fe3cd76f..02f39460 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayManager.java @@ -23,7 +23,7 @@ import net.minecraft.nbt.NBTTagList; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.nbt.NBTTagList; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQuery.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQuery.java index e9de2b28..dff05d82 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQuery.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQuery.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface RelayQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryDispatch.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryDispatch.java new file mode 100644 index 00000000..3bda859d --- /dev/null +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryDispatch.java @@ -0,0 +1,45 @@ +package net.lax1dude.eaglercraft.v1_8.sp.relay; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class RelayQueryDispatch { + + public static RelayServerSocket openRelayConnection(String addr, int timeout) { + RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); + if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { + return new RelayServerSocketRateLimitDummy(limit); + } + return new RelayServerSocketImpl(addr, timeout); + } + + public static RelayQuery openRelayQuery(String addr) { + RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); + if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { + return new RelayQueryRateLimitDummy(limit); + } + return new RelayQueryImpl(addr); + } + + public static RelayWorldsQuery openRelayWorldsQuery(String addr) { + RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); + if (limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { + return new RelayWorldsQueryRateLimitDummy(limit); + } + return new RelayWorldsQueryImpl(addr); + } + +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryImpl.java index cc5f18c1..667d4dd3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryImpl.java @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayQueryImpl implements RelayQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryRateLimitDummy.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryRateLimitDummy.java index a5c19881..7f017802 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryRateLimitDummy.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayQueryRateLimitDummy.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayQueryRateLimitDummy implements RelayQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServer.java index 0d00e1ab..844bb1b9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServer.java @@ -8,7 +8,7 @@ import net.minecraft.client.Minecraft; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayServer { @@ -88,13 +88,14 @@ public class RelayServer { } public RelayServerSocket openSocket() { - return PlatformWebRTC.openRelayConnection(address, Minecraft.getMinecraft().gameSettings.relayTimeout * 1000); + return RelayQueryDispatch.openRelayConnection(address, + Minecraft.getMinecraft().gameSettings.relayTimeout * 1000); } public void ping() { if (PlatformWebRTC.supported()) { close(); - query = PlatformWebRTC.openRelayQuery(address); + query = RelayQueryDispatch.openRelayQuery(address); queriedVersion = -1; queriedComment = null; queriedVendor = null; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerRateLimitTracker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerRateLimitTracker.java index 2bf4baaf..778d2643 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerRateLimitTracker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerRateLimitTracker.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayServerRateLimitTracker { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocket.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocket.java index a4a32eb3..5f160442 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocket.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocket.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface RelayServerSocket { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketImpl.java index fd7f65de..85e9ef8f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketImpl.java @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayServerSocketImpl implements RelayServerSocket { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketRateLimitDummy.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketRateLimitDummy.java index afc30a1b..550176b0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketRateLimitDummy.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayServerSocketRateLimitDummy.java @@ -4,7 +4,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayServerSocketRateLimitDummy implements RelayServerSocket { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQuery.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQuery.java index e8c83feb..0a338d95 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQuery.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQuery.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface RelayWorldsQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryImpl.java index 687141b7..2b7b7be9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryImpl.java @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayWorldsQueryImpl implements RelayWorldsQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryRateLimitDummy.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryRateLimitDummy.java index 9a3326a2..e7e88ecb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryRateLimitDummy.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/RelayWorldsQueryRateLimitDummy.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket07LocalWorlds; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayWorldsQueryRateLimitDummy implements RelayWorldsQuery { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/ClientCommandDummy.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/ClientCommandDummy.java index 31439a60..77ef40b2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/ClientCommandDummy.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/ClientCommandDummy.java @@ -7,7 +7,7 @@ import net.minecraft.util.ChatComponentTranslation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.util.ChatComponentTranslation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientCommandDummy extends CommandBase { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java index 60a554ad..eabf2833 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java @@ -10,14 +10,13 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.MinecraftException; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.AnvilChunkLoader; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +28,7 @@ import net.minecraft.world.chunk.storage.AnvilChunkLoader; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerChunkLoader extends AnvilChunkLoader { @@ -94,7 +93,7 @@ public class EaglerChunkLoader extends AnvilChunkLoader { } @Override - public void saveChunk(World var1, Chunk var2) throws IOException, MinecraftException { + public void saveChunk(World var1, Chunk var2) throws IOException { NBTTagCompound chunkData = new NBTTagCompound(); this.writeChunkToNBT(var2, var1, chunkData); NBTTagCompound fileData = new NBTTagCompound(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java index d8bd288f..f727cde1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerIntegratedServerWorker.java @@ -60,7 +60,7 @@ import net.minecraft.world.WorldType; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -72,7 +72,7 @@ import net.minecraft.world.WorldType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerIntegratedServerWorker { @@ -452,12 +452,24 @@ public class EaglerIntegratedServerWorker { } } } + if (ServerPlatformSingleplayer.isTabAboutToCloseWASM() && !isServerStopped()) { + logger.info("Autosaving worlds because the tab is about to close!"); + currentProcess.getConfigurationManager().saveAllPlayerData(); + currentProcess.saveAllWorlds(false); + } } public static void reportTPS(List texts) { sendIPCPacket(new IPCPacket14StringList(IPCPacket14StringList.SERVER_TPS, texts)); } + public static void sendIntegratedServerCrashWASMCB(String stringValue, boolean terminated) { + sendIPCPacket(new IPCPacket15Crashed(stringValue)); + if (terminated) { + sendIPCPacket(new IPCPacketFFProcessKeepAlive(IPCPacketFFProcessKeepAlive.EXITED)); + } + } + public static void sendIPCPacket(IPCPacketBase ipc) { byte[] pkt; try { @@ -492,6 +504,9 @@ public class EaglerIntegratedServerWorker { // signal thread startup successful sendIPCPacket(new IPCPacketFFProcessKeepAlive(0xFF)); + ServerPlatformSingleplayer + .setCrashCallbackWASM(EaglerIntegratedServerWorker::sendIntegratedServerCrashWASMCB); + while (true) { mainLoop(false); ServerPlatformSingleplayer.immediateContinue(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java index bc2421c2..425c3d8d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerMinecraftServer.java @@ -23,7 +23,7 @@ import net.minecraft.world.WorldSettings.GameType; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.world.WorldSettings.GameType; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerMinecraftServer extends MinecraftServer { @@ -151,6 +151,7 @@ public class EaglerMinecraftServer extends MinecraftServer { : newWorldSettings.isMapFeaturesEnabled(); } + @Override public void deleteWorldAndStopServer() { super.deleteWorldAndStopServer(); logger.info("Deleting world..."); @@ -204,6 +205,7 @@ public class EaglerMinecraftServer extends MinecraftServer { return 4; } + @Override public boolean getPaused() { return paused; } @@ -299,6 +301,7 @@ public class EaglerMinecraftServer extends MinecraftServer { this.setAllowFlight(true); } + @Override public void setPaused(boolean p) { paused = p; if (!p) { @@ -319,6 +322,7 @@ public class EaglerMinecraftServer extends MinecraftServer { return true; } + @Override public void updateTimeLightAndEntities() { this.skinService.flushCache(); super.updateTimeLightAndEntities(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java index 74ae027f..6791539d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerPlayerList.java @@ -7,7 +7,7 @@ import net.minecraft.server.management.ServerConfigurationManager; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.minecraft.server.management.ServerConfigurationManager; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerPlayerList extends ServerConfigurationManager { @@ -30,10 +30,12 @@ public class EaglerPlayerList extends ServerConfigurationManager { this.viewDistance = viewDistance; } + @Override public NBTTagCompound getHostPlayerData() { return this.hostPlayerNBT; } + @Override public void playerLoggedOut(EntityPlayerMP playerIn) { super.playerLoggedOut(playerIn); EaglerMinecraftServer svr = (EaglerMinecraftServer) getServerInstance(); @@ -41,6 +43,7 @@ public class EaglerPlayerList extends ServerConfigurationManager { svr.capeService.unregisterPlayer(playerIn.getUniqueID()); } + @Override protected void writePlayerData(EntityPlayerMP par1EntityPlayerMP) { if (par1EntityPlayerMP.getName().equals(this.getServerInstance().getServerOwner())) { this.hostPlayerNBT = new NBTTagCompound(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveFormat.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveFormat.java index 64c31390..0924e133 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveFormat.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveFormat.java @@ -15,7 +15,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerSaveFormat extends SaveFormatOld { @@ -80,10 +80,12 @@ public class EaglerSaveFormat extends SaveFormatOld { return renameWorld(newFolderName, displayName); } + @Override public String getName() { return "eagler"; } + @Override public List getSaveList() { ArrayList arraylist = Lists.newArrayList(); if (worldsList.exists()) { @@ -107,6 +109,7 @@ public class EaglerSaveFormat extends SaveFormatOld { return arraylist; } + @Override public ISaveHandler getSaveLoader(String s, boolean flag) { return new EaglerSaveHandler(this.savesDirectory, s); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveHandler.java index badadb70..2bcbcb03 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerSaveHandler.java @@ -9,7 +9,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerSaveHandler extends SaveHandler { @@ -29,10 +29,12 @@ public class EaglerSaveHandler extends SaveHandler { super(savesDirectory, directoryName); } + @Override public IChunkLoader getChunkLoader(WorldProvider provider) { return new EaglerChunkLoader(WorldsDB.newVFile(this.getWorldDirectory(), "level" + provider.getDimensionId())); } + @Override public void saveWorldInfoWithPlayer(WorldInfo worldInformation, NBTTagCompound tagCompound) { worldInformation.setSaveVersion(19133); super.saveWorldInfoWithPlayer(worldInformation, tagCompound); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/IWASMCrashCallback.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/IWASMCrashCallback.java new file mode 100644 index 00000000..5412e4fe --- /dev/null +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/IWASMCrashCallback.java @@ -0,0 +1,23 @@ +package net.lax1dude.eaglercraft.v1_8.sp.server; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public interface IWASMCrashCallback { + + void callback(String crashReport, boolean terminated); + +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/WorldsDB.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/WorldsDB.java index a9a9269c..c7302b83 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/WorldsDB.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/WorldsDB.java @@ -8,7 +8,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.ServerPlatformSingleplay * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldsDB { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java index 391d869a..d075f2b3 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglerZLIB; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglerZLIB; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKCompiler { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKDecompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKDecompiler.java index 4c1349cc..937a0c16 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKDecompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKDecompiler.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.IOUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.IOUtils; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKDecompiler implements Closeable { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/RandomAccessMemoryFile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/RandomAccessMemoryFile.java index 3a47f1f9..e64aeece 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/RandomAccessMemoryFile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/RandomAccessMemoryFile.java @@ -7,7 +7,7 @@ import java.io.IOException; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RandomAccessMemoryFile implements DataInput, DataOutput { @@ -66,6 +66,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return readBytes(b, off, len); } + @Override public final boolean readBoolean() throws IOException { int ch = this.read(); if (ch < 0) @@ -73,6 +74,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return (ch != 0); } + @Override public final byte readByte() throws IOException { int ch = this.read(); if (ch < 0) @@ -97,6 +99,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return len; } + @Override public final char readChar() throws IOException { int ch1 = this.read(); int ch2 = this.read(); @@ -105,18 +108,22 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return (char) ((ch1 << 8) + (ch2 << 0)); } + @Override public final double readDouble() throws IOException { return Double.longBitsToDouble(readLong()); } + @Override public final float readFloat() throws IOException { return Float.intBitsToFloat(readInt()); } + @Override public final void readFully(byte b[]) throws IOException { readFully(b, 0, b.length); } + @Override public final void readFully(byte b[], int off, int len) throws IOException { int n = 0; do { @@ -127,6 +134,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { } while (n < len); } + @Override public final int readInt() throws IOException { int ch1 = this.read(); int ch2 = this.read(); @@ -137,6 +145,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); } + @Override public final String readLine() throws IOException { StringBuilder input = new StringBuilder(); int c = -1; @@ -167,10 +176,12 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return input.toString(); } + @Override public final long readLong() throws IOException { return ((long) (readInt()) << 32) + (readInt() & 0xFFFFFFFFL); } + @Override public final short readShort() throws IOException { int ch1 = this.read(); int ch2 = this.read(); @@ -179,6 +190,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return (short) ((ch1 << 8) + (ch2 << 0)); } + @Override public final int readUnsignedByte() throws IOException { int ch = this.read(); if (ch < 0) @@ -186,6 +198,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return ch; } + @Override public final int readUnsignedShort() throws IOException { int ch1 = this.read(); int ch2 = this.read(); @@ -194,6 +207,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return (ch1 << 8) + (ch2 << 0); } + @Override public final String readUTF() throws IOException { throw new IOException("TODO"); } @@ -206,6 +220,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { grow(newLength); } + @Override public int skipBytes(int n) throws IOException { int newpos; @@ -221,24 +236,29 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { return (int) (newpos - pos); } + @Override public void write(byte b[]) throws IOException { writeBytes(b, 0, b.length); } + @Override public void write(byte b[], int off, int len) throws IOException { writeBytes(b, off, len); } + @Override public void write(int b) throws IOException { grow(pos + 1); buffer[pos] = (byte) b; pos += 1; } + @Override public final void writeBoolean(boolean v) throws IOException { write(v ? 1 : 0); } + @Override public final void writeByte(int v) throws IOException { write(v); } @@ -249,6 +269,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { pos += len; } + @Override public final void writeBytes(String s) throws IOException { int len = s.length(); byte[] b = new byte[len]; @@ -256,11 +277,13 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { writeBytes(b, 0, len); } + @Override public final void writeChar(int v) throws IOException { write((v >>> 8) & 0xFF); write((v >>> 0) & 0xFF); } + @Override public final void writeChars(String s) throws IOException { int clen = s.length(); int blen = 2 * clen; @@ -274,14 +297,17 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { writeBytes(b, 0, blen); } + @Override public final void writeDouble(double v) throws IOException { writeLong(Double.doubleToLongBits(v)); } + @Override public final void writeFloat(float v) throws IOException { writeInt(Float.floatToIntBits(v)); } + @Override public final void writeInt(int v) throws IOException { write((v >>> 24) & 0xFF); write((v >>> 16) & 0xFF); @@ -289,6 +315,7 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { write((v >>> 0) & 0xFF); } + @Override public final void writeLong(long v) throws IOException { write((int) (v >>> 56) & 0xFF); write((int) (v >>> 48) & 0xFF); @@ -300,11 +327,13 @@ public class RandomAccessMemoryFile implements DataInput, DataOutput { write((int) (v >>> 0) & 0xFF); } + @Override public final void writeShort(int v) throws IOException { write((v >>> 8) & 0xFF); write((v >>> 0) & 0xFF); } + @Override public final void writeUTF(String str) throws IOException { throw new IOException("TODO"); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java index a3b4f11b..dc5bfac8 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterEPK.java @@ -17,7 +17,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldConverterEPK { @@ -38,11 +38,10 @@ public class WorldConverterEPK { public static byte[] exportWorld(String worldName) { String realWorldName = worldName; String worldOwner = "UNKNOWN"; - String splitter = new String(new char[] { (char) 253, (char) 233, (char) 233 }); - if (worldName.contains(splitter)) { - int i = worldName.lastIndexOf(splitter); - worldOwner = worldName.substring(i + 3); - realWorldName = worldName.substring(0, i); + int j = worldName.lastIndexOf(new String(new char[] { (char) 253, (char) 233, (char) 233 })); + if (j != -1) { + worldOwner = worldName.substring(j + 3); + realWorldName = worldName.substring(0, j); } VFile2 worldDir = EaglerIntegratedServerWorker.saveFormat.getSaveLoader(realWorldName, false) .getWorldDirectory(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java index 2caf9e20..f8f3d51e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/WorldConverterMCA.java @@ -27,7 +27,7 @@ import net.minecraft.world.storage.WorldInfo; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -39,7 +39,7 @@ import net.minecraft.world.storage.WorldInfo; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WorldConverterMCA { @@ -207,7 +207,6 @@ public class WorldConverterMCA { ZipEntry f = null; int lastProgUpdate = 0; int prog = 0; - byte[] bb = new byte[16384]; while ((f = zis.getNextEntry()) != null) { if (f.getName().contains("__MACOSX/")) continue; @@ -226,7 +225,7 @@ public class WorldConverterMCA { j += k; } } else { - b = EaglerInputStream.inputStreamToBytes(zis); + b = EaglerInputStream.inputStreamToBytesNoClose(zis); } String fileName = f.getName().substring(folderPrefixOffset); if (fileName.equals("level.dat") || fileName.equals("level.dat_old")) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/CustomSkullData.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/CustomSkullData.java index 9852e1b4..7c802c34 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/CustomSkullData.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/CustomSkullData.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.SkinPacketVersionCache /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.SkinPacketVersionCache * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CustomSkullData { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java index b2cfaa0c..124dbf74 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherCape /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherCape * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedCapePackets { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java index 46c71e2f..938b8aef 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapeService.java @@ -13,7 +13,7 @@ import net.minecraft.entity.player.EntityPlayerMP; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.minecraft.entity.player.EntityPlayerMP; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedCapeService { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java index b4e52e31..0f56f0fb 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java @@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.SkinPacketVersionCache /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -23,7 +23,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.SkinPacketVersionCache * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedSkinPackets { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinService.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinService.java index 1806ae0a..272ee1f7 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinService.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinService.java @@ -28,7 +28,7 @@ import net.minecraft.util.EnumChatFormatting; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -40,7 +40,7 @@ import net.minecraft.util.EnumChatFormatting; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedSkinService { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java index bad35950..8b0d34a9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java @@ -29,7 +29,7 @@ import net.minecraft.util.ITickable; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -41,7 +41,7 @@ import net.minecraft.util.ITickable; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedServerPlayerNetworkManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/NetHandlerHandshakeEagler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/NetHandlerHandshakeEagler.java index b7a1a7a6..41776c8e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/NetHandlerHandshakeEagler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/NetHandlerHandshakeEagler.java @@ -8,7 +8,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetHandlerHandshakeEagler implements INetHandlerHandshakeServer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV3MessageHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV3MessageHandler.java index 2341d07a..fd91d87e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV3MessageHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV3MessageHandler.java @@ -17,7 +17,7 @@ import net.minecraft.network.NetHandlerPlayServer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.network.NetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerV3MessageHandler implements GameMessageHandler { @@ -41,25 +41,30 @@ public class ServerV3MessageHandler implements GameMessageHandler { this.server = (EaglerMinecraftServer) netHandler.serverController; } + @Override public void handleClient(CPacketGetOtherCapeEAG packet) { server.getCapeService().processGetOtherCape(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), netHandler.playerEntity); } + @Override public void handleClient(CPacketGetOtherSkinEAG packet) { server.getSkinService().processPacketGetOtherSkin(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), netHandler.playerEntity); } + @Override public void handleClient(CPacketGetSkinByURLEAG packet) { server.getSkinService().processPacketGetOtherSkin(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.url, netHandler.playerEntity); } + @Override public void handleClient(CPacketInstallSkinSPEAG packet) { server.getSkinService().processPacketInstallNewSkin(packet.customSkin, netHandler.playerEntity); } + @Override public void handleClient(CPacketVoiceSignalConnectEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -67,6 +72,7 @@ public class ServerV3MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalDescEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -75,6 +81,7 @@ public class ServerV3MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalDisconnectV3EAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -87,6 +94,7 @@ public class ServerV3MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalICEEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -95,6 +103,7 @@ public class ServerV3MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalRequestEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV4MessageHandler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV4MessageHandler.java index 7361094f..47087972 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV4MessageHandler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/protocol/ServerV4MessageHandler.java @@ -21,7 +21,7 @@ import net.minecraft.network.NetHandlerPlayServer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -33,7 +33,7 @@ import net.minecraft.network.NetHandlerPlayServer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerV4MessageHandler implements GameMessageHandler { @@ -45,11 +45,13 @@ public class ServerV4MessageHandler implements GameMessageHandler { this.server = (EaglerMinecraftServer) netHandler.serverController; } + @Override public void handleClient(CPacketGetOtherCapeEAG packet) { server.getCapeService().processGetOtherCape(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), netHandler.playerEntity); } + @Override public void handleClient(CPacketGetOtherClientUUIDV4EAG packet) { EntityPlayerMP player = server.getConfigurationManager() .getPlayerByUUID(new EaglercraftUUID(packet.playerUUIDMost, packet.playerUUIDLeast)); @@ -61,20 +63,24 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketGetOtherSkinEAG packet) { server.getSkinService().processPacketGetOtherSkin(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), netHandler.playerEntity); } + @Override public void handleClient(CPacketGetSkinByURLEAG packet) { server.getSkinService().processPacketGetOtherSkin(new EaglercraftUUID(packet.uuidMost, packet.uuidLeast), packet.url, netHandler.playerEntity); } + @Override public void handleClient(CPacketInstallSkinSPEAG packet) { server.getSkinService().processPacketInstallNewSkin(packet.customSkin, netHandler.playerEntity); } + @Override public void handleClient(CPacketVoiceSignalConnectEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -82,6 +88,7 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalDescEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -90,6 +97,7 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalDisconnectPeerV4EAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -98,6 +106,7 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalDisconnectV4EAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -105,6 +114,7 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalICEEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { @@ -113,6 +123,7 @@ public class ServerV4MessageHandler implements GameMessageHandler { } } + @Override public void handleClient(CPacketVoiceSignalRequestEAG packet) { IntegratedVoiceService voiceSvc = server.getVoiceService(); if (voiceSvc != null) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java index 7b29cba5..0c581e88 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/voice/IntegratedVoiceService.java @@ -13,6 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalAllowedEAG; +import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalConnectAnnounceV4EAG; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalConnectV3EAG; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalConnectV4EAG; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalDescEAG; @@ -24,7 +25,7 @@ import net.minecraft.entity.player.EntityPlayerMP; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +37,7 @@ import net.minecraft.entity.player.EntityPlayerMP; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IntegratedVoiceService { @@ -98,14 +99,28 @@ public class IntegratedVoiceService { } public void handleVoiceSignalPacketTypeConnect(EntityPlayerMP sender) { - if (voicePlayers.containsKey(sender.getUniqueID())) { + EaglercraftUUID senderUuid = sender.getUniqueID(); + if (voicePlayers.containsKey(senderUuid)) { return; } boolean hasNoOtherPlayers = voicePlayers.isEmpty(); - voicePlayers.put(sender.getUniqueID(), sender); + voicePlayers.put(senderUuid, sender); if (hasNoOtherPlayers) { return; } + GameMessagePacket v3p = null; + GameMessagePacket v4p = null; + for (EntityPlayerMP conn : voicePlayers.values()) { + if (conn.playerNetServerHandler.getEaglerMessageProtocol().ver <= 3) { + conn.playerNetServerHandler.sendEaglerMessage(v3p == null + ? (v3p = new SPacketVoiceSignalConnectV3EAG(senderUuid.msb, senderUuid.lsb, true, false)) + : v3p); + } else { + conn.playerNetServerHandler.sendEaglerMessage( + v4p == null ? (v4p = new SPacketVoiceSignalConnectAnnounceV4EAG(senderUuid.msb, senderUuid.lsb)) + : v4p); + } + } Collection userDatas = new ArrayList<>(voicePlayers.size()); for (EntityPlayerMP player : voicePlayers.values()) { EaglercraftUUID uuid = player.getUniqueID(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/ClientIntegratedServerNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/ClientIntegratedServerNetworkManager.java index 2e49d7bd..9aded90c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/ClientIntegratedServerNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/ClientIntegratedServerNetworkManager.java @@ -18,7 +18,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientIntegratedServerNetworkManager extends EaglercraftNetworkManager { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/NetHandlerSingleplayerLogin.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/NetHandlerSingleplayerLogin.java index 5ac787ea..063cdac6 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/NetHandlerSingleplayerLogin.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/socket/NetHandlerSingleplayerLogin.java @@ -25,7 +25,7 @@ import net.minecraft.util.IChatComponent; /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.IChatComponent; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class NetHandlerSingleplayerLogin implements INetHandlerLoginClient { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControl.java index ea1f1bed..ce558531 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControl.java @@ -12,7 +12,7 @@ import net.minecraft.client.settings.GameSettings; /** * Copyright (c) 2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.settings.GameSettings; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumTouchControl { @@ -560,4 +560,4 @@ public enum EnumTouchControl { } } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControlPos.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControlPos.java index 64bc8777..ec8d1bb0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControlPos.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchControlPos.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; /** * Copyright (c) 2024 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,8 +14,8 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumTouchControlPos { TOP_LEFT, TOP, TOP_RIGHT, LEFT, RIGHT, BOTTOM_LEFT, BOTTOM, BOTTOM_RIGHT -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchLayoutState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchLayoutState.java index 0f228637..2983da44 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchLayoutState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/EnumTouchLayoutState.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; /** * Copyright (c) 2024 lax1due. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumTouchLayoutState { IN_GUI, IN_GUI_TYPING, IN_GUI_NO_BACK, IN_GAME, IN_GAME_WALK, IN_GAME_CAN_FLY, IN_GAME_WALK_CAN_FLY, IN_GAME_FLYING, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControlInput.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControlInput.java index d39b151e..3c728526 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControlInput.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControlInput.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; /** * Copyright (c) 2024 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.touch_gui; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TouchControlInput { public int x; @@ -26,4 +26,4 @@ public class TouchControlInput { this.y = y; this.control = control; } -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControls.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControls.java index ae39e0e3..7a9d6061 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControls.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchControls.java @@ -12,7 +12,7 @@ import net.minecraft.client.gui.ScaledResolution; /** * Copyright (c) 2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.minecraft.client.gui.ScaledResolution; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TouchControls { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchOverlayRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchOverlayRenderer.java index 4c56f85e..35d5e688 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchOverlayRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/touch_gui/TouchOverlayRenderer.java @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -35,7 +35,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TouchOverlayRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/CertificateInvalidException.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/CertificateInvalidException.java index e4ae1c10..8ad94c86 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/CertificateInvalidException.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/CertificateInvalidException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.update; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.update; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CertificateInvalidException extends RuntimeException { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java index bb08f7de..50f9685a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateCheckerOverlay.java @@ -22,7 +22,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,7 +34,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUpdateCheckerOverlay extends Gui { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateDownloadSuccess.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateDownloadSuccess.java index c3544d74..982bd940 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateDownloadSuccess.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateDownloadSuccess.java @@ -6,7 +6,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUpdateDownloadSuccess extends GuiScreen { @@ -30,6 +30,7 @@ public class GuiUpdateDownloadSuccess extends GuiScreen { this.updateData = updateData; } + @Override public void actionPerformed(GuiButton btn) { if (btn.id == 0) { this.mc.loadingScreen.eaglerShow(I18n.format("updateSuccess.downloading"), null); @@ -42,6 +43,7 @@ public class GuiUpdateDownloadSuccess extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("updateSuccess.title"), this.width / 2, 50, 11184810); @@ -51,6 +53,7 @@ public class GuiUpdateDownloadSuccess extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 56, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateInstallOptions.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateInstallOptions.java index 565dd554..90d9778a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateInstallOptions.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateInstallOptions.java @@ -8,7 +8,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUpdateInstallOptions extends GuiScreen { @@ -40,6 +40,7 @@ public class GuiUpdateInstallOptions extends GuiScreen { enableCountdown = makeDefault; } + @Override public void actionPerformed(GuiButton btn) { if (btn.id == 0) { makeDefault = !makeDefault; @@ -64,6 +65,7 @@ public class GuiUpdateInstallOptions extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float partialTicks) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("updateInstall.title"), this.width / 2, 40, 11184810); @@ -73,6 +75,7 @@ public class GuiUpdateInstallOptions extends GuiScreen { super.drawScreen(mx, my, partialTicks); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(makeDefaultBtn = new GuiButton(0, this.width / 2 - 100, this.height / 6 + 46, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionList.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionList.java index 0aa75ce0..49af404d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionList.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionList.java @@ -10,7 +10,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUpdateVersionList extends GuiScreen { @@ -43,6 +43,7 @@ public class GuiUpdateVersionList extends GuiScreen { this.back = back; } + @Override public void actionPerformed(GuiButton btn) { switch (btn.id) { case 1: @@ -60,6 +61,7 @@ public class GuiUpdateVersionList extends GuiScreen { } } + @Override public void drawScreen(int par1, int par2, float par3) { mx = par1; my = par2; @@ -89,6 +91,7 @@ public class GuiUpdateVersionList extends GuiScreen { slots.handleTouchInput(); } + @Override public void initGui() { selected = -1; buttonList.clear(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java index 4cb4f898..f1b4434f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java @@ -20,7 +20,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -32,7 +32,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiUpdateVersionSlot extends GuiSlot { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/RelayUpdateChecker.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/RelayUpdateChecker.java index fb5d2e43..52fe5780 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/RelayUpdateChecker.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/RelayUpdateChecker.java @@ -10,15 +10,15 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.EaglerInputStream; import net.lax1dude.eaglercraft.v1_8.EaglerOutputStream; import net.lax1dude.eaglercraft.v1_8.internal.PlatformApplication; -import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; +import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryDispatch; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket; import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.RelayPacket00Handshake; import net.minecraft.client.Minecraft; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.client.Minecraft; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayUpdateChecker { @@ -59,7 +59,7 @@ public class RelayUpdateChecker { private static void connect(RelayEntry socket) { try { socket.handshake = false; - socket.currentSocket = PlatformWebRTC.openRelayConnection(socket.uri, 10000); + socket.currentSocket = RelayQueryDispatch.openRelayConnection(socket.uri, 10000); if (socket.currentSocket.isClosed()) { socket.currentSocket = null; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java index f7b1c933..63f64cf2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java @@ -18,7 +18,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.SHA256Digest; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.lax1dude.eaglercraft.v1_8.crypto.SHA256Digest; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UpdateCertificate { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateDataObj.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateDataObj.java index 8a69d6f2..e2ba73c2 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateDataObj.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateDataObj.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.update; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.update; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UpdateDataObj { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateProgressStruct.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateProgressStruct.java index c13f0cb7..0fe4ddbd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateProgressStruct.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateProgressStruct.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.update; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.update; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UpdateProgressStruct { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateResultObj.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateResultObj.java index 9d1fc000..b3b1aa06 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateResultObj.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateResultObj.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.update; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.update; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UpdateResultObj { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateService.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateService.java index dc16e62d..3f220881 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateService.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateService.java @@ -16,7 +16,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UpdateService { @@ -44,11 +44,13 @@ public class UpdateService { this.age = EagRuntime.steadyTimeMillis(); } + @Override public boolean equals(Object o) { return o != null && (o == this || ((o instanceof RawKnownCertHolder) && Arrays.equals(((RawKnownCertHolder) o).data, data))); } + @Override public int hashCode() { return hashcode; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix.java index 8c14e28c..fe7eb9e1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix.java @@ -59,7 +59,7 @@ public abstract class Matrix implements Serializable { /** * Invert this matrix - * + * * @return this */ public abstract Matrix invert(); @@ -84,21 +84,21 @@ public abstract class Matrix implements Serializable { /** * Negate this matrix - * + * * @return this */ public abstract Matrix negate(); /** * Set this matrix to be the identity matrix. - * + * * @return this */ public abstract Matrix setIdentity(); /** * Set this matrix to 0. - * + * * @return this */ public abstract Matrix setZero(); @@ -106,7 +106,7 @@ public abstract class Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in column major * (openGL) order. - * + * * @param buf The buffer to store this matrix in * @return this */ @@ -115,7 +115,7 @@ public abstract class Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in row major * (maths) order. - * + * * @param buf The buffer to store this matrix in * @return this */ @@ -123,7 +123,7 @@ public abstract class Matrix implements Serializable { /** * Transpose this matrix - * + * * @return this */ public abstract Matrix transpose(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix2f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix2f.java index 70aed683..a52d4755 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix2f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix2f.java @@ -49,7 +49,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Add two matrices together and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -69,7 +69,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Invert the source matrix and place the result in the destination matrix. - * + * * @param src The source matrix to be inverted * @param dest The destination matrix or null if a new matrix is to be created * @return The inverted matrix, or null if source can't be reverted. @@ -100,7 +100,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Copy the source matrix to the destination matrix. - * + * * @param src The source matrix * @param dest The destination matrix, or null if a new one should be created. * @return The copied matrix @@ -119,7 +119,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Multiply the right matrix by the left and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -144,7 +144,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Negate the source matrix and stash the result in the destination matrix. - * + * * @param src The source matrix to be negated * @param dest The destination matrix, or null if a new matrix is to be created * @return the negated matrix @@ -163,7 +163,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Set the source matrix to be the identity matrix. - * + * * @param src The matrix to set to the identity. * @return The source matrix */ @@ -186,7 +186,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Subtract the right matrix from the left and place the result in a third * matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -206,7 +206,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Transform a Vector by a matrix and return the result in a destination vector. - * + * * @param left The left matrix * @param right The right vector * @param dest The destination vector, or null if a new one is to be created @@ -227,7 +227,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Transpose the source matrix and place the result in the destination matrix. - * + * * @param src The source matrix or null if a new matrix is to be created * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix @@ -263,18 +263,20 @@ public class Matrix2f extends Matrix implements Serializable { /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Matrix#determinant() */ + @Override public float determinant() { return m00 * m11 - m01 * m10; } /** * Invert this matrix - * + * * @return this if successful, null otherwise */ + @Override public Matrix invert() { return invert(this, this); } @@ -286,6 +288,7 @@ public class Matrix2f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix load(FloatBuffer buf) { m00 = buf.get(); @@ -298,7 +301,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Load from another matrix - * + * * @param src The source matrix * @return this */ @@ -313,6 +316,7 @@ public class Matrix2f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); @@ -325,16 +329,17 @@ public class Matrix2f extends Matrix implements Serializable { /** * Negate this matrix - * + * * @return this */ + @Override public Matrix negate() { return negate(this); } /** * Negate this matrix and stash the result in another matrix. - * + * * @param dest The destination matrix, or null if a new matrix is to be created * @return the negated matrix */ @@ -344,18 +349,20 @@ public class Matrix2f extends Matrix implements Serializable { /** * Set this matrix to be the identity matrix. - * + * * @return this */ + @Override public Matrix setIdentity() { return setIdentity(this); } /** * Set this matrix to 0. - * + * * @return this */ + @Override public Matrix setZero() { return setZero(this); } @@ -363,9 +370,10 @@ public class Matrix2f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in column major * (openGL) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix store(FloatBuffer buf) { buf.put(m00); buf.put(m01); @@ -377,9 +385,10 @@ public class Matrix2f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in row major * (maths) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); buf.put(m10); @@ -391,6 +400,7 @@ public class Matrix2f extends Matrix implements Serializable { /** * Returns a string representation of this matrix */ + @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append(m00).append(' ').append(m10).append(' ').append('\n'); @@ -400,16 +410,17 @@ public class Matrix2f extends Matrix implements Serializable { /** * Transpose this matrix - * + * * @return this */ + @Override public Matrix transpose() { return transpose(this); } /** * Transpose this matrix and place the result in another matrix. - * + * * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix */ diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix3f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix3f.java index e80e2c4b..ea900511 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix3f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix3f.java @@ -49,7 +49,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Add two matrices together and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -79,7 +79,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Invert the source matrix and put the result into the destination matrix - * + * * @param src The source matrix to be inverted * @param dest The destination matrix, or null if a new one is to be created * @return The inverted matrix if successful, null otherwise @@ -126,7 +126,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Copy source matrix to destination matrix - * + * * @param src The source matrix * @param dest The destination matrix, or null of a new matrix is to be created * @return The copied matrix @@ -150,7 +150,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Multiply the right matrix by the left and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -185,7 +185,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Negate the source matrix and place the result in the destination matrix. - * + * * @param src The source matrix * @param dest The destination matrix, or null if a new matrix is to be created * @return the negated matrix @@ -208,7 +208,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Set the matrix to be the identity matrix. - * + * * @param m The matrix to be set to the identity * @return m */ @@ -227,7 +227,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Set the matrix matrix to 0. - * + * * @param m The matrix to be set to 0 * @return m */ @@ -247,7 +247,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Subtract the right matrix from the left and place the result in a third * matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -272,7 +272,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Transform a Vector by a matrix and return the result in a destination vector. - * + * * @param left The left matrix * @param right The right vector * @param dest The destination vector, or null if a new one is to be created @@ -295,7 +295,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Transpose the source matrix and place the result into the destination matrix - * + * * @param src The source matrix to be transposed * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix @@ -338,20 +338,23 @@ public class Matrix3f extends Matrix implements Serializable { /** * @return the determinant of the matrix */ + @Override public float determinant() { float f = m00 * (m11 * m22 - m12 * m21) + m01 * (m12 * m20 - m10 * m22) + m02 * (m10 * m21 - m11 * m20); return f; } + @Override public boolean equals(Object m) { return (m instanceof Matrix3f) && equal(this, (Matrix3f) m); } /** * Invert this matrix - * + * * @return this if successful, null otherwise */ + @Override public Matrix invert() { return invert(this, this); } @@ -363,6 +366,7 @@ public class Matrix3f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix load(FloatBuffer buf) { m00 = buf.get(); @@ -380,7 +384,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Load from another matrix - * + * * @param src The source matrix * @return this */ @@ -395,6 +399,7 @@ public class Matrix3f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); @@ -412,16 +417,17 @@ public class Matrix3f extends Matrix implements Serializable { /** * Negate this matrix - * + * * @return this */ + @Override public Matrix negate() { return negate(this); } /** * Negate this matrix and place the result in a destination matrix. - * + * * @param dest The destination matrix, or null if a new matrix is to be created * @return the negated matrix */ @@ -431,18 +437,20 @@ public class Matrix3f extends Matrix implements Serializable { /** * Set this matrix to be the identity matrix. - * + * * @return this */ + @Override public Matrix setIdentity() { return setIdentity(this); } /** * Set this matrix to 0. - * + * * @return this */ + @Override public Matrix setZero() { return setZero(this); } @@ -463,9 +471,10 @@ public class Matrix3f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in column major * (openGL) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix store(FloatBuffer buf) { buf.put(m00); buf.put(m01); @@ -482,9 +491,10 @@ public class Matrix3f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in row major * (maths) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); buf.put(m10); @@ -501,6 +511,7 @@ public class Matrix3f extends Matrix implements Serializable { /** * Returns a string representation of this matrix */ + @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append(m00).append(' ').append(m10).append(' ').append(m20).append(' ').append('\n'); @@ -511,16 +522,17 @@ public class Matrix3f extends Matrix implements Serializable { /** * Transpose this matrix - * + * * @return this */ + @Override public Matrix transpose() { return transpose(this, this); } /** * Transpose this matrix and place the result in another matrix - * + * * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix */ diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix4f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix4f.java index 9415abcd..5d7c2719 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix4f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Matrix4f.java @@ -46,7 +46,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Add two matrices together and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -78,7 +78,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Calculate the determinant of a 3x3 matrix - * + * * @return result */ @@ -95,7 +95,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Invert the source matrix and put the result in the destination - * + * * @param src The source matrix * @param dest The destination matrix, or null if a new matrix is to be created * @return The inverted matrix if successful, null otherwise @@ -164,7 +164,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Copy the source matrix to the destination matrix - * + * * @param src The source matrix * @param dest The destination matrix, or null of a new one is to be created * @return The copied matrix @@ -194,7 +194,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Multiply the right matrix by the left and place the result in a third matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -243,7 +243,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Negate this matrix and place the result in a destination matrix. - * + * * @param src The source matrix * @param dest The destination matrix, or null if a new matrix is to be created * @return The negated matrix @@ -275,7 +275,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Rotates the source matrix around the given axis the specified angle and put * the result in the destination matrix. - * + * * @param angle the angle, in radians. * @param axis The vector representing the rotation axis. Must be normalized. * @param src The matrix to rotate @@ -333,7 +333,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Scales the source matrix and put the result in the destination matrix - * + * * @param vec The vector to scale by * @param src The source matrix * @param dest The destination matrix, or null if a new matrix is to be created @@ -359,7 +359,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Set the given matrix to be the identity matrix. - * + * * @param m The matrix to set to the identity * @return m */ @@ -386,7 +386,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Set the given matrix to 0. - * + * * @param m The matrix to set to 0 * @return m */ @@ -414,7 +414,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Subtract the right matrix from the left and place the result in a third * matrix. - * + * * @param left The left source matrix * @param right The right source matrix * @param dest The destination matrix, or null if a new one is to be created @@ -446,7 +446,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Transform a Vector by a matrix and return the result in a destination vector. - * + * * @param left The left matrix * @param right The right vector * @param dest The destination vector, or null if a new one is to be created @@ -471,7 +471,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate the source matrix and stash the result in the destination matrix - * + * * @param vec The vector to translate by * @param src The source matrix * @param dest The destination matrix or null if a new matrix is to be created @@ -491,7 +491,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate the source matrix and stash the result in the destination matrix - * + * * @param vec The vector to translate by * @param src The source matrix * @param dest The destination matrix or null if a new matrix is to be created @@ -511,7 +511,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Transpose the source matrix and place the result in the destination matrix - * + * * @param src The source matrix * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix @@ -574,6 +574,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * @return the determinant of the matrix */ + @Override public float determinant() { float f = m00 * ((m11 * m22 * m33 + m12 * m23 * m31 + m13 * m21 * m32) - m13 * m22 * m31 - m11 * m23 * m32 - m12 * m21 * m33); @@ -586,15 +587,17 @@ public class Matrix4f extends Matrix implements Serializable { return f; } + @Override public boolean equals(Object m) { return (m instanceof Matrix4f) && equal(this, (Matrix4f) m); } /** * Invert this matrix - * + * * @return this if successful, null otherwise */ + @Override public Matrix invert() { return invert(this, this); } @@ -635,6 +638,7 @@ public class Matrix4f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix load(FloatBuffer buf) { m00 = buf.get(); @@ -659,7 +663,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Load from another matrix4f - * + * * @param src The source matrix * @return this */ @@ -674,6 +678,7 @@ public class Matrix4f extends Matrix implements Serializable { * @param buf A float buffer to read from * @return this */ + @Override public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); @@ -698,16 +703,17 @@ public class Matrix4f extends Matrix implements Serializable { /** * Negate this matrix - * + * * @return this */ + @Override public Matrix negate() { return negate(this); } /** * Negate this matrix and place the result in a destination matrix. - * + * * @param dest The destination matrix, or null if a new matrix is to be created * @return the negated matrix */ @@ -717,7 +723,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Rotates the matrix around the given axis the specified angle - * + * * @param angle the angle, in radians. * @param axis The vector representing the rotation axis. Must be normalized. * @return this @@ -728,7 +734,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Rotates the matrix around the given axis the specified angle - * + * * @param angle the angle, in radians. * @param axis The vector representing the rotation axis. Must be normalized. * @param dest The matrix to put the result, or null if a new matrix is to be @@ -741,7 +747,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Scales this matrix - * + * * @param vec The vector to scale by * @return this */ @@ -751,18 +757,20 @@ public class Matrix4f extends Matrix implements Serializable { /** * Set this matrix to be the identity matrix. - * + * * @return this */ + @Override public Matrix setIdentity() { return setIdentity(this); } /** * Set this matrix to 0. - * + * * @return this */ + @Override public Matrix setZero() { return setZero(this); } @@ -813,9 +821,10 @@ public class Matrix4f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in column major * (openGL) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix store(FloatBuffer buf) { buf.put(m00); buf.put(m01); @@ -839,7 +848,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Store the rotation portion of this matrix in a float buffer. The matrix is * stored in column major (openGL) order. - * + * * @param buf The buffer to store this matrix in */ public Matrix store3f(FloatBuffer buf) { @@ -858,9 +867,10 @@ public class Matrix4f extends Matrix implements Serializable { /** * Store this matrix in a float buffer. The matrix is stored in row major * (maths) order. - * + * * @param buf The buffer to store this matrix in */ + @Override public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); buf.put(m10); @@ -884,6 +894,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Returns a string representation of this matrix */ + @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append(m00).append(' ').append(m10).append(' ').append(m20).append(' ').append(m30).append('\n'); @@ -895,7 +906,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate this matrix - * + * * @param vec The vector to translate by * @return this */ @@ -905,7 +916,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate this matrix and stash the result in another matrix - * + * * @param vec The vector to translate by * @param dest The destination matrix or null if a new matrix is to be created * @return the translated matrix @@ -916,7 +927,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate this matrix - * + * * @param vec The vector to translate by * @return this */ @@ -926,7 +937,7 @@ public class Matrix4f extends Matrix implements Serializable { /** * Translate this matrix and stash the result in another matrix - * + * * @param vec The vector to translate by * @param dest The destination matrix or null if a new matrix is to be created * @return the translated matrix @@ -937,16 +948,17 @@ public class Matrix4f extends Matrix implements Serializable { /** * Transpose this matrix - * + * * @return this */ + @Override public Matrix transpose() { return transpose(this); } /** * Transpose this matrix and place the result in another matrix - * + * * @param dest The destination matrix or null if a new matrix is to be created * @return the transposed matrix */ diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Quaternion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Quaternion.java index 9dbc4ed9..b03163f0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Quaternion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Quaternion.java @@ -138,7 +138,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * Scale the source quaternion by scale and put the result in the destination - * + * * @param scale The amount to scale by * @param src The source quaternion * @param dest The destination quaternion, or null if a new quaternion is to be @@ -183,7 +183,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * Set the given quaternion to the multiplication identity. - * + * * @param q The quaternion * @return q */ @@ -227,6 +227,7 @@ public class Quaternion extends Vector implements ReadableVector4f { * * @see org.lwjgl.vector.ReadableVector3f#getW() */ + @Override public float getW() { return w; } @@ -234,6 +235,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * @return x */ + @Override public final float getX() { return x; } @@ -241,6 +243,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * @return y */ + @Override public final float getY() { return y; } @@ -250,6 +253,7 @@ public class Quaternion extends Vector implements ReadableVector4f { * * @see org.lwjgl.vector.ReadableVector3f#getZ() */ + @Override public float getZ() { return z; } @@ -257,15 +261,17 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * @return the length squared of the quaternion */ + @Override public float lengthSquared() { return x * x + y * y + z * z + w * w; } /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.Vector#load(java.nio.FloatBuffer) */ + @Override public Vector load(FloatBuffer buf) { x = buf.get(); y = buf.get(); @@ -277,6 +283,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * Calculate the conjugate of this quaternion */ + @Override public Vector negate() { return negate(this, this); } @@ -307,6 +314,7 @@ public class Quaternion extends Vector implements ReadableVector4f { * * @see org.lwjgl.vector.Vector#scale(float) */ + @Override public Vector scale(float scale) { return scale(scale, this, this); } @@ -443,7 +451,7 @@ public class Quaternion extends Vector implements ReadableVector4f { /** * Set this quaternion to the multiplication identity. - * + * * @return this */ public Quaternion setIdentity() { @@ -488,9 +496,10 @@ public class Quaternion extends Vector implements ReadableVector4f { /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.ReadableVector#store(java.nio.FloatBuffer) */ + @Override public Vector store(FloatBuffer buf) { buf.put(x); buf.put(y); @@ -500,6 +509,7 @@ public class Quaternion extends Vector implements ReadableVector4f { return this; } + @Override public String toString() { return "Quaternion: " + x + " " + y + " " + z + " " + w; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector.java index 92d4f493..5872b50d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector.java @@ -49,9 +49,9 @@ public interface ReadableVector { /** * Store this vector in a FloatBuffer - * + * * @param buf The buffer to store it in, at the current position * @return this */ Vector store(FloatBuffer buf); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector2f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector2f.java index 579bf7ab..c5796c61 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector2f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector2f.java @@ -44,4 +44,4 @@ public interface ReadableVector2f extends ReadableVector { * @return y */ float getY(); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector3f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector3f.java index 00008964..87f43d3a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector3f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/ReadableVector3f.java @@ -39,4 +39,4 @@ public interface ReadableVector3f extends ReadableVector2f { * @return z */ float getZ(); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector.java index e41a527e..4bb8cba0 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector.java @@ -54,6 +54,7 @@ public abstract class Vector implements Serializable, ReadableVector { /** * @return the length of the vector */ + @Override public final float length() { return (float) Math.sqrt(lengthSquared()); } @@ -61,11 +62,12 @@ public abstract class Vector implements Serializable, ReadableVector { /** * @return the length squared of the vector */ + @Override public abstract float lengthSquared(); /** * Load this vector from a FloatBuffer - * + * * @param buf The buffer to load it from, at the current position * @return this */ @@ -73,14 +75,14 @@ public abstract class Vector implements Serializable, ReadableVector { /** * Negate a vector - * + * * @return this */ public abstract Vector negate(); /** * Normalise this vector - * + * * @return this */ public final Vector normalise() { @@ -94,7 +96,7 @@ public abstract class Vector implements Serializable, ReadableVector { /** * Scale this vector - * + * * @param scale The scale factor * @return this */ @@ -102,10 +104,11 @@ public abstract class Vector implements Serializable, ReadableVector { /** * Store this vector in a FloatBuffer - * + * * @param buf The buffer to store it in, at the current position * @return this */ + @Override public abstract Vector store(FloatBuffer buf); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector2f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector2f.java index ca7e4aed..ef8784bd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector2f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector2f.java @@ -49,7 +49,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Add a vector to another vector and place the result in a destination vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -66,7 +66,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Calculate the angle between two vectors, in radians - * + * * @param a A vector * @param b The other vector * @return the angle between the two vectors, in radians @@ -83,7 +83,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * The dot product of two vectors is calculated as v1.x * v2.x + v1.y * v2.y + * v1.z * v2.z - * + * * @param left The LHS vector * @param right The RHS vector * @return left dot right @@ -95,7 +95,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Subtract a vector from another vector and place the result in a destination * vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -133,6 +133,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, set(src); } + @Override public boolean equals(Object obj) { if (this == obj) return true; @@ -151,6 +152,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * @return x */ + @Override public final float getX() { return x; } @@ -158,6 +160,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * @return y */ + @Override public final float getY() { return y; } @@ -165,16 +168,18 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * @return the length squared of the vector */ + @Override public float lengthSquared() { return x * x + y * y; } /** * Load this vector from a FloatBuffer - * + * * @param buf The buffer to load it from, at the current position * @return this */ + @Override public Vector load(FloatBuffer buf) { x = buf.get(); y = buf.get(); @@ -183,9 +188,10 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Negate a vector - * + * * @return this */ + @Override public Vector negate() { x = -x; y = -y; @@ -194,7 +200,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Negate a vector and place the result in a destination vector. - * + * * @param dest The destination vector or null if a new vector is to be created * @return the negated vector */ @@ -208,7 +214,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Normalise this vector and place the result in another vector. - * + * * @param dest The destination vector, or null if a new vector is to be created * @return the normalised vector */ @@ -225,9 +231,10 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#scale(float) */ + @Override public Vector scale(float scale) { x *= scale; @@ -238,9 +245,10 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector2f#set(float, float) */ + @Override public void set(float x, float y) { this.x = x; this.y = y; @@ -248,7 +256,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Load from another Vector2f - * + * * @param src The source vector * @return this */ @@ -260,28 +268,31 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Set X - * + * * @param x */ + @Override public final void setX(float x) { this.x = x; } /** * Set Y - * + * * @param y */ + @Override public final void setY(float y) { this.y = y; } /** * Store this vector in a FloatBuffer - * + * * @param buf The buffer to store it in, at the current position * @return this */ + @Override public Vector store(FloatBuffer buf) { buf.put(x); buf.put(y); @@ -290,9 +301,10 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /* * (non-Javadoc) - * + * * @see java.lang.Object#toString() */ + @Override public String toString() { StringBuilder sb = new StringBuilder(64); @@ -306,7 +318,7 @@ public class Vector2f extends Vector implements Serializable, ReadableVector2f, /** * Translate a vector - * + * * @param x The translation in x * @param y the translation in y * @return this diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector3f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector3f.java index 979655ea..d4c0b725 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector3f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector3f.java @@ -49,7 +49,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Add a vector to another vector and place the result in a destination vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -66,7 +66,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Calculate the angle between two vectors, in radians - * + * * @param a A vector * @param b The other vector * @return the angle between the two vectors, in radians @@ -102,7 +102,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * The dot product of two vectors is calculated as v1.x * v2.x + v1.y * v2.y + * v1.z * v2.z - * + * * @param left The LHS vector * @param right The RHS vector * @return left dot right @@ -114,7 +114,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Subtract a vector from another vector and place the result in a destination * vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -152,6 +152,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, set(src); } + @Override public boolean equals(Object obj) { if (this == obj) return true; @@ -170,6 +171,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * @return x */ + @Override public final float getX() { return x; } @@ -177,15 +179,17 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * @return y */ + @Override public final float getY() { return y; } /* * (Overrides) - * + * * @see org.lwjgl.vector.ReadableVector3f#getZ() */ + @Override public float getZ() { return z; } @@ -193,15 +197,17 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * @return the length squared of the vector */ + @Override public float lengthSquared() { return x * x + y * y + z * z; } /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#load(FloatBuffer) */ + @Override public Vector load(FloatBuffer buf) { x = buf.get(); y = buf.get(); @@ -211,9 +217,10 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Negate a vector - * + * * @return this */ + @Override public Vector negate() { x = -x; y = -y; @@ -223,7 +230,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Negate a vector and place the result in a destination vector. - * + * * @param dest The destination vector or null if a new vector is to be created * @return the negated vector */ @@ -238,7 +245,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Normalise this vector and place the result in another vector. - * + * * @param dest The destination vector, or null if a new vector is to be created * @return the normalised vector */ @@ -255,9 +262,10 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#scale(float) */ + @Override public Vector scale(float scale) { x *= scale; @@ -270,9 +278,10 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector2f#set(float, float) */ + @Override public void set(float x, float y) { this.x = x; this.y = y; @@ -280,9 +289,10 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector3f#set(float, float, float) */ + @Override public void set(float x, float y, float z) { this.x = x; this.y = y; @@ -291,7 +301,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Load from another Vector3f - * + * * @param src The source vector * @return this */ @@ -304,36 +314,40 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Set X - * + * * @param x */ + @Override public final void setX(float x) { this.x = x; } /** * Set Y - * + * * @param y */ + @Override public final void setY(float y) { this.y = y; } /** * Set Z - * + * * @param z */ + @Override public void setZ(float z) { this.z = z; } /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#store(FloatBuffer) */ + @Override public Vector store(FloatBuffer buf) { buf.put(x); @@ -345,9 +359,10 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /* * (non-Javadoc) - * + * * @see java.lang.Object#toString() */ + @Override public String toString() { StringBuilder sb = new StringBuilder(64); @@ -363,7 +378,7 @@ public class Vector3f extends Vector implements Serializable, ReadableVector3f, /** * Translate a vector - * + * * @param x The translation in x * @param y the translation in y * @return this diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector4f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector4f.java index f1dc6f73..7f5351b4 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector4f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/Vector4f.java @@ -1,31 +1,31 @@ -/* +/* * Copyright (c) 2002-2008 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @@ -38,7 +38,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; /** * * Holds a 4-tuple vector. - * + * * @author cix_foo * @version $Revision$ $Id$ */ @@ -49,7 +49,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Add a vector to another vector and place the result in a destination vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -66,7 +66,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Calculate the angle between two vectors, in radians - * + * * @param a A vector * @param b The other vector * @return the angle between the two vectors, in radians @@ -83,7 +83,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * The dot product of two vectors is calculated as v1.x * v2.x + v1.y * v2.y + * v1.z * v2.z + v1.w * v2.w - * + * * @param left The LHS vector * @param right The RHS vector * @return left dot right @@ -95,7 +95,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Subtract a vector from another vector and place the result in a destination * vector. - * + * * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created @@ -133,6 +133,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, set(src); } + @Override public boolean equals(Object obj) { if (this == obj) return true; @@ -150,9 +151,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /* * (Overrides) - * + * * @see org.lwjgl.vector.ReadableVector3f#getZ() */ + @Override public float getW() { return w; } @@ -160,6 +162,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * @return x */ + @Override public final float getX() { return x; } @@ -167,15 +170,17 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * @return y */ + @Override public final float getY() { return y; } /* * (Overrides) - * + * * @see org.lwjgl.vector.ReadableVector3f#getZ() */ + @Override public float getZ() { return z; } @@ -183,15 +188,17 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * @return the length squared of the vector */ + @Override public float lengthSquared() { return x * x + y * y + z * z + w * w; } /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#load(FloatBuffer) */ + @Override public Vector load(FloatBuffer buf) { x = buf.get(); y = buf.get(); @@ -202,9 +209,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Negate a vector - * + * * @return this */ + @Override public Vector negate() { x = -x; y = -y; @@ -215,7 +223,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Negate a vector and place the result in a destination vector. - * + * * @param dest The destination vector or null if a new vector is to be created * @return the negated vector */ @@ -231,7 +239,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Normalise this vector and place the result in another vector. - * + * * @param dest The destination vector, or null if a new vector is to be created * @return the normalised vector */ @@ -248,9 +256,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#scale(float) */ + @Override public Vector scale(float scale) { x *= scale; y *= scale; @@ -261,9 +270,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector2f#set(float, float) */ + @Override public void set(float x, float y) { this.x = x; this.y = y; @@ -271,9 +281,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector3f#set(float, float, float) */ + @Override public void set(float x, float y, float z) { this.x = x; this.y = y; @@ -282,9 +293,10 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /* * (non-Javadoc) - * + * * @see org.lwjgl.util.vector.WritableVector4f#set(float, float, float, float) */ + @Override public void set(float x, float y, float z, float w) { this.x = x; this.y = y; @@ -294,7 +306,7 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Load from another Vector4f - * + * * @param src The source vector * @return this */ @@ -308,45 +320,50 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, /** * Set W - * + * * @param w */ + @Override public void setW(float w) { this.w = w; } /** * Set X - * + * * @param x */ + @Override public final void setX(float x) { this.x = x; } /** * Set Y - * + * * @param y */ + @Override public final void setY(float y) { this.y = y; } /** * Set Z - * + * * @param z */ + @Override public void setZ(float z) { this.z = z; } /* * (non-Javadoc) - * + * * @see org.lwjgl.vector.Vector#store(FloatBuffer) */ + @Override public Vector store(FloatBuffer buf) { buf.put(x); @@ -357,13 +374,14 @@ public class Vector4f extends Vector implements Serializable, ReadableVector4f, return this; } + @Override public String toString() { return "Vector4f: " + x + " " + y + " " + z + " " + w; } /** * Translate a vector - * + * * @param x The translation in x * @param y the translation in y * @return this diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector2f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector2f.java index 27376e50..bcc3d789 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector2f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector2f.java @@ -33,7 +33,7 @@ package net.lax1dude.eaglercraft.v1_8.vector; /** * Writable interface to Vector2fs - * + * * @author $author$ * @version $revision$ $Id$ */ @@ -41,7 +41,7 @@ public interface WritableVector2f { /** * Set the X,Y values - * + * * @param x * @param y */ @@ -49,16 +49,16 @@ public interface WritableVector2f { /** * Set the X value - * + * * @param x */ void setX(float x); /** * Set the Y value - * + * * @param y */ void setY(float y); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector3f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector3f.java index 3c4f8d27..0b2d72da 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector3f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector3f.java @@ -33,7 +33,7 @@ package net.lax1dude.eaglercraft.v1_8.vector; /** * Writable interface to Vector3fs - * + * * @author $author$ * @version $revision$ $Id$ */ @@ -41,7 +41,7 @@ public interface WritableVector3f extends WritableVector2f { /** * Set the X,Y,Z values - * + * * @param x * @param y * @param z @@ -50,9 +50,9 @@ public interface WritableVector3f extends WritableVector2f { /** * Set the Z value - * + * * @param z */ void setZ(float z); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector4f.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector4f.java index d8835573..148031d1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector4f.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/vector/WritableVector4f.java @@ -33,7 +33,7 @@ package net.lax1dude.eaglercraft.v1_8.vector; /** * Writable interface to Vector4fs - * + * * @author $author$ * @version $revision$ $Id$ */ @@ -41,7 +41,7 @@ public interface WritableVector4f extends WritableVector3f { /** * Set the X,Y,Z,W values - * + * * @param x * @param y * @param z @@ -51,9 +51,9 @@ public interface WritableVector4f extends WritableVector3f { /** * Set the W value - * + * * @param w */ void setW(float w); -} \ No newline at end of file +} diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java index c7948603..5ed1d2cd 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelPeerState.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; /** * Copyright (c) 2024 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumVoiceChannelPeerState { FAILED, SUCCESS, LOADING; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java index d12f7e13..6630e779 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelReadyState.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; /** * Copyright (c) 2024 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumVoiceChannelReadyState { NONE, ABORTED, DEVICE_INITIALIZED; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java index 43cd91fa..367c2e59 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelStatus.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumVoiceChannelStatus { DISCONNECTED, CONNECTING, CONNECTED, UNAVAILABLE; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java index 2807a8e8..c1bdcd0f 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/EnumVoiceChannelType.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.voice; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumVoiceChannelType { NONE, GLOBAL, PROXIMITY; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java index 5c1fc939..dab073d9 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/ExpiringSet.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; /** * Copyright (c) 2022 ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.EagRuntime; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ExpiringSet extends HashSet { public interface ExpiringEvent { @@ -44,6 +44,7 @@ public class ExpiringSet extends HashSet { this.event = event; } + @Override public boolean add(T o) { checkForExpirations(); boolean success = super.add(o); @@ -71,16 +72,19 @@ public class ExpiringSet extends HashSet { } } + @Override public void clear() { this.timestamps.clear(); super.clear(); } + @Override public boolean contains(Object o) { checkForExpirations(); return super.contains(o); } + @Override public boolean remove(Object o) { checkForExpirations(); boolean success = super.remove(o); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java index 62a0d8f0..d23d6c60 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java @@ -25,7 +25,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiVoiceMenu extends Gui { @@ -637,6 +637,7 @@ public class GuiVoiceMenu extends Gui { public void initGui() { this.sliderBlocks = new GuiSlider2(-1, (width - 150) / 2, height / 3 + 20, 150, 20, (VoiceClientController.getVoiceProximity() - 5) / 17.0f, 1.0f) { + @Override protected String updateDisplayString() { return (int) ((sliderValue * 17.0f) + 5.0f) + " Blocks"; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java index 97f7ac2a..3e264a15 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceOverlay.java @@ -18,7 +18,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,7 +30,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiVoiceOverlay extends Gui { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java index 33605815..e0f276c1 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceClientController.java @@ -26,12 +26,13 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.client.CPacketVoiceSign import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.client.CPacketVoiceSignalICEEAG; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.client.CPacketVoiceSignalRequestEAG; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketVoiceSignalGlobalEAG; +import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerController; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -43,7 +44,7 @@ import net.minecraft.entity.player.EntityPlayer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VoiceClientController { @@ -137,7 +138,7 @@ public class VoiceClientController { return (!isClientSupported() || !isServerSupported()) ? EnumVoiceChannelStatus.UNAVAILABLE : (PlatformVoiceClient.getReadyState() != EnumVoiceChannelReadyState.DEVICE_INITIALIZED ? EnumVoiceChannelStatus.CONNECTING - : (voicePeerErrored() ? EnumVoiceChannelStatus.UNAVAILABLE : EnumVoiceChannelStatus.CONNECTED)); + : EnumVoiceChannelStatus.CONNECTED); } public static String getVoiceUsername(EaglercraftUUID uuid) { @@ -179,19 +180,24 @@ public class VoiceClientController { } public static void handleVoiceSignalPacketTypeConnect(EaglercraftUUID user, boolean offer) { - PlatformVoiceClient.signalConnect(user, offer); + if (voiceChannel != EnumVoiceChannelType.NONE) + PlatformVoiceClient.signalConnect(user, offer); } public static void handleVoiceSignalPacketTypeConnectAnnounce(EaglercraftUUID user) { - sendPacketRequest(user); + if (voiceChannel != EnumVoiceChannelType.NONE + && (voiceChannel == EnumVoiceChannelType.GLOBAL || listeningSet.contains(user))) + sendPacketRequest(user); } public static void handleVoiceSignalPacketTypeDescription(EaglercraftUUID user, String desc) { - PlatformVoiceClient.signalDescription(user, desc); + if (voiceChannel != EnumVoiceChannelType.NONE) + PlatformVoiceClient.signalDescription(user, desc); } public static void handleVoiceSignalPacketTypeDisconnect(EaglercraftUUID user) { - PlatformVoiceClient.signalDisconnect(user, true); + if (voiceChannel != EnumVoiceChannelType.NONE) + PlatformVoiceClient.signalDisconnect(user, true); } public static void handleVoiceSignalPacketTypeGlobal(EaglercraftUUID[] voicePlayers, String[] voiceNames) { @@ -206,18 +212,22 @@ public class VoiceClientController { public static void handleVoiceSignalPacketTypeGlobalNew( Collection voicePlayers) { + boolean isGlobal = voiceChannel == EnumVoiceChannelType.GLOBAL; uuidToNameLookup.clear(); for (SPacketVoiceSignalGlobalEAG.UserData player : voicePlayers) { EaglercraftUUID uuid = new EaglercraftUUID(player.uuidMost, player.uuidLeast); if (player.username != null) { uuidToNameLookup.put(uuid, player.username); } - sendPacketRequestIfNeeded(uuid); + if (isGlobal) { + sendPacketRequestIfNeeded(uuid); + } } } public static void handleVoiceSignalPacketTypeICECandidate(EaglercraftUUID user, String ice) { - PlatformVoiceClient.signalICECandidate(user, ice); + if (voiceChannel != EnumVoiceChannelType.NONE) + PlatformVoiceClient.signalICECandidate(user, ice); } public static void initializeVoiceClient(Consumer signalSendCallbackIn, int proto) { @@ -262,35 +272,47 @@ public class VoiceClientController { } public static void sendPacketConnect() { - packetSendCallback.accept(new CPacketVoiceSignalConnectEAG()); + if (packetSendCallback != null) { + packetSendCallback.accept(new CPacketVoiceSignalConnectEAG()); + } } public static void sendPacketDesc(EaglercraftUUID peerId, String desc) { - packetSendCallback.accept(new CPacketVoiceSignalDescEAG(peerId.msb, peerId.lsb, desc)); + if (packetSendCallback != null) { + packetSendCallback.accept(new CPacketVoiceSignalDescEAG(peerId.msb, peerId.lsb, desc)); + } } public static void sendPacketDisconnect() { - if (protocolVersion <= 3) { - packetSendCallback.accept(new CPacketVoiceSignalDisconnectV3EAG()); - } else { - packetSendCallback.accept(new CPacketVoiceSignalDisconnectV4EAG()); + if (packetSendCallback != null) { + if (protocolVersion <= 3) { + packetSendCallback.accept(new CPacketVoiceSignalDisconnectV3EAG()); + } else { + packetSendCallback.accept(new CPacketVoiceSignalDisconnectV4EAG()); + } } } public static void sendPacketDisconnectPeer(EaglercraftUUID peerId) { - if (protocolVersion <= 3) { - packetSendCallback.accept(new CPacketVoiceSignalDisconnectV3EAG(true, peerId.msb, peerId.lsb)); - } else { - packetSendCallback.accept(new CPacketVoiceSignalDisconnectPeerV4EAG(peerId.msb, peerId.lsb)); + if (packetSendCallback != null) { + if (protocolVersion <= 3) { + packetSendCallback.accept(new CPacketVoiceSignalDisconnectV3EAG(true, peerId.msb, peerId.lsb)); + } else { + packetSendCallback.accept(new CPacketVoiceSignalDisconnectPeerV4EAG(peerId.msb, peerId.lsb)); + } } } public static void sendPacketICE(EaglercraftUUID peerId, String candidate) { - packetSendCallback.accept(new CPacketVoiceSignalICEEAG(peerId.msb, peerId.lsb, candidate)); + if (packetSendCallback != null) { + packetSendCallback.accept(new CPacketVoiceSignalICEEAG(peerId.msb, peerId.lsb, candidate)); + } } public static void sendPacketRequest(EaglercraftUUID peerId) { - packetSendCallback.accept(new CPacketVoiceSignalRequestEAG(peerId.msb, peerId.lsb)); + if (packetSendCallback != null) { + packetSendCallback.accept(new CPacketVoiceSignalRequestEAG(peerId.msb, peerId.lsb)); + } } private static void sendPacketRequestIfNeeded(EaglercraftUUID uuid) { @@ -308,7 +330,6 @@ public class VoiceClientController { return; if (channel != EnumVoiceChannelType.NONE) PlatformVoiceClient.initializeDevices(); - PlatformVoiceClient.resetPeerStates(); if (channel == EnumVoiceChannelType.NONE) { for (EaglercraftUUID uuid : nearbyPlayers) { PlatformVoiceClient.signalDisconnect(uuid, false); @@ -387,6 +408,11 @@ public class VoiceClientController { activateVoice((mc.currentScreen == null || !mc.currentScreen.blockPTTKey()) && Keyboard.isKeyDown(mc.gameSettings.voicePTTKey)); + if (mc.isSingleplayer() && !LANServerController.isHostingLAN()) { + setVoiceChannel(EnumVoiceChannelType.NONE); + return; + } + if (mc.theWorld != null && mc.thePlayer != null) { HashSet seenPlayers = new HashSet<>(); for (EntityPlayer player : mc.theWorld.playerEntities) { @@ -416,12 +442,4 @@ public class VoiceClientController { public static final void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { PlatformVoiceClient.updateVoicePosition(uuid, x, y, z); } - - private static boolean voicePeerErrored() { - return PlatformVoiceClient.getPeerState() == EnumVoiceChannelPeerState.FAILED - || PlatformVoiceClient.getPeerStateConnect() == EnumVoiceChannelPeerState.FAILED - || PlatformVoiceClient.getPeerStateInitial() == EnumVoiceChannelPeerState.FAILED - || PlatformVoiceClient.getPeerStateDesc() == EnumVoiceChannelPeerState.FAILED - || PlatformVoiceClient.getPeerStateIce() == EnumVoiceChannelPeerState.FAILED; - } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java index 6dc807b5..be57af8e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/VoiceTagRenderer.java @@ -16,7 +16,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -28,7 +28,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class VoiceTagRenderer { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenPhishingWarning.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenPhishingWarning.java index 4168ced0..33d0b95c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenPhishingWarning.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenPhishingWarning.java @@ -10,7 +10,7 @@ import net.minecraft.util.ResourceLocation; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.minecraft.util.ResourceLocation; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenPhishingWarning extends GuiScreen { @@ -38,6 +38,7 @@ public class GuiScreenPhishingWarning extends GuiScreen { this.cont = cont; } + @Override protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.id == 0) { if (hasCheckedBox && !mc.gameSettings.hasHiddenPhishWarning) { @@ -49,6 +50,7 @@ public class GuiScreenPhishingWarning extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float pt) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, EnumChatFormatting.BOLD + I18n.format("webviewPhishingWaring.title"), @@ -91,6 +93,7 @@ public class GuiScreenPhishingWarning extends GuiScreen { super.drawScreen(mx, my, pt); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 134, diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenRecieveServerInfo.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenRecieveServerInfo.java index d4897125..8c03a525 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenRecieveServerInfo.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenRecieveServerInfo.java @@ -24,7 +24,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -36,7 +36,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenRecieveServerInfo extends GuiScreen { @@ -53,12 +53,14 @@ public class GuiScreenRecieveServerInfo extends GuiScreen { this.expectHash = expectHash; } + @Override public void actionPerformed(GuiButton button) { if (button.id == 0) { mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(fontRendererObj, I18n.format("recieveServerInfo.title"), this.width / 2, 70, 11184810); @@ -94,15 +96,18 @@ public class GuiScreenRecieveServerInfo extends GuiScreen { super.drawScreen(par1, par2, par3); } + @Override public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 6 + 106, I18n.format("gui.cancel"))); } + @Override protected boolean isPartOfPauseMenu() { return true; } + @Override public void updateScreen() { if (mc.thePlayer == null) { mc.displayGuiScreen(parent); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfo.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfo.java index b3501100..afcc957c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfo.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfo.java @@ -17,7 +17,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -29,7 +29,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenServerInfo extends GuiScreen { @@ -97,12 +97,14 @@ public class GuiScreenServerInfo extends GuiScreen { this.opts = opts; } + @Override public void actionPerformed(GuiButton btn) { if (btn.id == 0) { mc.displayGuiScreen(parent); } } + @Override public void drawScreen(int mx, int my, float pt) { drawDefaultBackground(); drawCenteredString(fontRendererObj, PauseMenuCustomizeState.serverInfoEmbedTitle == null ? "Server Info" @@ -110,6 +112,7 @@ public class GuiScreenServerInfo extends GuiScreen { super.drawScreen(mx, my, pt); } + @Override public void initGui() { ScaledResolution res = mc.scaledResolution; if (!isShowing) { @@ -122,10 +125,12 @@ public class GuiScreenServerInfo extends GuiScreen { buttonList.add(new GuiButton(0, (width - 200) / 2, height - 25, I18n.format("gui.done"))); } + @Override protected boolean isPartOfPauseMenu() { return true; } + @Override public void onGuiClosed() { if (isShowing) { isShowing = false; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfoDesktop.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfoDesktop.java index 7f447b73..707f2b5e 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfoDesktop.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/GuiScreenServerInfoDesktop.java @@ -9,7 +9,7 @@ import net.minecraft.client.resources.I18n; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.minecraft.client.resources.I18n; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GuiScreenServerInfoDesktop extends GuiScreen { @@ -38,6 +38,7 @@ public class GuiScreenServerInfoDesktop extends GuiScreen { this.opts = opts; } + @Override public void actionPerformed(GuiButton button) { if (button.id == 0) { String link = WebViewOverlayController.getFallbackURL(); @@ -49,6 +50,7 @@ public class GuiScreenServerInfoDesktop extends GuiScreen { } } + @Override public void drawScreen(int mx, int my, float pt) { drawDefaultBackground(); drawCenteredString(fontRendererObj, PauseMenuCustomizeState.serverInfoEmbedTitle, this.width / 2, 70, 16777215); @@ -60,6 +62,7 @@ public class GuiScreenServerInfoDesktop extends GuiScreen { super.drawScreen(mx, my, pt); } + @Override public void initGui() { buttonList.clear(); buttonList.add(btnOpen = new GuiButton(0, (width - 200) / 2, height / 6 + 110, @@ -69,14 +72,17 @@ public class GuiScreenServerInfoDesktop extends GuiScreen { new GuiButton(1, (width - 200) / 2, height / 6 + 140, I18n.format("fallbackWebViewScreen.exitButton"))); } + @Override protected boolean isPartOfPauseMenu() { return true; } + @Override public void onGuiClosed() { WebViewOverlayController.endFallbackServer(); } + @Override public void updateScreen() { ++timer; if (timer == 2) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/PermissionsCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/PermissionsCache.java index ba749c0c..51e6824c 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/PermissionsCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/PermissionsCache.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PermissionsCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/ServerInfoCache.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/ServerInfoCache.java index c3f73f4e..fbd31335 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/ServerInfoCache.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/ServerInfoCache.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketServerInf /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketServerInf * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ServerInfoCache { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/WebViewOverlayController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/WebViewOverlayController.java index 121a6c43..6d9b3cae 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/WebViewOverlayController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/webview/WebViewOverlayController.java @@ -8,7 +8,7 @@ import net.minecraft.client.gui.ScaledResolution; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import net.minecraft.client.gui.ScaledResolution; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WebViewOverlayController { diff --git a/src/main/java/net/starlikeclient/Culling.java b/src/main/java/net/starlikeclient/Culling.java new file mode 100644 index 00000000..a44698ef --- /dev/null +++ b/src/main/java/net/starlikeclient/Culling.java @@ -0,0 +1,133 @@ +package net.starlikeclient; + +import java.util.Iterator; + +import com.logisticscraft.occlusionculling.DataProvider; +import com.logisticscraft.occlusionculling.OcclusionCullingInstance; +import com.logisticscraft.occlusionculling.util.Vec3d; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; + +public class Culling { + private class CullingProvider implements DataProvider { + private final Minecraft mc = Minecraft.getMinecraft(); + + @Override + public boolean isOpaqueFullCube(int x, int y, int z) { + return this.mc.theWorld.getBlockState(new BlockPos(x, y, z)).getBlock().isOpaqueCube(); + } + + @Override + public boolean prepareChunk(int var1, int var2) { + return this.mc.theWorld != null; + } + } + + private static final Culling instance = new Culling(); + + public static Culling getInstance() { + return Culling.instance; + } + + private final OcclusionCullingInstance culling = new OcclusionCullingInstance( + StarlikeClient.Config.Culling.entityMaxTracingDistance, new CullingProvider()); + private final Minecraft mc = Minecraft.getMinecraft(); + public long lastPass = 0; + public int renderedEntities = 0; + public int culledEntities = 0; + public int renderedBlockEntities = 0; + public int culledBlockEntities = 0; + + public Culling() { + } + + public void update() { + if (this.mc.theWorld != null && this.mc.thePlayer != null && this.mc.thePlayer.ticksExisted > 0 + && this.mc.getRenderViewEntity() != null && !this.mc.thePlayer.isSpectator()) { + long startTime = EagRuntime.steadyTimeMillis(); + int renderedEntities = 0; + int culledEntities = 0; + int renderedBlockEntities = 0; + int culledBlockEntities = 0; + + Vec3 cameraPos = this.mc.gameSettings.thirdPersonView == 0 ? this.mc.thePlayer.getPositionEyes(0) + : this.mc.getRenderViewEntity().getPositionEyes(0); + + this.culling.resetCache(); + Vec3d aabbMin = new Vec3d(0, 0, 0); + Vec3d aabbMax = new Vec3d(0, 0, 0); + Vec3d viewerPosition = new Vec3d(cameraPos.xCoord, cameraPos.yCoord, cameraPos.zCoord); + + Iterator entityIterator = this.mc.theWorld.loadedEntityList.iterator(); + while (entityIterator.hasNext()) { + Entity entity = entityIterator.next(); + AxisAlignedBB boundingBox = entity.getEntityBoundingBox(); + if (entity != null + && !(entity instanceof EntityArmorStand && StarlikeClient.Config.Culling.skipMarkerArmorStands + && ((EntityArmorStand) entity).func_181026_s()) + && entity.getPositionVector() + .squareDistanceTo(cameraPos) <= StarlikeClient.Config.Culling.entityMaxTracingDistance + * StarlikeClient.Config.Culling.entityMaxTracingDistance + && boundingBox.maxX - boundingBox.minX <= StarlikeClient.Config.Culling.entityHitboxSizeLimit + && boundingBox.maxY - boundingBox.minY <= StarlikeClient.Config.Culling.entityHitboxSizeLimit + && boundingBox.maxZ - boundingBox.minZ <= StarlikeClient.Config.Culling.entityHitboxSizeLimit) { + aabbMin.set(boundingBox.minX, boundingBox.minY, boundingBox.minZ); + aabbMax.set(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ); + if (!this.culling.isAABBVisible(aabbMin, aabbMax, viewerPosition)) { + entity.shouldCull = true; + culledEntities++; + } else { + entity.shouldCull = false; + renderedEntities++; + } + } else { + entity.shouldCull = false; + renderedEntities++; + } + } + + Iterator tileEntityIterator = this.mc.theWorld.loadedTileEntityList.iterator(); + while (tileEntityIterator.hasNext()) { + TileEntity tileentity = tileEntityIterator.next(); + BlockPos blockpos = tileentity.getPos(); + if (tileentity != null + && !StarlikeClient.Config.Culling.blockEntityWhitelist + .contains(tileentity.getBlockType().getUnlocalizedName()) + && blockpos.distanceSq(cameraPos.xCoord, cameraPos.yCoord, cameraPos.zCoord) < 64 * 64) { + aabbMin.set(blockpos.getX(), blockpos.getY(), blockpos.getZ()); + aabbMax.set(blockpos.getX() + 1d, blockpos.getY() + 1d, blockpos.getZ() + 1d); + if (!this.culling.isAABBVisible(aabbMin, aabbMax, viewerPosition)) { + tileentity.shouldCull = true; + culledBlockEntities++; + } else { + tileentity.shouldCull = false; + renderedBlockEntities++; + } + ; + } else { + tileentity.shouldCull = false; + renderedBlockEntities++; + } + } + + this.renderedEntities = renderedEntities; + this.culledEntities = culledEntities; + this.renderedBlockEntities = renderedBlockEntities; + this.culledBlockEntities = culledBlockEntities; + this.lastPass = EagRuntime.steadyTimeMillis() - startTime; + } else { + this.lastPass = 0; + this.renderedEntities = 0; + this.culledEntities = 0; + this.renderedBlockEntities = 0; + this.culledBlockEntities = 0; + } + } +} diff --git a/src/main/java/net/starlikeclient/StarlikeClient.java b/src/main/java/net/starlikeclient/StarlikeClient.java new file mode 100644 index 00000000..7a9d25f0 --- /dev/null +++ b/src/main/java/net/starlikeclient/StarlikeClient.java @@ -0,0 +1,154 @@ +package net.starlikeclient; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; + +public class StarlikeClient { + /** + * + Settings for Starlike Client + */ + public static final class Config { + /** + * + Settings related to in-game commands + */ + public static final class Commands { + /** + * + Controls the maximum number of blocks changed when using `/clone` or + * `/fill`. + * + * @default 32768 + */ + public static final int commandModificationBlockLimit = 65536; + } + + /** + * + Culling configuration + */ + public static final class Culling { + /** + * + Enables entity culling. Culls entities when they are not visible behind + * blocks. + */ + public static final boolean enableCulling = true; + + /** + * + Sets the maximum distance for entity tracing. + */ + public static final int entityMaxTracingDistance = 128; + + /** + * + Maximum hitbox size for entity culling. If the entity is larger than this, + * the game will skip culling it. + */ + public static final int entityHitboxSizeLimit = 64; + + /** + * + Skips culling marker armor stands. + */ + public static final boolean skipMarkerArmorStands = true; + + /** + * + Renders name tags even when entities are culled. + */ + public static final boolean renderNameTagsOnCulledEntities = true; + + /** + * + Whitelist of block entities that should not be culled. + */ + public static final Set blockEntityWhitelist = new HashSet<>(Arrays.asList("minecraft:beacon")); + } + + /** + * + Features for the client + */ + public static final class Features { + /** + * + Enables or disables joining Multiplayer servers from the main menu. + */ + public static final boolean enableMultiplayer = false; + } + + /** + * + General settings for the client + */ + public static final class General { + /** + * + Marks if this is a development build. Adds experimental or beta features. + */ + public static final Boolean isDevBuild = false; + + /** + * + Snapshots use the format "YYwWWn", following Mojang's snapshot naming + * convention. + */ + public static final String devBuildVersion = "0.4.0"; + + /** + * + Release candidate version, set to -1 if not + */ + public static final int releaseCandidateVersion = -1; + + /** + * + Name of the project fork for branding. + */ + public static final String projectForkName = "Starlike Client"; + + /** + * + Version of the project fork, adds "-beta" if dev. + */ + public static final String projectForkVersion = "0.4.0" + + (releaseCandidateVersion >= 0 ? ("-rc" + releaseCandidateVersion) + : isDevBuild ? ("-beta " + devBuildVersion) : ""); + + /** + * + Contributors or vendors of the project fork. + */ + public static final String projectForkVendor = "SpeedSlicer and zumbiepig"; + + /** + * + Warning that renders on the top of the screen when this is a dev build. + */ + public static final String devBuildWarning = "Starlike Dev Build " + devBuildVersion + " - BUGS MAY OCCUR!"; + + /** + * + Main menu strings on the left. + */ + public static final String[] mainMenuStringLeft = new String[] { + "Minecraft 1.8.8" /* + (Minecraft.getMinecraft().isDemo() ? " Demo" : "") */ + "*", + EaglercraftVersion.projectOriginName + " " + EaglercraftVersion.projectOriginRevision + "-" + + EaglercraftVersion.projectOriginVersion + " [" + EagRuntime.getPlatformType().getName() + + "]", + projectForkName + " " + projectForkVersion }; + + /** + * + Main menu strings on the right. + */ + public static final String[] mainMenuStringRight = new String[] { + "Copyright Mojang AB. Do not distribute!" }; + + /** + * + Sets the default filename prefix for screen recordings. + */ + public static final String screenRecordingFilePrefix = projectForkName + " " + projectForkVersion; + } + } + + /** + * + Runs during Minecraft.init() + */ + public static void init() { + } + + /** + * + Runs during Minecraft.runTick() + */ + public static void runTick() { + if (StarlikeClient.Config.Culling.enableCulling) { + Culling.getInstance().update(); + } + } +} diff --git a/src/main/java/net/starlikeclient/StarlikeSettings.java b/src/main/java/net/starlikeclient/StarlikeSettings.java deleted file mode 100644 index b88ee74a..00000000 --- a/src/main/java/net/starlikeclient/StarlikeSettings.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.starlikeclient; - -public class StarlikeSettings { - /* - * Block id limit - * - * Default value: 4096 - */ - public static final int blockIdLimit = 4096; - - /* - * Controls the maximum number of blocks changed when using `/clone` or `/fill`. - * - * Default value: 32768 - */ - public static final int commandModificationBlockLimit = 65536; -} \ No newline at end of file diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDrop.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDrop.java index 7a8745d1..a675faea 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDrop.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDrop.java @@ -32,4 +32,4 @@ public class BlockCustomDrop extends Block { public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return this.itemDropped; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDropOre.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDropOre.java index 9850e6d6..f295adfe 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDropOre.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockCustomDropOre.java @@ -60,7 +60,7 @@ public class BlockCustomDropOre extends BlockCustomDrop { @Override public int quantityDroppedWithBonus(int i, EaglercraftRandom random) { if (i > 0 && Item.getItemFromBlock(this) != this - .getItemDropped((IBlockState) this.getBlockState().getValidStates().iterator().next(), random, i)) { + .getItemDropped(this.getBlockState().getValidStates().iterator().next(), random, i)) { int j = random.nextInt(i + 2) - 1; if (j < 0) { j = 0; @@ -71,4 +71,4 @@ public class BlockCustomDropOre extends BlockCustomDrop { return this.quantityDropped(random); } } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockDeepslate.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockDeepslate.java index f06dd26b..156bd10d 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockDeepslate.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockDeepslate.java @@ -17,7 +17,8 @@ public class BlockDeepslate extends Block { this.setCreativeTab(CreativeTabs.tabStarlike); } + @Override public Item getItemDropped(IBlockState iblockstate, EaglercraftRandom var2, int var3) { return this == Blocks.deepslate ? Item.getItemFromBlock(Blocks.cobbled_deepslate) : Item.getItemFromBlock(this); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockFabricator.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockFabricator.java index 60ad8492..40d6e0a7 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockFabricator.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockFabricator.java @@ -27,32 +27,41 @@ public class BlockFabricator extends Block { this.position = pos; } + @Override public Container createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { return new ContainerFabricator(inventoryplayer, this.world, this.position); } + @Override public IChatComponent getDisplayName() { return new ChatComponentTranslation(Blocks.fabricator.getUnlocalizedName() + ".name", new Object[0]); } + @Override public String getGuiID() { return "starlike:fabricator"; } + @Override public String getName() { return null; } + @Override public boolean hasCustomName() { return false; } } - protected BlockFabricator() { + public BlockFabricator() { super(Material.wood); + this.setHardness(5.0F); + this.setResistance(10.0F); + this.setStepSound(Block.soundTypePiston); this.setCreativeTab(CreativeTabs.tabStarlike); } + @Override public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState var3, EntityPlayer entityplayer, EnumFacing var5, float var6, float var7, float var8) { if (world.isRemote) { @@ -63,4 +72,4 @@ public class BlockFabricator extends Block { return true; } } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockMosaic.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockMosaic.java index 024cf0cf..7ddfb78a 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockMosaic.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockMosaic.java @@ -63,6 +63,7 @@ public class BlockMosaic extends Block { return this.meta; } + @Override public String getName() { return this.name; } @@ -104,7 +105,7 @@ public class BlockMosaic extends Block { */ @Override public int damageDropped(IBlockState iblockstate) { - return ((BlockMosaic.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); + return iblockstate.getValue(VARIANT).getMetadata(); } /** @@ -112,7 +113,7 @@ public class BlockMosaic extends Block { */ @Override public MapColor getMapColor(IBlockState iblockstate) { - return ((BlockMosaic.EnumType) iblockstate.getValue(VARIANT)).func_181070_c(); + return iblockstate.getValue(VARIANT).func_181070_c(); } /** @@ -120,7 +121,7 @@ public class BlockMosaic extends Block { */ @Override public int getMetaFromState(IBlockState iblockstate) { - return ((BlockMosaic.EnumType) iblockstate.getValue(VARIANT)).getMetadata(); + return iblockstate.getValue(VARIANT).getMetadata(); } /** @@ -138,9 +139,8 @@ public class BlockMosaic extends Block { @Override public void getSubBlocks(Item item, CreativeTabs var2, List list) { BlockMosaic.EnumType[] types = BlockMosaic.EnumType.META_LOOKUP; - for (int i = 0; i < types.length; ++i) { - list.add(new ItemStack(item, 1, types[i].getMetadata())); + for (EnumType type : types) { + list.add(new ItemStack(item, 1, type.getMetadata())); } - } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockSmithing.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockSmithing.java index 16538f70..bb6c9db6 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockSmithing.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockSmithing.java @@ -5,12 +5,46 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.BlockPos; +import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumFacing; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.IInteractionObject; import net.minecraft.world.World; -import net.starlikeclient.minecraft.guis.GuiHelper; +import net.starlikeclient.minecraft.guis.inventory.ContainerSmithing; public class BlockSmithing extends Block { + public class InterfaceSmithing implements IInteractionObject { + public InterfaceSmithing() { + } + + @Override + public ContainerSmithing createContainer(InventoryPlayer inventoryplayer, EntityPlayer var2) { + return new ContainerSmithing(inventoryplayer); + } + + @Override + public IChatComponent getDisplayName() { + return new ChatComponentTranslation(BlockSmithing.this.getUnlocalizedName() + ".name", new Object[0]); + } + + @Override + public String getGuiID() { + return "starlike:smithing_table"; + } + + @Override + public String getName() { + return null; + } + + @Override + public boolean hasCustomName() { + return false; + } + } + public BlockSmithing() { super(Material.wood); this.setHardness(2.5F); @@ -18,9 +52,12 @@ public class BlockSmithing extends Block { this.setCreativeTab(CreativeTabs.tabStarlike); } - public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, - EnumFacing side, float hitX, float hitY, float hitZ) { - GuiHelper.openGuiSmithing(worldIn, pos, playerIn); + @Override + public boolean onBlockActivated(World world, BlockPos var2, IBlockState var3, EntityPlayer entityplayer, + EnumFacing var5, float var6, float var7, float var8) { + if (!world.isRemote) { + entityplayer.displayGui(new BlockSmithing.InterfaceSmithing()); + } return true; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/blocks/BlockSteelGrate.java b/src/main/java/net/starlikeclient/minecraft/blocks/BlockSteelGrate.java index 7fd50546..5b93a8ee 100644 --- a/src/main/java/net/starlikeclient/minecraft/blocks/BlockSteelGrate.java +++ b/src/main/java/net/starlikeclient/minecraft/blocks/BlockSteelGrate.java @@ -24,4 +24,4 @@ public class BlockSteelGrate extends Block { public boolean isOpaqueCube() { return false; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/commands/CommandGm.java b/src/main/java/net/starlikeclient/minecraft/commands/CommandGm.java index 4b41a494..2d2d3f54 100644 --- a/src/main/java/net/starlikeclient/minecraft/commands/CommandGm.java +++ b/src/main/java/net/starlikeclient/minecraft/commands/CommandGm.java @@ -17,22 +17,27 @@ public class CommandGm extends CommandBase { this.gmName = gmId == 0 ? "s" : gmId == 1 ? "c" : gmId == 2 ? "a" : gmId == 3 ? "sp" : null; } + @Override public String getCommandName() { return "gm" + this.gmName; } + @Override public String getCommandUsage(ICommandSender var1) { return (new ChatComponentTranslation("commands.gm.usage", new Object[] { this.gmName }).getUnformattedText()); } + @Override public int getRequiredPermissionLevel() { return 2; } + @Override public boolean isUsernameIndex(String[] args, int index) { return index == 1; } + @Override public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException { if (parArrayOfString.length < 0) { throw new WrongUsageException("commands.gm.usage", new Object[] { this.gmName }); @@ -58,4 +63,4 @@ public class CommandGm extends CommandBase { } } } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/crafting/RecipesBackpackUpgrade.java b/src/main/java/net/starlikeclient/minecraft/crafting/RecipesBackpackUpgrade.java new file mode 100644 index 00000000..8a57e255 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/crafting/RecipesBackpackUpgrade.java @@ -0,0 +1,112 @@ +package net.starlikeclient.minecraft.crafting; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class RecipesBackpackUpgrade implements IRecipe { + private static class BackpackUpgradeRecipe { + private final Item material; + private final Item result; + + BackpackUpgradeRecipe(Item material, Item result) { + this.material = material; + this.result = result; + } + + public Item getMaterial() { + return this.material; + } + + public Item getResult() { + return this.result; + } + } + + private static final Map backpackRecipes = new HashMap<>( + Map.of(Item.getItemFromBlock(Blocks.chest), + new BackpackUpgradeRecipe(Items.leather, Items.leather_backpack), Items.leather_backpack, + new BackpackUpgradeRecipe(Item.getItemFromBlock(Blocks.steel_block), Items.iron_backpack), + Items.iron_backpack, + new BackpackUpgradeRecipe(Item.getItemFromBlock(Blocks.diamond_block), Items.diamond_backpack), + Item.getItemFromBlock(Blocks.ender_chest), + new BackpackUpgradeRecipe(Item.getItemFromBlock(Blocks.dragonite_block), Items.ender_backpack))); + + /** + * + Returns an Item that is the result of this recipe + */ + @Override + public ItemStack getCraftingResult(InventoryCrafting inventorycrafting) { + ItemStack centerSlotItem = inventorycrafting.getStackInSlot(4); + ItemStack result = new ItemStack(backpackRecipes.get(centerSlotItem.getItem()).getResult(), 1, + centerSlotItem.getMetadata()); + if (centerSlotItem.hasTagCompound()) { + result.setTagCompound((NBTTagCompound) centerSlotItem.getTagCompound().copy()); + } + if (centerSlotItem.hasDisplayName()) { + result.setStackDisplayName(centerSlotItem.getDisplayName()); + } + return result; + } + + @Override + public ItemStack getRecipeOutput() { + return null; + } + + /** + * + Returns the size of the recipe area + */ + @Override + public int getRecipeSize() { + return 9; + } + + @Override + public ItemStack[] getRemainingItems(InventoryCrafting inventorycrafting) { + ItemStack[] aitemstack = new ItemStack[inventorycrafting.getSizeInventory()]; + + for (int i = 0; i < aitemstack.length; ++i) { + ItemStack itemstack = inventorycrafting.getStackInSlot(i); + if (itemstack != null && itemstack.getItem().hasContainerItem()) { + aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); + } + } + + return aitemstack; + } + + /** + * + Used to check if a recipe matches current crafting inventory + */ + @Override + public boolean matches(InventoryCrafting inventorycrafting, World world) { + if (inventorycrafting.getSizeInventory() == 9) { + ItemStack itemstack = inventorycrafting.getStackInSlot(4); + if (itemstack != null && backpackRecipes.containsKey(itemstack.getItem())) { + BackpackUpgradeRecipe upgradeRecipe = backpackRecipes.get(itemstack.getItem()); + Item recipeMaterial = upgradeRecipe.getMaterial(); + + for (int i = 0; i < 9; ++i) { + if (i == 4) { + continue; + } + ItemStack itemstack1 = inventorycrafting.getStackInSlot(i); + if (itemstack1 == null || itemstack1.getItem() != recipeMaterial) { + return false; + } + } + return true; + } + } + return false; + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAIEndCreeperSwell.java b/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAIEndCreeperSwell.java deleted file mode 100644 index 60ebcde8..00000000 --- a/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAIEndCreeperSwell.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.starlikeclient.minecraft.entities.ai; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.starlikeclient.minecraft.entities.entity.EntityEndCreeper; - -public class EntityAIEndCreeperSwell extends EntityAIBase { - EntityEndCreeper swellingCreeper; - EntityLivingBase creeperAttackTarget; - - public EntityAIEndCreeperSwell(EntityEndCreeper entityEndCreeper) { - this.swellingCreeper = entityEndCreeper; - this.setMutexBits(1); - } - - /** - * + Resets the task - */ - public void resetTask() { - this.creeperAttackTarget = null; - } - - /** - * + Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); - return this.swellingCreeper.getCreeperState() > 0 - || entitylivingbase != null && this.swellingCreeper.getDistanceSqToEntity(entitylivingbase) < 9.0D; - } - - /** - * + Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.swellingCreeper.getNavigator().clearPathEntity(); - this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); - } - - /** - * + Updates the task - */ - public void updateTask() { - if (this.creeperAttackTarget == null) { - this.swellingCreeper.setCreeperState(-1); - } else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D) { - this.swellingCreeper.setCreeperState(-1); - } else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) { - this.swellingCreeper.setCreeperState(-1); - } else { - this.swellingCreeper.setCreeperState(1); - } - } -} \ No newline at end of file diff --git a/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAINetherCreeperSwell.java b/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAINetherCreeperSwell.java deleted file mode 100644 index 1f7f5fde..00000000 --- a/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAINetherCreeperSwell.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.starlikeclient.minecraft.entities.ai; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.starlikeclient.minecraft.entities.entity.EntityNetherCreeper; - -public class EntityAINetherCreeperSwell extends EntityAIBase { - EntityNetherCreeper swellingCreeper; - EntityLivingBase creeperAttackTarget; - - public EntityAINetherCreeperSwell(EntityNetherCreeper entityNetherCreeper) { - this.swellingCreeper = entityNetherCreeper; - this.setMutexBits(1); - } - - /** - * + Resets the task - */ - public void resetTask() { - this.creeperAttackTarget = null; - } - - /** - * + Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); - return this.swellingCreeper.getCreeperState() > 0 - || entitylivingbase != null && this.swellingCreeper.getDistanceSqToEntity(entitylivingbase) < 9.0D; - } - - /** - * + Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.swellingCreeper.getNavigator().clearPathEntity(); - this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); - } - - /** - * + Updates the task - */ - public void updateTask() { - if (this.creeperAttackTarget == null) { - this.swellingCreeper.setCreeperState(-1); - } else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D) { - this.swellingCreeper.setCreeperState(-1); - } else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) { - this.swellingCreeper.setCreeperState(-1); - } else { - this.swellingCreeper.setCreeperState(1); - } - } -} \ No newline at end of file diff --git a/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAIPlaceholder.java b/src/main/java/net/starlikeclient/minecraft/entities/ai/EntityAIPlaceholder.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityEndCreeper.java b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityEndCreeper.java index 80ad3c31..ca81392c 100644 --- a/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityEndCreeper.java +++ b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityEndCreeper.java @@ -1,299 +1,30 @@ package net.starlikeclient.minecraft.entities.entity; -import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; -import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; -import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIAvoidEntity; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityEndermite; import net.minecraft.init.Items; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import net.starlikeclient.minecraft.entities.ai.EntityAIEndCreeperSwell; -public class EntityEndCreeper extends EntityMob { - private int lastActiveTime; - private int timeSinceIgnited; - private int fuseTime = 30; - /** - * + Explosion radius for this creeper. - */ - private int explosionRadius = 12; - private int field_175494_bm = 0; +public class EntityEndCreeper extends EntityCreeper { + private int fuseTime = 26; + private int explosionRadius = 5; public EntityEndCreeper(World worldIn) { super(worldIn); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIEndCreeperSwell(this)); - this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D)); - this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, false)); - this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); - this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityEndermite.class, 6.0F, 1.0D, 1.2D)); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3D); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D); - - } - - public boolean attackEntityAsMob(Entity var1) { - return true; - } - - protected void entityInit() { - super.entityInit(); - this.dataWatcher.addObject(16, Byte.valueOf((byte) -1)); - this.dataWatcher.addObject(17, Byte.valueOf((byte) 0)); - this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); - } - - /** - * + Creates an explosion as determined by this creeper's power and explosion - * radius. - */ - private void explode() { - if (!this.worldObj.isRemote) { - boolean flag = this.worldObj.getGameRules().getBoolean("mobGriefing"); - float f = this.getPowered() ? 2.0F : 1.0F; - this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float) this.explosionRadius * f, - flag); - this.setDead(); - } - - } - - public void fall(float f, float f1) { - super.fall(f, f1); - this.timeSinceIgnited = (int) ((float) this.timeSinceIgnited + f * 1.5F); - if (this.timeSinceIgnited > this.fuseTime - 5) { - this.timeSinceIgnited = this.fuseTime - 5; - } - - } - - public void func_175493_co() { - ++this.field_175494_bm; - } - - /** - * + Params: (Float)Render tick. Returns the intensity of the creeper's flash - * when it is ignited. - */ - public float getCreeperFlashIntensity(float parFloat1) { - return ((float) this.lastActiveTime + (float) (this.timeSinceIgnited - this.lastActiveTime) * parFloat1) - / (float) (this.fuseTime - 2); - } - - /** - * + Returns the current state of creeper, -1 is idle, 1 is 'in fuse' - */ - public int getCreeperState() { - return this.dataWatcher.getWatchableObjectByte(16); - } - - /** - * + Returns the sound this mob makes on death. - */ - protected String getDeathSound() { - return "mob.creeper.death"; + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(24.0D); } + @Override protected Item getDropItem() { - return Items.ender_eye; + return Items.ender_pearl; } - - protected float getEaglerDynamicLightsValueSimple(float partialTicks) { - float f = super.getEaglerDynamicLightsValueSimple(partialTicks); - float ff = getCreeperFlashIntensity(partialTicks); - if ((int) (ff * 10.0F) % 2 != 0) { - f = Math.min(f + 0.5f, 1.15f); - } - return f; - } - - /** - * + Returns the sound this mob makes when it is hurt. - */ - protected String getHurtSound() { - return "mob.creeper.say"; - } - - /** - * + The maximum height from where the entity is alowed to jump (used in - * pathfinder) - */ - public int getMaxFallHeight() { - return this.getAttackTarget() == null ? 3 : 3 + (int) (this.getHealth() - 1.0F); - } - - /** - * + Returns true if the creeper is powered by a lightning bolt. - */ - public boolean getPowered() { - return this.dataWatcher.getWatchableObjectByte(17) == 1; - } - - public boolean hasIgnited() { - return this.dataWatcher.getWatchableObjectByte(18) != 0; - } - - public void ignite() { - this.dataWatcher.updateObject(18, Byte.valueOf((byte) 1)); - } - - /** - * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets - * into the saddle on a pig. - */ - protected boolean interact(EntityPlayer entityplayer) { - ItemStack itemstack = entityplayer.inventory.getCurrentItem(); - if (itemstack != null && itemstack.getItem() == Items.flint_and_steel) { - this.worldObj.playSoundEffect(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "fire.ignite", 1.0F, - this.rand.nextFloat() * 0.4F + 0.8F); - entityplayer.swingItem(); - if (!this.worldObj.isRemote) { - this.ignite(); - itemstack.damageItem(1, entityplayer); - return true; - } - } - - return super.interact(entityplayer); - } - - /** - * + Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() { - return this.field_175494_bm < 1 && this.worldObj.getGameRules().getBoolean("doMobLoot"); - } - - /** - * + Called when the mob's health reaches 0. - */ - public void onDeath(DamageSource damagesource) { - super.onDeath(damagesource); - if (damagesource.getEntity() instanceof EntitySkeleton) { - int i = Item.getIdFromItem(Items.record_13); - int j = Item.getIdFromItem(Items.record_wait); - int k = i + this.rand.nextInt(j - i + 1); - this.dropItem(Item.getItemById(k), 1); - } else if (damagesource.getEntity() instanceof EntityEndCreeper && damagesource.getEntity() != this - && ((EntityEndCreeper) damagesource.getEntity()).getPowered() - && ((EntityEndCreeper) damagesource.getEntity()).isAIEnabled()) { - ((EntityEndCreeper) damagesource.getEntity()).func_175493_co(); - this.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); - } - - } - - /** - * + Called when a lightning bolt hits the entity. - */ - public void onStruckByLightning(EntityLightningBolt entitylightningbolt) { - super.onStruckByLightning(entitylightningbolt); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); - } - - /** - * + Called to update the entity's position/logic. - */ - public void onUpdate() { - if (this.isEntityAlive()) { - this.lastActiveTime = this.timeSinceIgnited; - if (this.hasIgnited()) { - this.setCreeperState(1); - } - - int i = this.getCreeperState(); - if (i > 0 && this.timeSinceIgnited == 0) { - this.playSound("creeper.primed", 1.0F, 0.5F); - } - - this.timeSinceIgnited += i; - if (this.timeSinceIgnited < 0) { - this.timeSinceIgnited = 0; - } - - if (this.timeSinceIgnited >= this.fuseTime) { - this.timeSinceIgnited = this.fuseTime; - this.explode(); - } - } - - super.onUpdate(); - } - - /** - * + (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readEntityFromNBT(NBTTagCompound nbttagcompound) { - super.readEntityFromNBT(nbttagcompound); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) (nbttagcompound.getBoolean("powered") ? 1 : 0))); - if (nbttagcompound.hasKey("Fuse", 99)) { - this.fuseTime = nbttagcompound.getShort("Fuse"); - } - - if (nbttagcompound.hasKey("ExplosionRadius", 99)) { - this.explosionRadius = nbttagcompound.getByte("ExplosionRadius"); - } - - if (nbttagcompound.getBoolean("ignited")) { - this.ignite(); - } - - } - - protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, - double renderY, double renderZ, float partialTicks, boolean isInFrustum) { - super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, - isInFrustum); - float ff = getCreeperFlashIntensity(partialTicks); - if ((int) (ff * 10.0F) % 2 != 0) { - float dynamicLightMag = 7.0f; - DynamicLightManager.renderDynamicLight("entity_" + getEntityId() + "_creeper_flash", entityX, entityY + 1.0, - entityZ, dynamicLightMag, dynamicLightMag * 0.7792f, dynamicLightMag * 0.618f, false); - DeferredStateManager.setEmissionConstant(1.0f); - } - } - - /** - * + Sets the state of creeper, -1 to idle and 1 to be 'in fuse' - */ - public void setCreeperState(int state) { - this.dataWatcher.updateObject(16, Byte.valueOf((byte) state)); - } - - /** - * + (abstract) Protected helper method to write subclass entity data to NBT. - */ - public void writeEntityToNBT(NBTTagCompound nbttagcompound) { - super.writeEntityToNBT(nbttagcompound); - if (this.dataWatcher.getWatchableObjectByte(17) == 1) { - nbttagcompound.setBoolean("powered", true); - } - - nbttagcompound.setShort("Fuse", (short) this.fuseTime); - nbttagcompound.setByte("ExplosionRadius", (byte) this.explosionRadius); - nbttagcompound.setBoolean("ignited", this.hasIgnited()); - } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityNetherCreeper.java b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityNetherCreeper.java index 5ff16d07..5184615a 100644 --- a/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityNetherCreeper.java +++ b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityNetherCreeper.java @@ -1,299 +1,30 @@ package net.starlikeclient.minecraft.entities.entity; -import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; -import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DynamicLightManager; -import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIAvoidEntity; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntityPigZombie; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; import net.minecraft.world.World; -import net.starlikeclient.minecraft.entities.ai.EntityAINetherCreeperSwell; -public class EntityNetherCreeper extends EntityMob { - private int lastActiveTime; - private int timeSinceIgnited; - private int fuseTime = 25; - /** - * + Explosion radius for this creeper. - */ - private int explosionRadius = 8; - private int field_175494_bm = 0; +public class EntityNetherCreeper extends EntityCreeper { + private int fuseTime = 28; + private int explosionRadius = 4; public EntityNetherCreeper(World worldIn) { super(worldIn); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAINetherCreeperSwell(this)); this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityPigZombie.class, 6.0F, 1.0D, 1.2D)); - this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, false)); - this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.tasks.addTask(7, new EntityAIAvoidEntity(this, EntityPigZombie.class, 6.0F, 1.0D, 1.2D)); - - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); - this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); } + @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3D); - } - - public boolean attackEntityAsMob(Entity var1) { - return true; - } - - protected void entityInit() { - super.entityInit(); - this.dataWatcher.addObject(16, Byte.valueOf((byte) -1)); - this.dataWatcher.addObject(17, Byte.valueOf((byte) 0)); - this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); - } - - /** - * + Creates an explosion as determined by this creeper's power and explosion - * radius. - */ - private void explode() { - if (!this.worldObj.isRemote) { - boolean flag = this.worldObj.getGameRules().getBoolean("mobGriefing"); - float f = this.getPowered() ? 3.0F : 1.0F; - this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float) this.explosionRadius * f, - flag); - this.setDead(); - } - - } - - public void fall(float f, float f1) { - super.fall(f, f1); - this.timeSinceIgnited = (int) ((float) this.timeSinceIgnited + f * 1.5F); - if (this.timeSinceIgnited > this.fuseTime - 5) { - this.timeSinceIgnited = this.fuseTime - 5; - } - - } - - public void func_175493_co() { - ++this.field_175494_bm; - } - - /** - * + Params: (Float)Render tick. Returns the intensity of the creeper's flash - * when it is ignited. - */ - public float getCreeperFlashIntensity(float parFloat1) { - return ((float) this.lastActiveTime + (float) (this.timeSinceIgnited - this.lastActiveTime) * parFloat1) - / (float) (this.fuseTime - 2); - } - - /** - * + Returns the current state of creeper, -1 is idle, 1 is 'in fuse' - */ - public int getCreeperState() { - return this.dataWatcher.getWatchableObjectByte(16); - } - - /** - * + Returns the sound this mob makes on death. - */ - protected String getDeathSound() { - return "mob.creeper.death"; + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(22.0D); } + @Override protected Item getDropItem() { return Items.blaze_powder; } - - protected float getEaglerDynamicLightsValueSimple(float partialTicks) { - float f = super.getEaglerDynamicLightsValueSimple(partialTicks); - float ff = getCreeperFlashIntensity(partialTicks); - if ((int) (ff * 10.0F) % 2 != 0) { - f = Math.min(f + 0.5f, 1.15f); - } - return f; - } - - /** - * + Returns the sound this mob makes when it is hurt. - */ - protected String getHurtSound() { - return "mob.creeper.say"; - } - - /** - * + The maximum height from where the entity is alowed to jump (used in - * pathfinder) - */ - public int getMaxFallHeight() { - return this.getAttackTarget() == null ? 3 : 3 + (int) (this.getHealth() - 1.0F); - } - - /** - * + Returns true if the creeper is powered by a lightning bolt. - */ - public boolean getPowered() { - return this.dataWatcher.getWatchableObjectByte(17) == 1; - } - - public boolean hasIgnited() { - return this.dataWatcher.getWatchableObjectByte(18) != 0; - } - - public void ignite() { - this.dataWatcher.updateObject(18, Byte.valueOf((byte) 1)); - } - - /** - * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets - * into the saddle on a pig. - */ - protected boolean interact(EntityPlayer entityplayer) { - ItemStack itemstack = entityplayer.inventory.getCurrentItem(); - if (itemstack != null && itemstack.getItem() == Items.flint_and_steel) { - this.worldObj.playSoundEffect(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "fire.ignite", 1.0F, - this.rand.nextFloat() * 0.4F + 0.8F); - entityplayer.swingItem(); - if (!this.worldObj.isRemote) { - this.ignite(); - itemstack.damageItem(1, entityplayer); - return true; - } - } - - return super.interact(entityplayer); - } - - /** - * + Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() { - return this.field_175494_bm < 1 && this.worldObj.getGameRules().getBoolean("doMobLoot"); - } - - /** - * + Called when the mob's health reaches 0. - */ - public void onDeath(DamageSource damagesource) { - super.onDeath(damagesource); - if (damagesource.getEntity() instanceof EntitySkeleton) { - int i = Item.getIdFromItem(Items.record_13); - int j = Item.getIdFromItem(Items.record_wait); - int k = i + this.rand.nextInt(j - i + 1); - this.dropItem(Item.getItemById(k), 1); - } else if (damagesource.getEntity() instanceof EntityNetherCreeper && damagesource.getEntity() != this - && ((EntityNetherCreeper) damagesource.getEntity()).getPowered() - && ((EntityNetherCreeper) damagesource.getEntity()).isAIEnabled()) { - ((EntityNetherCreeper) damagesource.getEntity()).func_175493_co(); - this.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); - } - - } - - /** - * + Called when a lightning bolt hits the entity. - */ - public void onStruckByLightning(EntityLightningBolt entitylightningbolt) { - super.onStruckByLightning(entitylightningbolt); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); - } - - /** - * + Called to update the entity's position/logic. - */ - public void onUpdate() { - if (this.isEntityAlive()) { - this.lastActiveTime = this.timeSinceIgnited; - if (this.hasIgnited()) { - this.setCreeperState(1); - } - - int i = this.getCreeperState(); - if (i > 0 && this.timeSinceIgnited == 0) { - this.playSound("creeper.primed", 1.0F, 0.5F); - } - - this.timeSinceIgnited += i; - if (this.timeSinceIgnited < 0) { - this.timeSinceIgnited = 0; - } - - if (this.timeSinceIgnited >= this.fuseTime) { - this.timeSinceIgnited = this.fuseTime; - this.explode(); - } - } - - super.onUpdate(); - } - - /** - * + (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readEntityFromNBT(NBTTagCompound nbttagcompound) { - super.readEntityFromNBT(nbttagcompound); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) (nbttagcompound.getBoolean("powered") ? 1 : 0))); - if (nbttagcompound.hasKey("Fuse", 99)) { - this.fuseTime = nbttagcompound.getShort("Fuse"); - } - - if (nbttagcompound.hasKey("ExplosionRadius", 99)) { - this.explosionRadius = nbttagcompound.getByte("ExplosionRadius"); - } - - if (nbttagcompound.getBoolean("ignited")) { - this.ignite(); - } - - } - - protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, - double renderY, double renderZ, float partialTicks, boolean isInFrustum) { - super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, - isInFrustum); - float ff = getCreeperFlashIntensity(partialTicks); - if ((int) (ff * 10.0F) % 2 != 0) { - float dynamicLightMag = 7.0f; - DynamicLightManager.renderDynamicLight("entity_" + getEntityId() + "_creeper_flash", entityX, entityY + 1.0, - entityZ, dynamicLightMag, dynamicLightMag * 0.7792f, dynamicLightMag * 0.618f, false); - DeferredStateManager.setEmissionConstant(1.0f); - } - } - - /** - * + Sets the state of creeper, -1 to idle and 1 to be 'in fuse' - */ - public void setCreeperState(int state) { - this.dataWatcher.updateObject(16, Byte.valueOf((byte) state)); - } - - /** - * + (abstract) Protected helper method to write subclass entity data to NBT. - */ - public void writeEntityToNBT(NBTTagCompound nbttagcompound) { - super.writeEntityToNBT(nbttagcompound); - if (this.dataWatcher.getWatchableObjectByte(17) == 1) { - nbttagcompound.setBoolean("powered", true); - } - - nbttagcompound.setShort("Fuse", (short) this.fuseTime); - nbttagcompound.setByte("ExplosionRadius", (byte) this.explosionRadius); - nbttagcompound.setBoolean("ignited", this.hasIgnited()); - } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityWatcher.java b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityWatcher.java new file mode 100644 index 00000000..daa90d06 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/entities/entity/EntityWatcher.java @@ -0,0 +1,161 @@ +package net.starlikeclient.minecraft.entities.entity; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; +import net.minecraft.block.Block; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackOnCollide; +import net.minecraft.entity.ai.EntityAIFleeSun; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; + +/** + * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source + * code. + * + * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod + * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team + * + * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights + * Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class EntityWatcher extends EntityMob { + float watcherWidth = 0.9f; + float watcherHeight = 1.3f; + EaglercraftRandom watcherRandom = new EaglercraftRandom(); + + public EntityWatcher(World worldIn) { + super(worldIn); + float randomSize = 0.5f + (watcherRandom.nextFloat() * (2.1f - 0.5f)); + + this.setSize(this.watcherWidth * randomSize, this.watcherHeight * randomSize); + ((PathNavigateGround) this.getNavigator()).setAvoidsWater(true); + + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false)); + + this.tasks.addTask(3, new EntityAIPanic(this, 2.0D)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); + this.tasks.addTask(6, new EntityAIFleeSun(this, 2.0D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + applyEntityAI(); + + } + + protected void applyEntityAI() { + this.targetTasks.addTask(0, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.tasks.addTask(8, new EntityAIAttackOnCollide(this, EntitySquid.class, 2.0D, true)); + + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntitySquid.class, true)); + + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(16.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3); + } + + /** + * + Drop 0-2 items of this living's type + */ + @Override + protected void dropFewItems(boolean var1, int i) { + int j = this.rand.nextInt(3) + this.rand.nextInt(1 + i); + + for (int k = 0; k < j; ++k) { + this.dropItem(Items.gold_nugget, 1); + } + + j = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + i); + + for (int l = 0; l < j; ++l) { + + this.dropItem(Items.emerald, 1); + + } + + } + + /** + * + Returns the sound this mob makes on death. + */ + @Override + protected String getDeathSound() { + return "mob.zombie.hurt"; + } + + @Override + protected Item getDropItem() { + return Items.emerald; + } + + @Override + public float getEyeHeight() { + return this.height; + } + + /** + * + Returns the sound this mob makes when it is hurt. + */ + @Override + protected String getHurtSound() { + return "mob.zombie.hurt"; + } + + /** + * + Returns the sound this mob makes while it's alive. + */ + @Override + protected String getLivingSound() { + return "mob.zombie.say"; + } + + /** + * + Returns the volume for the sounds this mob makes. + */ + @Override + protected float getSoundVolume() { + return 0.4F; + } + + /** + * + Called when a player interacts with a mob. e.g. gets milk from a cow, gets + * into the saddle on a pig. + */ + @Override + public boolean interact(EntityPlayer entityplayer) { + + return super.interact(entityplayer); + + } + + @Override + protected void playStepSound(BlockPos var1, Block var2) { + } + +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerEndCreeperCharge.java b/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerEndCreeperCharge.java index ccface96..3263a02c 100644 --- a/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerEndCreeperCharge.java +++ b/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerEndCreeperCharge.java @@ -9,23 +9,24 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ShadersRenderPassFuture; import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; +import net.minecraft.client.model.ModelCreeper; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.entity.layers.LayerRenderer; import net.minecraft.util.ResourceLocation; import net.starlikeclient.minecraft.entities.entity.EntityEndCreeper; -import net.starlikeclient.minecraft.entities.model.ModelEndCreeper; import net.starlikeclient.minecraft.entities.render.RenderEndCreeper; public class LayerEndCreeperCharge implements LayerRenderer { private static final ResourceLocation LIGHTNING_TEXTURE = new ResourceLocation( - "textures/entity/EndCreeper/EndCreeper_armor.png"); + "textures/entity/creeper/creeper_armor.png"); private final RenderEndCreeper EndCreeperRenderer; - private final ModelEndCreeper EndCreeperModel = new ModelEndCreeper(2.0F); + private final ModelCreeper EndCreeperModel = new ModelCreeper(2.0F); public LayerEndCreeperCharge(RenderEndCreeper EndCreeperRendererIn) { this.EndCreeperRenderer = EndCreeperRendererIn; } + @Override public void doRenderLayer(EntityEndCreeper entityEndCreeper, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (entityEndCreeper.getPowered()) { @@ -56,7 +57,7 @@ public class LayerEndCreeperCharge implements LayerRenderer { GlStateManager.matrixMode(GL_TEXTURE); GlStateManager.pushMatrix(); GlStateManager.loadIdentity(); - float f7 = (float) entityEndCreeper.ticksExisted + f2; + float f7 = entityEndCreeper.ticksExisted + f2; GlStateManager.translate(f7 * 0.01F, f7 * 0.01F, 0.0F); GlStateManager.matrixMode(GL_MODELVIEW); LayerEndCreeperCharge.this.EndCreeperRenderer.bindTexture(LIGHTNING_TEXTURE); @@ -87,7 +88,7 @@ public class LayerEndCreeperCharge implements LayerRenderer { this.EndCreeperRenderer.bindTexture(LIGHTNING_TEXTURE); GlStateManager.matrixMode(GL_TEXTURE); GlStateManager.loadIdentity(); - float f7 = (float) entityEndCreeper.ticksExisted + f2; + float f7 = entityEndCreeper.ticksExisted + f2; GlStateManager.translate(f7 * 0.01F, f7 * 0.01F, 0.0F); GlStateManager.matrixMode(GL_MODELVIEW); GlStateManager.enableBlend(); @@ -108,7 +109,8 @@ public class LayerEndCreeperCharge implements LayerRenderer { } } + @Override public boolean shouldCombineTextures() { return false; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerNetherCreeperCharge.java b/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerNetherCreeperCharge.java index 58ebfb3e..adabceb3 100644 --- a/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerNetherCreeperCharge.java +++ b/src/main/java/net/starlikeclient/minecraft/entities/layers/LayerNetherCreeperCharge.java @@ -9,23 +9,24 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.ShadersRenderPassFuture; import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; +import net.minecraft.client.model.ModelCreeper; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.entity.layers.LayerRenderer; import net.minecraft.util.ResourceLocation; import net.starlikeclient.minecraft.entities.entity.EntityNetherCreeper; -import net.starlikeclient.minecraft.entities.model.ModelNetherCreeper; import net.starlikeclient.minecraft.entities.render.RenderNetherCreeper; public class LayerNetherCreeperCharge implements LayerRenderer { private static final ResourceLocation LIGHTNING_TEXTURE = new ResourceLocation( - "textures/entity/nethercreeper/creeper_armor.png"); + "textures/entity/creeper/creeper_armor.png"); private final RenderNetherCreeper creeperRenderer; - private final ModelNetherCreeper creeperModel = new ModelNetherCreeper(2.0F); + private final ModelCreeper creeperModel = new ModelCreeper(2.0F); public LayerNetherCreeperCharge(RenderNetherCreeper renderNetherCreeper) { this.creeperRenderer = renderNetherCreeper; } + @Override public void doRenderLayer(EntityNetherCreeper entitycreeper, float f, float f1, float f2, float f3, float f4, float f5, float f6) { if (entitycreeper.getPowered()) { @@ -56,7 +57,7 @@ public class LayerNetherCreeperCharge implements LayerRenderer { - private static final ResourceLocation EndCreeperTextures = new ResourceLocation( - "starlike:textures/entity/endcreeper/creeper.png"); + private static final ResourceLocation creeperTextures = new ResourceLocation( + "starlike:textures/entity/endcreeper/endcreeper.png"); public RenderEndCreeper(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelEndCreeper(), 0.5F); + super(renderManagerIn, new ModelCreeper(), 0.5F); this.addLayer(new LayerEndCreeperCharge(this)); } + @Override public void doRender(EntityEndCreeper entityEndCreeper, double d0, double d1, double d2, float f, float f1) { float ff = entityEndCreeper.getCreeperFlashIntensity(f); if ((int) (ff * 10.0F) % 2 != 0) { @@ -35,6 +36,7 @@ public class RenderEndCreeper extends RenderLiving { * + Returns an ARGB int color back. Args: entityLiving, lightBrightness, * partialTickTime */ + @Override protected int getColorMultiplier(EntityEndCreeper entityEndCreeper, float var2, float f) { float f1 = entityEndCreeper.getCreeperFlashIntensity(f); if ((int) (f1 * 10.0F) % 2 == 0) { @@ -50,14 +52,16 @@ public class RenderEndCreeper extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityEndCreeper var1) { - return EndCreeperTextures; + return creeperTextures; } /** * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityEndCreeper entityEndCreeper, float f) { float f1 = entityEndCreeper.getCreeperFlashIntensity(f); float f2 = 1.0F + MathHelper.sin(f1 * 100.0F) * f1 * 0.01F; @@ -68,4 +72,4 @@ public class RenderEndCreeper extends RenderLiving { float f4 = (1.0F + f1 * 0.1F) / f2; GlStateManager.scale(f3, f4, f3); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/render/RenderNetherCreeper.java b/src/main/java/net/starlikeclient/minecraft/entities/render/RenderNetherCreeper.java index d48338a0..a7369750 100644 --- a/src/main/java/net/starlikeclient/minecraft/entities/render/RenderNetherCreeper.java +++ b/src/main/java/net/starlikeclient/minecraft/entities/render/RenderNetherCreeper.java @@ -2,23 +2,24 @@ package net.starlikeclient.minecraft.entities.render; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.lax1dude.eaglercraft.v1_8.opengl.ext.deferred.DeferredStateManager; +import net.minecraft.client.model.ModelCreeper; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.starlikeclient.minecraft.entities.entity.EntityNetherCreeper; import net.starlikeclient.minecraft.entities.layers.LayerNetherCreeperCharge; -import net.starlikeclient.minecraft.entities.model.ModelNetherCreeper; public class RenderNetherCreeper extends RenderLiving { private static final ResourceLocation creeperTextures = new ResourceLocation( - "starlike:textures/entity/nethercreeper/creeper.png"); + "starlike:textures/entity/nethercreeper/nethercreeper.png"); public RenderNetherCreeper(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelNetherCreeper(), 0.5F); + super(renderManagerIn, new ModelCreeper(), 0.5F); this.addLayer(new LayerNetherCreeperCharge(this)); } + @Override public void doRender(EntityNetherCreeper entitycreeper, double d0, double d1, double d2, float f, float f1) { float ff = entitycreeper.getCreeperFlashIntensity(f); if ((int) (ff * 10.0F) % 2 != 0) { @@ -35,6 +36,7 @@ public class RenderNetherCreeper extends RenderLiving { * + Returns an ARGB int color back. Args: entityLiving, lightBrightness, * partialTickTime */ + @Override protected int getColorMultiplier(EntityNetherCreeper entitycreeper, float var2, float f) { float f1 = entitycreeper.getCreeperFlashIntensity(f); if ((int) (f1 * 10.0F) % 2 == 0) { @@ -50,6 +52,7 @@ public class RenderNetherCreeper extends RenderLiving { * + Returns the location of an entity's texture. Doesn't seem to be called * unless you call Render.bindEntityTexture. */ + @Override protected ResourceLocation getEntityTexture(EntityNetherCreeper var1) { return creeperTextures; } @@ -58,6 +61,7 @@ public class RenderNetherCreeper extends RenderLiving { * + Allows the render to do any OpenGL state modifications necessary before the * model is rendered. Args: entityLiving, partialTickTime */ + @Override protected void preRenderCallback(EntityNetherCreeper entitycreeper, float f) { float f1 = entitycreeper.getCreeperFlashIntensity(f); float f2 = 1.0F + MathHelper.sin(f1 * 100.0F) * f1 * 0.01F; @@ -68,4 +72,4 @@ public class RenderNetherCreeper extends RenderLiving { float f4 = (1.0F + f1 * 0.1F) / f2; GlStateManager.scale(f3, f4, f3); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/entities/render/RenderWatcher.java b/src/main/java/net/starlikeclient/minecraft/entities/render/RenderWatcher.java new file mode 100644 index 00000000..ead086de --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/entities/render/RenderWatcher.java @@ -0,0 +1,61 @@ +package net.starlikeclient.minecraft.entities.render; + +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.starlikeclient.minecraft.entities.entity.EntityNetherCreeper; +import net.starlikeclient.minecraft.entities.entity.EntityWatcher; +import net.starlikeclient.minecraft.entities.model.ModelWatcher; + +public class RenderWatcher extends RenderLiving { + private static final ResourceLocation watcherTexture = new ResourceLocation( + "starlike:textures/entity/watcher/watcher.png"); + + public RenderWatcher(RenderManager renderManagerIn) { + super(renderManagerIn, new ModelWatcher(), 0.5F); + } + + @Override + public void doRender(EntityWatcher watcher, double d0, double d1, double d2, float f, float f1) { + + super.doRender(watcher, d0, d1, d2, f, f1); + + } + + /** + * + Returns an ARGB int color back. Args: entityLiving, lightBrightness, + * partialTickTime + */ + protected int getColorMultiplier(EntityNetherCreeper entitycreeper, float var2, float f) { + float f1 = entitycreeper.getCreeperFlashIntensity(f); + if ((int) (f1 * 10.0F) % 2 == 0) { + return 0; + } else { + int i = (int) (f1 * 0.2F * 255.0F); + i = MathHelper.clamp_int(i, 0, 255); + return i << 24 | 16777215; + } + } + + /** + * + Returns the location of an entity's texture. Doesn't seem to be called + * unless you call Render.bindEntityTexture. + */ + + @Override + protected ResourceLocation getEntityTexture(EntityWatcher var1) { + return watcherTexture; + } + + /** + * + Allows the render to do any OpenGL state modifications necessary before the + * model is rendered. Args: entityLiving, partialTickTime + */ + @Override + protected void preRenderCallback(EntityWatcher entityWatcher, float f) { + + GlStateManager.scale(1, 1, 1); + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/GuiHelper.java b/src/main/java/net/starlikeclient/minecraft/guis/GuiHelper.java deleted file mode 100644 index 322d5390..00000000 --- a/src/main/java/net/starlikeclient/minecraft/guis/GuiHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.starlikeclient.minecraft.guis; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.play.server.S2DPacketOpenWindow; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.world.World; -import net.starlikeclient.minecraft.guis.gui.GuiSmithing; -import net.starlikeclient.minecraft.guis.inventory.ContainerSmithing; - -public class GuiHelper { - public static void openGuiSmithing(World world, BlockPos pos, EntityPlayer player) { - if (world.isRemote) { - Minecraft.getMinecraft() - .displayGuiScreen(new GuiSmithing(new ContainerSmithing(player.inventory, world, pos))); - } else { - EntityPlayerMP playerMP = (EntityPlayerMP) player; - playerMP.getNextWindowId(); - playerMP.playerNetServerHandler.sendPacket(new S2DPacketOpenWindow(playerMP.currentWindowId, - "starlike:smithing_table", new ChatComponentText("Smithing Table"))); - playerMP.openContainer = new ContainerSmithing(player.inventory, world, pos); - playerMP.openContainer.windowId = playerMP.currentWindowId; - playerMP.openContainer.onCraftGuiOpened(playerMP); - } - } -} \ No newline at end of file diff --git a/src/main/java/net/starlikeclient/minecraft/guis/GuisStarlike.java b/src/main/java/net/starlikeclient/minecraft/guis/GuisStarlike.java new file mode 100644 index 00000000..433a0880 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/guis/GuisStarlike.java @@ -0,0 +1,33 @@ +package net.starlikeclient.minecraft.guis; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.IInteractionObject; +import net.starlikeclient.minecraft.guis.gui.GuiBackpack; +import net.starlikeclient.minecraft.guis.gui.GuiEnderBackpack; +import net.starlikeclient.minecraft.guis.gui.GuiSmithing; + +public class GuisStarlike { + public static void displayGui(IInteractionObject iinteractionobject, EntityPlayer entityplayer) { + if (!entityplayer.worldObj.isRemote) { + return; + } else { + String guiID = iinteractionobject.getGuiID(); + switch (guiID) { + case "starlike:smithing_table": + Minecraft.getMinecraft().displayGuiScreen(new GuiSmithing(entityplayer.inventory)); + break; + case "starlike:backpack": + Minecraft.getMinecraft().displayGuiScreen( + new GuiBackpack(entityplayer.inventory, entityplayer.getCurrentEquippedItem())); + break; + case "starlike:ender_backpack": + Minecraft.getMinecraft().displayGuiScreen( + new GuiEnderBackpack(entityplayer.inventory, entityplayer.getCurrentEquippedItem())); + break; + default: + throw new IllegalArgumentException("Unknown GUI ID: " + guiID); + } + } + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/crafting/FabricatorManager.java b/src/main/java/net/starlikeclient/minecraft/guis/crafting/FabricatorManager.java index 3be51d2e..faa6168e 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/crafting/FabricatorManager.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/crafting/FabricatorManager.java @@ -44,6 +44,7 @@ public class FabricatorManager { new Object[] { "///", " / ", "/_/", Character.valueOf('/'), Items.stick, Character.valueOf('_'), new ItemStack(Blocks.stone, 1, BlockStoneSlab.EnumType.STONE.getMetadata()) }); Collections.sort(this.recipes, new Comparator() { + @Override public int compare(IRecipe parIRecipe, IRecipe parIRecipe2) { return parIRecipe instanceof ShapelessRecipes && parIRecipe2 instanceof ShapedRecipes ? 1 : (parIRecipe2 instanceof ShapelessRecipes && parIRecipe instanceof ShapedRecipes ? -1 @@ -69,10 +70,9 @@ public class FabricatorManager { int j = 0; int k = 0; if (recipeComponents[i] instanceof String[]) { - String[] astring = (String[]) ((String[]) recipeComponents[i++]); + String[] astring = ((String[]) recipeComponents[i++]); - for (int l = 0; l < astring.length; ++l) { - String s2 = astring[l]; + for (String s2 : astring) { ++k; j = s2.length(); s = s + s2; @@ -123,8 +123,7 @@ public class FabricatorManager { public void addShapelessRecipe(ItemStack stack, Object... recipeComponents) { ArrayList arraylist = Lists.newArrayList(); - for (int i = 0; i < recipeComponents.length; ++i) { - Object object = recipeComponents[i]; + for (Object object : recipeComponents) { if (object instanceof ItemStack) { arraylist.add(((ItemStack) object).copy()); } else if (object instanceof Item) { @@ -146,8 +145,7 @@ public class FabricatorManager { * + Retrieves an ItemStack that has multiple recipes for it. */ public ItemStack findMatchingRecipe(InventoryCrafting worldIn, World parWorld) { - for (int i = 0, l = this.recipes.size(); i < l; ++i) { - IRecipe irecipe = this.recipes.get(i); + for (IRecipe irecipe : this.recipes) { if (irecipe.matches(worldIn, parWorld)) { return irecipe.getCraftingResult(worldIn); } @@ -157,8 +155,7 @@ public class FabricatorManager { } public ItemStack[] func_180303_b(InventoryCrafting worldIn, World parWorld) { - for (int i = 0, l = this.recipes.size(); i < l; ++i) { - IRecipe irecipe = this.recipes.get(i); + for (IRecipe irecipe : this.recipes) { if (irecipe.matches(worldIn, parWorld)) { return irecipe.getRemainingItems(worldIn); } @@ -179,4 +176,4 @@ public class FabricatorManager { public List getRecipeList() { return this.recipes; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/crafting/SmithingManager.java b/src/main/java/net/starlikeclient/minecraft/guis/crafting/SmithingManager.java index 83223f5b..8276e07e 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/crafting/SmithingManager.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/crafting/SmithingManager.java @@ -20,8 +20,9 @@ public class SmithingManager { } public void addSmithingRecipe(ItemStack input, ItemStack output) { - if (getSmithingResult(input) != null) + if (getSmithingResult(input) != null) { return; + } smithingList.put(input, output); } @@ -33,4 +34,4 @@ public class SmithingManager { } return null; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiBackpack.java b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiBackpack.java new file mode 100644 index 00000000..aa0bb340 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiBackpack.java @@ -0,0 +1,45 @@ +package net.starlikeclient.minecraft.guis.gui; + +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.starlikeclient.minecraft.guis.inventory.ContainerBackpack; + +public class GuiBackpack extends GuiContainer { + private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation( + "textures/gui/container/generic_54.png"); + private final IInventory inventoryplayer; + private final IInventory backpackInventory; + private final int inventoryRows; + + public GuiBackpack(InventoryPlayer inventoryplayer, ItemStack itemstack) { + super(new ContainerBackpack(inventoryplayer, itemstack)); + this.inventoryplayer = inventoryplayer; + this.backpackInventory = ((ContainerBackpack) this.inventorySlots).getBackpackInventory(); + this.allowUserInput = false; + short short1 = 222; + int i = short1 - 108; + this.inventoryRows = this.backpackInventory.getSizeInventory() / 9; + this.ySize = i + this.inventoryRows * 18; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(i, j + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } + + @Override + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRendererObj.drawString(this.backpackInventory.getDisplayName().getUnformattedText(), 8, 6, 0xFFFFFF); + this.fontRendererObj.drawString(this.inventoryplayer.getDisplayName().getUnformattedText(), 8, + this.ySize - 96 + 2, 0xFFFFFF); + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiEnderBackpack.java b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiEnderBackpack.java new file mode 100644 index 00000000..21e28fe2 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiEnderBackpack.java @@ -0,0 +1,49 @@ +package net.starlikeclient.minecraft.guis.gui; + +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ResourceLocation; +import net.starlikeclient.minecraft.guis.inventory.ContainerEnderBackpack; + +public class GuiEnderBackpack extends GuiContainer { + private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation( + "textures/gui/container/generic_54.png"); + private final InventoryPlayer inventoryplayer; + private final IInventory backpackInventory; + private final int inventoryRows; + + public GuiEnderBackpack(InventoryPlayer inventoryplayer, ItemStack itemstack) { + super(new ContainerEnderBackpack(inventoryplayer, itemstack)); + this.inventoryplayer = inventoryplayer; + this.backpackInventory = ((ContainerEnderBackpack) this.inventorySlots).getLowerChestInventory(); + this.allowUserInput = false; + short short1 = 222; + int i = short1 - 108; + this.inventoryRows = this.backpackInventory.getSizeInventory() / 9; + this.ySize = i + this.inventoryRows * 18; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(i, j + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } + + @Override + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRendererObj.drawString( + new ChatComponentTranslation(this.inventoryplayer.getCurrentItem().getUnlocalizedName() + ".name", + new Object[0]).getUnformattedText(), + 8, 6, 0xFFFFFF); + this.fontRendererObj.drawString(this.inventoryplayer.getDisplayName().getUnformattedText(), 8, + this.ySize - 96 + 2, 0xFFFFFF); + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiFabricator.java b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiFabricator.java index ea915493..5c922f66 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiFabricator.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiFabricator.java @@ -24,6 +24,7 @@ public class GuiFabricator extends GuiContainer { /** * + Args : renderPartialTicks, mouseX, mouseY */ + @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(craftingTableGuiTextures); @@ -36,9 +37,10 @@ public class GuiFabricator extends GuiContainer { * + Draw the foreground layer for the GuiContainer (everything in front of the * items). Args : mouseX, mouseY */ + @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 28, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 4210752); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiSmithing.java b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiSmithing.java index 7c8396a2..4c03ebfd 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiSmithing.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/gui/GuiSmithing.java @@ -1,18 +1,16 @@ package net.starlikeclient.minecraft.guis.gui; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.inventory.Container; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.starlikeclient.minecraft.guis.inventory.ContainerSmithing; public class GuiSmithing extends GuiContainer { private static final ResourceLocation SMITHING_GUI_TEXTURE = new ResourceLocation( "starlike:textures/gui/container/smithing.png"); - private final ContainerSmithing containerSmithing; - public GuiSmithing(Container container) { - super(container); - this.containerSmithing = (ContainerSmithing) container; + public GuiSmithing(InventoryPlayer inventoryplayer) { + super(new ContainerSmithing(inventoryplayer)); this.xSize = 176; this.ySize = 166; } @@ -24,19 +22,16 @@ public class GuiSmithing extends GuiContainer { int l = (this.height - this.ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); - // x arrow if invalid craft - if (this.containerSmithing.isCraftingValid() == false && (this.containerSmithing.getSlot(0).getHasStack() - || this.containerSmithing.getSlot(1).getHasStack())) { - this.drawTexturedModalRect(k + 99, l + 45, 176, 0, 28, 21); // Arrow with an "X" at (176, 0) to (203, 20) + if ((this.inventorySlots.getSlot(0).getHasStack() || this.inventorySlots.getSlot(1).getHasStack()) + && !((ContainerSmithing) this.inventorySlots).isCraftingValid()) { + this.drawTexturedModalRect(k + 99, l + 45, 176, 0, 28, 21); } } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - String title = "Upgrade Gear"; - int titleX = ((this.xSize - this.fontRendererObj.getStringWidth(title)) / 2) + 7; - int titleY = 18; - this.fontRendererObj.drawString(title, titleX, titleY, 0xFFFFFF); + String text = "Upgrade Gear"; + this.fontRendererObj.drawString(text, ((this.xSize - this.fontRendererObj.getStringWidth(text)) / 2) + 7, 18, + 0xFFFFFF); } - -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/inventory/BackpackInventory.java b/src/main/java/net/starlikeclient/minecraft/guis/inventory/BackpackInventory.java deleted file mode 100644 index 3c55b421..00000000 --- a/src/main/java/net/starlikeclient/minecraft/guis/inventory/BackpackInventory.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.starlikeclient.minecraft.guis.inventory; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.InventoryBasic; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.starlikeclient.minecraft.items.ItemBackpack; - -public class BackpackInventory extends InventoryBasic { - private final ItemStack backpackItem; - - public BackpackInventory(ItemStack backpackItem) { - super("Backpack", false, 32); - this.backpackItem = backpackItem; - loadInventoryFromNBT(); - } - - @Override - public void markDirty() { - saveInventoryToNBT(); - super.markDirty(); - } - - @Override - public void closeInventory(EntityPlayer player) { - saveInventoryToNBT(); - super.closeInventory(player); - ItemBackpack.onInventoryClosed(); - } - - public void loadInventoryFromNBT() { - if (backpackItem != null && backpackItem.hasTagCompound()) { - NBTTagCompound nbt = backpackItem.getTagCompound(); - NBTTagList itemList = nbt.getTagList("BackpackItems", 10); - - for (int i = 0; i < itemList.tagCount(); i++) { - NBTTagCompound slotTag = itemList.getCompoundTagAt(i); - int slot = slotTag.getByte("Slot") & 255; - ItemStack stack = ItemStack.loadItemStackFromNBT(slotTag); - if (slot >= 0 && slot < getSizeInventory()) { - setInventorySlotContents(slot, stack); - } - } - } - } - - public void saveInventoryToNBT() { - if (backpackItem == null) return; - - NBTTagCompound nbt = backpackItem.hasTagCompound() ? - backpackItem.getTagCompound() : new NBTTagCompound(); - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < getSizeInventory(); i++) { - ItemStack stack = getStackInSlot(i); - if (stack != null) { - NBTTagCompound slotTag = new NBTTagCompound(); - slotTag.setByte("Slot", (byte)i); - stack.writeToNBT(slotTag); - itemList.appendTag(slotTag); - } - } - - nbt.setTag("BackpackItems", itemList); - backpackItem.setTagCompound(nbt); - } -} \ No newline at end of file diff --git a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerBackpack.java b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerBackpack.java new file mode 100644 index 00000000..44027b04 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerBackpack.java @@ -0,0 +1,178 @@ +package net.starlikeclient.minecraft.guis.inventory; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.starlikeclient.minecraft.items.ItemBackpack; + +public class ContainerBackpack extends Container { + private final EaglercraftUUID backpackUUID; + private final InventoryPlayer inventoryplayer; + private final IInventory backpackInventory; + + public ContainerBackpack(InventoryPlayer inventoryplayer, ItemStack itemstack) { + if (!(itemstack != null && itemstack.getItem() instanceof ItemBackpack)) { + throw new IllegalArgumentException(); + } + + long[] uuidArray = itemstack.getTagCompound().getLongArray("UUID"); + this.backpackUUID = new EaglercraftUUID(uuidArray[0], uuidArray[1]); + + this.inventoryplayer = inventoryplayer; + this.backpackInventory = new InventoryBasic(itemstack.getUnlocalizedName() + ".name", false, + ((ItemBackpack) itemstack.getItem()).getSlots()); + + int numRows = this.backpackInventory.getSizeInventory() / 9; + int i = (numRows - 4) * 18; + + for (int j = 0; j < numRows; ++j) { + for (int k = 0; k < 9; ++k) { + this.addSlotToContainer(new Slot(backpackInventory, k + j * 9, 8 + k * 18, 18 + j * 18) { + @Override + public boolean isItemValid(ItemStack itemstack) { + return !(itemstack.getItem() instanceof ItemBackpack); + } + + @Override + public void onSlotChanged() { + ContainerBackpack.this.saveInventoryToNBT(); + super.onSlotChanged(); + } + }); + } + } + + for (int l = 0; l < 3; ++l) { + for (int j1 = 0; j1 < 9; ++j1) { + this.addSlotToContainer(new Slot(inventoryplayer, j1 + l * 9 + 9, 8 + j1 * 18, 103 + l * 18 + i) { + @Override + public void onSlotChanged() { + ContainerBackpack.this.saveInventoryToNBT(); + super.onSlotChanged(); + } + }); + } + } + + for (int i1 = 0; i1 < 9; ++i1) { + this.addSlotToContainer(new Slot(inventoryplayer, i1, 8 + i1 * 18, 161 + i) { + @Override + public void onSlotChanged() { + ContainerBackpack.this.saveInventoryToNBT(); + super.onSlotChanged(); + } + }); + } + + loadInventoryFromNBT(); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) { + return getBackpackItem() != null; + } + + public IInventory getBackpackInventory() { + return this.backpackInventory; + } + + /** + * + Gets the item that the player is currently holding. If the item's UUID + * matches current UUID, returns ItemStack. Otherwise, returns null. + */ + private ItemStack getBackpackItem() { + ItemStack itemstack = this.inventoryplayer.getCurrentItem(); + if (itemstack != null && itemstack.getItem() instanceof ItemBackpack && itemstack.hasTagCompound() + && itemstack.getTagCompound().hasKey("UUID", 12)) { + long[] uuidArray = itemstack.getTagCompound().getLongArray("UUID"); + if ((new EaglercraftUUID(uuidArray[0], uuidArray[1])).equals(this.backpackUUID)) { + return itemstack; + } + } + return null; + } + + public void loadInventoryFromNBT() { + ItemStack backpackItem = getBackpackItem(); + if (backpackItem != null) { + NBTTagCompound nbttagcompound = backpackItem.getTagCompound(); + if (nbttagcompound.hasKey("Items", 9)) { + NBTTagList parNBTTagList = nbttagcompound.getTagList("Items", 10); + + for (int i = 0; i < backpackInventory.getSizeInventory(); ++i) { + backpackInventory.setInventorySlotContents(i, (ItemStack) null); + } + + for (int k = 0; k < parNBTTagList.tagCount(); ++k) { + NBTTagCompound nbttagcompound1 = parNBTTagList.getCompoundTagAt(k); + int j = nbttagcompound1.getByte("Slot") & 255; + if (j >= 0 && j < backpackInventory.getSizeInventory()) { + backpackInventory.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound1)); + } + } + + this.detectAndSendChanges(); + } + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) { + saveInventoryToNBT(); + super.onContainerClosed(entityplayer); + } + + public void saveInventoryToNBT() { + ItemStack backpackItem = getBackpackItem(); + if (backpackItem != null) { + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < backpackInventory.getSizeInventory(); ++i) { + ItemStack itemstack = backpackInventory.getStackInSlot(i); + if (itemstack != null) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + backpackItem.getTagCompound().setTag("Items", nbttaglist); + this.detectAndSendChanges(); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer var1, int i) { + ItemStack itemstack = null; + Slot slot = this.inventorySlots.get(i); + if (slot != null && slot.getHasStack()) { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + int backpackSlots = this.backpackInventory.getSizeInventory(); + if (i < backpackSlots) { + if (!this.mergeItemStack(itemstack1, backpackSlots, this.inventorySlots.size(), true)) { + return null; + } + } else if (!this.mergeItemStack(itemstack1, 0, backpackSlots, false)) { + return null; + } + + if (itemstack1.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return itemstack; + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerEnderBackpack.java b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerEnderBackpack.java new file mode 100644 index 00000000..4cd8a1a4 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerEnderBackpack.java @@ -0,0 +1,54 @@ +package net.starlikeclient.minecraft.guis.inventory; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.item.ItemStack; +import net.starlikeclient.minecraft.items.ItemEnderBackpack; + +public class ContainerEnderBackpack extends ContainerChest { + private final EaglercraftUUID backpackUUID; + private final InventoryPlayer inventoryplayer; + + public ContainerEnderBackpack(InventoryPlayer inventoryplayer, ItemStack itemstack) { + super(inventoryplayer, inventoryplayer.player.getInventoryEnderChest(), inventoryplayer.player); + + if (!(itemstack != null && itemstack.getItem() instanceof ItemEnderBackpack)) { + throw new IllegalArgumentException(); + } + + long[] uuidArray = itemstack.getTagCompound().getLongArray("UUID"); + this.backpackUUID = new EaglercraftUUID(uuidArray[0], uuidArray[1]); + + this.inventoryplayer = inventoryplayer; + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + if (getBackpackItem() != null) { + return true; + } else { + this.onContainerClosed(entityplayer); + Minecraft.getMinecraft().thePlayer.closeScreen(); + return false; + } + } + + /** + * + Gets the item that the player is currently holding. If the item's UUID + * matches current UUID, returns ItemStack. Otherwise, returns null. + */ + private ItemStack getBackpackItem() { + ItemStack itemstack = this.inventoryplayer.getCurrentItem(); + if (itemstack != null && itemstack.getItem() instanceof ItemEnderBackpack && itemstack.hasTagCompound() + && itemstack.getTagCompound().hasKey("UUID", 12)) { + long[] uuidArray = itemstack.getTagCompound().getLongArray("UUID"); + if ((new EaglercraftUUID(uuidArray[0], uuidArray[1])).equals(this.backpackUUID)) { + return itemstack; + } + } + return null; + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerFabricator.java b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerFabricator.java index 6a9abc04..f19dce5d 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerFabricator.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerFabricator.java @@ -48,10 +48,11 @@ public class ContainerFabricator extends Container { this.onCraftMatrixChanged(this.craftMatrix); } + @Override public boolean canInteractWith(EntityPlayer entityplayer) { return this.worldObj.getBlockState(this.pos).getBlock() != Blocks.fabricator ? false - : entityplayer.getDistanceSq((double) this.pos.getX() + 0.5D, (double) this.pos.getY() + 0.5D, - (double) this.pos.getZ() + 0.5D) <= 64.0D; + : entityplayer.getDistanceSq(this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, + this.pos.getZ() + 0.5D) <= 64.0D; } /** @@ -59,6 +60,7 @@ public class ContainerFabricator extends Container { * (double-click) code. The stack passed in is null for the initial slot that * was double-clicked. */ + @Override public boolean canMergeSlot(ItemStack itemstack, Slot slot) { return slot.inventory != this.craftResult && super.canMergeSlot(itemstack, slot); } @@ -66,6 +68,7 @@ public class ContainerFabricator extends Container { /** * + Called when the container is closed. */ + @Override public void onContainerClosed(EntityPlayer entityplayer) { super.onContainerClosed(entityplayer); if (!this.worldObj.isRemote) { @@ -81,6 +84,7 @@ public class ContainerFabricator extends Container { /** * + Callback for when the crafting matrix is changed. */ + @Override public void onCraftMatrixChanged(IInventory var1) { this.craftResult.setInventorySlotContents(0, FabricatorManager.getInstance().findMatchingRecipe(this.craftMatrix, this.worldObj)); @@ -89,9 +93,10 @@ public class ContainerFabricator extends Container { /** * + Take a stack from the specified inventory slot. */ + @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; - Slot slot = (Slot) this.inventorySlots.get(i); + Slot slot = this.inventorySlots.get(i); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); @@ -128,4 +133,4 @@ public class ContainerFabricator extends Container { return itemstack; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerSmithing.java b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerSmithing.java index 33436e31..9f6dcd55 100644 --- a/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerSmithing.java +++ b/src/main/java/net/starlikeclient/minecraft/guis/inventory/ContainerSmithing.java @@ -11,15 +11,13 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.play.server.S30PacketWindowItems; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; import net.starlikeclient.minecraft.guis.crafting.SmithingManager; public class ContainerSmithing extends Container { private final IInventory smithingInventory; - public ContainerSmithing(InventoryPlayer playerInventory, World worldIn, BlockPos posIn) { - this.smithingInventory = new InventoryBasic("Smithing", true, 3); + public ContainerSmithing(InventoryPlayer inventoryplayer) { + this.smithingInventory = new InventoryBasic("container.smithing", false, 3); this.addSlotToContainer(new Slot(smithingInventory, 0, 27, 47) { @Override @@ -49,25 +47,25 @@ public class ContainerSmithing extends Container { } @Override - public void onPickupFromSlot(EntityPlayer playerIn, ItemStack itemstack) { - super.onPickupFromSlot(playerIn, itemstack); + public void onPickupFromSlot(EntityPlayer entityplayer, ItemStack itemstack) { + super.onPickupFromSlot(entityplayer, itemstack); ContainerSmithing.this.decrementInputItems(); } }); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { - this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(inventoryplayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (int k = 0; k < 9; ++k) { - this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); + this.addSlotToContainer(new Slot(inventoryplayer, k, 8 + k * 18, 142)); } } @Override - public boolean canInteractWith(EntityPlayer playerIn) { + public boolean canInteractWith(EntityPlayer var1) { return true; } @@ -118,15 +116,15 @@ public class ContainerSmithing extends Container { } @Override - public void onCraftMatrixChanged(IInventory inventoryIn) { - super.onCraftMatrixChanged(inventoryIn); + public void onCraftMatrixChanged(IInventory iinventory) { + super.onCraftMatrixChanged(iinventory); this.updateCraftingResult(); } @Override public ItemStack transferStackInSlot(EntityPlayer entityplayer, int i) { ItemStack itemstack = null; - Slot slot = (Slot) this.inventorySlots.get(i); + Slot slot = this.inventorySlots.get(i); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); @@ -179,6 +177,9 @@ public class ContainerSmithing extends Container { if (input.hasTagCompound()) { result.setTagCompound((NBTTagCompound) input.getTagCompound().copy()); } + if (input.hasDisplayName()) { + result.setStackDisplayName(input.getDisplayName()); + } this.smithingInventory.setInventorySlotContents(2, result); } else { this.smithingInventory.setInventorySlotContents(2, null); diff --git a/src/main/java/net/starlikeclient/minecraft/init/CommandsStarlike.java b/src/main/java/net/starlikeclient/minecraft/init/CommandsStarlike.java index 0a7494b1..5bbfa8bc 100644 --- a/src/main/java/net/starlikeclient/minecraft/init/CommandsStarlike.java +++ b/src/main/java/net/starlikeclient/minecraft/init/CommandsStarlike.java @@ -10,4 +10,4 @@ public class CommandsStarlike { e.registerCommand(new CommandGm(2)); e.registerCommand(new CommandGm(3)); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/init/EntitiesStarlike.java b/src/main/java/net/starlikeclient/minecraft/init/EntitiesStarlike.java index e47e3893..7ea6f9cb 100644 --- a/src/main/java/net/starlikeclient/minecraft/init/EntitiesStarlike.java +++ b/src/main/java/net/starlikeclient/minecraft/init/EntitiesStarlike.java @@ -2,31 +2,44 @@ package net.starlikeclient.minecraft.init; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.EntityList; +import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenEnd; import net.minecraft.world.biome.BiomeGenHell; +import net.minecraft.world.biome.BiomeGenSwamp; import net.starlikeclient.minecraft.entities.entity.EntityEndCreeper; import net.starlikeclient.minecraft.entities.entity.EntityNetherCreeper; +import net.starlikeclient.minecraft.entities.entity.EntityWatcher; import net.starlikeclient.minecraft.entities.render.RenderEndCreeper; import net.starlikeclient.minecraft.entities.render.RenderNetherCreeper; +import net.starlikeclient.minecraft.entities.render.RenderWatcher; +import net.starlikeclient.minecraft.world.biome.BiomeGenEnderForest; public class EntitiesStarlike { - public static void configEndEntities(BiomeGenEnd e) { - e.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityEndCreeper.class, 7, 3, 3)); - } - - public static void configNetherEntities(BiomeGenHell e) { - e.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityNetherCreeper.class, 100, 4, 1)); + public static void configEntities(BiomeGenBase e) { + if (e instanceof BiomeGenHell) { + e.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityNetherCreeper.class, 100, 4, 1)); + } else if (e instanceof BiomeGenEnd) { + e.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityEndCreeper.class, 7, 3, 3)); + } else if (e instanceof BiomeGenEnderForest) { + e.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityEnderman.class, 10, 4, 4)); + } else if (e instanceof BiomeGenSwamp) { + e.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityWatcher.class, 10, 5, 5)); + } else { + throw new IllegalArgumentException("Unexpected biome type: " + e.getClass().getName()); + } } public static void registerEntities() { EntityList.addMapping(EntityNetherCreeper.class, EntityNetherCreeper::new, "NetherCreeper", 201, 0xFFCC0000, 0xFFFFA500); EntityList.addMapping(EntityEndCreeper.class, EntityEndCreeper::new, "EndCreeper", 202, 0xFF6A0DAD, 0xFF000000); + EntityList.addMapping(EntityWatcher.class, EntityWatcher::new, "Watcher", 203, 0xFFFFFFFF, 0xFFFF0000); } public static void renderEntities(RenderManager e) { e.entityRenderMap.put(EntityNetherCreeper.class, new RenderNetherCreeper(e)); e.entityRenderMap.put(EntityEndCreeper.class, new RenderEndCreeper(e)); + e.entityRenderMap.put(EntityWatcher.class, new RenderWatcher(e)); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/init/ItemsStarlike.java b/src/main/java/net/starlikeclient/minecraft/init/ItemsStarlike.java index 1cc5a657..4d59f35e 100644 --- a/src/main/java/net/starlikeclient/minecraft/init/ItemsStarlike.java +++ b/src/main/java/net/starlikeclient/minecraft/init/ItemsStarlike.java @@ -25,6 +25,7 @@ import net.starlikeclient.minecraft.blocks.BlockSmithing; import net.starlikeclient.minecraft.blocks.BlockSteelGrate; import net.starlikeclient.minecraft.items.ItemBackpack; import net.starlikeclient.minecraft.items.ItemChisel; +import net.starlikeclient.minecraft.items.ItemEnderBackpack; public class ItemsStarlike { private static void blockBootstrapStates() { @@ -33,60 +34,81 @@ public class ItemsStarlike { public static void registerBlocks() { blockBootstrapStates(); - Block.registerBlock(512, (String) "starlike:deepslate", (new BlockDeepslate()).setUnlocalizedName("deepslate")); - Block.registerBlock(513, (String) "starlike:cobbled_deepslate", + Block.registerBlock(512, "starlike:deepslate", (new BlockDeepslate()).setUnlocalizedName("deepslate")); + Block.registerBlock(513, "starlike:cobbled_deepslate", (new Block(Material.rock)).setHardness(3.5F).setResistance(10.0F).setStepSound(Block.soundTypePiston) .setUnlocalizedName("cobbled_deepslate").setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(514, (String) "starlike:steel_block", + Block.registerBlock(514, "starlike:steel_block", (new Block(Material.iron, MapColor.ironColor)).setHardness(5.0F).setResistance(10.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("steel_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(515, (String) "starlike:steel_grate", - (new BlockSteelGrate()).setUnlocalizedName("steel_grate")); - Block.registerBlock(516, (String) "starlike:platinum_ore", + Block.registerBlock(515, "starlike:steel_grate", (new BlockSteelGrate()).setUnlocalizedName("steel_grate")); + Block.registerBlock(516, "starlike:platinum_ore", (new BlockOre()).setHardness(50.0F).setResistance(250.0F).setStepSound(Block.soundTypePiston) .setUnlocalizedName("platinum_ore").setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(517, (String) "starlike:platinum_block", + Block.registerBlock(517, "starlike:platinum_block", (new Block(Material.iron, MapColor.ironColor)).setHardness(15.0F).setResistance(30.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("platinum_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(518, (String) "starlike:titanium_ore", + Block.registerBlock(518, "starlike:titanium_ore", (new BlockOre()).setHardness(100.0F).setResistance(500.0F).setStepSound(Block.soundTypePiston) .setUnlocalizedName("titanium_ore").setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(519, (String) "starlike:titanium_block", + Block.registerBlock(519, "starlike:titanium_block", (new Block(Material.iron, MapColor.ironColor)).setHardness(25.0F).setResistance(50.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("titanium_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(520, (String) "starlike:uranium_ore", + Block.registerBlock(520, "starlike:uranium_ore", (new BlockOre()).setHardness(5.0F).setResistance(10.0F).setStepSound(Block.soundTypePiston) .setUnlocalizedName("uranium_ore").setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(521, (String) "starlike:uranium_block", + Block.registerBlock(521, "starlike:uranium_block", (new Block(Material.iron, MapColor.greenColor)).setHardness(40.0F).setResistance(80.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("uranium_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(522, (String) "starlike:mosaic", (new BlockMosaic()).setUnlocalizedName("mosaic")); - Block.registerBlock(523, (String) "starlike:dragonite_block", + Block.registerBlock(522, "starlike:mosaic", (new BlockMosaic()).setUnlocalizedName("mosaic")); + Block.registerBlock(523, "starlike:dragonite_block", (new Block(Material.iron, MapColor.purpleColor)).setHardness(60.0F).setResistance(120.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("dragonite_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(684, (String) "starlike:ancient_debris", + Block.registerBlock(684, "starlike:ancient_debris", (new Block(Material.iron, MapColor.blackColor)).setHardness(30.0F).setResistance(2000.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("ancient_debris") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(685, (String) "starlike:netherite_block", + Block.registerBlock(685, "starlike:netherite_block", (new Block(Material.iron, MapColor.blackColor)).setHardness(50.0F).setResistance(2000.0F) .setStepSound(Block.soundTypeMetal).setUnlocalizedName("netherite_block") .setCreativeTab(CreativeTabs.tabStarlike)); - Block.registerBlock(686, (String) "starlike:smithing_table", - (new BlockSmithing()).setUnlocalizedName("smithing_table")); - /* - * e.registerBlock(686, (String) "starlike:fabricator", (new - * BlockFabricator()).setHardness(5.0F).setResistance(10.0F).setStepSound(Block. - * soundTypePiston) - * .setUnlocalizedName("fabricator").setCreativeTab(CreativeTabs.tabStarlike)); - */ + Block.registerBlock(686, "starlike:smithing_table", (new BlockSmithing()).setUnlocalizedName("smithing_table")); + // Block.registerBlock(687, "starlike:fabricator", (new + // BlockFabricator()).setUnlocalizedName("fabricator")); //autogenerateequals + Block.registerBlock(694, "starlike:stripped_spruce_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_spruce_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(693, "starlike:stripped_oak_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_oak_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(692, "starlike:stripped_jungle_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_jungle_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(691, "starlike:stripped_dark_oak_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_dark_oak_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(690, "starlike:stripped_birch_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_birch_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(689, "starlike:stripped_acacia_log", + (new Block(Material.wood, MapColor.purpleColor)).setHardness(0.5f).setResistance(5.0f) + .setStepSound(Block.soundTypeWood).setUnlocalizedName("stripped_acacia_log") + .setCreativeTab(CreativeTabs.tabStarlike)); + Block.registerBlock(688, (String) "starlike:dirt_path", + (new Block(Material.ground, MapColor.dirtColor)).setHardness(0.5F).setStepSound(Block.soundTypeGravel) + .setUnlocalizedName("dirt_path").setCreativeTab(CreativeTabs.tabStarlike)); Block.registerBlock(683, "starlike:tuff_tiles", (new Block(Material.rock, MapColor.purpleColor)).setHardness(1.5f).setResistance(10.0f) .setStepSound(Block.soundTypePiston).setUnlocalizedName("tuff_tiles") @@ -730,86 +752,104 @@ public class ItemsStarlike { Item.registerItemBlock(Blocks.uranium_block); Item.registerItemBlock(Blocks.mosaic, (new ItemMultiTexture(Blocks.mosaic, Blocks.mosaic, new Function() { + @Override public String apply(ItemStack itemstack) { return BlockMosaic.EnumType.byMetadata(itemstack.getMetadata()).getUnlocalizedName(); } })).setUnlocalizedName("mosaic")); Item.registerItemBlock(Blocks.dragonite_block); - Item.registerItemBlock(Blocks.ancient_debris); - Item.registerItemBlock(Blocks.netherite_block); + Item.registerItemBlock(Blocks.ancient_debris).setIsImmuneToFire(true); + Item.registerItemBlock(Blocks.netherite_block).setIsImmuneToFire(true); Item.registerItemBlock(Blocks.smithing_table); // Item.registerItemBlock(Blocks.fabricator); - Item.registerItem(1024, (String) "starlike:steel", + Item.registerItem(1024, "starlike:steel", (new Item()).setUnlocalizedName("steel").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1025, (String) "starlike:platinum_ingot", + Item.registerItem(1025, "starlike:platinum_ingot", (new Item()).setUnlocalizedName("platinum_ingot").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1026, (String) "starlike:platinum_sword", (new ItemSword(Item.ToolMaterial.PLATINUM)) + Item.registerItem(1026, "starlike:platinum_sword", (new ItemSword(Item.ToolMaterial.PLATINUM)) .setUnlocalizedName("platinum_sword").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1027, (String) "starlike:platinum_pickaxe", (new ItemPickaxe(Item.ToolMaterial.PLATINUM)) + Item.registerItem(1027, "starlike:platinum_pickaxe", (new ItemPickaxe(Item.ToolMaterial.PLATINUM)) .setUnlocalizedName("platinum_pickaxe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1028, (String) "starlike:platinum_shovel", (new ItemSpade(Item.ToolMaterial.PLATINUM)) + Item.registerItem(1028, "starlike:platinum_shovel", (new ItemSpade(Item.ToolMaterial.PLATINUM)) .setUnlocalizedName("platinum_shovel").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1029, (String) "starlike:platinum_axe", (new ItemAxe(Item.ToolMaterial.PLATINUM)) + Item.registerItem(1029, "starlike:platinum_axe", (new ItemAxe(Item.ToolMaterial.PLATINUM)) .setUnlocalizedName("platinum_axe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1030, (String) "starlike:platinum_hoe", (new ItemHoe(Item.ToolMaterial.PLATINUM)) + Item.registerItem(1030, "starlike:platinum_hoe", (new ItemHoe(Item.ToolMaterial.PLATINUM)) .setUnlocalizedName("platinum_hoe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1031, (String) "starlike:platinum_helmet", - (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 0)).setUnlocalizedName("platinum_helmet") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1032, (String) "starlike:platinum_chestplate", - (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 1)).setUnlocalizedName("platinum_chestplate") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1033, (String) "starlike:platinum_leggings", - (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 2)).setUnlocalizedName("platinum_leggings") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1034, (String) "starlike:platinum_boots", - (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 3)).setUnlocalizedName("platinum_boots") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1035, (String) "starlike:titanium_ingot", + Item.registerItem(1031, "starlike:platinum_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 0)) + .setUnlocalizedName("platinum_helmet").setCreativeTab(CreativeTabs.tabStarlike)); + Item.registerItem(1032, "starlike:platinum_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 1)) + .setUnlocalizedName("platinum_chestplate").setCreativeTab(CreativeTabs.tabStarlike)); + Item.registerItem(1033, "starlike:platinum_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 2)) + .setUnlocalizedName("platinum_leggings").setCreativeTab(CreativeTabs.tabStarlike)); + Item.registerItem(1034, "starlike:platinum_boots", (new ItemArmor(ItemArmor.ArmorMaterial.PLATINUM, 6, 3)) + .setUnlocalizedName("platinum_boots").setCreativeTab(CreativeTabs.tabStarlike)); + Item.registerItem(1035, "starlike:titanium_ingot", (new Item()).setUnlocalizedName("titanium_ingot").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1036, (String) "starlike:uranium_crystal", + Item.registerItem(1036, "starlike:uranium_crystal", (new Item()).setUnlocalizedName("uranium_crystal").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1037, (String) "starlike:uranium_rod", + Item.registerItem(1037, "starlike:uranium_rod", (new Item()).setUnlocalizedName("uranium_rod").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1038, (String) "starlike:platinum_drill", (new ItemPickaxe(Item.ToolMaterial.PLATINUM_DRILL)) + Item.registerItem(1038, "starlike:platinum_drill", (new ItemPickaxe(Item.ToolMaterial.PLATINUM_DRILL)) .setUnlocalizedName("platinum_drill").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1039, (String) "starlike:titanium_drill", (new ItemPickaxe(Item.ToolMaterial.TITANIUM_DRILL)) + Item.registerItem(1039, "starlike:titanium_drill", (new ItemPickaxe(Item.ToolMaterial.TITANIUM_DRILL)) .setUnlocalizedName("titanium_drill").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1040, (String) "starlike:dragonite", + Item.registerItem(1040, "starlike:dragonite", (new Item()).setUnlocalizedName("dragonite").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1041, (String) "starlike:copper_ingot", + Item.registerItem(1041, "starlike:copper_ingot", (new Item()).setUnlocalizedName("copper_ingot").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1042, (String) "starlike:netherite_scrap", - (new Item()).setUnlocalizedName("netherite_scrap").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1043, (String) "starlike:netherite_ingot", - (new Item()).setUnlocalizedName("netherite_ingot").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1044, (String) "starlike:netherite_sword", (new ItemSword(Item.ToolMaterial.NETHERITE)) - .setUnlocalizedName("netherite_sword").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1045, (String) "starlike:netherite_shovel", (new ItemSpade(Item.ToolMaterial.NETHERITE)) - .setUnlocalizedName("netherite_shovel").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1046, (String) "starlike:netherite_pickaxe", (new ItemPickaxe(Item.ToolMaterial.NETHERITE)) - .setUnlocalizedName("netherite_pickaxe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1047, (String) "starlike:netherite_axe", (new ItemAxe(Item.ToolMaterial.NETHERITE)) - .setUnlocalizedName("netherite_axe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1048, (String) "starlike:netherite_hoe", (new ItemHoe(Item.ToolMaterial.NETHERITE)) - .setUnlocalizedName("netherite_hoe").setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1049, (String) "starlike:netherite_helmet", + Item.registerItem(1042, "starlike:netherite_scrap", (new Item()).setUnlocalizedName("netherite_scrap") + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1043, "starlike:netherite_ingot", (new Item()).setUnlocalizedName("netherite_ingot") + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1044, "starlike:netherite_sword", + (new ItemSword(Item.ToolMaterial.NETHERITE)).setUnlocalizedName("netherite_sword") + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1045, "starlike:netherite_shovel", + (new ItemSpade(Item.ToolMaterial.NETHERITE)).setUnlocalizedName("netherite_shovel") + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1046, "starlike:netherite_pickaxe", + (new ItemPickaxe(Item.ToolMaterial.NETHERITE)).setUnlocalizedName("netherite_pickaxe") + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1047, "starlike:netherite_axe", (new ItemAxe(Item.ToolMaterial.NETHERITE)) + .setUnlocalizedName("netherite_axe").setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1048, "starlike:netherite_hoe", (new ItemHoe(Item.ToolMaterial.NETHERITE)) + .setUnlocalizedName("netherite_hoe").setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1049, "starlike:netherite_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.NETHERITE, 5, 0)).setUnlocalizedName("netherite_helmet") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1050, (String) "starlike:netherite_chestplate", + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1050, "starlike:netherite_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.NETHERITE, 5, 1)).setUnlocalizedName("netherite_chestplate") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1051, (String) "starlike:netherite_leggings", + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1051, "starlike:netherite_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.NETHERITE, 5, 2)).setUnlocalizedName("netherite_leggings") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1052, (String) "starlike:netherite_boots", + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1052, "starlike:netherite_boots", (new ItemArmor(ItemArmor.ArmorMaterial.NETHERITE, 5, 3)).setUnlocalizedName("netherite_boots") - .setCreativeTab(CreativeTabs.tabStarlike)); - Item.registerItem(1053, (String) "starlike:chisel", (new ItemChisel()).setUnlocalizedName("chisel")); - Item.registerItem(1054, (String) "starlike:leather_backpack", (new ItemBackpack()).setUnlocalizedName("leather_backpack")); + .setCreativeTab(CreativeTabs.tabStarlike).setIsImmuneToFire(true)); + Item.registerItem(1053, "starlike:chisel", (new ItemChisel()).setUnlocalizedName("chisel")); + // Item.registerItem(1054, "starlike:amber", (new + // Item()).setUnlocalizedName("amber").setCreativeTab(CreativeTabs.tabStarlike)); + // Item.registerItem(1055, "starlike:ambered_bow", (new ItemBow(1.5, + // 576)).setUnlocalizedName("ambered_bow")); + // Reserve 1060-1069 for backpacks + Item.registerItem(1060, "starlike:leather_backpack", + (new ItemBackpack(1)).setUnlocalizedName("leather_backpack")); + Item.registerItem(1061, "starlike:iron_backpack", (new ItemBackpack(2)).setUnlocalizedName("iron_backpack")); + Item.registerItem(1062, "starlike:diamond_backpack", + (new ItemBackpack(3)).setUnlocalizedName("diamond_backpack")); + Item.registerItem(1069, "starlike:ender_backpack", + (new ItemEnderBackpack()).setUnlocalizedName("ender_backpack")); //autogenerateregisterblock + Item.registerItemBlock(Blocks.stripped_spruce_log); + Item.registerItemBlock(Blocks.stripped_oak_log); + Item.registerItemBlock(Blocks.stripped_jungle_log); + Item.registerItemBlock(Blocks.stripped_dark_oak_log); + Item.registerItemBlock(Blocks.stripped_birch_log); + Item.registerItemBlock(Blocks.stripped_acacia_log); + Item.registerItemBlock(Blocks.dirt_path); Item.registerItemBlock(Blocks.tuff_tiles); Item.registerItemBlock(Blocks.soul_stone_tiles); Item.registerItemBlock(Blocks.soul_stone); @@ -968,7 +1008,7 @@ public class ItemsStarlike { Item.registerItemBlock(Blocks.decorated_acacia_log); Item.registerItemBlock(Blocks.chiseled_deep_ocean_bricks); Item.registerItemBlock(Blocks.andesite_bricks); - + } public static void renderItems(RenderItem e) { @@ -1024,9 +1064,21 @@ public class ItemsStarlike { e.registerItem(Items.netherite_leggings, "starlike:netherite_leggings"); e.registerItem(Items.netherite_boots, "starlike:netherite_boots"); e.registerItem(Items.chisel, "starlike:chisel"); - //e.registerItem(Items.leather_backpack, "starlike:leather_backpack"); + // e.registerItem(Items.amber, "starlike:amber"); + // e.registerItem(Items.ambered_bow, "starlike:ambered_bow"); + e.registerItem(Items.leather_backpack, "starlike:leather_backpack"); + e.registerItem(Items.iron_backpack, "starlike:iron_backpack"); + e.registerItem(Items.diamond_backpack, "starlike:diamond_backpack"); + e.registerItem(Items.ender_backpack, "starlike:ender_backpack"); //autogeneraterenderitem + e.registerBlock(Blocks.stripped_spruce_log, "starlike:stripped_spruce_log"); + e.registerBlock(Blocks.stripped_oak_log, "starlike:stripped_oak_log"); + e.registerBlock(Blocks.stripped_jungle_log, "starlike:stripped_jungle_log"); + e.registerBlock(Blocks.stripped_dark_oak_log, "starlike:stripped_dark_oak_log"); + e.registerBlock(Blocks.stripped_birch_log, "starlike:stripped_birch_log"); + e.registerBlock(Blocks.stripped_acacia_log, "starlike:stripped_acacia_log"); + e.registerBlock(Blocks.dirt_path, "starlike:dirt_path"); e.registerBlock(Blocks.tuff_tiles, "starlike:tuff_tiles"); e.registerBlock(Blocks.soul_stone_tiles, "starlike:soul_stone_tiles"); e.registerBlock(Blocks.soul_stone, "starlike:soul_stone"); @@ -1187,4 +1239,4 @@ public class ItemsStarlike { e.registerBlock(Blocks.chiseled_deep_ocean_bricks, "starlike:chiseled_deep_ocean_bricks"); e.registerBlock(Blocks.andesite_bricks, "starlike:andesite_bricks"); } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/init/RecipesStarlike.java b/src/main/java/net/starlikeclient/minecraft/init/RecipesStarlike.java index 81430de3..d318abfb 100644 --- a/src/main/java/net/starlikeclient/minecraft/init/RecipesStarlike.java +++ b/src/main/java/net/starlikeclient/minecraft/init/RecipesStarlike.java @@ -10,6 +10,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.FurnaceRecipes; import net.starlikeclient.minecraft.blocks.BlockMosaic; +import net.starlikeclient.minecraft.crafting.RecipesBackpackUpgrade; import net.starlikeclient.minecraft.guis.crafting.SmithingManager; public class RecipesStarlike { @@ -60,10 +61,11 @@ public class RecipesStarlike { new ItemStack(Items.netherite_scrap, 1), new ItemStack(Items.netherite_scrap, 1), new ItemStack(Items.gold_ingot, 1), new ItemStack(Items.gold_ingot, 1), new ItemStack(Items.gold_ingot, 1), new ItemStack(Items.gold_ingot, 1) }); - e.addRecipe(new ItemStack(Items.chisel, 1), new Object[] { "#", "/", "/", Character.valueOf('#'), - Items.steel, Character.valueOf('/'), Items.stick }); - e.addRecipe(new ItemStack(Blocks.smithing_table), new Object[] { "//", "##", "##", Character.valueOf('/'), + e.addRecipe(new ItemStack(Items.chisel, 1), new Object[] { "#", "/", "/", Character.valueOf('#'), Items.steel, + Character.valueOf('/'), Items.stick }); + e.addRecipe(new ItemStack(Blocks.smithing_table, 1), new Object[] { "//", "##", "##", Character.valueOf('/'), Items.iron_ingot, Character.valueOf('#'), Blocks.planks }); + e.addRecipe(new RecipesBackpackUpgrade()); // Copper e.addRecipe(new ItemStack(Blocks.copper_block, 1), diff --git a/src/main/java/net/starlikeclient/minecraft/items/ItemBackpack.java b/src/main/java/net/starlikeclient/minecraft/items/ItemBackpack.java index 1600ea78..4475421a 100644 --- a/src/main/java/net/starlikeclient/minecraft/items/ItemBackpack.java +++ b/src/main/java/net/starlikeclient/minecraft/items/ItemBackpack.java @@ -1,40 +1,93 @@ package net.starlikeclient.minecraft.items; +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.play.server.S30PacketWindowItems; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.IInteractionObject; import net.minecraft.world.World; -import net.starlikeclient.minecraft.guis.inventory.BackpackInventory; +import net.starlikeclient.minecraft.guis.inventory.ContainerBackpack; public class ItemBackpack extends Item { - private static BackpackInventory openInventory; + public class InterfaceBackpack implements IInteractionObject { + public InterfaceBackpack() { + } - public ItemBackpack() { - this.setUnlocalizedName("backpack"); - this.setCreativeTab(CreativeTabs.tabMisc); - this.maxStackSize = 1; - } + @Override + public ContainerBackpack createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { + return new ContainerBackpack(inventoryplayer, entityplayer.getCurrentEquippedItem()); + } - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { - if (!world.isRemote) { - System.out.println("Opening backpack..."); - - openInventory = new BackpackInventory(itemStack); - - player.displayGUIChest(openInventory); - - System.out.println("Backpack opened."); - } - return itemStack; - } + @Override + public IChatComponent getDisplayName() { + return new ChatComponentTranslation(ItemBackpack.this.getUnlocalizedName() + ".name", new Object[0]); + } - // Add this method to handle inventory closing - public static void onInventoryClosed() { - if (openInventory != null) { - openInventory.saveInventoryToNBT(); - openInventory = null; - } - } -} \ No newline at end of file + @Override + public String getGuiID() { + return "starlike:backpack"; + } + + @Override + public String getName() { + return null; + } + + @Override + public boolean hasCustomName() { + return false; + } + } + + private final int slots; + + public ItemBackpack(int rows) { + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.tabStarlike); + this.slots = rows * 9; + } + + /** + * + Returns the number of slots in the backpack + */ + public int getSlots() { + return this.slots; + } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { + if (!world.isRemote) { + boolean refreshNeeded = false; + if (!itemstack.hasTagCompound()) { + itemstack.setTagCompound(new NBTTagCompound()); + refreshNeeded = true; + } + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + if (!nbttagcompound.hasKey("UUID")) { + EaglercraftUUID uuid = EaglercraftUUID.randomUUID(); + nbttagcompound.setLongArray("UUID", + new long[] { uuid.getMostSignificantBits(), uuid.getLeastSignificantBits() }); + refreshNeeded = true; + } + if (!nbttagcompound.hasKey("Items")) { + nbttagcompound.setTag("Items", new NBTTagList()); + refreshNeeded = true; + } + if (refreshNeeded) { + ((EntityPlayerMP) entityplayer).playerNetServerHandler.sendPacket(new S30PacketWindowItems( + entityplayer.inventoryContainer.windowId, entityplayer.inventoryContainer.getInventory())); + } + + entityplayer.displayGui(new ItemBackpack.InterfaceBackpack()); + } + return itemstack; + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/items/ItemChisel.java b/src/main/java/net/starlikeclient/minecraft/items/ItemChisel.java index 07f79b3b..43cfcb00 100644 --- a/src/main/java/net/starlikeclient/minecraft/items/ItemChisel.java +++ b/src/main/java/net/starlikeclient/minecraft/items/ItemChisel.java @@ -1,6 +1,7 @@ package net.starlikeclient.minecraft.items; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import net.minecraft.block.Block; @@ -11,19 +12,22 @@ import net.minecraft.block.BlockRedSandstone; import net.minecraft.block.BlockSandStone; import net.minecraft.block.BlockStone; import net.minecraft.block.BlockStoneBrick; +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.potion.Potion; import net.minecraft.util.BlockPos; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; -public class ItemChisel extends Item { +public class ItemChisel extends ItemTool { private static final Map blockReplacementMap = new HashMap<>(); static { // Copper @@ -164,11 +168,29 @@ public class ItemChisel extends Item { } public ItemChisel() { - this.setMaxStackSize(1); + super(1.0F, ToolMaterial.ZERO, new HashSet<>()); this.setMaxDamage(212); this.setCreativeTab(CreativeTabs.tabStarlike); } + /** + * + Returns true if players can use this item to affect the world (e.g. placing + * blocks, placing ender eyes in portal) when not in creative + */ + @Override + public boolean canItemEditBlocks() { + return true; + } + + /** + * + Return the enchantability factor of the item, most of the time is based on + * material. + */ + @Override + public int getItemEnchantability() { + return 11; + } + /** * + returns the action that specifies what animation to play when the items is * being used @@ -192,13 +214,53 @@ public class ItemChisel extends Item { */ @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { - MovingObjectPosition movingObjectPosition = this.getMovingObjectPositionFromPlayer(world, entityplayer, false); - if (movingObjectPosition != null - && movingObjectPosition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { - BlockPos blockPos = movingObjectPosition.getBlockPos(); - IBlockState blockState = world.getBlockState(blockPos); - if (blockReplacementMap.containsKey(blockState)) { - entityplayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack)); + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityplayer, false); + if (movingobjectposition != null + && movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { + BlockPos blockpos = movingobjectposition.getBlockPos(); + IBlockState blockState = world.getBlockState(blockpos); + if (ItemChisel.blockReplacementMap.containsKey(blockState)) { + float f = (float) this.getMaxItemUseDuration(itemstack); + + int i = EnchantmentHelper.getEfficiencyModifier(entityplayer); + if (i > 0) { + f -= (float) (i * 4 + 1); // lowered from i*i to i*4 + } + + if (entityplayer.isPotionActive(Potion.digSpeed)) { + f /= 1.0F + (float) (entityplayer.getActivePotionEffect(Potion.digSpeed).getAmplifier() + 1) * 0.2F; + } + + if (entityplayer.isPotionActive(Potion.digSlowdown)) { + float f1 = 1.0F; + switch (entityplayer.getActivePotionEffect(Potion.digSlowdown).getAmplifier()) { + case 0: + f1 = 0.3F; + break; + case 1: + f1 = 0.09F; + break; + case 2: + f1 = 0.0027F; + break; + case 3: + default: + f1 = 8.1E-4F; + } + + f /= f1; + } + + if (entityplayer.isInsideOfMaterial(Material.water) + && !EnchantmentHelper.getAquaAffinityModifier(entityplayer)) { + f *= 5.0F; + } + + if (!entityplayer.onGround) { + f *= 5.0F; + } + + entityplayer.setItemInUse(itemstack, (f < 1.0F) ? 1 : (int) f); } } return itemstack; @@ -223,4 +285,4 @@ public class ItemChisel extends Item { } return itemstack; } -} \ No newline at end of file +} diff --git a/src/main/java/net/starlikeclient/minecraft/items/ItemEnderBackpack.java b/src/main/java/net/starlikeclient/minecraft/items/ItemEnderBackpack.java new file mode 100644 index 00000000..d6103118 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/items/ItemEnderBackpack.java @@ -0,0 +1,78 @@ +package net.starlikeclient.minecraft.items; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.S30PacketWindowItems; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.World; +import net.starlikeclient.minecraft.guis.inventory.ContainerEnderBackpack; + +public class ItemEnderBackpack extends Item { + public class InterfaceEnderBackpack implements IInteractionObject { + public InterfaceEnderBackpack() { + } + + @Override + public ContainerEnderBackpack createContainer(InventoryPlayer inventoryplayer, EntityPlayer entityplayer) { + return new ContainerEnderBackpack(inventoryplayer, entityplayer.getCurrentEquippedItem()); + } + + @Override + public IChatComponent getDisplayName() { + return new ChatComponentTranslation(ItemEnderBackpack.this.getUnlocalizedName() + ".name", new Object[0]); + } + + @Override + public String getGuiID() { + return "starlike:ender_backpack"; + } + + @Override + public String getName() { + return null; + } + + @Override + public boolean hasCustomName() { + return false; + } + } + + public ItemEnderBackpack() { + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.tabStarlike); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { + if (!world.isRemote) { + boolean refreshNeeded = false; + if (!itemstack.hasTagCompound()) { + itemstack.setTagCompound(new NBTTagCompound()); + refreshNeeded = true; + } + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + if (!nbttagcompound.hasKey("UUID")) { + EaglercraftUUID uuid = EaglercraftUUID.randomUUID(); + nbttagcompound.setLongArray("UUID", + new long[] { uuid.getMostSignificantBits(), uuid.getLeastSignificantBits() }); + refreshNeeded = true; + } + if (refreshNeeded) { + ((EntityPlayerMP) entityplayer).playerNetServerHandler.sendPacket(new S30PacketWindowItems( + entityplayer.inventoryContainer.windowId, entityplayer.inventoryContainer.getInventory())); + } + + entityplayer.displayGui(new ItemEnderBackpack.InterfaceEnderBackpack()); + } + return itemstack; + } +} diff --git a/src/main/java/net/starlikeclient/minecraft/world/biome/BiomeGenEnderForest.java b/src/main/java/net/starlikeclient/minecraft/world/biome/BiomeGenEnderForest.java new file mode 100644 index 00000000..1ec2d975 --- /dev/null +++ b/src/main/java/net/starlikeclient/minecraft/world/biome/BiomeGenEnderForest.java @@ -0,0 +1,73 @@ +package net.starlikeclient.minecraft.world.biome; + +import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenForest; +import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.minecraft.world.gen.feature.WorldGenBigMushroom; +import net.starlikeclient.minecraft.init.EntitiesStarlike; + +public class BiomeGenEnderForest extends BiomeGenForest { + public BiomeGenEnderForest(int parInt1, int parInt2) { + super(parInt1, parInt2); + + EntitiesStarlike.configEntities(this); + + this.topBlock = Blocks.end_stone.getDefaultState(); + this.fillerBlock = Blocks.end_stone.getDefaultState(); + this.theBiomeDecorator.treesPerChunk = 5; + this.theBiomeDecorator.deadBushPerChunk = 0; + this.theBiomeDecorator.reedsPerChunk = 0; + this.theBiomeDecorator.cactiPerChunk = 0; + } + + @Override + public void decorate(World world, EaglercraftRandom random, BlockPos blockpos) { + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < 4; ++j) { + int k = i * 4 + 1 + 8 + random.nextInt(3); + int l = j * 4 + 1 + 8 + random.nextInt(3); + BlockPos blockpos1 = world.getHeight(blockpos.add(k, 0, l)); + if (random.nextInt(20) == 0) { + WorldGenBigMushroom worldgenbigmushroom = new WorldGenBigMushroom(); + worldgenbigmushroom.generate(world, random, blockpos1); + } else { + WorldGenAbstractTree worldgenabstracttree = this.genBigTreeChance(random); + worldgenabstracttree.func_175904_e(); + if (worldgenabstracttree.generate(world, random, blockpos1)) { + worldgenabstracttree.func_180711_a(world, random, blockpos1); + } + } + } + } + + int j1 = random.nextInt(5) - 3; + + for (int k1 = 0; k1 < j1; ++k1) { + int l1 = random.nextInt(3); + if (l1 == 0) { + DOUBLE_PLANT_GENERATOR.setPlantType(BlockDoublePlant.EnumPlantType.SYRINGA); + } else if (l1 == 1) { + DOUBLE_PLANT_GENERATOR.setPlantType(BlockDoublePlant.EnumPlantType.ROSE); + } else if (l1 == 2) { + DOUBLE_PLANT_GENERATOR.setPlantType(BlockDoublePlant.EnumPlantType.PAEONIA); + } + + for (int i2 = 0; i2 < 5; ++i2) { + int j2 = random.nextInt(16) + 8; + int k2 = random.nextInt(16) + 8; + int i1 = random.nextInt(world.getHeight(blockpos.add(j2, 0, k2)).getY() + 32); + if (DOUBLE_PLANT_GENERATOR.generate(world, random, + new BlockPos(blockpos.getX() + j2, i1, blockpos.getZ() + k2))) { + break; + } + } + } + + super.decorate(world, random, blockpos); + } + +} diff --git a/src/main/java/org/apache/commons/lang3/ArchUtils.java b/src/main/java/org/apache/commons/lang3/ArchUtils.java index 8caa0df7..53121c1b 100644 --- a/src/main/java/org/apache/commons/lang3/ArchUtils.java +++ b/src/main/java/org/apache/commons/lang3/ArchUtils.java @@ -29,7 +29,7 @@ import org.apache.commons.lang3.arch.Processor; * Important: The os.arch System Property returns the architecture used by the * JVM not of the operating system. *

- * + * * @since 3.6 */ public class ArchUtils { diff --git a/src/main/java/org/apache/commons/lang3/BooleanUtils.java b/src/main/java/org/apache/commons/lang3/BooleanUtils.java index 63e78a56..1c2ad567 100644 --- a/src/main/java/org/apache/commons/lang3/BooleanUtils.java +++ b/src/main/java/org/apache/commons/lang3/BooleanUtils.java @@ -32,7 +32,7 @@ import org.apache.commons.lang3.math.NumberUtils; *

* #ThreadSafe# *

- * + * * @since 2.0 */ public class BooleanUtils { @@ -110,7 +110,7 @@ public class BooleanUtils { /** * Returns a new array of possible values (like an enum would). - * + * * @return a new array of possible values (like an enum would). * @since 3.12.0 */ @@ -281,7 +281,7 @@ public class BooleanUtils { /** * Returns a new array of possible values (like an enum would). - * + * * @return a new array of possible values (like an enum would). * @since 3.12.0 */ diff --git a/src/main/java/org/apache/commons/lang3/CharRange.java b/src/main/java/org/apache/commons/lang3/CharRange.java index 735c8996..87380fb1 100644 --- a/src/main/java/org/apache/commons/lang3/CharRange.java +++ b/src/main/java/org/apache/commons/lang3/CharRange.java @@ -32,7 +32,7 @@ import java.util.NoSuchElementException; *

* #ThreadSafe# *

- * + * * @since 1.0 */ // TODO: This is no longer public and will be removed later as CharSet is moved @@ -387,7 +387,7 @@ final class CharRange implements Iterable, Serializable { *

* #NotThreadSafe# the iterator is not thread-safe *

- * + * * @return an iterator to the chars represented by this range * @since 2.5 */ diff --git a/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java b/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java index 8bbfd377..46f146f3 100644 --- a/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java +++ b/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java @@ -79,18 +79,18 @@ public class CharSequenceUtils { * {@code start}, then the index of the first such occurrence is returned. For * values of {@code searchChar} in the range from 0 to 0xFFFF (inclusive), this * is the smallest value k such that:
- * + * *
 	 * (this.charAt(k) == searchChar) && (k >= start)
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * smallest value k such that:
- * + * *
 	 * (this.codePointAt(k) == searchChar) && (k >= start)
 	 * 
- * + * *
is true. In either case, if no such character occurs inm * {@code cs} at or after position {@code start}, then {@code -1} is returned. * @@ -217,18 +217,18 @@ public class CharSequenceUtils { * character, searching backward starting at the specified index. For values of * {@code searchChar} in the range from 0 to 0xFFFF (inclusive), the index * returned is the largest value k such that:
- * + * *
 	 * (this.charAt(k) == searchChar) && (k <= start)
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * largest value k such that:
- * + * *
 	 * (this.codePointAt(k) == searchChar) && (k <= start)
 	 * 
- * + * *
is true. In either case, if no such character occurs in * {@code cs} at or before position {@code start}, then {@code -1} is returned. * diff --git a/src/main/java/org/apache/commons/lang3/CharSet.java b/src/main/java/org/apache/commons/lang3/CharSet.java index 5cab1113..6f0e0a84 100644 --- a/src/main/java/org/apache/commons/lang3/CharSet.java +++ b/src/main/java/org/apache/commons/lang3/CharSet.java @@ -35,7 +35,7 @@ import java.util.Set; *

* #ThreadSafe# *

- * + * * @since 1.0 */ public class CharSet implements Serializable { @@ -49,35 +49,35 @@ public class CharSet implements Serializable { /** * A CharSet defining no characters. - * + * * @since 2.0 */ public static final CharSet EMPTY = new CharSet((String) null); /** * A CharSet defining ASCII alphabetic characters "a-zA-Z". - * + * * @since 2.0 */ public static final CharSet ASCII_ALPHA = new CharSet("a-zA-Z"); /** * A CharSet defining ASCII alphabetic characters "a-z". - * + * * @since 2.0 */ public static final CharSet ASCII_ALPHA_LOWER = new CharSet("a-z"); /** * A CharSet defining ASCII alphabetic characters "A-Z". - * + * * @since 2.0 */ public static final CharSet ASCII_ALPHA_UPPER = new CharSet("A-Z"); /** * A CharSet defining ASCII alphabetic characters "0-9". - * + * * @since 2.0 */ public static final CharSet ASCII_NUMERIC = new CharSet("0-9"); @@ -85,7 +85,7 @@ public class CharSet implements Serializable { /** * A Map of the common cases used in the factory. Subclasses can add more common * patterns if desired - * + * * @since 2.0 */ protected static final Map COMMON = Collections.synchronizedMap(new HashMap<>()); @@ -159,7 +159,7 @@ public class CharSet implements Serializable { *

* Examples using the negation character: *

- * + * *
 	 *     CharSet.getInstance("^a-c").contains('a') = false
 	 *     CharSet.getInstance("^a-c").contains('d') = true
diff --git a/src/main/java/org/apache/commons/lang3/CharSetUtils.java b/src/main/java/org/apache/commons/lang3/CharSetUtils.java
index dbadd761..7dbc934c 100644
--- a/src/main/java/org/apache/commons/lang3/CharSetUtils.java
+++ b/src/main/java/org/apache/commons/lang3/CharSetUtils.java
@@ -30,7 +30,7 @@ package org.apache.commons.lang3;
  * 

* #ThreadSafe# *

- * + * * @see CharSet * @since 1.0 */ diff --git a/src/main/java/org/apache/commons/lang3/CharUtils.java b/src/main/java/org/apache/commons/lang3/CharUtils.java index dc4933d9..177c585d 100644 --- a/src/main/java/org/apache/commons/lang3/CharUtils.java +++ b/src/main/java/org/apache/commons/lang3/CharUtils.java @@ -30,7 +30,7 @@ package org.apache.commons.lang3; *

* #ThreadSafe# *

- * + * * @since 2.1 */ public class CharUtils { diff --git a/src/main/java/org/apache/commons/lang3/EnumUtils.java b/src/main/java/org/apache/commons/lang3/EnumUtils.java index add3eabf..40c4260a 100644 --- a/src/main/java/org/apache/commons/lang3/EnumUtils.java +++ b/src/main/java/org/apache/commons/lang3/EnumUtils.java @@ -42,7 +42,7 @@ public class EnumUtils { /** * Validate {@code enumClass}. - * + * * @param the type of the enumeration * @param enumClass to check * @return {@code enumClass} @@ -59,7 +59,7 @@ public class EnumUtils { /** * Validate that {@code enumClass} is compatible with representation in a * {@code long}. - * + * * @param the type of the enumeration * @param enumClass to check * @return {@code enumClass} diff --git a/src/main/java/org/apache/commons/lang3/Functions.java b/src/main/java/org/apache/commons/lang3/Functions.java index fc395cc7..fbc25206 100644 --- a/src/main/java/org/apache/commons/lang3/Functions.java +++ b/src/main/java/org/apache/commons/lang3/Functions.java @@ -70,7 +70,7 @@ import org.apache.commons.lang3.function.FailableBooleanSupplier; * Obviously, the second version is much more concise and the spirit of Lambda * expressions is met better than the second version. *

- * + * * @since 3.9 * @deprecated Use {@link org.apache.commons.lang3.function.Failable}. */ diff --git a/src/main/java/org/apache/commons/lang3/ObjectUtils.java b/src/main/java/org/apache/commons/lang3/ObjectUtils.java index 6f10917c..53e17e89 100644 --- a/src/main/java/org/apache/commons/lang3/ObjectUtils.java +++ b/src/main/java/org/apache/commons/lang3/ObjectUtils.java @@ -48,7 +48,7 @@ import org.apache.commons.lang3.time.DurationUtils; *

* #ThreadSafe# *

- * + * * @since 1.0 */ //@Immutable @@ -959,19 +959,19 @@ public class ObjectUtils { /* * These methods ensure constants are not inlined by javac. For example, * typically a developer might declare a constant like so: - * + * * public final static int MAGIC_NUMBER = 5; - * + * * Should a different jar file refer to this, and the MAGIC_NUMBER is changed a * later date (e.g., MAGIC_NUMBER = 6), the different jar file will need to * recompile itself. This is because javac typically inlines the primitive or * String constant directly into the bytecode, and removes the reference to the * MAGIC_NUMBER field. - * + * * To help the other jar (so that it does not need to recompile when constants * are changed) the original developer can declare their constant using one of * the CONST() utility methods, instead: - * + * * public final static int MAGIC_NUMBER = CONST(5); */ @@ -1086,7 +1086,7 @@ public class ObjectUtils { /** * Find the "best guess" middle value among comparables. If there is an even * number of total values, the lower of the two middle values will be returned. - * + * * @param type of values processed by this method * @param comparator to use for comparisons * @param items to compare @@ -1111,7 +1111,7 @@ public class ObjectUtils { /** * Find the "best guess" middle value among comparables. If there is an even * number of total values, the lower of the two middle values will be returned. - * + * * @param type of values processed by this method * @param items to compare * @return T at middle position @@ -1318,7 +1318,7 @@ public class ObjectUtils { *
 	 * ObjectUtils.toString(obj, () -> expensive())
 	 * 
- * + * *
 	 * ObjectUtils.toString(null, () -> expensive())         = result of expensive()
 	 * ObjectUtils.toString(null, () -> expensive())         = result of expensive()
diff --git a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
index 9959d71c..074dd0ef 100644
--- a/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/RandomStringUtils.java
@@ -55,7 +55,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
  * 

* #ThreadSafe# *

- * + * * @since 1.0 */ public class RandomStringUtils { diff --git a/src/main/java/org/apache/commons/lang3/Range.java b/src/main/java/org/apache/commons/lang3/Range.java index 5014362f..7de3175e 100644 --- a/src/main/java/org/apache/commons/lang3/Range.java +++ b/src/main/java/org/apache/commons/lang3/Range.java @@ -59,7 +59,7 @@ public final class Range implements Serializable { /** * Serialization version. - * + * * @see java.io.Serializable */ private static final long serialVersionUID = 1L; @@ -317,7 +317,7 @@ public final class Range implements Serializable { * Fits the given element into this range by returning the given element or, if * out of bounds, the range minimum if below, or the range maximum if above. *

- * + * *
 	 * Range<Integer> range = Range.between(16, 64);
 	 * range.fit(-9) -->  16
@@ -330,7 +330,7 @@ public final class Range implements Serializable {
 	 * range.fit(64) -->  64
 	 * range.fit(99) -->  64
 	 * 
- * + * * @param element the element to check for, not null * @return the minimum, the element, or the maximum depending on the element's * location relative to the range @@ -408,7 +408,7 @@ public final class Range implements Serializable { /** * Calculate the intersection of {@code this} and an overlapping Range. - * + * * @param other overlapping Range * @return range representing the intersection of {@code this} and {@code other} * ({@code this} if equal) diff --git a/src/main/java/org/apache/commons/lang3/RegExUtils.java b/src/main/java/org/apache/commons/lang3/RegExUtils.java index 50f20f8b..7a6b0e66 100644 --- a/src/main/java/org/apache/commons/lang3/RegExUtils.java +++ b/src/main/java/org/apache/commons/lang3/RegExUtils.java @@ -22,7 +22,7 @@ import java.util.regex.Pattern; *

* Helpers to process Strings using regular expressions. *

- * + * * @see java.util.regex.Pattern * @since 3.8 */ diff --git a/src/main/java/org/apache/commons/lang3/SerializationException.java b/src/main/java/org/apache/commons/lang3/SerializationException.java index 92b39b07..1b0e4e31 100644 --- a/src/main/java/org/apache/commons/lang3/SerializationException.java +++ b/src/main/java/org/apache/commons/lang3/SerializationException.java @@ -28,7 +28,7 @@ package org.apache.commons.lang3; *

* #NotThreadSafe# because Throwable is not thread-safe *

- * + * * @since 1.0 */ public class SerializationException extends RuntimeException { diff --git a/src/main/java/org/apache/commons/lang3/SerializationUtils.java b/src/main/java/org/apache/commons/lang3/SerializationUtils.java index 009a389d..d6f9f6bd 100644 --- a/src/main/java/org/apache/commons/lang3/SerializationUtils.java +++ b/src/main/java/org/apache/commons/lang3/SerializationUtils.java @@ -49,7 +49,7 @@ import net.lax1dude.eaglercraft.v1_8.EaglerInputStream; *

* #ThreadSafe# *

- * + * * @since 1.0 */ public class SerializationUtils { @@ -89,7 +89,7 @@ public class SerializationUtils { /** * Constructor. - * + * * @param in The {@code InputStream}. * @param classLoader classloader to use * @throws IOException if an I/O error occurs while reading stream header. @@ -103,7 +103,7 @@ public class SerializationUtils { /** * Overridden version that uses the parameterized {@code ClassLoader} or the * {@code ClassLoader} of the current {@code Thread} to resolve the class. - * + * * @param desc An instance of class {@code ObjectStreamClass}. * @return A {@code Class} object corresponding to {@code desc}. * @throws IOException Any of the usual Input/Output exceptions. @@ -308,7 +308,7 @@ public class SerializationUtils { * This constructor is public to permit tools that require a JavaBean instance * to operate. *

- * + * * @since 2.0 */ public SerializationUtils() { diff --git a/src/main/java/org/apache/commons/lang3/Streams.java b/src/main/java/org/apache/commons/lang3/Streams.java index c54378f6..813603fb 100644 --- a/src/main/java/org/apache/commons/lang3/Streams.java +++ b/src/main/java/org/apache/commons/lang3/Streams.java @@ -42,7 +42,7 @@ import org.apache.commons.lang3.Functions.FailablePredicate; * More specifically, it attempts to address the fact that lambdas are supposed * not to throw Exceptions, at least not checked Exceptions, AKA instances of * {@link Exception}. This enforces the use of constructs like - * + * *
  * Consumer<java.lang.reflect.Method> consumer = m -> {
  * 	try {
@@ -53,13 +53,13 @@ import org.apache.commons.lang3.Functions.FailablePredicate;
  * };
  * stream.forEach(consumer);
  * 
- * + * * Using a {@link FailableStream}, this can be rewritten as follows: - * + * *
  * Streams.failable(stream).forEach((m) -> m.invoke(o, args));
  * 
- * + * * Obviously, the second version is much more concise and the spirit of Lambda * expressions is met better than in the first version. * @@ -128,7 +128,7 @@ public class Streams { /** * A reduced, and simplified version of a {@link Stream} with failable method * signatures. - * + * * @param The streams element type. * @deprecated Use * {@link org.apache.commons.lang3.stream.Streams.FailableStream}. @@ -141,7 +141,7 @@ public class Streams { /** * Constructs a new instance with the given {@code stream}. - * + * * @param stream The stream. */ public FailableStream(final Stream stream) { @@ -224,7 +224,7 @@ public class Streams { * needed for a parallel reduction. * * Note The following will accumulate strings into an ArrayList: - * + * *
 		 * {
 		 * 	@code
@@ -234,7 +234,7 @@ public class Streams {
 		 *
 		 * 

* The following will classify {@code Person} objects by city: - * + * *

 		 * {
 		 * 	@code
@@ -245,7 +245,7 @@ public class Streams {
 		 * 

* The following will classify {@code Person} objects by state and city, * cascading two {@code Collector}s together: - * + * *

 		 * {
 		 * 	@code
@@ -272,7 +272,7 @@ public class Streams {
 		 * mutable result container, such as an {@code ArrayList}, and elements are
 		 * incorporated by updating the state of the result rather than by replacing the
 		 * result. This produces a result equivalent to:
-		 * 
+		 *
 		 * 
 		 * {@code
 		 *     R result = supplier.get();
@@ -292,7 +292,7 @@ public class Streams {
 		 * Note There are many existing classes in the JDK whose signatures are
 		 * well-suited for use with method references as arguments to {@code collect()}.
 		 * For example, the following will accumulate strings into an {@code ArrayList}:
-		 * 
+		 *
 		 * 
 		 * {
 		 * 	@code
@@ -303,7 +303,7 @@ public class Streams {
 		 * 

* The following will take a stream of strings and concatenates them into a * single string: - * + * *

 		 * {
 		 * 	@code
@@ -393,7 +393,7 @@ public class Streams {
 		 * Performs a reduction on the elements of this stream, using the provided
 		 * identity value and an associative accumulation function, and returns the
 		 * reduced value. This is equivalent to:
-		 * 
+		 *
 		 * 
 		 * {@code
 		 *     T result = identity;
@@ -451,7 +451,7 @@ public class Streams {
 
 		/**
 		 * Converts the FailableStream into an equivalent stream.
-		 * 
+		 *
 		 * @return A stream, which will return the same elements, which this
 		 *         FailableStream would return.
 		 */
@@ -468,7 +468,7 @@ public class Streams {
 	 * {@link FailableConsumer} may be applied, instead of {@link Predicate},
 	 * {@link Function}, or {@link Consumer}. The idea is to rewrite a code snippet
 	 * like this:
-	 * 
+	 *
 	 * 
 	 * final List<O> list;
 	 * final Method m;
@@ -481,21 +481,21 @@ public class Streams {
 	 * };
 	 * final List<String> strList = list.stream().map(mapper).collect(Collectors.toList());
 	 * 
- * + * * as follows: - * + * *
 	 * final List<O> list;
 	 * final Method m;
 	 * final List<String> strList = Functions.stream(list.stream()).map((o) -> (String) m.invoke(o))
 	 * 		.collect(Collectors.toList());
 	 * 
- * + * * While the second version may not be quite as efficient (because it * depends on the creation of additional, intermediate objects, of type * FailableStream), it is much more concise, and readable, and meets the spirit * of Lambdas better than the first version. - * + * * @param The streams element type. * @param stream The stream, which is being converted. * @return The {@link FailableStream}, which has been created by converting the @@ -513,7 +513,7 @@ public class Streams { * {@link FailableConsumer} may be applied, instead of {@link Predicate}, * {@link Function}, or {@link Consumer}. The idea is to rewrite a code snippet * like this: - * + * *
 	 * final List<O> list;
 	 * final Method m;
@@ -526,21 +526,21 @@ public class Streams {
 	 * };
 	 * final List<String> strList = list.stream().map(mapper).collect(Collectors.toList());
 	 * 
- * + * * as follows: - * + * *
 	 * final List<O> list;
 	 * final Method m;
 	 * final List<String> strList = Functions.stream(list.stream()).map((o) -> (String) m.invoke(o))
 	 * 		.collect(Collectors.toList());
 	 * 
- * + * * While the second version may not be quite as efficient (because it * depends on the creation of additional, intermediate objects, of type * FailableStream), it is much more concise, and readable, and meets the spirit * of Lambdas better than the first version. - * + * * @param The streams element type. * @param stream The stream, which is being converted. * @return The {@link FailableStream}, which has been created by converting the diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 6f972bd6..2495a681 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -119,7 +119,7 @@ import net.lax1dude.eaglercraft.v1_8.HString; *

* #ThreadSafe# *

- * + * * @see java.lang.String * @since 1.0 */ @@ -153,7 +153,7 @@ public class StringUtils { /** * The empty String {@code ""}. - * + * * @since 2.0 */ public static final String EMPTY = ""; @@ -180,7 +180,7 @@ public class StringUtils { /** * Represents a failed index search. - * + * * @since 2.1 */ public static final int INDEX_NOT_FOUND = -1; @@ -775,11 +775,11 @@ public class StringUtils { * This is a {@code null} safe version of : *

*
- * + * *
 	 * str1.compareTo(str2)
 	 * 
- * + * *
* *

@@ -826,11 +826,11 @@ public class StringUtils { * This is a {@code null} safe version of : *

*
- * + * *
 	 * str1.compareTo(str2)
 	 * 
- * + * *
* *

@@ -889,11 +889,11 @@ public class StringUtils { * This is a {@code null} safe version of : *

*
- * + * *
 	 * str1.compareToIgnoreCase(str2)
 	 * 
- * + * *
* *

@@ -942,11 +942,11 @@ public class StringUtils { * This is a {@code null} safe version of : *

*
- * + * *
 	 * str1.compareToIgnoreCase(str2)
 	 * 
- * + * *
* *

@@ -1603,7 +1603,7 @@ public class StringUtils { * StringUtils.defaultIfBlank("bat", "NULL") = "bat" * StringUtils.defaultIfBlank("", null) = null *

- * + * * @param the specific kind of CharSequence * @param str the CharSequence to check, may be null * @param defaultStr the default CharSequence to return if the input is @@ -1628,7 +1628,7 @@ public class StringUtils { * StringUtils.defaultIfEmpty("bat", "NULL") = "bat" * StringUtils.defaultIfEmpty("", null) = null *
- * + * * @param the specific kind of CharSequence * @param str the CharSequence to check, may be null * @param defaultStr the default CharSequence to return if the input is empty @@ -2380,7 +2380,7 @@ public class StringUtils { * StringUtils.getIfBlank("", null) = null * } *
- * + * * @param the specific kind of CharSequence * @param str the CharSequence to check, may be null * @param defaultSupplier the supplier of default CharSequence to return if the @@ -2415,7 +2415,7 @@ public class StringUtils { * StringUtils.getIfEmpty("", null) = null * } *
- * + * * @param the specific kind of CharSequence * @param str the CharSequence to check, may be null * @param defaultSupplier the supplier of default CharSequence to return if the @@ -2649,33 +2649,33 @@ public class StringUtils { * of the cost table. It is also possible to use this to compute the unbounded * Levenshtein distance by starting the threshold at 1 and doubling each time * until the distance is found; this is O(dm), where d is the distance. - * + * * One subtlety comes from needing to ignore entries on the border of our stripe * eg. p[] = |#|#|#|* d[] = *|#|#|#| We must ignore the entry to the left of the * leftmost member We must ignore the entry above the rightmost member - * + * * Another subtlety comes from our stripe running off the matrix if the strings * aren't of the same size. Since string s is always swapped to be the shorter * of the two, the stripe will always run off to the upper right instead of the * lower left of the matrix. - * + * * As a concrete example, suppose s is of length 5, t is of length 7, and our * threshold is 1. In this case we're going to walk a stripe of length 3. The * matrix would look like so: - * + * * 1 2 3 4 5 1 |#|#| | | | 2 |#|#|#| | | 3 | |#|#|#| | 4 | | |#|#|#| 5 | | | * |#|#| 6 | | | | |#| 7 | | | | | | - * + * * Note how the stripe leads off the table as there is no possible way to turn a * string of length 5 into one of length 7 in edit distance of 1. - * + * * Additionally, this implementation decreases memory usage by using two * single-dimensional arrays and swapping them back and forth instead of * allocating an entire n by m matrix. This requires a few minor changes, such * as immediately returning when it's detected that the stripe has run off the * matrix and initially filling the arrays with large values so that entries we * don't compute are ignored. - * + * * See Algorithms on Strings, Trees and Sequences by Dan Gusfield for some * discussion. */ @@ -2850,18 +2850,18 @@ public class StringUtils { * then the index (in Unicode code units) of the first such occurrence is * returned. For values of {@code searchChar} in the range from 0 to 0xFFFF * (inclusive), this is the smallest value k such that:
- * + * *
 	 * this.charAt(k) == searchChar
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * smallest value k such that:
- * + * *
 	 * this.codePointAt(k) == searchChar
 	 * 
- * + * *
is true. In either case, if no such character occurs in * {@code seq}, then {@code INDEX_NOT_FOUND (-1)} is returned. * @@ -2904,18 +2904,18 @@ public class StringUtils { * smaller than {@code startPos}, then the index of the first such occurrence is * returned. For values of {@code searchChar} in the range from 0 to 0xFFFF * (inclusive), this is the smallest value k such that:
- * + * *
 	 * (this.charAt(k) == searchChar) && (k >= startPos)
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * smallest value k such that:
- * + * *
 	 * (this.codePointAt(k) == searchChar) && (k >= startPos)
 	 * 
- * + * *
is true. In either case, if no such character occurs in * {@code seq} at or after position {@code startPos}, then {@code -1} is * returned. @@ -3124,7 +3124,7 @@ public class StringUtils { * StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'z', 'a'} ) = 3 * StringUtils.indexOfAnyBut("aba", new char[] {'z'} ) = 0 * StringUtils.indexOfAnyBut("aba", new char[] {'a', 'b'} ) = -1 - * + * *
* * @param cs the CharSequence to check, may be null @@ -5344,18 +5344,18 @@ public class StringUtils { * character. For values of {@code searchChar} in the range from 0 to 0xFFFF * (inclusive), the index (in Unicode code units) returned is the largest value * k such that:
- * + * *
 	 * this.charAt(k) == searchChar
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * largest value k such that:
- * + * *
 	 * this.codePointAt(k) == searchChar
 	 * 
- * + * *
is true. In either case, if no such character occurs in this * string, then {@code -1} is returned. Furthermore, a {@code null} or empty * ("") {@code CharSequence} will return {@code -1}. The {@code seq} @@ -5391,18 +5391,18 @@ public class StringUtils { * character, searching backward starting at the specified index. For values of * {@code searchChar} in the range from 0 to 0xFFFF (inclusive), the index * returned is the largest value k such that:
- * + * *
 	 * (this.charAt(k) == searchChar) && (k <= startPos)
 	 * 
- * + * *
is true. For other values of {@code searchChar}, it is the * largest value k such that:
- * + * *
 	 * (this.codePointAt(k) == searchChar) && (k <= startPos)
 	 * 
- * + * *
is true. In either case, if no such character occurs in * {@code seq} at or before position {@code startPos}, then {@code -1} is * returned. Furthermore, a {@code null} or empty ("") {@code CharSequence} will @@ -6079,7 +6079,7 @@ public class StringUtils { *

* Matches may overlap: *

- * + * *
 	 * StringUtils.ordinalIndexOf("ababab", "aba", 1)   = 0
 	 * StringUtils.ordinalIndexOf("ababab", "aba", 2)   = 2
@@ -6263,7 +6263,7 @@ public class StringUtils {
 	 * 

* With additional prefixes, *

- * + * *
 	 * StringUtils.prependIfMissing(null, null, null) = null
 	 * StringUtils.prependIfMissing("abc", null, null) = "abc"
@@ -6304,7 +6304,7 @@ public class StringUtils {
 	 * 

* With additional prefixes, *

- * + * *
 	 * StringUtils.prependIfMissingIgnoreCase(null, null, null) = null
 	 * StringUtils.prependIfMissingIgnoreCase("abc", null, null) = "abc"
@@ -8080,7 +8080,7 @@ public class StringUtils {
 	 * Splits a String by Character type as returned by
 	 * {@code java.lang.Character.getType(char)}. Groups of contiguous characters of
 	 * the same type are returned as complete tokens.
-	 * 
+	 *
 	 * 
 	 * StringUtils.splitByCharacterType(null)         = null
 	 * StringUtils.splitByCharacterType("")           = []
@@ -8092,7 +8092,7 @@ public class StringUtils {
 	 * StringUtils.splitByCharacterType("foo200Bar")  = ["foo", "200", "B", "ar"]
 	 * StringUtils.splitByCharacterType("ASFRules")   = ["ASFR", "ules"]
 	 * 
- * + * * @param str the String to split, may be {@code null} * @return an array of parsed Strings, {@code null} if null String input * @since 2.4 @@ -8111,7 +8111,7 @@ public class StringUtils { * type {@code Character.LOWERCASE_LETTER} will belong to the following token * rather than to the preceding, if any, {@code Character.UPPERCASE_LETTER} * token. - * + * * @param str the String to split, may be {@code null} * @param camelCase whether to use so-called "camel-case" for letter types * @return an array of parsed Strings, {@code null} if null String input @@ -8158,7 +8158,7 @@ public class StringUtils { * preceding a token of type {@code Character.LOWERCASE_LETTER} will belong to * the following token rather than to the preceding, if any, * {@code Character.UPPERCASE_LETTER} token. - * + * *
 	 * StringUtils.splitByCharacterTypeCamelCase(null)         = null
 	 * StringUtils.splitByCharacterTypeCamelCase("")           = []
@@ -8170,7 +8170,7 @@ public class StringUtils {
 	 * StringUtils.splitByCharacterTypeCamelCase("foo200Bar")  = ["foo", "200", "Bar"]
 	 * StringUtils.splitByCharacterTypeCamelCase("ASFRules")   = ["ASF", "Rules"]
 	 * 
- * + * * @param str the String to split, may be {@code null} * @return an array of parsed Strings, {@code null} if null String input * @since 2.4 diff --git a/src/main/java/org/apache/commons/lang3/ThreadUtils.java b/src/main/java/org/apache/commons/lang3/ThreadUtils.java index a0281007..a04cd78d 100644 --- a/src/main/java/org/apache/commons/lang3/ThreadUtils.java +++ b/src/main/java/org/apache/commons/lang3/ThreadUtils.java @@ -95,7 +95,7 @@ public class ThreadUtils { /** * Evaluates this predicate on the given threadgroup. - * + * * @param threadGroup the threadgroup * @return {@code true} if the threadGroup matches the predicate, otherwise * {@code false} @@ -138,7 +138,7 @@ public class ThreadUtils { /** * Evaluates this predicate on the given thread. - * + * * @param thread the thread * @return {@code true} if the thread matches the predicate, otherwise * {@code false} diff --git a/src/main/java/org/apache/commons/lang3/Validate.java b/src/main/java/org/apache/commons/lang3/Validate.java index f7b39a2e..8ed9d835 100644 --- a/src/main/java/org/apache/commons/lang3/Validate.java +++ b/src/main/java/org/apache/commons/lang3/Validate.java @@ -51,7 +51,7 @@ import net.lax1dude.eaglercraft.v1_8.JDKBackports; *

* #ThreadSafe# *

- * + * * @see java.lang.String#format(String, Object...) * @since 2.0 */ diff --git a/src/main/java/org/apache/commons/lang3/arch/package-info.java b/src/main/java/org/apache/commons/lang3/arch/package-info.java index e340e495..0c68b8b7 100644 --- a/src/main/java/org/apache/commons/lang3/arch/package-info.java +++ b/src/main/java/org/apache/commons/lang3/arch/package-info.java @@ -16,7 +16,7 @@ */ /** * Provides classes to work with the values of the os.arch system property. - * + * * @since 3.6 */ package org.apache.commons.lang3.arch; diff --git a/src/main/java/org/apache/commons/lang3/builder/Builder.java b/src/main/java/org/apache/commons/lang3/builder/Builder.java index 1e79d7ab..c3a38c52 100644 --- a/src/main/java/org/apache/commons/lang3/builder/Builder.java +++ b/src/main/java/org/apache/commons/lang3/builder/Builder.java @@ -38,7 +38,7 @@ package org.apache.commons.lang3.builder; * *

* Example Builder: - * + * *

  * 
  * class FontBuilder implements Builder<Font> {
@@ -68,7 +68,7 @@ package org.apache.commons.lang3.builder;
  * 
* * Example Builder Usage: - * + * *
  * 
  * Font bold14ptSansSerifFont = new FontBuilder(Font.SANS_SERIF).bold()
diff --git a/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java b/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java
index d8cbb34d..9c0032f2 100644
--- a/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java
+++ b/src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java
@@ -56,7 +56,7 @@ import org.apache.commons.lang3.StringUtils;
  * If you want to format the output of certain objects, such as dates, you must
  * create a subclass and override a method.
  * 

- * + * *
  * public class MyStyle extends ToStringStyle {
  * 	protected void appendDetail(StringBuffer buffer, String fieldName, Object value) {
@@ -391,7 +391,7 @@ public abstract class ToStringStyle implements Serializable {
 			/*
 			 * if (fieldName == null) { throw new UnsupportedOperationException(
 			 * "Field names are mandatory when using JsonToStringStyle"); }
-			 * 
+			 *
 			 * super.appendFieldStart(buffer, FIELD_NAME_QUOTE +
 			 * StringEscapeUtils.escapeJson(fieldName) + FIELD_NAME_QUOTE);
 			 */
@@ -586,7 +586,7 @@ public abstract class ToStringStyle implements Serializable {
 		 * 

* Ensure Singleton after serialization. *

- * + * * @return the singleton */ private Object readResolve() { @@ -631,7 +631,7 @@ public abstract class ToStringStyle implements Serializable { *

* Ensure Singleton after serialization. *

- * + * * @return the singleton */ private Object readResolve() { diff --git a/src/main/java/org/apache/commons/lang3/package-info.java b/src/main/java/org/apache/commons/lang3/package-info.java index 2882d037..83b77063 100644 --- a/src/main/java/org/apache/commons/lang3/package-info.java +++ b/src/main/java/org/apache/commons/lang3/package-info.java @@ -197,7 +197,7 @@ *

* *

Using toMap

- * + * *
  * 
  * Map colorMap = ArrayUtils.toMap(new String[][] {{
diff --git a/src/main/java/org/apache/commons/lang3/stream/Streams.java b/src/main/java/org/apache/commons/lang3/stream/Streams.java
index 497fd800..26a279e5 100644
--- a/src/main/java/org/apache/commons/lang3/stream/Streams.java
+++ b/src/main/java/org/apache/commons/lang3/stream/Streams.java
@@ -43,7 +43,7 @@ import org.apache.commons.lang3.function.FailablePredicate;
  * More specifically, it attempts to address the fact that lambdas are supposed
  * not to throw Exceptions, at least not checked Exceptions, AKA instances of
  * {@link Exception}. This enforces the use of constructs like
- * 
+ *
  * 
  * Consumer<java.lang.reflect.Method> consumer = m -> {
  * 	try {
@@ -54,13 +54,13 @@ import org.apache.commons.lang3.function.FailablePredicate;
  * };
  * stream.forEach(consumer);
  * 
- * + * * Using a {@link FailableStream}, this can be rewritten as follows: - * + * *
  * Streams.failable(stream).forEach((m) -> m.invoke(o, args));
  * 
- * + * * Obviously, the second version is much more concise and the spirit of Lambda * expressions is met better than in the first version. * diff --git a/src/main/java/org/apache/commons/lang3/text/CompositeFormat.java b/src/main/java/org/apache/commons/lang3/text/CompositeFormat.java index f4eedea3..6ca6aa72 100644 --- a/src/main/java/org/apache/commons/lang3/text/CompositeFormat.java +++ b/src/main/java/org/apache/commons/lang3/text/CompositeFormat.java @@ -25,7 +25,7 @@ import java.text.ParsePosition; * Formats using one formatter and parses using a different formatter. An * example of use for this would be a webapp where data is taken in one way and * stored in a database another way. - * + * * @!deprecated as of 3.6, use commons-text * CompositeFormat instead diff --git a/src/main/java/org/apache/commons/lang3/text/ExtendedMessageFormat.java b/src/main/java/org/apache/commons/lang3/text/ExtendedMessageFormat.java index 8024a404..06918a55 100644 --- a/src/main/java/org/apache/commons/lang3/text/ExtendedMessageFormat.java +++ b/src/main/java/org/apache/commons/lang3/text/ExtendedMessageFormat.java @@ -240,7 +240,7 @@ public class ExtendedMessageFormat extends MessageFormat { /** * Learn whether the specified Collection contains non-null elements. - * + * * @param coll to check * @return {@code true} if some Object was found, {@code false} otherwise. */ diff --git a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java index 8e7fdc7f..ebcf9720 100644 --- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java +++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java @@ -1213,14 +1213,14 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build *

* This method is useful for adding a separator each time around the loop except * the first. - * + * *

 	 * for (Iterator it = list.iterator(); it.hasNext();) {
 	 * 	appendSeparator(',');
 	 * 	append(it.next());
 	 * }
 	 * 
- * + * * Note that for this simple example, you should use * {@link #appendWithSeparators(Iterable, String)}. * @@ -1241,7 +1241,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build * the standard-separator * * The separator is appended using {@link #append(char)}. - * + * * @param standard the separator if builder is not empty * @param defaultIfEmpty the separator if builder is empty * @return this, to enable chaining @@ -1263,14 +1263,14 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build * This method is useful for adding a separator each time around the loop except * the first. *

- * + * *
 	 * for (int i = 0; i < list.size(); i++) {
 	 * 	appendSeparator(",", i);
 	 * 	append(list.get(i));
 	 * }
 	 * 
- * + * * Note that for this simple example, you should use * {@link #appendWithSeparators(Iterable, String)}. * @@ -1294,14 +1294,14 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build *

* This method is useful for adding a separator each time around the loop except * the first. - * + * *

 	 * for (Iterator it = list.iterator(); it.hasNext();) {
 	 * 	appendSeparator(",");
 	 * 	append(it.next());
 	 * }
 	 * 
- * + * * Note that for this simple example, you should use * {@link #appendWithSeparators(Iterable, String)}. * @@ -1321,14 +1321,14 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build * This method is useful for adding a separator each time around the loop except * the first. *

- * + * *
 	 * for (int i = 0; i < list.size(); i++) {
 	 * 	appendSeparator(",", i);
 	 * 	append(list.get(i));
 	 * }
 	 * 
- * + * * Note that for this simple example, you should use * {@link #appendWithSeparators(Iterable, String)}. * @@ -1353,7 +1353,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build * using {@link #append(String)}. *

* This method is for example useful for constructing queries - * + * *

 	 * StrBuilder whereClause = new StrBuilder();
 	 * if (searchCommand.getPriority() != null) {
@@ -1513,7 +1513,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build
 	 * synchronization. Once the tokenizer has been used once, it must be
 	 * {@link StrTokenizer#reset() reset} to pickup the latest changes in the
 	 * builder. For example:
-	 * 
+	 *
 	 * 
 	 * StrBuilder b = new StrBuilder();
 	 * b.append("a b ");
@@ -1524,7 +1524,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build
 	 * t.reset(); // reset causes builder changes to be picked up
 	 * String[] tokens3 = t.getTokenArray(); // returns a,b,c,d
 	 * 
- * + * * In addition to simply intermixing appends and tokenization, you can also call * the set methods on the tokenizer to alter how it tokenizes. Just remember to * call reset when you want to pickup builder changes. @@ -1566,7 +1566,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build /** * Implement the {@link Builder} interface. - * + * * @return the builder as a String * @since 3.2 * @see #toString() @@ -2329,6 +2329,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build * * @return {@code true} if the size is {@code 0}. */ + @Override public boolean isEmpty() { return size == 0; } @@ -2958,7 +2959,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build // ----------------------------------------------------------------------- /** * {@inheritDoc} - * + * * @since 3.0 */ @Override diff --git a/src/main/java/org/apache/commons/lang3/text/StrLookup.java b/src/main/java/org/apache/commons/lang3/text/StrLookup.java index d389c3cc..cda17c4a 100644 --- a/src/main/java/org/apache/commons/lang3/text/StrLookup.java +++ b/src/main/java/org/apache/commons/lang3/text/StrLookup.java @@ -172,13 +172,13 @@ public abstract class StrLookup { *

* The {@link #lookup(String)} method always returns a String, regardless of the * underlying data, by converting it as necessary. For example: - * + * *

 	 * Map<String, Object> map = new HashMap<String, Object>();
 	 * map.put("number", Integer.valueOf(2));
 	 * assertEquals("2", StrLookup.mapLookup(map).lookup("number"));
 	 * 
- * + * * @param key the key to be looked up, may be null * @return the matching value, null if no match */ diff --git a/src/main/java/org/apache/commons/lang3/text/StrSubstitutor.java b/src/main/java/org/apache/commons/lang3/text/StrSubstitutor.java index 6328957b..f8a0785f 100644 --- a/src/main/java/org/apache/commons/lang3/text/StrSubstitutor.java +++ b/src/main/java/org/apache/commons/lang3/text/StrSubstitutor.java @@ -37,7 +37,7 @@ import org.apache.commons.lang3.StringUtils; *

* The simplest example is to use this class to replace Java System properties. * For example: - * + * *

  * StrSubstitutor
  * 		.replaceSystemProperties("You are running with java.version = ${java.version} and os.name = ${os.name}.");
@@ -51,7 +51,7 @@ import org.apache.commons.lang3.StringUtils;
  * for interpolation. In the returned text all variable references (as long as
  * their values are known) will be resolved. The following example demonstrates
  * this:
- * 
+ *
  * 
  * Map valuesMap = HashMap();
  * valuesMap.put("animal", "quick brown fox");
@@ -60,9 +60,9 @@ import org.apache.commons.lang3.StringUtils;
  * StrSubstitutor sub = new StrSubstitutor(valuesMap);
  * String resolvedString = sub.replace(templateString);
  * 
- * + * * yielding: - * + * *
  *      The quick brown fox jumps over the lazy dog.
  * 
@@ -76,7 +76,7 @@ import org.apache.commons.lang3.StringUtils; * {@link #setValueDelimiterMatcher(StrMatcher)}, * {@link #setValueDelimiter(char)} or {@link #setValueDelimiter(String)}. The * following shows an example with variable default value settings: - * + * *
  * Map valuesMap = HashMap();
  * valuesMap.put("animal", "quick brown fox");
@@ -85,9 +85,9 @@ import org.apache.commons.lang3.StringUtils;
  * StrSubstitutor sub = new StrSubstitutor(valuesMap);
  * String resolvedString = sub.replace(templateString);
  * 
- * + * * yielding: - * + * *
  *      The quick brown fox jumps over the lazy dog. 1234567890.
  * 
@@ -104,36 +104,36 @@ import org.apache.commons.lang3.StringUtils; *

* Sometimes the interpolation's result must contain a variable prefix. As an * example take the following source text: - * + * *

  *   The variable ${${name}} must be used.
  * 
- * + * * Here only the variable's name referred to in the text should be replaced * resulting in the text (assuming that the value of the {@code name} variable * is {@code x}): - * + * *
  *   The variable ${x} must be used.
  * 
- * + * * To achieve this effect there are two possibilities: Either set a different * prefix and suffix for variables which do not conflict with the result text * you want to produce. The other possibility is to use the escape character, by * default '$'. If this character is placed before a variable reference, this * reference is ignored and won't be replaced. For example: - * + * *
  *   The variable $${${name}} must be used.
  * 
*

* In some complex scenarios you might even want to perform substitution in the * names of variables, for instance - * + * *

  * ${jre-${java.specification.version}}
  * 
- * + * * {@code StrSubstitutor} supports this recursive substitution in variable * names, but it has to be enabled explicitly by setting the * {@link #setEnableSubstitutionInVariables(boolean) @@ -164,7 +164,7 @@ public class StrSubstitutor { public static final StrMatcher DEFAULT_SUFFIX = StrMatcher.stringMatcher("}"); /** * Constant for the default value delimiter of a variable. - * + * * @since 3.2 */ public static final StrMatcher DEFAULT_VALUE_DELIMITER = StrMatcher.stringMatcher(":-"); diff --git a/src/main/java/org/apache/commons/lang3/text/StrTokenizer.java b/src/main/java/org/apache/commons/lang3/text/StrTokenizer.java index 2a8835a5..45653de5 100644 --- a/src/main/java/org/apache/commons/lang3/text/StrTokenizer.java +++ b/src/main/java/org/apache/commons/lang3/text/StrTokenizer.java @@ -52,7 +52,7 @@ import org.apache.commons.lang3.StringUtils; * removed. One usage might be to remove new line characters. *

* Empty tokens may be removed or returned as null. - * + * *

  * "a,b,c"         - Three tokens "a","b","c"   (comma delimiter)
  * " a, b , c "    - Three tokens "a","b","c"   (default CSV processing trims whitespace)
@@ -137,7 +137,7 @@ public class StrTokenizer implements ListIterator, Cloneable {
 	 * method).
 	 * 

* You must call a "reset" method to set the string which you want to parse. - * + * * @return a new tokenizer instance which parses Comma Separated Value strings */ public static StrTokenizer getCSVInstance() { @@ -189,7 +189,7 @@ public class StrTokenizer implements ListIterator, Cloneable { * be overridden with the setTrimmer method). *

* You must call a "reset" method to set the string which you want to parse. - * + * * @return a new tokenizer instance which parses Tab Separated Value strings. */ public static StrTokenizer getTSVInstance() { @@ -200,7 +200,7 @@ public class StrTokenizer implements ListIterator, Cloneable { * Gets a new tokenizer instance which parses Tab Separated Value strings. The * default for CSV processing will be trim whitespace from both ends (which can * be overridden with the setTrimmer method). - * + * * @param input the string to parse * @return a new tokenizer instance which parses Tab Separated Value strings. */ @@ -214,7 +214,7 @@ public class StrTokenizer implements ListIterator, Cloneable { * Gets a new tokenizer instance which parses Tab Separated Value strings. The * default for CSV processing will be trim whitespace from both ends (which can * be overridden with the setTrimmer method). - * + * * @param input the string to parse * @return a new tokenizer instance which parses Tab Separated Value strings. */ @@ -408,7 +408,7 @@ public class StrTokenizer implements ListIterator, Cloneable { /** * Unsupported ListIterator operation. - * + * * @param obj this parameter ignored. * @throws UnsupportedOperationException always */ @@ -917,7 +917,7 @@ public class StrTokenizer implements ListIterator, Cloneable { /** * Unsupported ListIterator operation. - * + * * @param obj this parameter ignored. * @throws UnsupportedOperationException always */ diff --git a/src/main/java/org/apache/commons/lang3/text/WordUtils.java b/src/main/java/org/apache/commons/lang3/text/WordUtils.java index 115c68cf..9a6b1550 100644 --- a/src/main/java/org/apache/commons/lang3/text/WordUtils.java +++ b/src/main/java/org/apache/commons/lang3/text/WordUtils.java @@ -727,7 +727,7 @@ public class WordUtils { * "flammable\ninflammable" * * - * + * * @param str the String to be word wrapped, may be null * @param wrapLength the column to wrap the words at, less than 1 is treated * as 1 diff --git a/src/main/java/org/apache/commons/lang3/time/DateParser.java b/src/main/java/org/apache/commons/lang3/time/DateParser.java index b448a255..bc7750b0 100644 --- a/src/main/java/org/apache/commons/lang3/time/DateParser.java +++ b/src/main/java/org/apache/commons/lang3/time/DateParser.java @@ -73,7 +73,7 @@ public interface DateParser { * Equivalent to DateFormat.parse(String). * * See {@link java.text.DateFormat#parse(String)} for more information. - * + * * @param source A {@code String} whose beginning should be parsed. * @return A {@code Date} parsed from the string * @throws ParseException if the beginning of the specified string cannot be diff --git a/src/main/java/org/apache/commons/lang3/time/DateUtils.java b/src/main/java/org/apache/commons/lang3/time/DateUtils.java index 38427293..14dc72c7 100644 --- a/src/main/java/org/apache/commons/lang3/time/DateUtils.java +++ b/src/main/java/org/apache/commons/lang3/time/DateUtils.java @@ -137,27 +137,27 @@ public class DateUtils { /** * Number of milliseconds in a standard second. - * + * * @since 2.1 */ public static final long MILLIS_PER_SECOND = 1000; /** * Number of milliseconds in a standard minute. - * + * * @since 2.1 */ public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; /** * Number of milliseconds in a standard hour. - * + * * @since 2.1 */ public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; /** * Number of milliseconds in a standard day. - * + * * @since 2.1 */ public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; @@ -1834,7 +1834,7 @@ public class DateUtils { // ----------------------------------------------------------------------- /** * Converts a {@code Date} of a given {@code TimeZone} into a {@code Calendar} - * + * * @param date the date to convert to a Calendar * @param tz the time zone of the {@code date} * @return the created Calendar diff --git a/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java b/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java index a1727f3c..4819214d 100644 --- a/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java +++ b/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java @@ -76,7 +76,7 @@ import org.apache.commons.lang3.Validate; * repeated to ensure that the field occupies a certain minimum size. Values * will be left-padded with 0 unless padding is disabled in the method * invocation. - * + * * @since 2.1 */ public class DurationFormatUtils { diff --git a/src/main/java/org/apache/commons/lang3/time/FastDateFormat.java b/src/main/java/org/apache/commons/lang3/time/FastDateFormat.java index b4a9d77c..b19becfa 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastDateFormat.java +++ b/src/main/java/org/apache/commons/lang3/time/FastDateFormat.java @@ -704,7 +704,7 @@ public class FastDateFormat extends Format implements DateParser, DatePrinter { /* * (non-Javadoc) - * + * * @see DateParser#parse(java.lang.String) */ @Override @@ -714,7 +714,7 @@ public class FastDateFormat extends Format implements DateParser, DatePrinter { /* * (non-Javadoc) - * + * * @see DateParser#parse(java.lang.String, java.text.ParsePosition) */ @Override @@ -724,7 +724,7 @@ public class FastDateFormat extends Format implements DateParser, DatePrinter { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#parse(java.lang.String, * java.text.ParsePosition, java.util.Calendar) */ @@ -735,7 +735,7 @@ public class FastDateFormat extends Format implements DateParser, DatePrinter { /* * (non-Javadoc) - * + * * @see java.text.Format#parseObject(java.lang.String, java.text.ParsePosition) */ @Override diff --git a/src/main/java/org/apache/commons/lang3/time/FastDateParser.java b/src/main/java/org/apache/commons/lang3/time/FastDateParser.java index f91d75ef..5046c26d 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastDateParser.java +++ b/src/main/java/org/apache/commons/lang3/time/FastDateParser.java @@ -226,7 +226,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Constructs a Strategy that parses a TimeZone - * + * * @param pattern The Pattern */ ISO8601TimeZoneStrategy(final String pattern) { @@ -687,7 +687,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Gets the short and long values displayed for a field - * + * * @param calendar The calendar to obtain the short and long values * @param locale The locale of display names * @param field The field of interest @@ -714,7 +714,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Gets a cache of Strategies for a particular field - * + * * @param field The Calendar field * @return a cache of Locale to Strategy */ @@ -831,7 +831,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Adjusts dates to be within appropriate century - * + * * @param twoDigitYear The year to adjust * @return A value between centuryStart(inclusive) to * centuryStart+100(exclusive) @@ -862,7 +862,7 @@ public class FastDateParser implements DateParser, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#getLocale() */ @Override @@ -872,7 +872,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Constructs a Strategy that parses a Text field - * + * * @param field The Calendar field * @param definingCalendar The calendar to obtain the short and long values * @return a TextStrategy for the field and Locale @@ -895,7 +895,7 @@ public class FastDateParser implements DateParser, Serializable { // ----------------------------------------------------------------------- /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#getPattern() */ @Override @@ -905,7 +905,7 @@ public class FastDateParser implements DateParser, Serializable { /** * Gets a Strategy given a field from a SimpleDateFormat pattern - * + * * @param f A sub-sequence of the SimpleDateFormat pattern * @param definingCalendar The calendar to obtain the short and long values * @return The Strategy that will handle parsing for the field @@ -965,7 +965,7 @@ public class FastDateParser implements DateParser, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#getTimeZone() */ @Override @@ -1007,7 +1007,7 @@ public class FastDateParser implements DateParser, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#parse(java.lang.String) */ @Override @@ -1079,7 +1079,7 @@ public class FastDateParser implements DateParser, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#parseObject(java.lang.String) */ @Override @@ -1089,7 +1089,7 @@ public class FastDateParser implements DateParser, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DateParser#parseObject(java.lang.String, * java.text.ParsePosition) */ diff --git a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java index 35a46d7f..963b7f95 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java +++ b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java @@ -1167,7 +1167,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /** * Creates a String representation of the given Calendar by applying the rules * of this printer to it. - * + * * @param c the Calender to apply the rules to. * @return a String representation of the given Calendar. */ @@ -1196,7 +1196,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Calendar) */ @Override @@ -1206,7 +1206,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Calendar, * java.lang.Appendable) */ @@ -1223,7 +1223,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Calendar, * java.lang.StringBuffer) */ @@ -1236,7 +1236,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Date) */ @Override @@ -1248,7 +1248,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Date, * java.lang.Appendable) */ @@ -1261,7 +1261,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(java.util.Date, * java.lang.StringBuffer) */ @@ -1274,7 +1274,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(long) */ @Override @@ -1286,7 +1286,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(long, * java.lang.Appendable) */ @@ -1299,7 +1299,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#format(long, * java.lang.StringBuffer) */ @@ -1315,7 +1315,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { * Formats a {@code Date}, {@code Calendar} or {@code Long} (milliseconds) * object. *

- * + * * @since 3.5 * @param obj the object to format * @return The formatted value. @@ -1339,7 +1339,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { * Formats a {@code Date}, {@code Calendar} or {@code Long} (milliseconds) * object. *

- * + * * @deprecated Use {{@link #format(Date)}, {{@link #format(Calendar)}, * {{@link #format(long)}, or {{@link #format(Object)} * @param obj the object to format @@ -1363,7 +1363,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#getLocale() */ @Override @@ -1392,7 +1392,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { // ----------------------------------------------------------------------- /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#getPattern() */ @Override @@ -1402,7 +1402,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /* * (non-Javadoc) - * + * * @see org.apache.commons.lang3.time.DatePrinter#getTimeZone() */ @Override @@ -1443,7 +1443,7 @@ public class FastDatePrinter implements DatePrinter, Serializable { /** * Creation method for new calender instances. - * + * * @return a new Calendar instance. */ private Calendar newCalendar() { diff --git a/src/main/java/org/apache/commons/lang3/time/FastTimeZone.java b/src/main/java/org/apache/commons/lang3/time/FastTimeZone.java index 72eaa697..1e854816 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastTimeZone.java +++ b/src/main/java/org/apache/commons/lang3/time/FastTimeZone.java @@ -33,7 +33,7 @@ public class FastTimeZone { /** * Gets the GMT TimeZone. - * + * * @return A TimeZone with a raw offset of zero. */ public static TimeZone getGmtTimeZone() { diff --git a/src/main/java/org/apache/commons/lang3/time/StopWatch.java b/src/main/java/org/apache/commons/lang3/time/StopWatch.java index 0d0136cb..ad21e3f7 100644 --- a/src/main/java/org/apache/commons/lang3/time/StopWatch.java +++ b/src/main/java/org/apache/commons/lang3/time/StopWatch.java @@ -256,7 +256,7 @@ public class StopWatch { *

* Constructor. *

- * + * * @param message A message for string presentation. * @since 3.10 */ diff --git a/src/main/java/org/json/JSONArray.java b/src/main/java/org/json/JSONArray.java index 231165e4..e378b8a7 100644 --- a/src/main/java/org/json/JSONArray.java +++ b/src/main/java/org/json/JSONArray.java @@ -64,7 +64,7 @@ public class JSONArray implements Iterable { /** * Create a new JSONException in a common format for incorrect conversions. - * + * * @param idx index of the item * @param valueType the type of value being coerced to * @param cause optional cause of the coercion failure @@ -330,7 +330,7 @@ public class JSONArray implements Iterable { /** * Add an array's elements to the JSONArray. ` - * + * * @param array Array. If the parameter passed is null, or not * an array, JSONArray, Collection, or Iterable, * an exception will be thrown. @@ -474,7 +474,7 @@ public class JSONArray implements Iterable { /** * Get the enum value associated with an index. - * + * * @param Enum Type * @param clazz The type of enum to retrieve. * @param index The index must be between 0 and length() - 1. @@ -845,7 +845,7 @@ public class JSONArray implements Iterable { /** * Get the enum value associated with a key. - * + * * @param Enum Type * @param clazz The type of enum to retrieve. * @param index The index must be between 0 and length() - 1. @@ -857,7 +857,7 @@ public class JSONArray implements Iterable { /** * Get the enum value associated with a key. - * + * * @param Enum Type * @param clazz The type of enum to retrieve. * @param index The index must be between 0 and length() - 1. @@ -1164,7 +1164,7 @@ public class JSONArray implements Iterable { /** * Queries and returns a value from this object using {@code jsonPointer}, or * returns null if the query fails due to a missing key. - * + * * @param jsonPointer The JSON pointer * @return the queried value or {@code null} * @throws IllegalArgumentException if {@code jsonPointer} has invalid syntax @@ -1180,7 +1180,7 @@ public class JSONArray implements Iterable { /** * Queries and returns a value from this object using {@code jsonPointer}, or * returns null if the query fails due to a missing key. - * + * * @param jsonPointer the string representation of the JSON pointer * @return the queried value or {@code null} * @throws IllegalArgumentException if {@code jsonPointer} has invalid syntax @@ -1509,19 +1509,19 @@ public class JSONArray implements Iterable { * Uses a user initialized JSONPointer and tries to match it to an item within * this JSONArray. For example, given a JSONArray initialized with this * document: - * + * *
 	 * [
 	 *     {"b":"c"}
 	 * ]
 	 * 
- * + * * and this JSONPointer: - * + * *
 	 * "/0/b"
 	 * 
- * + * * Then this method will return the String "c" A JSONPointerException may be * thrown from code called by this method. * @@ -1536,19 +1536,19 @@ public class JSONArray implements Iterable { * Creates a JSONPointer using an initialization string and tries to match it to * an item within this JSONArray. For example, given a JSONArray initialized * with this document: - * + * *
 	 * [
 	 *     {"b":"c"}
 	 * ]
 	 * 
- * + * * and this JSONPointer string: - * + * *
 	 * "/0/b"
 	 * 
- * + * * Then this method will return the String "c" A JSONPointerException may be * thrown from code called by this method. * @@ -1683,23 +1683,23 @@ public class JSONArray implements Iterable { /** * Make a pretty-printed JSON text of this JSONArray. - * + * *

* If - * + * *

 {@code
 	 * indentFactor > 0
 	 * }
- * + * * and the {@link JSONArray} has only one element, then the array will be output * on a single line: - * + * *
{@code [1]}
- * + * *

* If an array has 2 or more elements, then it will be output across multiple * lines: - * + * *

{@code
 	 * [
 	 * 1,
@@ -1709,7 +1709,7 @@ public class JSONArray implements Iterable {
 	 * }
 	 * 

* Warning: This method assumes that the data structure is acyclical. - * + * * @param indentFactor The number of spaces to add to each level of indentation. * @return a printable, displayable, transmittable representation of the object, * beginning with [ (left bracket) and @@ -1727,7 +1727,7 @@ public class JSONArray implements Iterable { * compactness, no whitespace is added. *

* Warning: This method assumes that the data structure is acyclical. - * + * * @param writer the writer object * @return The writer. * @throws JSONException if a called function fails @@ -1738,23 +1738,23 @@ public class JSONArray implements Iterable { /** * Write the contents of the JSONArray as JSON text to a writer. - * + * *

* If - * + * *

{@code
 	 * indentFactor > 0
 	 * }
- * + * * and the {@link JSONArray} has only one element, then the array will be output * on a single line: - * + * *
{@code [1]}
- * + * *

* If an array has 2 or more elements, then it will be output across multiple * lines: - * + * *

{@code
 	 * [
 	 * 1,
diff --git a/src/main/java/org/json/JSONException.java b/src/main/java/org/json/JSONException.java
index 4dcefbe5..4c99938f 100644
--- a/src/main/java/org/json/JSONException.java
+++ b/src/main/java/org/json/JSONException.java
@@ -25,7 +25,7 @@ public class JSONException extends RuntimeException {
 
 	/**
 	 * Constructs a JSONException with an explanatory message and cause.
-	 * 
+	 *
 	 * @param message Detail about the reason for the exception.
 	 * @param cause   The cause.
 	 */
@@ -35,7 +35,7 @@ public class JSONException extends RuntimeException {
 
 	/**
 	 * Constructs a new JSONException with the specified cause.
-	 * 
+	 *
 	 * @param cause The cause.
 	 */
 	public JSONException(final Throwable cause) {
diff --git a/src/main/java/org/json/JSONObject.java b/src/main/java/org/json/JSONObject.java
index 38e6faff..5c56cf99 100644
--- a/src/main/java/org/json/JSONObject.java
+++ b/src/main/java/org/json/JSONObject.java
@@ -640,7 +640,7 @@ public class JSONObject {
 	/**
 	 * Create a new JSONException in a common format for recursive object
 	 * definition.
-	 * 
+	 *
 	 * @param key name of the key
 	 * @return JSONException that can be thrown.
 	 */
@@ -650,7 +650,7 @@ public class JSONObject {
 
 	/**
 	 * For a prospective number, remove the leading zeros
-	 * 
+	 *
 	 * @param value prospective number
 	 * @return number without leading zeros
 	 */
@@ -959,7 +959,7 @@ public class JSONObject {
 
 	/**
 	 * Create a new JSONException in a common format for incorrect conversions.
-	 * 
+	 *
 	 * @param key       name of the key
 	 * @param valueType the type of value being coerced to
 	 * @param cause     optional cause of the coercion failure
@@ -1169,28 +1169,28 @@ public class JSONObject {
 	 * The {@link JSONPropertyName} annotation can be used on a bean getter to
 	 * override key name used in the JSONObject. For example, using the object above
 	 * with the getName method, if we annotated it with:
-	 * 
+	 *
 	 * 
 	 * @JSONPropertyName("FullName")
 	 * public String getName() {
 	 * 	return this.name;
 	 * }
 	 * 
- * + * * The resulting JSON object would contain "FullName": "Larry Fine" *

* Similarly, the {@link JSONPropertyName} annotation can be used on non- * get and is methods. We can also override key name * used in the JSONObject as seen below even though the field would normally be * ignored: - * + * *

 	 * @JSONPropertyName("FullName")
 	 * public String fullName() {
 	 * 	return this.name;
 	 * }
 	 * 
- * + * * The resulting JSON object would contain "FullName": "Larry Fine" *

* The {@link JSONPropertyIgnore} annotation can be used to force the bean @@ -1201,7 +1201,7 @@ public class JSONObject { * {@link JSONPropertyIgnore} annotation takes precedent and the field is not * serialized. For example, the following declaration would prevent the * getName method from being serialized: - * + * *

 	 * @JSONPropertyName("FullName")
 	 * @JSONPropertyIgnore
@@ -2510,19 +2510,19 @@ public class JSONObject {
 	 * Uses a user initialized JSONPointer and tries to match it to an item within
 	 * this JSONObject. For example, given a JSONObject initialized with this
 	 * document:
-	 * 
+	 *
 	 * 
 	 * {
 	 *     "a":{"b":"c"}
 	 * }
 	 * 
- * + * * and this JSONPointer: - * + * *
 	 * "/a/b"
 	 * 
- * + * * Then this method will return the String "c". A JSONPointerException may be * thrown from code called by this method. * @@ -2537,19 +2537,19 @@ public class JSONObject { * Creates a JSONPointer using an initialization string and tries to match it to * an item within this JSONObject. For example, given a JSONObject initialized * with this document: - * + * *
 	 * {
 	 *     "a":{"b":"c"}
 	 * }
 	 * 
- * + * * and this JSONPointer string: - * + * *
 	 * "/a/b"
 	 * 
- * + * * Then this method will return the String "c". A JSONPointerException may be * thrown from code called by this method. * @@ -2693,20 +2693,20 @@ public class JSONObject { * *

* If - * + * *

{@code
 	 * indentFactor > 0
 	 * }
- * + * * and the {@link JSONObject} has only one key, then the object will be output * on a single line: - * + * *
{@code {"key": 1}}
* *

* If an object has 2 or more keys, then it will be output across multiple * lines: - * + * *

{@code {
 	 *  "key1": 1,
 	 *  "key2": "value 2",
@@ -2733,7 +2733,7 @@ public class JSONObject {
 	 * compactness, no whitespace is added.
 	 * 

* Warning: This method assumes that the data structure is acyclical. - * + * * @param writer the writer object * @return The writer. * @throws JSONException if a called function has an error @@ -2747,20 +2747,20 @@ public class JSONObject { * *

* If - * + * *

{@code
 	 * indentFactor > 0
 	 * }
- * + * * and the {@link JSONObject} has only one key, then the object will be output * on a single line: - * + * *
{@code {"key": 1}}
* *

* If an object has 2 or more keys, then it will be output across multiple * lines: - * + * *

{@code {
 	 *  "key1": 1,
 	 *  "key2": "value 2",
diff --git a/src/main/java/org/json/JSONPointer.java b/src/main/java/org/json/JSONPointer.java
index 77364017..5b3829f5 100644
--- a/src/main/java/org/json/JSONPointer.java
+++ b/src/main/java/org/json/JSONPointer.java
@@ -16,7 +16,7 @@ Public Domain.
 /**
  * A JSON Pointer is a simple query language defined for JSON documents by
  * RFC 6901.
- * 
+ *
  * In a nutshell, JSONPointer allows the user to navigate into a JSON document
  * using strings, and retrieve targeted objects, like a simple form of XPATH.
  * Path segments are separated by the '/' char, which signifies the root of the
@@ -27,7 +27,7 @@ Public Domain.
  * a JSONArray, or a JSON value. If the JSONPointer string building fails, an
  * appropriate exception is thrown. If the navigation fails to find a match, a
  * JSONPointerException is thrown.
- * 
+ *
  * @author JSON.org
  * @version 2016-05-14
  */
@@ -51,7 +51,7 @@ public class JSONPointer {
 		/**
 		 * Adds an integer to the reference token list. Although not necessarily, mostly
 		 * this token will denote an array index.
-		 * 
+		 *
 		 * @param arrayIndex the array index to be added to the token list
 		 * @return {@code this}
 		 */
@@ -63,12 +63,12 @@ public class JSONPointer {
 		/**
 		 * Adds an arbitrary token to the list of reference tokens. It can be any
 		 * non-null value.
-		 * 
+		 *
 		 * Unlike in the case of JSON string or URI fragment representation of JSON
 		 * pointers, the argument of this method MUST NOT be escaped. If you want to
 		 * query the property called {@code "a~b"} then you should simply pass the
 		 * {@code "a~b"} string as-is, there is no need to escape it as {@code "a~0b"}.
-		 * 
+		 *
 		 * @param token the new token to be appended to the list
 		 * @return {@code this}
 		 * @throws NullPointerException if {@code token} is null
@@ -84,7 +84,7 @@ public class JSONPointer {
 		/**
 		 * Creates a {@code JSONPointer} instance using the tokens previously set using
 		 * the {@link #append(String)} method calls.
-		 * 
+		 *
 		 * @return a JSONPointer object
 		 */
 		public JSONPointer build() {
@@ -97,7 +97,7 @@ public class JSONPointer {
 
 	/**
 	 * Static factory method for {@link Builder}. Example usage:
-	 * 
+	 *
 	 * 
 	 * 
 	 * JSONPointer pointer = JSONPointer.builder()
@@ -108,7 +108,7 @@ public class JSONPointer {
 	 *       .build();
 	 * 
 	 * 
- * + * * @return a builder instance which can be used to construct a * {@code JSONPointer} instance by chained * {@link Builder#append(String)} calls. @@ -121,10 +121,10 @@ public class JSONPointer { * Escapes path segment values to an unambiguous form. The escape char to be * inserted is '~'. The chars to be escaped are ~, which maps to ~0, and /, * which maps to ~1. - * + * * @param token the JSONPointer segment value to be escaped * @return the escaped value for the token - * + * * @see rfc6901 section * 3 */ @@ -134,7 +134,7 @@ public class JSONPointer { /** * Matches a JSONArray element by ordinal position - * + * * @param current the JSONArray to be evaluated * @param indexToken the array index in string form * @return the matched object. If no matching item is found a @@ -186,7 +186,7 @@ public class JSONPointer { * evaluate the same JSON Pointer on different JSON documents then it is * recommended to keep the {@code JSONPointer} instances due to performance * considerations. - * + * * @param pointer the JSON String or URI Fragment representation of the JSON * pointer. * @throws IllegalArgumentException if {@code pointer} is not a valid JSON @@ -245,7 +245,7 @@ public class JSONPointer { * instance, but the empty JSON Pointer ({@code ""}) can be evaluated on any * JSON values and in such case the returned value will be {@code document} * itself. - * + * * @param document the JSON document which should be the subject of querying. * @return the result of the evaluation * @throws JSONPointerException if an error occurs during evaluation @@ -285,7 +285,7 @@ public class JSONPointer { /** * Returns a string representing the JSONPointer path value using URI fragment * identifier representation - * + * * @return a uri fragment string */ public String toURIFragment() { diff --git a/src/main/java/org/json/JSONPointerException.java b/src/main/java/org/json/JSONPointerException.java index fffcd981..0db15010 100644 --- a/src/main/java/org/json/JSONPointerException.java +++ b/src/main/java/org/json/JSONPointerException.java @@ -7,7 +7,7 @@ Public Domain. /** * The JSONPointerException is thrown by {@link JSONPointer} if an error occurs * during evaluating a pointer. - * + * * @author JSON.org * @version 2016-05-13 */ diff --git a/src/main/java/org/json/JSONPropertyName.java b/src/main/java/org/json/JSONPropertyName.java index bb38e815..ecca6470 100644 --- a/src/main/java/org/json/JSONPropertyName.java +++ b/src/main/java/org/json/JSONPropertyName.java @@ -22,7 +22,7 @@ import java.lang.annotation.Target; public @interface JSONPropertyName { /** * The value of the JSON property. - * + * * @return The name of the property as to be used in the JSON Object. */ String value(); diff --git a/src/main/java/org/json/JSONStringer.java b/src/main/java/org/json/JSONStringer.java index 04ab6db4..4acd646b 100644 --- a/src/main/java/org/json/JSONStringer.java +++ b/src/main/java/org/json/JSONStringer.java @@ -19,13 +19,13 @@ import java.io.StringWriter; * endObject methods which make and bound object values. All of * these methods return the JSONWriter instance, permitting cascade style. For * example, - * + * *
  * myString = new JSONStringer().object().key("JSON").value("Hello, World!").endObject().toString();
  * 
- * + * * which produces the string - * + * *
  * {"JSON":"Hello, World!"}
  * 
@@ -35,7 +35,7 @@ import java.io.StringWriter; * you. Objects and arrays can be nested up to 200 levels deep. *

* This can sometimes be easier than using a JSONObject to build a string. - * + * * @author JSON.org * @version 2015-12-09 */ @@ -53,7 +53,7 @@ public class JSONStringer extends JSONWriter { * problem in the construction of the JSON text (such as the calls to * array were not properly balanced with calls to * endArray). - * + * * @return The JSON text. */ @Override diff --git a/src/main/java/org/json/JSONTokener.java b/src/main/java/org/json/JSONTokener.java index 13b74744..473dfb24 100644 --- a/src/main/java/org/json/JSONTokener.java +++ b/src/main/java/org/json/JSONTokener.java @@ -16,14 +16,14 @@ Public Domain. * A JSONTokener takes a source string and extracts characters and tokens from * it. It is used by the JSONObject and JSONArray constructors to parse JSON * source strings. - * + * * @author JSON.org * @version 2014-05-03 */ public class JSONTokener { /** * Get the hex value of a character (base16). - * + * * @param c A character between '0' and '9' or between 'A' and 'F' or between * 'a' and 'f'. * @return An int between 0 and 15, or -1 if c was not a hex digit. @@ -62,7 +62,7 @@ public class JSONTokener { /** * Construct a JSONTokener from an InputStream. The caller must close the input * stream. - * + * * @param inputStream The source. */ public JSONTokener(InputStream inputStream) { @@ -98,7 +98,7 @@ public class JSONTokener { * Back up one character. This provides a sort of lookahead capability, so that * you can test for a digit or letter before attempting to parse the next number * or identifier. - * + * * @throws JSONException Thrown if trying to step back more than 1 step or if * already at the start of the string */ @@ -148,7 +148,7 @@ public class JSONTokener { /** * Get the last character read from the input or '\0' if nothing has been read * yet. - * + * * @return the last character read from the input. */ protected char getPrevious() { @@ -158,7 +158,7 @@ public class JSONTokener { /** * Increments the internal indexes according to the previous character read and * the character passed as the current character. - * + * * @param c the current character read. */ private void incrementIndexes(int c) { @@ -183,7 +183,7 @@ public class JSONTokener { /** * Determine if the source string still contains characters that next() can * consume. - * + * * @return true if not yet at the end of the source. * @throws JSONException thrown if there is an error stepping forward or * backward while checking for more data. @@ -239,7 +239,7 @@ public class JSONTokener { /** * Consume the next character, and check that it matches a specified character. - * + * * @param c The character to match. * @return The character. * @throws JSONException if the character does not match. @@ -283,7 +283,7 @@ public class JSONTokener { /** * Get the next char in the string, skipping whitespace. - * + * * @throws JSONException Thrown if there is an error reading the source string. * @return A character, or 0 if there are no more characters. */ @@ -334,7 +334,7 @@ public class JSONTokener { * Return the characters up to the next close quote character. Backslash * processing is done. The formal JSON format does not allow strings in single * quotes, but an implementation is allowed to accept them. - * + * * @param quote The quoting character, either " (double * quote) or ' (single * quote). @@ -398,7 +398,7 @@ public class JSONTokener { /** * Get the text up but not including the specified character or the end of line, * whichever comes first. - * + * * @param delimiter A delimiter character. * @return A string. * @throws JSONException Thrown if there is an error while searching for the @@ -421,7 +421,7 @@ public class JSONTokener { /** * Get the text up but not including one of the specified delimiter characters * or the end of line, whichever comes first. - * + * * @param delimiters A set of delimiter characters. * @return A string, trimmed. * @throws JSONException Thrown if there is an error while searching for the @@ -445,7 +445,7 @@ public class JSONTokener { /** * Get the next value. The value can be a Boolean, Double, Integer, JSONArray, * JSONObject, Long, or String, or the JSONObject.NULL object. - * + * * @throws JSONException If syntax error. * * @return An object. @@ -474,7 +474,7 @@ public class JSONTokener { /** * Skip characters until the next character is the requested character. If the * requested character is not found, no characters are skipped. - * + * * @param to A character to skip to. * @return The requested character, or zero if the requested character is not * found. diff --git a/src/main/java/org/json/JSONWriter.java b/src/main/java/org/json/JSONWriter.java index 8df044a1..6f7f5fe1 100644 --- a/src/main/java/org/json/JSONWriter.java +++ b/src/main/java/org/json/JSONWriter.java @@ -21,13 +21,13 @@ Public Domain. * endObject methods which make and bound object values. All of * these methods return the JSONWriter instance, permitting a cascade style. For * example, - * + * *

  * new JSONWriter(myWriter).object().key("JSON").value("Hello, World!").endObject();
  * 
- * + * * which writes - * + * *
  * {"JSON":"Hello, World!"}
  * 
@@ -37,7 +37,7 @@ Public Domain. * you. Objects and arrays can be nested up to 200 levels deep. *

* This can sometimes be easier than using a JSONObject to build a string. - * + * * @author JSON.org * @version 2016-08-08 */ @@ -139,7 +139,7 @@ public class JSONWriter { /** * Make a fresh JSONWriter. It can be used to build one JSON text. - * + * * @param w an appendable object */ public JSONWriter(Appendable w) { @@ -152,7 +152,7 @@ public class JSONWriter { /** * Append a value. - * + * * @param string A string value. * @return this * @throws JSONException If the value is out of sequence. @@ -186,7 +186,7 @@ public class JSONWriter { * Begin appending a new array. All values until the balancing * endArray will be appended to this array. The * endArray method must be called to mark the array's end. - * + * * @return this * @throws JSONException If the nesting is too deep, or if the object is started * in the wrong place (for example as a key or after the @@ -204,7 +204,7 @@ public class JSONWriter { /** * End something. - * + * * @param m Mode * @param c Closing character * @return this @@ -230,7 +230,7 @@ public class JSONWriter { /** * End an array. This method most be called to balance calls to * array. - * + * * @return this * @throws JSONException If incorrectly nested. */ @@ -241,7 +241,7 @@ public class JSONWriter { /** * End an object. This method most be called to balance calls to * object. - * + * * @return this * @throws JSONException If incorrectly nested. */ @@ -252,7 +252,7 @@ public class JSONWriter { /** * Append a key. The key will be associated with the next value. In an object, * every value must be preceded by a key. - * + * * @param string A key string. * @return this * @throws JSONException If the key is out of place. For example, keys do not @@ -292,7 +292,7 @@ public class JSONWriter { * Begin appending a new object. All keys and values until the balancing * endObject will be appended to this object. The * endObject method must be called to mark the object's end. - * + * * @return this * @throws JSONException If the nesting is too deep, or if the object is started * in the wrong place (for example as a key or after the @@ -314,7 +314,7 @@ public class JSONWriter { /** * Pop an array or object scope. - * + * * @param c The scope to close. * @throws JSONException If nesting is wrong. */ @@ -332,7 +332,7 @@ public class JSONWriter { /** * Push an array or object scope. - * + * * @param jo The scope to open. * @throws JSONException If nesting is too deep. */ @@ -347,7 +347,7 @@ public class JSONWriter { /** * Append either the value true or the value false. - * + * * @param b A boolean. * @return this * @throws JSONException if a called function has an error @@ -358,7 +358,7 @@ public class JSONWriter { /** * Append a double value. - * + * * @param d A double. * @return this * @throws JSONException If the number is not finite. @@ -369,7 +369,7 @@ public class JSONWriter { /** * Append a long value. - * + * * @param l A long. * @return this * @throws JSONException if a called function has an error @@ -380,7 +380,7 @@ public class JSONWriter { /** * Append an object value. - * + * * @param object The object to append. It can be null, or a Boolean, Number, * String, JSONObject, or JSONArray, or an object that implements * JSONString. diff --git a/src/main/java/org/json/ParserConfiguration.java b/src/main/java/org/json/ParserConfiguration.java index 84d090b4..548c80a7 100644 --- a/src/main/java/org/json/ParserConfiguration.java +++ b/src/main/java/org/json/ParserConfiguration.java @@ -67,7 +67,7 @@ public class ParserConfiguration { /** * The maximum nesting depth that the parser will descend before throwing an * exception when parsing the XML into JSONML. - * + * * @return the maximum nesting depth set for this configuration */ public int getMaxNestingDepth() { @@ -93,7 +93,7 @@ public class ParserConfiguration { * @param newVal new value to use for the keepStrings configuration * option. * @param the type of the configuration object - * + * * @return The existing configuration will not be modified. A new configuration * is returned. */ @@ -111,10 +111,10 @@ public class ParserConfiguration { * the maximum depth is reached. Using any negative value as a parameter is * equivalent to setting no limit to the nesting depth, which means the parses * will go as deep as the maximum call stack size allows. - * + * * @param maxNestingDepth the maximum nesting depth allowed to the XML parser * @param the type of the configuration object - * + * * @return The existing configuration will not be modified. A new configuration * is returned. */ diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketInputBuffer.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketInputBuffer.java index 8c8a0719..2777b4ea 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketInputBuffer.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketInputBuffer.java @@ -6,7 +6,7 @@ import java.io.InputStream; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface GamePacketInputBuffer extends DataInput { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketOutputBuffer.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketOutputBuffer.java index 0d2d37b9..4c9933e5 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketOutputBuffer.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePacketOutputBuffer.java @@ -6,7 +6,7 @@ import java.io.OutputStream; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.OutputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface GamePacketOutputBuffer extends DataOutput { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageConstants.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageConstants.java index 05bdbad0..9151bd1a 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageConstants.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageConstants.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.socket.protocol; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.socket.protocol; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class GamePluginMessageConstants { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageProtocol.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageProtocol.java index e2fffcb5..31e4b795 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageProtocol.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/GamePluginMessageProtocol.java @@ -69,7 +69,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketWebViewMe /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -81,7 +81,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketWebViewMe * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum GamePluginMessageProtocol { V3(3, define(V3_SKIN_CHANNEL, 0x03, CLIENT_TO_SERVER, CPacketGetOtherSkinEAG.class, CPacketGetOtherSkinEAG::new), diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessageHandler.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessageHandler.java index dc01eca8..7939a519 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessageHandler.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessageHandler.java @@ -49,7 +49,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketWebViewMe /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -61,7 +61,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketWebViewMe * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface GameMessageHandler { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessagePacket.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessagePacket.java index 78185ded..dd05ba3a 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessagePacket.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/GameMessagePacket.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/WrongPacketException.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/WrongPacketException.java index cf5474a6..20678005 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/WrongPacketException.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/WrongPacketException.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WrongPacketException extends RuntimeException { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherCapeEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherCapeEAG.java index 05a37b27..ee2fcac1 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherCapeEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherCapeEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketGetOtherCapeEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherClientUUIDV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherClientUUIDV4EAG.java index 50e9f158..13c2b1e5 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherClientUUIDV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherClientUUIDV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketGetOtherClientUUIDV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherSkinEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherSkinEAG.java index 71258764..71d241f3 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherSkinEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetOtherSkinEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketGetOtherSkinEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetSkinByURLEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetSkinByURLEAG.java index d4199c58..94a44d8d 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetSkinByURLEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketGetSkinByURLEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketGetSkinByURLEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketInstallSkinSPEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketInstallSkinSPEAG.java index 76c7d15a..84ff0a4f 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketInstallSkinSPEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketInstallSkinSPEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketInstallSkinSPEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketRequestServerInfoV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketRequestServerInfoV4EAG.java index 5b94e94e..e88af39b 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketRequestServerInfoV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketRequestServerInfoV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketRequestServerInfoV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalConnectEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalConnectEAG.java index 7976f8cc..28ac7077 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalConnectEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalConnectEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalConnectEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDescEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDescEAG.java index d83e5ff2..da7fec8f 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDescEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDescEAG.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalDescEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectPeerV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectPeerV4EAG.java index c6ebcf52..d74739c4 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectPeerV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectPeerV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalDisconnectPeerV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV3EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV3EAG.java index 9ca0366f..3701c04b 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV3EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV3EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalDisconnectV3EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV4EAG.java index 7b15c30e..3755f978 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalDisconnectV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalDisconnectV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalICEEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalICEEAG.java index d80a50fb..79dbddd6 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalICEEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalICEEAG.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalICEEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalRequestEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalRequestEAG.java index 272407e5..f91ac5c2 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalRequestEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketVoiceSignalRequestEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketVoiceSignalRequestEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageEnV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageEnV4EAG.java index 90be085d..a08c3f75 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageEnV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageEnV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketWebViewMessageEnV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageV4EAG.java index 508dea3c..81d6e710 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/client/CPacketWebViewMessageV4EAG.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class CPacketWebViewMessageV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketCustomizePauseMenuV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketCustomizePauseMenuV4EAG.java index 1cd17c79..e6b06184 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketCustomizePauseMenuV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketCustomizePauseMenuV4EAG.java @@ -15,7 +15,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.PacketImageData; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -27,7 +27,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.PacketImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketCustomizePauseMenuV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketEnableFNAWSkinsEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketEnableFNAWSkinsEAG.java index cd5fd47a..c2f5cd0f 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketEnableFNAWSkinsEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketEnableFNAWSkinsEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketEnableFNAWSkinsEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapeCustomV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapeCustomV4EAG.java index 3d9a0f4e..81caec69 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapeCustomV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapeCustomV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketForceClientCapeCustomV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapePresetV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapePresetV4EAG.java index 26ad70b9..2b682134 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapePresetV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientCapePresetV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketForceClientCapePresetV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinCustomV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinCustomV4EAG.java index e14f1cb8..c7391e13 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinCustomV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinCustomV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketForceClientSkinCustomV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinPresetV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinPresetV4EAG.java index 0b95c227..1db58729 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinPresetV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketForceClientSkinPresetV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketForceClientSkinPresetV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketInvalidatePlayerCacheV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketInvalidatePlayerCacheV4EAG.java index bf923654..5c07177d 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketInvalidatePlayerCacheV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketInvalidatePlayerCacheV4EAG.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketInvalidatePlayerCacheV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeHideV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeHideV4EAG.java index 37f4d1c1..d4165518 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeHideV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeHideV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketNotifBadgeHideV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeShowV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeShowV4EAG.java index a9cb7c14..859eae3f 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeShowV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifBadgeShowV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketNotifBadgeShowV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsRegisterV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsRegisterV4EAG.java index 6471d391..9715ddff 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsRegisterV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsRegisterV4EAG.java @@ -14,7 +14,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.PacketImageData; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -26,7 +26,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.PacketImageData; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketNotifIconsRegisterV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsReleaseV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsReleaseV4EAG.java index b46fd373..6e4839a3 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsReleaseV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketNotifIconsReleaseV4EAG.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketNotifIconsReleaseV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapeCustomEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapeCustomEAG.java index e2bdc030..14d01729 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapeCustomEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapeCustomEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherCapeCustomEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapePresetEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapePresetEAG.java index a2d34837..06ebd2ee 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapePresetEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherCapePresetEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherCapePresetEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherPlayerClientUUIDV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherPlayerClientUUIDV4EAG.java index cf17ea53..8add5606 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherPlayerClientUUIDV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherPlayerClientUUIDV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherPlayerClientUUIDV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV3EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV3EAG.java index e54083cd..93c3cd6b 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV3EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV3EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherSkinCustomV3EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV4EAG.java index 32e0fccc..62c8af5c 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinCustomV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherSkinCustomV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinPresetEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinPresetEAG.java index 2fd752ab..d1a26fcc 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinPresetEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketOtherSkinPresetEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketOtherSkinPresetEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketRedirectClientV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketRedirectClientV4EAG.java index 73ad6483..50746776 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketRedirectClientV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketRedirectClientV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketRedirectClientV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketServerInfoDataChunkV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketServerInfoDataChunkV4EAG.java index 998f158d..15a35935 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketServerInfoDataChunkV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketServerInfoDataChunkV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketServerInfoDataChunkV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketSetServerCookieV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketSetServerCookieV4EAG.java index 5bdde6b8..e4ea4a02 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketSetServerCookieV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketSetServerCookieV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketSetServerCookieV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUnforceClientV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUnforceClientV4EAG.java index 9ab00aa5..61ae1dfd 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUnforceClientV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUnforceClientV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketUnforceClientV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUpdateCertEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUpdateCertEAG.java index 3b1230b2..65637b2c 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUpdateCertEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketUpdateCertEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketUpdateCertEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalAllowedEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalAllowedEAG.java index cc538167..f6de37d3 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalAllowedEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalAllowedEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalAllowedEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectAnnounceV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectAnnounceV4EAG.java index 75218808..404c1de4 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectAnnounceV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectAnnounceV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalConnectAnnounceV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV3EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV3EAG.java index 97d254b8..84f96f72 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV3EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV3EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalConnectV3EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV4EAG.java index c3093185..ab8a8951 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalConnectV4EAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalConnectV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDescEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDescEAG.java index 8164954e..8c25eaf5 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDescEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDescEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalDescEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDisconnectPeerEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDisconnectPeerEAG.java index f837cdde..8de38aff 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDisconnectPeerEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalDisconnectPeerEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalDisconnectPeerEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalGlobalEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalGlobalEAG.java index c6f306f9..3ac15a49 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalGlobalEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalGlobalEAG.java @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalGlobalEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalICEEAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalICEEAG.java index f2eb4f51..b6bd0ef4 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalICEEAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketVoiceSignalICEEAG.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketVoiceSignalICEEAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketWebViewMessageV4EAG.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketWebViewMessageV4EAG.java index 41dd3381..ac46485d 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketWebViewMessageV4EAG.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/pkt/server/SPacketWebViewMessageV4EAG.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SPacketWebViewMessageV4EAG implements GameMessagePacket { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/PacketImageData.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/PacketImageData.java index 08786110..994b9a95 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/PacketImageData.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/PacketImageData.java @@ -7,7 +7,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PacketImageData { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayInputStream.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayInputStream.java index dc32600b..da9da7f2 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayInputStream.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayInputStream.java @@ -5,7 +5,7 @@ import java.io.InputStream; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -17,7 +17,7 @@ import java.io.InputStream; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ReusableByteArrayInputStream extends InputStream { @@ -25,6 +25,7 @@ public class ReusableByteArrayInputStream extends InputStream { private int idx = 0; private int markIDX = 0; + @Override public int available() { return Math.max(currentBuffer.length - idx, 0); } @@ -43,6 +44,7 @@ public class ReusableByteArrayInputStream extends InputStream { markIDX = idx; } + @Override public boolean markSupported() { return true; } @@ -70,6 +72,7 @@ public class ReusableByteArrayInputStream extends InputStream { return len; } + @Override public void reset() { idx = markIDX; } diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayOutputStream.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayOutputStream.java index b56681d4..4ccf6a8f 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayOutputStream.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/ReusableByteArrayOutputStream.java @@ -6,7 +6,7 @@ import java.util.Arrays; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.util.Arrays; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ReusableByteArrayOutputStream extends OutputStream { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleInputBufferImpl.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleInputBufferImpl.java index c287cfdd..fd830062 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleInputBufferImpl.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleInputBufferImpl.java @@ -12,7 +12,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketInputBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -24,7 +24,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketInputBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleInputBufferImpl extends DataInputStream implements GamePacketInputBuffer { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleOutputBufferImpl.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleOutputBufferImpl.java index 99a61db9..16437848 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleOutputBufferImpl.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SimpleOutputBufferImpl.java @@ -9,7 +9,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePacketOutputBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SimpleOutputBufferImpl extends DataOutputStream implements GamePacketOutputBuffer { diff --git a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SkinPacketVersionCache.java b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SkinPacketVersionCache.java index 94f29616..a57b15fb 100644 --- a/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SkinPacketVersionCache.java +++ b/src/protocol-game/java/net/lax1dude/eaglercraft/v1_8/socket/protocol/util/SkinPacketVersionCache.java @@ -10,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherSkin /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -22,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherSkin * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SkinPacketVersionCache { diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IRelayLogger.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IRelayLogger.java index 1024269d..6e5a89be 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IRelayLogger.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IRelayLogger.java @@ -2,7 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay.pkt; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -14,7 +14,7 @@ package net.lax1dude.eaglercraft.v1_8.sp.relay.pkt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IRelayLogger { diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket.java index 7d75820e..03d92233 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket.java @@ -13,7 +13,7 @@ import java.util.function.Supplier; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,7 +25,7 @@ import java.util.function.Supplier; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket { diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket00Handshake.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket00Handshake.java index 2672ec7f..7890aebd 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket00Handshake.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket00Handshake.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket00Handshake extends RelayPacket { diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket01ICEServers.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket01ICEServers.java index 514c63ba..7f931390 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket01ICEServers.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket01ICEServers.java @@ -9,7 +9,7 @@ import java.util.Iterator; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -21,7 +21,7 @@ import java.util.Iterator; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket01ICEServers extends RelayPacket { @@ -63,6 +63,7 @@ public class RelayPacket01ICEServers extends RelayPacket { this.servers = servers; } + @Override public void read(DataInputStream input) throws IOException { servers.clear(); int l = input.readUnsignedShort(); @@ -80,6 +81,7 @@ public class RelayPacket01ICEServers extends RelayPacket { } } + @Override public void write(DataOutputStream output) throws IOException { int l = servers.size(); output.writeShort(l); diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket02NewClient.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket02NewClient.java index be01626a..6d77c7d5 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket02NewClient.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket02NewClient.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket02NewClient extends RelayPacket { @@ -31,14 +31,17 @@ public class RelayPacket02NewClient extends RelayPacket { this.clientId = clientId; } + @Override public int packetLength() { return 1 + clientId.length(); } + @Override public void read(DataInputStream input) throws IOException { clientId = readASCII8(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, clientId); } diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket03ICECandidate.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket03ICECandidate.java index ec3fb759..856bf175 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket03ICECandidate.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket03ICECandidate.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket03ICECandidate extends RelayPacket { @@ -42,18 +42,21 @@ public class RelayPacket03ICECandidate extends RelayPacket { return candidate == null ? null : toASCIIStr(candidate); } + @Override public int packetLength() { return 1 + peerId.length() + 2 + candidate.length; } + @Override public void read(DataInputStream input) throws IOException { peerId = readASCII8(input); candidate = readBytes16(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, peerId); writeBytes16(output, candidate); } -} \ No newline at end of file +} diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket04Description.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket04Description.java index 89e80353..ce714125 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket04Description.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket04Description.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket04Description extends RelayPacket { @@ -42,15 +42,18 @@ public class RelayPacket04Description extends RelayPacket { return description == null ? null : toASCIIStr(description); } + @Override public int packetLength() { return 1 + peerId.length() + 2 + description.length; } + @Override public void read(DataInputStream input) throws IOException { peerId = readASCII8(input); description = readBytes16(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, peerId); writeBytes16(output, description); diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket05ClientSuccess.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket05ClientSuccess.java index 2e557a1d..d1bb8ece 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket05ClientSuccess.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket05ClientSuccess.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket05ClientSuccess extends RelayPacket { @@ -31,14 +31,17 @@ public class RelayPacket05ClientSuccess extends RelayPacket { this.clientId = clientId; } + @Override public int packetLength() { return 1 + clientId.length(); } + @Override public void read(DataInputStream input) throws IOException { clientId = readASCII8(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, clientId); } diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket06ClientFailure.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket06ClientFailure.java index 295e0d53..af30511e 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket06ClientFailure.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket06ClientFailure.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket06ClientFailure extends RelayPacket { @@ -31,14 +31,17 @@ public class RelayPacket06ClientFailure extends RelayPacket { this.clientId = clientId; } + @Override public int packetLength() { return 1 + clientId.length(); } + @Override public void read(DataInputStream input) throws IOException { clientId = readASCII8(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, clientId); } diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket07LocalWorlds.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket07LocalWorlds.java index df676245..a8d38240 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket07LocalWorlds.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket07LocalWorlds.java @@ -8,7 +8,7 @@ import java.util.List; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -20,7 +20,7 @@ import java.util.List; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket07LocalWorlds extends RelayPacket { @@ -45,6 +45,7 @@ public class RelayPacket07LocalWorlds extends RelayPacket { this.worldsList = worldsList; } + @Override public int packetLength() { int accum = 1; if (worldsList != null) { @@ -56,6 +57,7 @@ public class RelayPacket07LocalWorlds extends RelayPacket { return accum; } + @Override public void read(DataInputStream input) throws IOException { int l = input.read(); if (worldsList == null) { @@ -68,6 +70,7 @@ public class RelayPacket07LocalWorlds extends RelayPacket { } } + @Override public void write(DataOutputStream output) throws IOException { if (worldsList == null) { output.write(0); diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket69Pong.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket69Pong.java index 8a53008e..ea806dcd 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket69Pong.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket69Pong.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket69Pong extends RelayPacket { @@ -38,16 +38,19 @@ public class RelayPacket69Pong extends RelayPacket { this.brand = brand; } + @Override public int packetLength() { return 3 + comment.length() + brand.length(); } + @Override public void read(DataInputStream output) throws IOException { protcolVersion = output.read(); comment = readASCII8(output); brand = readASCII8(output); } + @Override public void write(DataOutputStream output) throws IOException { output.write(protcolVersion); writeASCII8(output, comment); diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket70SpecialUpdate.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket70SpecialUpdate.java index 9c1111c6..5ce7fca9 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket70SpecialUpdate.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacket70SpecialUpdate.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacket70SpecialUpdate extends RelayPacket { diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFEDisconnectClient.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFEDisconnectClient.java index 704c8379..0447b9de 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFEDisconnectClient.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFEDisconnectClient.java @@ -7,7 +7,7 @@ import java.nio.ByteBuffer; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -19,7 +19,7 @@ import java.nio.ByteBuffer; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacketFEDisconnectClient extends RelayPacket { @@ -52,16 +52,19 @@ public class RelayPacketFEDisconnectClient extends RelayPacket { this.reason = reason; } + @Override public int packetLength() { return 1 + 1 + 2 + clientId.length() + (reason != null ? reason.length() : 0); } + @Override public void read(DataInputStream input) throws IOException { clientId = readASCII8(input); code = input.read(); reason = readASCII16(input); } + @Override public void write(DataOutputStream output) throws IOException { writeASCII8(output, clientId); output.write(code); diff --git a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFFErrorCode.java b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFFErrorCode.java index 06906b02..b1ceaebc 100644 --- a/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFFErrorCode.java +++ b/src/protocol-relay/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/RelayPacketFFErrorCode.java @@ -6,7 +6,7 @@ import java.io.IOException; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -18,7 +18,7 @@ import java.io.IOException; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayPacketFFErrorCode extends RelayPacket { diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuAssets.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuAssets.java index 4255a205..6748cfc6 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuAssets.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuAssets.java @@ -5,31 +5,32 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformAssets; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuAssets { - public static String loadResourceString(String res) { - return EagRuntime.getResourceString(res); + public static void freeBootMenuResourceRepo() { + PlatformAssets.freeAssetRepoTeaVM(); } public static byte[] loadResourceBytes(String res) { return EagRuntime.getResourceBytes(res); } - public static void freeBootMenuResourceRepo() { - PlatformAssets.freeAssetRepoTeaVM(); + public static String loadResourceString(String res) { + return EagRuntime.getResourceString(res); } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuConstants.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuConstants.java index 43948026..4b9606c5 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuConstants.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuConstants.java @@ -6,27 +6,33 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuConstants { - public static final EaglercraftUUID UUID_ORIGIN_UNSIGNED_CLASSES_JS = new EaglercraftUUID(0x738248F88FF1446EL, 0xA834D40120DD8EB5L); - public static final EaglercraftUUID UUID_ORIGIN_SIGNED_SIGNATURE = new EaglercraftUUID(0xB55252A38A6F4291L, 0x8DB68BF94B3E6FEDL); - public static final EaglercraftUUID UUID_ORIGIN_SIGNED_BUNDLE = new EaglercraftUUID(0xCE298D98E9084597L, 0x9EB2501EAC6D720BL); + public static final EaglercraftUUID UUID_ORIGIN_UNSIGNED_CLASSES_JS = new EaglercraftUUID(0x738248F88FF1446EL, + 0xA834D40120DD8EB5L); + public static final EaglercraftUUID UUID_ORIGIN_SIGNED_SIGNATURE = new EaglercraftUUID(0xB55252A38A6F4291L, + 0x8DB68BF94B3E6FEDL); + public static final EaglercraftUUID UUID_ORIGIN_SIGNED_BUNDLE = new EaglercraftUUID(0xCE298D98E9084597L, + 0x9EB2501EAC6D720BL); - public static final EaglercraftUUID UUID_CLIENT_DATA_ORIGIN = new EaglercraftUUID(0xB673DAD0EF4407BL, 0xBE12C8E5BD5A2CBDL); - public static final EaglercraftUUID UUID_CLIENT_LAUNCH_ORIGIN = new EaglercraftUUID(0x74FB063984A24D1AL, 0x8E1D2FC39C21EA1EL); + public static final EaglercraftUUID UUID_CLIENT_DATA_ORIGIN = new EaglercraftUUID(0xB673DAD0EF4407BL, + 0xBE12C8E5BD5A2CBDL); + public static final EaglercraftUUID UUID_CLIENT_LAUNCH_ORIGIN = new EaglercraftUUID(0x74FB063984A24D1AL, + 0x8E1D2FC39C21EA1EL); public static final String client_projectForkName = EaglercraftVersion.projectForkName; public static final String client_projectForkVendor = EaglercraftVersion.projectForkVendor; @@ -44,7 +50,7 @@ public class BootMenuConstants { public static String getBootMenuFlagsKeyName() { String pfx = EagRuntime.getConfiguration().getLocalStorageNamespace(); - if(pfx == null) { + if (pfx == null) { pfx = EaglercraftVersion.localStorageNamespace; } return pfx + ".showBootMenu"; diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDOM.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDOM.java index e4452747..79e15d16 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDOM.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDOM.java @@ -8,21 +8,59 @@ import org.teavm.jso.dom.html.HTMLInputElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuDOM { + public static boolean getChecked(HTMLElement el) { + return ((HTMLInputElement) el).isChecked(); + } + + public static String getValue(HTMLElement el) { + return ((HTMLInputElement) el).getValue(); + } + + public static void hide(HTMLElement el) { + el.getStyle().setProperty("display", "none"); + } + + private static HTMLElement selectHelper(HTMLElement parent, String name) { + name = "." + BootMenuConstants.cssClassPrefixBootMenu + name; + HTMLElement ret = parent.querySelector(name); + if (ret == null) { + throw new RuntimeException("Failed to select \"" + name + "\" from boot menu!"); + } + return ret; + } + + public static void setChecked(HTMLElement el, boolean checked) { + ((HTMLInputElement) el).setChecked(checked); + } + + public static void setDisabled(HTMLElement el, boolean disabled) { + ((HTMLInputElement) el).setDisabled(disabled); + } + + public static void setValue(HTMLElement el, String value) { + ((HTMLInputElement) el).setValue(value); + } + + public static void show(HTMLElement el) { + el.getStyle().setProperty("display", "block"); + } + public final HTMLElement content_view_selection; public final HTMLElement content_selection; public final HTMLElement content_view_editor; @@ -30,7 +68,7 @@ public class BootMenuDOM { public final HTMLElement launch_conf_val_profile_name; public final HTMLElement launch_conf_val_data_format; public final HTMLElement launch_conf_val_launch_type; - public final Map launch_conf_val_launch_type_opts; + public final Map launch_conf_val_launch_type_opts; public final HTMLElement launch_conf_join_server; public final HTMLElement launch_conf_val_join_server; public final HTMLElement launch_conf_opts_name; @@ -55,13 +93,21 @@ public class BootMenuDOM { public final HTMLElement popup_input_title; public final HTMLElement popup_input_val; public final HTMLElement popup_input_opt_cancel; + public final HTMLElement popup_input_opt_done; + public final HTMLElement footer_text_boot_select; + public final HTMLElement footer_text_boot_select_count; + public final HTMLElement footer_text_boot_countdown; + public final HTMLElement footer_text_menu_select; + public final HTMLElement footer_text_opts_editor; + public final HTMLElement footer_text_opts_editor_alt; + public final HTMLElement footer_text_boot_order; public BootMenuDOM(HTMLElement parentElement) { @@ -73,14 +119,22 @@ public class BootMenuDOM { launch_conf_val_data_format = selectHelper(parentElement, "launch_conf_val_data_format"); launch_conf_val_launch_type = selectHelper(parentElement, "launch_conf_val_launch_type"); launch_conf_val_launch_type_opts = new HashMap<>(); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLERX_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLERX_V1]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLERX_SIGNED_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLERX_SIGNED_V1]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_1_5_V2, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_1_5_V2]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_1_5_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_1_5_V1]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_BETA_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_BETA_V1]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.PEYTON_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=PEYTON_V1]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.PEYTON_V2, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=PEYTON_V2]")); - launch_conf_val_launch_type_opts.put(EnumClientLaunchType.STANDARD_OFFLINE_V1, selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=STANDARD_OFFLINE_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLERX_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLERX_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLERX_SIGNED_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLERX_SIGNED_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_1_5_V2, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_1_5_V2]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_1_5_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_1_5_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.EAGLER_BETA_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=EAGLER_BETA_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.PEYTON_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=PEYTON_V1]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.PEYTON_V2, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=PEYTON_V2]")); + launch_conf_val_launch_type_opts.put(EnumClientLaunchType.STANDARD_OFFLINE_V1, + selectHelper(parentElement, "launch_conf_val_launch_type_opt[value=STANDARD_OFFLINE_V1]")); launch_conf_join_server = selectHelper(parentElement, "launch_conf_join_server"); launch_conf_val_join_server = selectHelper(parentElement, "launch_conf_val_join_server"); launch_conf_opts_name = selectHelper(parentElement, "launch_conf_opts_name"); @@ -163,41 +217,4 @@ public class BootMenuDOM { }); } - public static void show(HTMLElement el) { - el.getStyle().setProperty("display", "block"); - } - - public static void hide(HTMLElement el) { - el.getStyle().setProperty("display", "none"); - } - - public static void setValue(HTMLElement el, String value) { - ((HTMLInputElement)el).setValue(value); - } - - public static String getValue(HTMLElement el) { - return ((HTMLInputElement)el).getValue(); - } - - public static void setChecked(HTMLElement el, boolean checked) { - ((HTMLInputElement)el).setChecked(checked); - } - - public static boolean getChecked(HTMLElement el) { - return ((HTMLInputElement)el).isChecked(); - } - - public static void setDisabled(HTMLElement el, boolean disabled) { - ((HTMLInputElement)el).setDisabled(disabled); - } - - private static HTMLElement selectHelper(HTMLElement parent, String name) { - name = "." + BootMenuConstants.cssClassPrefixBootMenu + name; - HTMLElement ret = parent.querySelector(name); - if(ret == null) { - throw new RuntimeException("Failed to select \"" + name + "\" from boot menu!"); - } - return ret; - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDataManager.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDataManager.java index b1d9ab53..3e51c7c3 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDataManager.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDataManager.java @@ -21,32 +21,63 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuDataManager { protected static final Logger logger = LogManager.getLogger("BootMenuDataManager"); - protected BootMenuDatastore datastore; + public static int getBootMenuFlags(Window win) { + try { + Storage stor = win.getLocalStorage(); + if (stor != null) { + String itm = stor.getItem(BootMenuConstants.getBootMenuFlagsKeyName()); + if (itm != null) { + return Integer.parseInt(itm); + } + } + } catch (Throwable t) { + } + return -1; + } + public static void setBootMenuFlags(Window win, int flags) { + try { + Storage stor = win.getLocalStorage(); + if (stor != null) { + String key = BootMenuConstants.getBootMenuFlagsKeyName(); + if (flags != -1) { + stor.setItem(key, Integer.toString(flags)); + } else { + stor.removeItem(key); + } + } + } catch (Throwable t) { + } + } + + protected BootMenuDatastore datastore; public final Set existingBlobs = new HashSet<>(); - public final Map clientDatas = new HashMap<>(); - public final Map launchDatas = new HashMap<>(); + public final Map clientDatas = new HashMap<>(); + public final Map launchDatas = new HashMap<>(); + public final List launchDatasList = new ArrayList<>(); public final List launchOrderList = new ArrayList<>(); public int confBootTimeout = 0; + public String confMenuTitle = "EaglercraftX 1.8 Boot Manager"; public BootMenuDataManager(BootMenuDatastore datastore) { @@ -55,33 +86,168 @@ public class BootMenuDataManager { this.loadAdditionalConf(); } - public void installNewClientData(LaunchConfigEntry launchConfig, ClientDataEntry clientData, Map clientBlobs, boolean rotateUUIDs) { - if(rotateUUIDs) { + public void deleteLaunchConfig(EaglercraftUUID launchConfig) { + if (launchDatas.remove(launchConfig) != null) { + boolean removed = false; + while (launchDatasList.remove(launchConfig)) { + removed = true; + } + while (launchOrderList.remove(launchConfig)) { + removed = true; + } + String name = "launchDatas/" + launchConfig; + logger.info("Deleting launch config \"{}\" from datastore", name); + if (!datastore.deleteItem(name)) { + logger.warn("Failed to delete file! Removing it from the list anyway..."); + } + if (removed) { + writeManifest(); + } + garbageCollectClientDatas(); + } + } + + public void garbageCollectAll() { + logger.info("Garbage-collecting boot menu data store"); + Set existingClients = new HashSet<>(); + Set existingLaunches = new HashSet<>(); + Set existingBlobs = new HashSet<>(); + Set orphanedFiles = new HashSet<>(); + datastore.iterateAllKeys((str) -> { + if (str.startsWith("clientDatas/")) { + try { + existingClients.add(EaglercraftUUID.fromString(str.substring(12))); + } catch (IllegalArgumentException ex) { + orphanedFiles.add(str); + } + } else if (str.startsWith("launchDatas/")) { + try { + existingLaunches.add(EaglercraftUUID.fromString(str.substring(12))); + } catch (IllegalArgumentException ex) { + orphanedFiles.add(str); + } + } else if (str.startsWith("blobs/")) { + try { + existingBlobs.add(EaglercraftUUID.fromString(str.substring(6))); + } catch (IllegalArgumentException ex) { + orphanedFiles.add(str); + } + } + }); + Set toDelete = new HashSet<>(existingLaunches); + toDelete.removeAll(launchDatas.keySet()); + if (!toDelete.isEmpty()) { + for (EaglercraftUUID del : toDelete) { + String name = "launchDatas/" + del; + logger.info("Deleting orphaned launch \"{}\" from datastore", name); + if (!datastore.deleteItem(name)) { + logger.warn("Failed to delete file! Skipping..."); + } + } + } + Set referencedData = new HashSet<>(); + for (LaunchConfigEntry etr : launchDatas.values()) { + referencedData.add(etr.clientDataUUID); + } + toDelete = new HashSet<>(existingClients); + toDelete.removeAll(referencedData); + if (!toDelete.isEmpty()) { + for (EaglercraftUUID del : toDelete) { + clientDatas.remove(del); + String name = "clientDatas/" + del; + logger.info("Deleting orphaned client \"{}\" from datastore", name); + if (!datastore.deleteItem(name)) { + logger.warn("Failed to delete file! Skipping..."); + } + } + } + referencedData.clear(); + for (ClientDataEntry etr : clientDatas.values()) { + referencedData.addAll(etr.getReferencedBlobs()); + } + toDelete.clear(); + toDelete.addAll(existingBlobs); + toDelete.removeAll(referencedData); + if (!toDelete.isEmpty()) { + for (EaglercraftUUID del : toDelete) { + existingBlobs.remove(del); + String name = "blobs/" + del; + logger.info("Deleting orphaned blob \"{}\" from datastore", name); + if (!datastore.deleteItem(name)) { + logger.warn("Failed to delete file! Skipping..."); + } + } + } + } + + protected void garbageCollectClientBlobs() { + Set referencedClientBlob = new HashSet<>(); + for (ClientDataEntry etr : clientDatas.values()) { + referencedClientBlob.addAll(etr.getReferencedBlobs()); + } + Set toDelete = new HashSet<>(existingBlobs); + toDelete.removeAll(referencedClientBlob); + if (!toDelete.isEmpty()) { + for (EaglercraftUUID del : toDelete) { + existingBlobs.remove(del); + String name = "blobs/" + del; + logger.info("Deleting orphaned blob \"{}\" from datastore", name); + if (!datastore.deleteItem(name)) { + logger.warn("Failed to delete file! Skipping..."); + } + } + } + } + + protected void garbageCollectClientDatas() { + Set referencedClientData = new HashSet<>(); + for (LaunchConfigEntry etr : launchDatas.values()) { + referencedClientData.add(etr.clientDataUUID); + } + Set toDelete = new HashSet<>(clientDatas.keySet()); + toDelete.removeAll(referencedClientData); + boolean garbageCollectBlobs = !toDelete.isEmpty(); + if (garbageCollectBlobs) { + for (EaglercraftUUID del : toDelete) { + clientDatas.remove(del); + String name = "clientDatas/" + del; + logger.info("Deleting orphaned client \"{}\" from datastore", name); + datastore.deleteItem(name); + } + garbageCollectClientBlobs(); + } + } + + public void installNewClientData(LaunchConfigEntry launchConfig, ClientDataEntry clientData, + Map clientBlobs, boolean rotateUUIDs) { + if (rotateUUIDs) { EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); EaglercraftUUID rotatedClientUUID = EaglercraftUUID.randomUUID(); launchConfig = launchConfig.rotateUUIDs(rotatedLaunchUUID, rotatedClientUUID); clientData = clientData.rotateUUID(rotatedClientUUID); } - if(launchDatas.containsKey(launchConfig.uuid) || BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { + if (launchDatas.containsKey(launchConfig.uuid) + || BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { throw new IllegalArgumentException("Launch data UUID \"" + launchConfig.uuid + "\" already exists!"); } - if(clientDatas.containsKey(clientData.uuid) || BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.uuid)) { + if (clientDatas.containsKey(clientData.uuid) + || BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.uuid)) { throw new IllegalArgumentException("Client data UUID \"" + clientData.uuid + "\" already exists!"); } - if(!launchConfig.clientDataUUID.equals(clientData.uuid)) { + if (!launchConfig.clientDataUUID.equals(clientData.uuid)) { throw new IllegalArgumentException("Mismatched client data UUID and launch configuration!"); } logger.info("Installing new client data \"{}\"...", clientData.uuid); - if(clientBlobs != null && !clientBlobs.isEmpty()) { - for(Entry etr : clientBlobs.entrySet()) { + if (clientBlobs != null && !clientBlobs.isEmpty()) { + for (Entry etr : clientBlobs.entrySet()) { EaglercraftUUID k = etr.getKey(); byte[] v = etr.getValue(); String name = "blobs/" + k; - if(!datastore.containsKey(name)) { + if (!datastore.containsKey(name)) { logger.info(" - Adding blob to datastore \"{}\" ({} bytes long)", name, v.length); datastore.setItem(name, v); existingBlobs.add(k); - }else { + } else { logger.info(" - Skipping blob \"{}\" because it already exists", name); } } @@ -95,26 +261,60 @@ public class BootMenuDataManager { installNewLaunchConfig(launchConfig, false); } - public void installNewLaunchConfig(LaunchConfigEntry launchConfig, ClientDataEntry clientData, Map clientBlobs, boolean rotateUUIDs) { - if(rotateUUIDs) { + public void installNewLaunchConfig(LaunchConfigEntry launchConfig, boolean rotateUUIDs) { + if (rotateUUIDs) { EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); launchConfig = launchConfig.rotateUUIDs(rotatedLaunchUUID, launchConfig.clientDataUUID); } - if(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { + if (BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { throw new IllegalArgumentException("The origin launch configuration cannot be overwritten!"); } - if(!clientDatas.containsKey(launchConfig.clientDataUUID) && !BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.clientDataUUID)) { + if (!clientDatas.containsKey(launchConfig.clientDataUUID) + && !BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.uuid)) { + throw new IllegalArgumentException( + "Client data UUID \"" + launchConfig.clientDataUUID + "\" does not exist!"); + } + logger.info("Installing new launch config \"{}\"...", launchConfig.uuid); + String name = "launchDatas/" + launchConfig.uuid; + JSONObject obj = new JSONObject(); + launchConfig.writeJSON(obj); + datastore.setItem(name, obj.toString().getBytes(StandardCharsets.UTF_8)); + boolean writeManifest = false; + if (launchDatas.put(launchConfig.uuid, launchConfig) == null) { + launchDatasList.add(launchConfig.uuid); + writeManifest = true; + } + if (!launchOrderList.contains(launchConfig.uuid)) { + launchOrderList.add(launchConfig.uuid); + writeManifest = true; + } + if (writeManifest) { + writeManifest(); + } + } + + public void installNewLaunchConfig(LaunchConfigEntry launchConfig, ClientDataEntry clientData, + Map clientBlobs, boolean rotateUUIDs) { + if (rotateUUIDs) { + EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); + launchConfig = launchConfig.rotateUUIDs(rotatedLaunchUUID, launchConfig.clientDataUUID); + } + if (BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { + throw new IllegalArgumentException("The origin launch configuration cannot be overwritten!"); + } + if (!clientDatas.containsKey(launchConfig.clientDataUUID) + && !BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.clientDataUUID)) { logger.info("Installing new client data \"{}\"...", clientData.uuid); - if(clientBlobs != null && !clientBlobs.isEmpty()) { - for(Entry etr : clientBlobs.entrySet()) { + if (clientBlobs != null && !clientBlobs.isEmpty()) { + for (Entry etr : clientBlobs.entrySet()) { EaglercraftUUID k = etr.getKey(); byte[] v = etr.getValue(); String name = "blobs/" + k; - if(!datastore.containsKey(name)) { + if (!datastore.containsKey(name)) { logger.info(" - Adding blob to datastore \"{}\" ({} bytes long)", name, v.length); datastore.setItem(name, v); existingBlobs.add(k); - }else { + } else { logger.info(" - Skipping blob \"{}\" because it already exists", name); } } @@ -132,67 +332,31 @@ public class BootMenuDataManager { launchConfig.writeJSON(obj); datastore.setItem(name, obj.toString().getBytes(StandardCharsets.UTF_8)); boolean writeManifest = false; - if(launchDatas.put(launchConfig.uuid, launchConfig) == null) { + if (launchDatas.put(launchConfig.uuid, launchConfig) == null) { launchDatasList.add(launchConfig.uuid); writeManifest = true; } - if(!launchOrderList.contains(launchConfig.uuid)) { + if (!launchOrderList.contains(launchConfig.uuid)) { launchOrderList.add(launchConfig.uuid); writeManifest = true; } - if(writeManifest) { + if (writeManifest) { writeManifest(); } } - public void installNewLaunchConfig(LaunchConfigEntry launchConfig, boolean rotateUUIDs) { - if(rotateUUIDs) { - EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); - launchConfig = launchConfig.rotateUUIDs(rotatedLaunchUUID, launchConfig.clientDataUUID); - } - if(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN.equals(launchConfig.uuid)) { - throw new IllegalArgumentException("The origin launch configuration cannot be overwritten!"); - } - if(!clientDatas.containsKey(launchConfig.clientDataUUID) && !BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(launchConfig.uuid)) { - throw new IllegalArgumentException("Client data UUID \"" + launchConfig.clientDataUUID + "\" does not exist!"); - } - logger.info("Installing new launch config \"{}\"...", launchConfig.uuid); - String name = "launchDatas/" + launchConfig.uuid; - JSONObject obj = new JSONObject(); - launchConfig.writeJSON(obj); - datastore.setItem(name, obj.toString().getBytes(StandardCharsets.UTF_8)); - boolean writeManifest = false; - if(launchDatas.put(launchConfig.uuid, launchConfig) == null) { - launchDatasList.add(launchConfig.uuid); - writeManifest = true; - } - if(!launchOrderList.contains(launchConfig.uuid)) { - launchOrderList.add(launchConfig.uuid); - writeManifest = true; - } - if(writeManifest) { - writeManifest(); - } - } - - public void deleteLaunchConfig(EaglercraftUUID launchConfig) { - if(launchDatas.remove(launchConfig) != null) { - boolean removed = false; - while(launchDatasList.remove(launchConfig)) { - removed = true; + public void loadAdditionalConf() { + logger.info("Loading config.json"); + byte[] dat = datastore.getItem("config.json"); + if (dat != null) { + try { + JSONObject obj = new JSONObject(new String(dat, StandardCharsets.UTF_8)); + confBootTimeout = obj.getInt("confBootTimeout"); + confMenuTitle = obj.getString("confMenuTitle"); + } catch (JSONException ex) { + logger.error("Invalid config.json!"); + logger.error(ex); } - while(launchOrderList.remove(launchConfig)) { - removed = true; - } - String name = "launchDatas/" + launchConfig; - logger.info("Deleting launch config \"{}\" from datastore", name); - if(!datastore.deleteItem(name)) { - logger.warn("Failed to delete file! Removing it from the list anyway..."); - } - if(removed) { - writeManifest(); - } - garbageCollectClientDatas(); } } @@ -204,27 +368,28 @@ public class BootMenuDataManager { launchDatasList.clear(); launchOrderList.clear(); byte[] manifestBytes = datastore.getItem("manifest.json"); - if(manifestBytes == null) { + if (manifestBytes == null) { return; } List profilesToLoad; try { - JSONArray arr = (new JSONObject(new String(manifestBytes, StandardCharsets.UTF_8))).getJSONArray("launchProfiles"); + JSONArray arr = (new JSONObject(new String(manifestBytes, StandardCharsets.UTF_8))) + .getJSONArray("launchProfiles"); profilesToLoad = new ArrayList<>(arr.length()); - for(int i = 0, l = arr.length(); i < l; ++i) { + for (int i = 0, l = arr.length(); i < l; ++i) { profilesToLoad.add(EaglercraftUUID.fromString(arr.getString(i))); } arr = (new JSONObject(new String(manifestBytes, StandardCharsets.UTF_8))).getJSONArray("launchOrderList"); - for(int i = 0, l = arr.length(); i < l; ++i) { + for (int i = 0, l = arr.length(); i < l; ++i) { launchOrderList.add(EaglercraftUUID.fromString(arr.getString(i))); } - }catch(JSONException | IllegalArgumentException exp) { + } catch (JSONException | IllegalArgumentException exp) { logger.error("Manifest is corrupt!"); logger.error(exp); return; } - for(EaglercraftUUID uuid : profilesToLoad) { - if(loadLaunchDataFromStore(uuid) != null) { + for (EaglercraftUUID uuid : profilesToLoad) { + if (loadLaunchDataFromStore(uuid) != null) { launchDatasList.add(uuid); } } @@ -232,48 +397,20 @@ public class BootMenuDataManager { logger.info("Loading {} profile(s) successfully", launchDatas.size()); } - protected LaunchConfigEntry loadLaunchDataFromStore(EaglercraftUUID uuid) { - LaunchConfigEntry ret = launchDatas.get(uuid); - if(ret != null) { - return ret; - } - String name = "launchDatas/" + uuid; - byte[] fileData = datastore.getItem(name); - if(fileData == null) { - logger.error("Could not locate launch data \"{}\"!", name); - return null; - } - try { - ret = new LaunchConfigEntry(uuid, new JSONObject(new String(fileData, StandardCharsets.UTF_8))); - }catch(JSONException | IllegalArgumentException exp) { - logger.error("Launch data \"{}\" is corrupt!", name); - logger.error(exp); - return null; - } - if(!BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(ret.clientDataUUID)) { - if(loadClientDataFromStore(ret.clientDataUUID) == null) { - logger.error("Client data \"{}\" for launch data \"{}\" is missing/corrupt!", ret.clientDataUUID, name); - return null; - } - } - launchDatas.put(uuid, ret); - return ret; - } - protected ClientDataEntry loadClientDataFromStore(EaglercraftUUID uuid) { ClientDataEntry ret = clientDatas.get(uuid); - if(ret != null) { + if (ret != null) { return ret; } String name = "clientDatas/" + uuid; byte[] fileData = datastore.getItem(name); - if(fileData == null) { + if (fileData == null) { logger.error("Could not locate client data \"{}\"!", name); return null; } try { ret = new ClientDataEntry(uuid, new JSONObject(new String(fileData, StandardCharsets.UTF_8))); - }catch(JSONException | IllegalArgumentException exp) { + } catch (JSONException | IllegalArgumentException exp) { logger.error("Client data \"{}\" is corrupt!", name); logger.error(exp); return null; @@ -283,145 +420,32 @@ public class BootMenuDataManager { return ret; } - public void writeManifest() { - JSONObject manifest = new JSONObject(); - JSONArray launchProfileArray = new JSONArray(); - for(EaglercraftUUID uuid : launchDatasList) { - launchProfileArray.put(uuid.toString()); + protected LaunchConfigEntry loadLaunchDataFromStore(EaglercraftUUID uuid) { + LaunchConfigEntry ret = launchDatas.get(uuid); + if (ret != null) { + return ret; } - manifest.put("launchProfiles", launchProfileArray); - JSONArray launchOrderListArray = new JSONArray(); - for(EaglercraftUUID uuid : launchOrderList) { - launchOrderListArray.put(uuid.toString()); + String name = "launchDatas/" + uuid; + byte[] fileData = datastore.getItem(name); + if (fileData == null) { + logger.error("Could not locate launch data \"{}\"!", name); + return null; } - manifest.put("launchOrderList", launchOrderListArray); - datastore.setItem("manifest.json", manifest.toString().getBytes(StandardCharsets.UTF_8)); - } - - protected void garbageCollectClientDatas() { - Set referencedClientData = new HashSet<>(); - for(LaunchConfigEntry etr : launchDatas.values()) { - referencedClientData.add(etr.clientDataUUID); + try { + ret = new LaunchConfigEntry(uuid, new JSONObject(new String(fileData, StandardCharsets.UTF_8))); + } catch (JSONException | IllegalArgumentException exp) { + logger.error("Launch data \"{}\" is corrupt!", name); + logger.error(exp); + return null; } - Set toDelete = new HashSet<>(clientDatas.keySet()); - toDelete.removeAll(referencedClientData); - boolean garbageCollectBlobs = !toDelete.isEmpty(); - if(garbageCollectBlobs) { - for(EaglercraftUUID del : toDelete) { - clientDatas.remove(del); - String name = "clientDatas/" + del; - logger.info("Deleting orphaned client \"{}\" from datastore", name); - datastore.deleteItem(name); - } - garbageCollectClientBlobs(); - } - } - - protected void garbageCollectClientBlobs() { - Set referencedClientBlob = new HashSet<>(); - for(ClientDataEntry etr : clientDatas.values()) { - referencedClientBlob.addAll(etr.getReferencedBlobs()); - } - Set toDelete = new HashSet<>(existingBlobs); - toDelete.removeAll(referencedClientBlob); - if(!toDelete.isEmpty()) { - for(EaglercraftUUID del : toDelete) { - existingBlobs.remove(del); - String name = "blobs/" + del; - logger.info("Deleting orphaned blob \"{}\" from datastore", name); - if(!datastore.deleteItem(name)) { - logger.warn("Failed to delete file! Skipping..."); - } - } - } - } - - public void garbageCollectAll() { - logger.info("Garbage-collecting boot menu data store"); - Set existingClients = new HashSet<>(); - Set existingLaunches = new HashSet<>(); - Set existingBlobs = new HashSet<>(); - Set orphanedFiles = new HashSet<>(); - datastore.iterateAllKeys((str) -> { - if(str.startsWith("clientDatas/")) { - try { - existingClients.add(EaglercraftUUID.fromString(str.substring(12))); - }catch(IllegalArgumentException ex) { - orphanedFiles.add(str); - } - }else if(str.startsWith("launchDatas/")) { - try { - existingLaunches.add(EaglercraftUUID.fromString(str.substring(12))); - }catch(IllegalArgumentException ex) { - orphanedFiles.add(str); - } - }else if(str.startsWith("blobs/")) { - try { - existingBlobs.add(EaglercraftUUID.fromString(str.substring(6))); - }catch(IllegalArgumentException ex) { - orphanedFiles.add(str); - } - } - }); - Set toDelete = new HashSet<>(existingLaunches); - toDelete.removeAll(launchDatas.keySet()); - if(!toDelete.isEmpty()) { - for(EaglercraftUUID del : toDelete) { - String name = "launchDatas/" + del; - logger.info("Deleting orphaned launch \"{}\" from datastore", name); - if(!datastore.deleteItem(name)) { - logger.warn("Failed to delete file! Skipping..."); - } - } - } - Set referencedData = new HashSet<>(); - for(LaunchConfigEntry etr : launchDatas.values()) { - referencedData.add(etr.clientDataUUID); - } - toDelete = new HashSet<>(existingClients); - toDelete.removeAll(referencedData); - if(!toDelete.isEmpty()) { - for(EaglercraftUUID del : toDelete) { - clientDatas.remove(del); - String name = "clientDatas/" + del; - logger.info("Deleting orphaned client \"{}\" from datastore", name); - if(!datastore.deleteItem(name)) { - logger.warn("Failed to delete file! Skipping..."); - } - } - } - referencedData.clear(); - for(ClientDataEntry etr : clientDatas.values()) { - referencedData.addAll(etr.getReferencedBlobs()); - } - toDelete.clear(); - toDelete.addAll(existingBlobs); - toDelete.removeAll(referencedData); - if(!toDelete.isEmpty()) { - for(EaglercraftUUID del : toDelete) { - existingBlobs.remove(del); - String name = "blobs/" + del; - logger.info("Deleting orphaned blob \"{}\" from datastore", name); - if(!datastore.deleteItem(name)) { - logger.warn("Failed to delete file! Skipping..."); - } - } - } - } - - public void loadAdditionalConf() { - logger.info("Loading config.json"); - byte[] dat = datastore.getItem("config.json"); - if(dat != null) { - try { - JSONObject obj = new JSONObject(new String(dat, StandardCharsets.UTF_8)); - confBootTimeout = obj.getInt("confBootTimeout"); - confMenuTitle = obj.getString("confMenuTitle"); - }catch(JSONException ex) { - logger.error("Invalid config.json!"); - logger.error(ex); + if (!BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(ret.clientDataUUID)) { + if (loadClientDataFromStore(ret.clientDataUUID) == null) { + logger.error("Client data \"{}\" for launch data \"{}\" is missing/corrupt!", ret.clientDataUUID, name); + return null; } } + launchDatas.put(uuid, ret); + return ret; } public void saveAdditionalConf() { @@ -432,33 +456,19 @@ public class BootMenuDataManager { datastore.setItem("config.json", confBytes); } - public static int getBootMenuFlags(Window win) { - try { - Storage stor = win.getLocalStorage(); - if(stor != null) { - String itm = stor.getItem(BootMenuConstants.getBootMenuFlagsKeyName()); - if(itm != null) { - return Integer.parseInt(itm); - } - } - }catch(Throwable t) { + public void writeManifest() { + JSONObject manifest = new JSONObject(); + JSONArray launchProfileArray = new JSONArray(); + for (EaglercraftUUID uuid : launchDatasList) { + launchProfileArray.put(uuid.toString()); } - return -1; - } - - public static void setBootMenuFlags(Window win, int flags) { - try { - Storage stor = win.getLocalStorage(); - if(stor != null) { - String key = BootMenuConstants.getBootMenuFlagsKeyName(); - if(flags != -1) { - stor.setItem(key, Integer.toString(flags)); - }else { - stor.removeItem(key); - } - } - }catch(Throwable t) { + manifest.put("launchProfiles", launchProfileArray); + JSONArray launchOrderListArray = new JSONArray(); + for (EaglercraftUUID uuid : launchOrderList) { + launchOrderListArray.put(uuid.toString()); } + manifest.put("launchOrderList", launchOrderListArray); + datastore.setItem("manifest.json", manifest.toString().getBytes(StandardCharsets.UTF_8)); } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDatastore.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDatastore.java index 7077a69d..9ca40fb1 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDatastore.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuDatastore.java @@ -29,188 +29,118 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuDatastore { - private static final Logger logger = LogManager.getLogger("BootMenuDatastore"); - - public static final String bootMenuDatabaseName = BootMenuConstants.bootMenuDatabaseName; - - private static final Object instanceLock = new Object(); - private static BootMenuDatastore instance = null; - - public static class DatastoreLockedException extends RuntimeException { - public DatastoreLockedException(String message) { - super(message); - } - } - - public static class DatastoreInitializationException extends RuntimeException { - public DatastoreInitializationException(String message) { - super(message); - } - } - - public static class DatastoreOperationException extends RuntimeException { - public DatastoreOperationException(String message) { - super(message); - } - } - - public static BootMenuDatastore openDatastore() { - synchronized(instanceLock) { - if(instance != null) { - ++instance.openCount; - return instance; - } - return instance = openDatastore0(); - } - } - - private static BootMenuDatastore openDatastore0() { - DatabaseOpen openResult = AsyncHandlers - .openDB(bootMenuDatabaseName + (BootMenuEntryPoint.isSignedClient() ? "_sig" : "_unsig") - + (IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients() ? "_1" : "_0")); - if(openResult.failedLocked) { - throw new DatastoreLockedException(openResult.failedError); - } - if(openResult.failedInit) { - throw new DatastoreInitializationException(openResult.failedError); - } - if(openResult.database == null) { - throw new NullPointerException("IDBDatabase is null!"); - } - return new BootMenuDatastore(openResult.database); - } - - private IDBDatabase database; - private int openCount; - - private BootMenuDatastore(IDBDatabase database) { - this.database = database; - this.openCount = 1; - } - - public byte[] getItem(String key) { - if(database != null) { - return TeaVMUtils.wrapByteArrayBuffer(AsyncHandlers.readWholeFile(database, key)); - }else { - return null; - } - } - - public void setItem(String key, byte[] data) { - if(database != null) { - if(data != null) { - if(!AsyncHandlers.writeWholeFile(database, key, TeaVMUtils.unwrapArrayBuffer(data)).bool) { - throw new DatastoreOperationException("Failed to write to datastore: \"" + key + "\" (" + data.length + " bytes)"); - } - }else { - AsyncHandlers.deleteFile(database, key); - } - } - } - - public boolean containsKey(String key) { - if(database != null) { - return AsyncHandlers.fileExists(database, key).bool; - }else { - return false; - } - } - - public boolean deleteItem(String key) { - if(database != null) { - return AsyncHandlers.deleteFile(database, key).bool; - }else { - return false; - } - } - - public void closeDatastore() { - if(--openCount == 0) { - synchronized(instanceLock) { - if(instance == this) { - instance = null; - } - } - closeDatastore0(); - } - } - - private void closeDatastore0() { - if(database != null) { - database.close(); - } - } - - public void iterateAllKeys(Consumer itr) { - if(database != null) { - AsyncHandlers.iterateFiles(database, itr); - } - } - - protected static class DatabaseOpen { - - protected final boolean failedInit; - protected final boolean failedLocked; - protected final String failedError; - - protected final IDBDatabase database; - - protected DatabaseOpen(boolean init, boolean locked, String error, IDBDatabase db) { - failedInit = init; - failedLocked = locked; - failedError = error; - database = db; - } - - } - - @JSBody(script = "return ((typeof indexedDB) !== 'undefined') ? indexedDB : null;") - protected static native IDBFactory createIDBFactory(); - - @JSFunctor - protected static interface OpenErrorCallback extends JSObject { - void call(String str); - } - - @JSBody(params = { "factory", "name", "ii", "errCB" }, script = "try { return factory.open(name, ii); } catch(err) { errCB(\"\" + err); return null; }") - protected static native IDBOpenDBRequest safeOpen(IDBFactory factory, String name, int i, OpenErrorCallback errCB); - protected static class AsyncHandlers { - + + @Async + protected static native BooleanResult deleteFile(IDBDatabase db, String name); + + private static void deleteFile(IDBDatabase db, String name, final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", "readwrite"); + final IDBRequest r = tx.objectStore("filesystem").delete(makeTheFuckingKeyWork(name)); + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.TRUE); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.FALSE); + } + }); + } + + @Async + protected static native BooleanResult fileExists(IDBDatabase db, String name); + + private static void fileExists(IDBDatabase db, String name, final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", "readonly"); + final IDBCountRequest r = tx.objectStore("filesystem").count(makeTheFuckingKeyWork(name)); + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult._new(r.getResult() > 0)); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.FALSE); + } + }); + } + + @Async + protected static native Integer iterateFiles(IDBDatabase db, final Consumer itr); + + private static void iterateFiles(IDBDatabase db, final Consumer itr, final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", "readonly"); + final IDBCursorRequest r = tx.objectStore("filesystem").openCursor(); + final int[] res = new int[1]; + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + IDBCursor c = r.getResult(); + if (c == null || c.getKey() == null) { + cb.complete(res[0]); + return; + } + String k = readKey(c.getKey()); + if (k != null) { + ++res[0]; + itr.accept(k); + } + c.doContinue(); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(res[0] > 0 ? res[0] : -1); + } + }); + } + + @JSBody(params = { "obj" }, script = "return [obj];") + private static native JSObject makeTheFuckingKeyWork(String k); + @Async protected static native DatabaseOpen openDB(String name); - + private static void openDB(String name, final AsyncCallback cb) { IDBFactory i = createIDBFactory(); - if(i == null) { + if (i == null) { cb.complete(new DatabaseOpen(true, false, "window.indexedDB was null or undefined", null)); return; } final String[] errorHolder = new String[] { null }; final IDBOpenDBRequest f = safeOpen(i, name, 1, (e) -> errorHolder[0] = e); - if(f == null || TeaVMUtils.isNotTruthy(f)) { - cb.complete(new DatabaseOpen(true, false, errorHolder[0] != null ? errorHolder[0] : "database open request was null or undefined", null)); + if (f == null || TeaVMUtils.isNotTruthy(f)) { + cb.complete(new DatabaseOpen(true, false, + errorHolder[0] != null ? errorHolder[0] : "database open request was null or undefined", null)); return; } TeaVMUtils.addEventListener(f, "blocked", new EventHandler() { @Override public void handleEvent() { - cb.complete(new DatabaseOpen(false, true, null, null)); + cb.complete(new DatabaseOpen(false, true, "database locked", null)); } }); TeaVMUtils.addEventListener(f, "success", new EventHandler() { @@ -232,36 +162,18 @@ public class BootMenuDatastore { } }); } - - @Async - protected static native BooleanResult deleteFile(IDBDatabase db, String name); - - private static void deleteFile(IDBDatabase db, String name, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", "readwrite"); - final IDBRequest r = tx.objectStore("filesystem").delete(makeTheFuckingKeyWork(name)); - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.TRUE); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.FALSE); - } - }); - } - - @JSBody(params = { "obj" }, script = "return (typeof obj === \"undefined\") ? null : ((typeof obj.data === \"undefined\") ? null : obj.data);") + + @JSBody(params = { + "k" }, script = "return ((typeof k) === \"string\") ? k : (((typeof k) === \"undefined\") ? null : (((typeof k[0]) === \"string\") ? k[0] : null));") + private static native String readKey(JSObject k); + + @JSBody(params = { + "obj" }, script = "return (typeof obj === \"undefined\") ? null : ((typeof obj.data === \"undefined\") ? null : obj.data);") protected static native ArrayBuffer readRow(JSObject obj); - - @JSBody(params = { "obj" }, script = "return [obj];") - private static native JSObject makeTheFuckingKeyWork(String k); - + @Async protected static native ArrayBuffer readWholeFile(IDBDatabase db, String name); - + private static void readWholeFile(IDBDatabase db, String name, final AsyncCallback cb) { IDBTransaction tx = db.transaction("filesystem", "readonly"); final IDBGetRequest r = tx.objectStore("filesystem").get(makeTheFuckingKeyWork(name)); @@ -277,73 +189,20 @@ public class BootMenuDatastore { cb.complete(null); } }); - + } - - @Async - protected static native BooleanResult fileExists(IDBDatabase db, String name); - - private static void fileExists(IDBDatabase db, String name, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", "readonly"); - final IDBCountRequest r = tx.objectStore("filesystem").count(makeTheFuckingKeyWork(name)); - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult._new(r.getResult() > 0)); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.FALSE); - } - }); - } - - @JSBody(params = { "k" }, script = "return ((typeof k) === \"string\") ? k : (((typeof k) === \"undefined\") ? null : (((typeof k[0]) === \"string\") ? k[0] : null));") - private static native String readKey(JSObject k); - - @Async - protected static native Integer iterateFiles(IDBDatabase db, final Consumer itr); - - private static void iterateFiles(IDBDatabase db, final Consumer itr, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", "readonly"); - final IDBCursorRequest r = tx.objectStore("filesystem").openCursor(); - final int[] res = new int[1]; - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - IDBCursor c = r.getResult(); - if(c == null || c.getKey() == null || c.getValue() == null) { - cb.complete(res[0]); - return; - } - String k = readKey(c.getKey()); - if(k != null) { - ++res[0]; - itr.accept(k); - } - c.doContinue(); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(res[0] > 0 ? res[0] : -1); - } - }); - } - + @JSBody(params = { "pat", "dat" }, script = "return { path: pat, data: dat };") protected static native JSObject writeRow(String name, ArrayBuffer data); - + @Async protected static native BooleanResult writeWholeFile(IDBDatabase db, String name, ArrayBuffer data); - - private static void writeWholeFile(IDBDatabase db, String name, ArrayBuffer data, final AsyncCallback cb) { + + private static void writeWholeFile(IDBDatabase db, String name, ArrayBuffer data, + final AsyncCallback cb) { IDBTransaction tx = db.transaction("filesystem", "readwrite"); final IDBRequest r = tx.objectStore("filesystem").put(writeRow(name, data)); - + TeaVMUtils.addEventListener(r, "success", new EventHandler() { @Override public void handleEvent() { @@ -357,6 +216,156 @@ public class BootMenuDatastore { } }); } - + + } + + protected static class DatabaseOpen { + + protected final boolean failedInit; + protected final boolean failedLocked; + protected final String failedError; + + protected final IDBDatabase database; + + protected DatabaseOpen(boolean init, boolean locked, String error, IDBDatabase db) { + failedInit = init; + failedLocked = locked; + failedError = error; + database = db; + } + + } + + public static class DatastoreInitializationException extends RuntimeException { + public DatastoreInitializationException(String message) { + super(message); + } + } + + public static class DatastoreLockedException extends RuntimeException { + public DatastoreLockedException(String message) { + super(message); + } + } + + public static class DatastoreOperationException extends RuntimeException { + public DatastoreOperationException(String message) { + super(message); + } + } + + @JSFunctor + protected static interface OpenErrorCallback extends JSObject { + void call(String str); + } + + private static final Logger logger = LogManager.getLogger("BootMenuDatastore"); + + public static final String bootMenuDatabaseName = BootMenuConstants.bootMenuDatabaseName; + + private static final Object instanceLock = new Object(); + + private static BootMenuDatastore instance = null; + + @JSBody(script = "return ((typeof indexedDB) !== 'undefined') ? indexedDB : null;") + protected static native IDBFactory createIDBFactory(); + + public static BootMenuDatastore openDatastore() { + synchronized (instanceLock) { + if (instance != null) { + ++instance.openCount; + return instance; + } + return instance = openDatastore0(); + } + } + + private static BootMenuDatastore openDatastore0() { + DatabaseOpen openResult = AsyncHandlers + .openDB(bootMenuDatabaseName + (BootMenuEntryPoint.isSignedClient() ? "_sig" : "_unsig") + + (IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients() ? "_1" : "_0")); + if (openResult.failedLocked) { + throw new DatastoreLockedException(openResult.failedError); + } + if (openResult.failedInit) { + throw new DatastoreInitializationException(openResult.failedError); + } + if (openResult.database == null) { + throw new NullPointerException("IDBDatabase is null!"); + } + return new BootMenuDatastore(openResult.database); + } + + @JSBody(params = { "factory", "name", "ii", + "errCB" }, script = "try { return factory.open(name, ii); } catch(err) { errCB(\"\" + err); return null; }") + protected static native IDBOpenDBRequest safeOpen(IDBFactory factory, String name, int i, OpenErrorCallback errCB); + + private IDBDatabase database; + + private int openCount; + + private BootMenuDatastore(IDBDatabase database) { + this.database = database; + this.openCount = 1; + } + + public void closeDatastore() { + if (--openCount == 0) { + synchronized (instanceLock) { + if (instance == this) { + instance = null; + } + } + closeDatastore0(); + } + } + + private void closeDatastore0() { + if (database != null) { + database.close(); + } + } + + public boolean containsKey(String key) { + if (database != null) { + return AsyncHandlers.fileExists(database, key).bool; + } else { + return false; + } + } + + public boolean deleteItem(String key) { + if (database != null) { + return AsyncHandlers.deleteFile(database, key).bool; + } else { + return false; + } + } + + public byte[] getItem(String key) { + if (database != null) { + return TeaVMUtils.wrapByteArrayBuffer(AsyncHandlers.readWholeFile(database, key)); + } else { + return null; + } + } + + public void iterateAllKeys(Consumer itr) { + if (database != null) { + AsyncHandlers.iterateFiles(database, itr); + } + } + + public void setItem(String key, byte[] data) { + if (database != null) { + if (data != null) { + if (!AsyncHandlers.writeWholeFile(database, key, TeaVMUtils.unwrapArrayBuffer(data)).bool) { + throw new DatastoreOperationException( + "Failed to write to datastore: \"" + key + "\" (" + data.length + " bytes)"); + } + } else { + AsyncHandlers.deleteFile(database, key); + } + } } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuEntryPoint.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuEntryPoint.java index 61090f30..6315f5b4 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuEntryPoint.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuEntryPoint.java @@ -20,56 +20,51 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; import net.lax1dude.eaglercraft.v1_8.internal.PlatformUpdateSvc; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain.EPKFileEntry; -import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMClientConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; +import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuEntryPoint { - @JSBody(params = {}, script = "if((typeof window.__isEaglerX188BootMenuAlreadyShow === \"string\") && window.__isEaglerX188BootMenuAlreadyShow === \"yes\") return true; window.__isEaglerX188BootMenuAlreadyShow = \"yes\"; return false;") - private static native boolean getHasAlreadyBooted(); + public static class UnsignedClientEPKLoader { - @JSBody(params = {}, script = "window.__isEaglerX188BootMenuAlreadyShow = \"yes\";") - private static native void setHasAlreadyBooted(); + public final List list; + public final Map> loaders; - public static boolean checkShouldLaunchFlag(Window win) { - int flag = BootMenuDataManager.getBootMenuFlags(win); - if(flag == -1) { - return IBootMenuConfigAdapter.instance.isShowBootMenuOnLaunch() && !getHasAlreadyBooted(); + public UnsignedClientEPKLoader(List list, Map> loaders) { + this.list = list; + this.loaders = loaders; } - if((flag & 2) != 0) { - BootMenuDataManager.setBootMenuFlags(win, flag & ~2); - setHasAlreadyBooted(); - return true; + + public byte[] loadEntry(EaglercraftUUID epkUUID) { + Supplier sup = loaders.get(epkUUID); + return sup != null ? sup.get() : null; } - return ((flag & 1) != 0 || IBootMenuConfigAdapter.instance.isShowBootMenuOnLaunch()) && !getHasAlreadyBooted(); + } private static boolean hasInit = false; - private static byte[] signatureData = null; - private static byte[] bundleData = null; - public static void launchMenu(Window parentWindow, HTMLElement parentElement) { - signatureData = PlatformUpdateSvc.getClientSignatureData(); - bundleData = PlatformUpdateSvc.getClientBundleData(); - hasInit = true; - BootMenuMain.launchMenu(parentWindow, parentElement); - } + private static byte[] signatureData = null; + + private static byte[] bundleData = null; + public static boolean wasManuallyInvoked = false; public static void bootOriginClient() { bootOriginClient(null); @@ -77,61 +72,55 @@ public class BootMenuEntryPoint { public static void bootOriginClient(Runnable doBeforeBoot) { (new Thread(() -> { - if(doBeforeBoot != null) { + if (doBeforeBoot != null) { doBeforeBoot.run(); } ClientMain._main(); }, "main")).start(); } - public static boolean isSignedClient() { - if(!hasInit) { - signatureData = PlatformUpdateSvc.getClientSignatureData(); - bundleData = PlatformUpdateSvc.getClientBundleData(); - hasInit = true; + public static boolean checkShouldLaunchFlag(Window win) { + wasManuallyInvoked = false; + int flag = BootMenuDataManager.getBootMenuFlags(win); + if (flag == -1) { + return IBootMenuConfigAdapter.instance.isShowBootMenuOnLaunch() && !getHasAlreadyBooted(); } - return signatureData != null && bundleData != null; + if ((flag & 2) != 0) { + wasManuallyInvoked = true; + BootMenuDataManager.setBootMenuFlags(win, flag & ~2); + setHasAlreadyBooted(); + return true; + } + return ((flag & 1) != 0 || IBootMenuConfigAdapter.instance.isShowBootMenuOnLaunch()) && !getHasAlreadyBooted(); } - public static byte[] getSignedClientSignature() { - return signatureData; + public static void clearCookies() { + PlatformApplication.setLocalStorage(ServerCookieDataStore.localStorageKey, null, false); + ServerCookieDataStore.clearCookiesLow(); + } + + @JSBody(params = {}, script = "if((typeof window.__isEaglerX188BootMenuAlreadyShow === \"string\") && window.__isEaglerX188BootMenuAlreadyShow === \"yes\") return true; window.__isEaglerX188BootMenuAlreadyShow = \"yes\"; return false;") + private static native boolean getHasAlreadyBooted(); + + public static String getOriginContainer() { + return ClientMain.configRootElementId; + } + + public static String getOriginLaunchOpts() { + return ((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()).toJSONObject() + .put("bootMenuBlocksUnsignedClients", false).toString(4); + } + + public static JSONObject getOriginLaunchOptsJSON() { + return ((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()).toJSONObject(); } public static byte[] getSignedClientBundle() { return bundleData; } - public static byte[] getUnsignedClientClassesJS() { - return OfflineDownloadFactory.removeClientScriptElement(ClientPlatformSingleplayer.getIntegratedServerSourceTeaVM(), true); - } - - public static class UnsignedClientEPKLoader { - - public final List list; - public final Map> loaders; - - public UnsignedClientEPKLoader(List list, Map> loaders) { - this.list = list; - this.loaders = loaders; - } - - public byte[] loadEntry(EaglercraftUUID epkUUID) { - Supplier sup = loaders.get(epkUUID); - return sup != null ? sup.get() : null; - } - - } - - public static JSONArray getUnsignedClientAssetsEPKRaw() { - JSONArray ret = new JSONArray(ClientMain.configEPKFiles.length); - for (int i = 0; i < ClientMain.configEPKFiles.length; ++i) { - EPKFileEntry etr = ClientMain.configEPKFiles[i]; - JSONObject obj = new JSONObject(); - obj.put("url", etr.url); - obj.put("path", etr.path); - ret.put(obj); - } - return ret; + public static byte[] getSignedClientSignature() { + return signatureData; } public static UnsignedClientEPKLoader getUnsignedClientAssetsEPK() { @@ -148,16 +137,21 @@ public class BootMenuEntryPoint { return new UnsignedClientEPKLoader(list, loaders); } - public static String getOriginLaunchOpts() { - return ((TeaVMClientConfigAdapter)PlatformRuntime.getClientConfigAdapter()).toJSONObject().put("bootMenuBlocksUnsignedClients", false).toString(4); + public static JSONArray getUnsignedClientAssetsEPKRaw() { + JSONArray ret = new JSONArray(ClientMain.configEPKFiles.length); + for (int i = 0; i < ClientMain.configEPKFiles.length; ++i) { + EPKFileEntry etr = ClientMain.configEPKFiles[i]; + JSONObject obj = new JSONObject(); + obj.put("url", etr.url); + obj.put("path", etr.path); + ret.put(obj); + } + return ret; } - public static JSONObject getOriginLaunchOptsJSON() { - return ((TeaVMClientConfigAdapter)PlatformRuntime.getClientConfigAdapter()).toJSONObject(); - } - - public static String getOriginContainer() { - return ClientMain.configRootElementId; + public static byte[] getUnsignedClientClassesJS() { + return OfflineDownloadFactory + .removeClientScriptElement(ClientPlatformSingleplayer.getIntegratedServerSourceTeaVM(), true); } public static void installSignedClientAtRuntime(String displayName, Window win, byte[] clientCert, @@ -166,20 +160,35 @@ public class BootMenuEntryPoint { setTimeout); } + public static boolean isSignedClient() { + if (!hasInit) { + signatureData = PlatformUpdateSvc.getClientSignatureData(); + bundleData = PlatformUpdateSvc.getClientBundleData(); + hasInit = true; + } + return signatureData != null && bundleData != null; + } + + public static void launchMenu(Window parentWindow, HTMLElement parentElement) { + signatureData = PlatformUpdateSvc.getClientSignatureData(); + bundleData = PlatformUpdateSvc.getClientBundleData(); + hasInit = true; + BootMenuMain.launchMenu(parentWindow, parentElement); + } + public static void setDisplayBootMenuNextRefresh(Window win, boolean en) { int i = BootMenuDataManager.getBootMenuFlags(win); - if(i == -1) i = 0; - if(en) { + if (i == -1) + i = 0; + if (en) { i |= 2; - }else { + } else { i &= ~2; } BootMenuDataManager.setBootMenuFlags(win, i); } - public static void clearCookies() { - PlatformApplication.setLocalStorage(ServerCookieDataStore.localStorageKey, null, false); - ServerCookieDataStore.clearCookiesLow(); - } + @JSBody(params = {}, script = "window.__isEaglerX188BootMenuAlreadyShow = \"yes\";") + private static native void setHasAlreadyBooted(); } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuFatOfflineLoader.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuFatOfflineLoader.java index 3e47ab3f..b4fac3ed 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuFatOfflineLoader.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuFatOfflineLoader.java @@ -16,18 +16,19 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuFatOfflineLoader { @@ -35,7 +36,7 @@ public class BootMenuFatOfflineLoader { public final HTMLElement parentElement; - public final Map clientDatas = new HashMap<>(); + public final Map clientDatas = new HashMap<>(); public final List launchDatas = new ArrayList<>(); public BootMenuFatOfflineLoader(HTMLElement parentElement) { @@ -45,26 +46,28 @@ public class BootMenuFatOfflineLoader { protected void loadAllData() { String manifest = loadDataString("manifest_v1"); - if(manifest != null) { + if (manifest != null) { JSONObject json = new JSONObject(manifest); JSONArray launches = json.getJSONArray("launchData"); JSONArray clients = json.getJSONArray("clientData"); - for(int i = 0, l = clients.length(); i < l; ++i) { + for (int i = 0, l = clients.length(); i < l; ++i) { JSONObject obj = clients.getJSONObject(i); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj.getString("uuid")); - if(!theUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { + if (!theUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { clientDatas.put(theUUID, new ClientDataEntry(theUUID, obj)); } } - for(int i = 0, l = launches.length(); i < l; ++i) { + for (int i = 0, l = launches.length(); i < l; ++i) { JSONObject obj = launches.getJSONObject(i); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj.getString("uuid")); - if(!theUUID.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { + if (!theUUID.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { LaunchConfigEntry theEtr = new LaunchConfigEntry(theUUID, obj); - if(clientDatas.containsKey(theEtr.clientDataUUID) || BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(theEtr.clientDataUUID)) { + if (clientDatas.containsKey(theEtr.clientDataUUID) + || BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(theEtr.clientDataUUID)) { launchDatas.add(theEtr); - }else { - logger.warn("Skipping launch config {} because the client data {} is missing!", theUUID, theEtr.clientDataUUID); + } else { + logger.warn("Skipping launch config {} because the client data {} is missing!", theUUID, + theEtr.clientDataUUID); } } } @@ -73,21 +76,21 @@ public class BootMenuFatOfflineLoader { } } + public byte[] loadDataBinary(String key) { + HTMLElement ret = parentElement.querySelector("#_eaglerFatOffline_" + key); + if (ret == null) { + return null; + } + try { + return Base64.decodeBase64(ret.getInnerText()); + } catch (Throwable t) { + return null; + } + } + public String loadDataString(String key) { HTMLElement ret = parentElement.querySelector("#_eaglerFatOffline_" + key); return ret != null ? ret.getInnerText() : null; } - public byte[] loadDataBinary(String key) { - HTMLElement ret = parentElement.querySelector("#_eaglerFatOffline_" + key); - if(ret == null) { - return null; - } - try { - return Base64.decodeBase64(ret.getInnerText()); - }catch(Throwable t) { - return null; - } - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMain.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMain.java index 545ffcbe..4ee4ebf5 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMain.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMain.java @@ -24,18 +24,19 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuMain { @@ -58,153 +59,13 @@ public class BootMenuMain { private static boolean runUpdateLoop = true; - @JSBody(params = { "e" }, script = "return (typeof e.which === \"number\") ? e.which : ((typeof e.keyCode === \"number\") ? e.keyCode : 0);") - private static native int getWhich(KeyboardEvent e); - - @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\");") - private static native boolean hasKeyVar(KeyboardEvent evt); - - @JSBody(params = { "evt" }, script = "return (typeof evt.code === \"string\");") - private static native boolean hasCodeVar(KeyboardEvent evt); - - public static void launchMenu(Window parentWindow, HTMLElement parentElement) { - win = parentWindow; - doc = parentWindow.getDocument(); - parent = parentElement; - logger.info("Integrated boot menu is loading"); - String renderedMarkup; - try { - renderedMarkup = TemplateLoader.loadTemplate("/assets/eagler/boot_menu/boot_menu_markup.html"); - }catch(IOException ex) { - logger.error("Failed to render template!"); - logger.error(ex); - parentElement.setInnerHTML("

Failed to render template!

" - + HtmlEscapers.htmlEscaper().escape(ex.toString()) - + "

Check the console for more details

"); - return; - } - parentElement.setInnerHTML(renderedMarkup); - bootMenuDOM = new BootMenuDOM(parentElement); - logger.info("Registering event handlers"); - win.addEventListener("keydown", windowKeyDownListener = (evt) -> { - if(currentState != null) { - LegacyKeycodeTranslator.LegacyKeycode keyCode = null; - Map keyCodeTranslatorMap = PlatformInput.getKeyCodeTranslatorMapTeaVM(); - if(keyCodeTranslatorMap != null && hasCodeVar(evt)) { - keyCode = keyCodeTranslatorMap.get(evt.getCode()); - } - final int which; - if(keyCode != null) { - which = keyCode.keyCode; - }else { - which = getWhich(evt); - } - if(!evt.isRepeat()) { - runLater(() -> { - if(currentState != null) { - currentState.doHandleKeyDown(which); - } - }); - }else { - runLater(() -> { - if(currentState != null) { - currentState.doHandleKeyRepeat(which); - } - }); - } - } - }); - win.addEventListener("keyup", windowKeyUpListener = (evt) -> { - if(currentState != null) { - if(!evt.isRepeat()) { - LegacyKeycodeTranslator.LegacyKeycode keyCode = null; - Map keyCodeTranslatorMap = PlatformInput.getKeyCodeTranslatorMapTeaVM(); - if(keyCodeTranslatorMap != null && hasCodeVar(evt)) { - keyCode = keyCodeTranslatorMap.get(evt.getCode()); - } - final int which; - if(keyCode != null) { - which = keyCode.keyCode; - }else { - which = getWhich(evt); - } - runLater(() -> { - if(currentState != null) { - currentState.doHandleKeyUp(which); - } - }); - } - } - }); - bootMenuDOM.registerEventHandlers(); - bootMenuMetadata = new BootMenuMetadata("/assets/eagler/boot_menu/"); - bootMenuDatastore = BootMenuDatastore.openDatastore(); //TODO: error handling - bootMenuDataManager = new BootMenuDataManager(bootMenuDatastore); - bootMenuDOM.header_title.setInnerText(bootMenuDataManager.confMenuTitle); - bootMenuFatOfflineLoader = new BootMenuFatOfflineLoader(parentWindow.getDocument().getHead()); - logger.info("Entering boot menu display state"); - eventQueue.clear(); - changeState(new MenuStateBoot(true)); - enterUpdateLoop(); - } - - private static void enterUpdateLoop() { - runUpdateLoop = true; - while(runUpdateLoop) { - if(currentState != null) { - currentState.doUpdate(); - } - List eq = null; - synchronized(eventQueue) { - if(!eventQueue.isEmpty()) { - eq = Lists.newArrayList(eventQueue); - eventQueue.clear(); - } - } - if(eq != null) { - for(Runnable run : eq) { - try { - run.run(); - }catch(Throwable t) { - logger.error("Caught error in event queue!"); - logger.error(t); - } - } - } - EagUtils.sleep(50); - } - } - - public static void runLater(Runnable run) { - if(runUpdateLoop) { - synchronized(eventQueue) { - eventQueue.add(run); - } - } - } - - public static void runLaterMS(Runnable run, int millis) { - Window.setTimeout(() -> runLater(run), millis); - } - - public static void unregisterEventHandlers() { - if(windowKeyDownListener != null) { - win.removeEventListener("keydown", windowKeyDownListener); - windowKeyDownListener = null; - } - if(windowKeyUpListener != null) { - win.removeEventListener("keyup", windowKeyUpListener); - windowKeyUpListener = null; - } - } - public static void changeState(MenuState newState) { - if(currentState != null) { + if (currentState != null) { currentState.doExitState(); currentState = null; } currentState = newState; - if(newState != null) { + if (newState != null) { newState.doEnterState(); } } @@ -219,20 +80,11 @@ public class BootMenuMain { BootMenuEntryPoint.bootOriginClient(doBeforeBoot); } - @JSBody(params = { }, script = "try { window.eaglercraftXOptsHints.bootMenuBlocksUnsignedClients = true; }catch(_ex){} try { window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; }catch(_ex){}") - private static native void doSanitizeSignatureRequired(); - - public static void sanitizeEaglercraftXOpts() { - if(IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients()) { - doSanitizeSignatureRequired(); - } - } - public static String createRootElementForClient() { EaglercraftRandom randomCharGenerator = new EaglercraftRandom(); char[] randomChars = new char[16]; String charSel = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - for(int i = 0; i < randomChars.length; ++i) { + for (int i = 0; i < randomChars.length; ++i) { randomChars[i] = charSel.charAt(randomCharGenerator.nextInt(charSel.length())); } String randomId = "game_frame_" + new String(randomChars); @@ -244,7 +96,7 @@ public class BootMenuMain { destroyBootMenuRuntime(); parentTemp.appendChild(newRoot); return randomId; - + } public static void destroyBootMenuRuntime() { @@ -252,7 +104,7 @@ public class BootMenuMain { bootMenuDOM = null; currentState = null; bootMenuMetadata = null; - if(bootMenuDatastore != null) { + if (bootMenuDatastore != null) { bootMenuDatastore.closeDatastore(); bootMenuDatastore = null; } @@ -261,20 +113,46 @@ public class BootMenuMain { BootMenuAssets.freeBootMenuResourceRepo(); win = null; doc = null; - while(parent.getLastChild() != null) { + while (parent.getLastChild() != null) { parent.removeChild(parent.getLastChild()); } parent = null; } - public static void stopEventLoop() { - runUpdateLoop = false; + @JSBody(params = {}, script = "try { window.eaglercraftXOptsHints.bootMenuBlocksUnsignedClients = true; }catch(_ex){} try { window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; }catch(_ex){}") + private static native void doSanitizeSignatureRequired(); + + private static void enterUpdateLoop() { + runUpdateLoop = true; + while (runUpdateLoop) { + if (currentState != null) { + currentState.doUpdate(); + } + List eq = null; + synchronized (eventQueue) { + if (!eventQueue.isEmpty()) { + eq = Lists.newArrayList(eventQueue); + eventQueue.clear(); + } + } + if (eq != null) { + for (Runnable run : eq) { + try { + run.run(); + } catch (Throwable t) { + logger.error("Caught error in event queue!"); + logger.error(t); + } + } + } + EagUtils.sleep(50); + } } public static void fireChangeEvent(HTMLElement element) { - if(currentState != null) { + if (currentState != null) { runLater(() -> { - if(currentState != null) { + if (currentState != null) { currentState.doHandleOnChange(element); } }); @@ -282,9 +160,9 @@ public class BootMenuMain { } public static void fireClickEvent(HTMLElement element) { - if(currentState != null) { + if (currentState != null) { runLater(() -> { - if(currentState != null) { + if (currentState != null) { currentState.doHandleOnClick(element); } }); @@ -292,13 +170,139 @@ public class BootMenuMain { } public static void fireMouseOverEvent(HTMLElement element) { - if(currentState != null) { + if (currentState != null) { runLater(() -> { - if(currentState != null) { + if (currentState != null) { currentState.doHandleOnMouseOver(element); } }); } } + @JSBody(params = { + "e" }, script = "return (typeof e.which === \"number\") ? e.which : ((typeof e.keyCode === \"number\") ? e.keyCode : 0);") + private static native int getWhich(KeyboardEvent e); + + @JSBody(params = { "evt" }, script = "return (typeof evt.code === \"string\");") + private static native boolean hasCodeVar(KeyboardEvent evt); + + @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\");") + private static native boolean hasKeyVar(KeyboardEvent evt); + + public static void launchMenu(Window parentWindow, HTMLElement parentElement) { + win = parentWindow; + doc = parentWindow.getDocument(); + parent = parentElement; + logger.info("Integrated boot menu is loading"); + String renderedMarkup; + try { + renderedMarkup = TemplateLoader.loadTemplate("/assets/eagler/boot_menu/boot_menu_markup.html"); + } catch (IOException ex) { + logger.error("Failed to render template!"); + logger.error(ex); + parentElement.setInnerHTML("

Failed to render template!

" + + HtmlEscapers.htmlEscaper().escape(ex.toString()) + + "

Check the console for more details

"); + return; + } + parentElement.setInnerHTML(renderedMarkup); + bootMenuDOM = new BootMenuDOM(parentElement); + logger.info("Registering event handlers"); + win.addEventListener("keydown", windowKeyDownListener = (evt) -> { + if (currentState != null) { + LegacyKeycodeTranslator.LegacyKeycode keyCode = null; + Map keyCodeTranslatorMap = PlatformInput + .getKeyCodeTranslatorMapTeaVM(); + if (keyCodeTranslatorMap != null && hasCodeVar(evt)) { + keyCode = keyCodeTranslatorMap.get(evt.getCode()); + } + final int which; + if (keyCode != null) { + which = keyCode.keyCode; + } else { + which = getWhich(evt); + } + if (!evt.isRepeat()) { + runLater(() -> { + if (currentState != null) { + currentState.doHandleKeyDown(which); + } + }); + } else { + runLater(() -> { + if (currentState != null) { + currentState.doHandleKeyRepeat(which); + } + }); + } + } + }); + win.addEventListener("keyup", windowKeyUpListener = (evt) -> { + if (currentState != null) { + if (!evt.isRepeat()) { + LegacyKeycodeTranslator.LegacyKeycode keyCode = null; + Map keyCodeTranslatorMap = PlatformInput + .getKeyCodeTranslatorMapTeaVM(); + if (keyCodeTranslatorMap != null && hasCodeVar(evt)) { + keyCode = keyCodeTranslatorMap.get(evt.getCode()); + } + final int which; + if (keyCode != null) { + which = keyCode.keyCode; + } else { + which = getWhich(evt); + } + runLater(() -> { + if (currentState != null) { + currentState.doHandleKeyUp(which); + } + }); + } + } + }); + bootMenuDOM.registerEventHandlers(); + bootMenuMetadata = new BootMenuMetadata("/assets/eagler/boot_menu/"); + bootMenuDatastore = BootMenuDatastore.openDatastore(); // TODO: error handling + bootMenuDataManager = new BootMenuDataManager(bootMenuDatastore); + bootMenuDOM.header_title.setInnerText(bootMenuDataManager.confMenuTitle); + bootMenuFatOfflineLoader = new BootMenuFatOfflineLoader(parentWindow.getDocument().getHead()); + logger.info("Entering boot menu display state"); + eventQueue.clear(); + changeState(new MenuStateBoot(!BootMenuEntryPoint.wasManuallyInvoked)); + enterUpdateLoop(); + } + + public static void runLater(Runnable run) { + if (runUpdateLoop) { + synchronized (eventQueue) { + eventQueue.add(run); + } + } + } + + public static void runLaterMS(Runnable run, int millis) { + Window.setTimeout(() -> runLater(run), millis); + } + + public static void sanitizeEaglercraftXOpts() { + if (IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients()) { + doSanitizeSignatureRequired(); + } + } + + public static void stopEventLoop() { + runUpdateLoop = false; + } + + public static void unregisterEventHandlers() { + if (windowKeyDownListener != null) { + win.removeEventListener("keydown", windowKeyDownListener); + windowKeyDownListener = null; + } + if (windowKeyUpListener != null) { + win.removeEventListener("keyup", windowKeyUpListener); + windowKeyUpListener = null; + } + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMetadata.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMetadata.java index 5199a5a9..650d4673 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMetadata.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootMenuMetadata.java @@ -18,22 +18,46 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootMenuMetadata { - protected static final Logger logger = LogManager.getLogger("BootMenuMetadata"); + public static class DefaultLaunchTemplate { + + public final String templateName; + public final Set supportedFormats; + public final Set parseTypes; + public final LaunchTemplate templateState; + + protected DefaultLaunchTemplate(String templateName, Set supportedFormats, + Set parseTypes, LaunchTemplate templateState) { + this.templateName = templateName; + this.supportedFormats = supportedFormats; + this.parseTypes = parseTypes; + this.templateState = templateState; + } + + public LaunchConfigEntry createLaunchConfig(EaglercraftUUID uuid, EaglercraftUUID clientDataUUID) { + return templateState.createLaunchConfig(uuid, clientDataUUID, templateName); + } + + @Override + public String toString() { + return templateName; + } + } public static class LaunchTemplate { @@ -70,21 +94,8 @@ public class BootMenuMetadata { launchOpts = null; } - protected LaunchTemplate mutateOpts(String newOpts) { - if(newOpts == launchOpts) { - return this; - } - return new LaunchTemplate(type, joinServer, launchOptsVar, launchOptsAssetsURIVar, launchOptsContainerVar, - mainFunction, newOpts, clearCookiedBeforeLaunch); - } - - public LaunchConfigEntry createLaunchConfig(EaglercraftUUID uuid, EaglercraftUUID clientDataUUID, String displayName) { - return new LaunchConfigEntry(uuid, clientDataUUID, displayName, type, joinServer, launchOptsVar, - launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiedBeforeLaunch); - } - public void configureLaunchConfig(LaunchConfigEntry etr) { - switch(type) { + switch (type) { case STANDARD_OFFLINE_V1: etr.launchOpts = launchOpts; etr.launchOptsVar = launchOptsVar; @@ -107,41 +118,32 @@ public class BootMenuMetadata { break; case PEYTON_V1: break; - default: //? + default: // ? break; } } + public LaunchConfigEntry createLaunchConfig(EaglercraftUUID uuid, EaglercraftUUID clientDataUUID, + String displayName) { + return new LaunchConfigEntry(uuid, clientDataUUID, displayName, type, joinServer, launchOptsVar, + launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiedBeforeLaunch); + } + + protected LaunchTemplate mutateOpts(String newOpts) { + if (newOpts == launchOpts) { + return this; + } + return new LaunchTemplate(type, joinServer, launchOptsVar, launchOptsAssetsURIVar, launchOptsContainerVar, + mainFunction, newOpts, clearCookiedBeforeLaunch); + } + } - public static class DefaultLaunchTemplate { - - public final String templateName; - public final Set supportedFormats; - public final Set parseTypes; - public final LaunchTemplate templateState; - - protected DefaultLaunchTemplate(String templateName, Set supportedFormats, - Set parseTypes, LaunchTemplate templateState) { - this.templateName = templateName; - this.supportedFormats = supportedFormats; - this.parseTypes = parseTypes; - this.templateState = templateState; - } - - public LaunchConfigEntry createLaunchConfig(EaglercraftUUID uuid, EaglercraftUUID clientDataUUID) { - return templateState.createLaunchConfig(uuid, clientDataUUID, templateName); - } - - @Override - public String toString() { - return templateName; - } - } + protected static final Logger logger = LogManager.getLogger("BootMenuMetadata"); public final String basePath; - public final Map formatDefaultOptsMap = new HashMap<>(); + public final Map formatDefaultOptsMap = new HashMap<>(); public final List defaultLaunchTemplates = new ArrayList<>(); public BootMenuMetadata(String basePath) { @@ -149,50 +151,10 @@ public class BootMenuMetadata { this.loadAllData(); } - protected void loadAllData() { - logger.info("Loading client templates and default settings..."); - formatDefaultOptsMap.clear(); - defaultLaunchTemplates.clear(); - EaglerLoadingCache optsFileLoader = new EaglerLoadingCache<>(this::loadDataFileString); - EaglerLoadingCache templateFileLoader = new EaglerLoadingCache<>(this::loadDataFileLaunchTemplate); - byte[] data = BootMenuAssets.loadResourceBytes(basePath + "meta_opts_templates.json"); - if(data == null) { - throw new RuntimeException("Missing metadata file: meta_opts_templates.json"); - } - JSONObject jsonObject = new JSONObject(new String(data, StandardCharsets.UTF_8)); - JSONObject defaults = jsonObject.getJSONObject("defaults"); - for(String str : defaults.keySet()) { - EnumClientLaunchType fmt = EnumClientLaunchType.valueOf(str); - JSONObject etr = defaults.getJSONObject(str); - LaunchTemplate launchTemplateBase = templateFileLoader.get(etr.getString("conf")); - String optsFileName = etr.optString("opts", null); - String eagOpts = optsFileName != null ? optsFileLoader.get(optsFileName) : null; - formatDefaultOptsMap.put(fmt, launchTemplateBase.mutateOpts(eagOpts)); - } - JSONArray templates = jsonObject.getJSONArray("templates"); - for(int i = 0, l = templates.length(); i < l; ++i) { - JSONObject obj = templates.getJSONObject(i); - LaunchTemplate launchTemplateBase = templateFileLoader.get(obj.getString("conf")); - String optsFileName = obj.optString("opts", null); - String eagOpts = optsFileName != null ? optsFileLoader.get(optsFileName) : null; - JSONArray allowList = obj.getJSONArray("allow"); - Set toAllow = new HashSet<>(allowList.length()); - for(int j = 0, m = allowList.length(); j < m; ++j) { - toAllow.add(EnumClientFormatType.valueOf(allowList.getString(j))); - } - JSONArray parseTypesList = obj.getJSONArray("parseTypes"); - Set toParseTypes = new HashSet<>(parseTypesList.length()); - for(int j = 0, m = parseTypesList.length(); j < m; ++j) { - toParseTypes.add(EnumOfflineParseType.valueOf(parseTypesList.getString(j))); - } - defaultLaunchTemplates.add(new DefaultLaunchTemplate(obj.getString("name"), toAllow, toParseTypes, launchTemplateBase.mutateOpts(eagOpts))); - } - } - public List getTemplatesForClientData(EnumClientFormatType formatType) { List ret = new ArrayList<>(); - for(DefaultLaunchTemplate template : defaultLaunchTemplates) { - if(template.supportedFormats.contains(formatType)) { + for (DefaultLaunchTemplate template : defaultLaunchTemplates) { + if (template.supportedFormats.contains(formatType)) { ret.add(template); } } @@ -201,24 +163,66 @@ public class BootMenuMetadata { public List getTemplatesForParseType(EnumOfflineParseType parseType) { List ret = new ArrayList<>(); - for(DefaultLaunchTemplate template : defaultLaunchTemplates) { - if(template.parseTypes.contains(parseType)) { + for (DefaultLaunchTemplate template : defaultLaunchTemplates) { + if (template.parseTypes.contains(parseType)) { ret.add(template); } } return ret; } - protected String loadDataFileString(String name) { - byte[] data = BootMenuAssets.loadResourceBytes(basePath + name); - if(data == null) { - throw new RuntimeException("Missing metadata file: " + name); + protected void loadAllData() { + logger.info("Loading client templates and default settings..."); + formatDefaultOptsMap.clear(); + defaultLaunchTemplates.clear(); + EaglerLoadingCache optsFileLoader = new EaglerLoadingCache<>(this::loadDataFileString); + EaglerLoadingCache templateFileLoader = new EaglerLoadingCache<>( + this::loadDataFileLaunchTemplate); + byte[] data = BootMenuAssets.loadResourceBytes(basePath + "meta_opts_templates.json"); + if (data == null) { + throw new RuntimeException("Missing metadata file: meta_opts_templates.json"); + } + JSONObject jsonObject = new JSONObject(new String(data, StandardCharsets.UTF_8)); + JSONObject defaults = jsonObject.getJSONObject("defaults"); + for (String str : defaults.keySet()) { + EnumClientLaunchType fmt = EnumClientLaunchType.valueOf(str); + JSONObject etr = defaults.getJSONObject(str); + LaunchTemplate launchTemplateBase = templateFileLoader.get(etr.getString("conf")); + String optsFileName = etr.optString("opts", null); + String eagOpts = optsFileName != null ? optsFileLoader.get(optsFileName) : null; + formatDefaultOptsMap.put(fmt, launchTemplateBase.mutateOpts(eagOpts)); + } + JSONArray templates = jsonObject.getJSONArray("templates"); + for (int i = 0, l = templates.length(); i < l; ++i) { + JSONObject obj = templates.getJSONObject(i); + LaunchTemplate launchTemplateBase = templateFileLoader.get(obj.getString("conf")); + String optsFileName = obj.optString("opts", null); + String eagOpts = optsFileName != null ? optsFileLoader.get(optsFileName) : null; + JSONArray allowList = obj.getJSONArray("allow"); + Set toAllow = new HashSet<>(allowList.length()); + for (int j = 0, m = allowList.length(); j < m; ++j) { + toAllow.add(EnumClientFormatType.valueOf(allowList.getString(j))); + } + JSONArray parseTypesList = obj.getJSONArray("parseTypes"); + Set toParseTypes = new HashSet<>(parseTypesList.length()); + for (int j = 0, m = parseTypesList.length(); j < m; ++j) { + toParseTypes.add(EnumOfflineParseType.valueOf(parseTypesList.getString(j))); + } + defaultLaunchTemplates.add(new DefaultLaunchTemplate(obj.getString("name"), toAllow, toParseTypes, + launchTemplateBase.mutateOpts(eagOpts))); } - return new String(data, StandardCharsets.UTF_8); } protected LaunchTemplate loadDataFileLaunchTemplate(String name) { return new LaunchTemplate(new JSONObject(loadDataFileString(name))); } + protected String loadDataFileString(String name) { + byte[] data = BootMenuAssets.loadResourceBytes(basePath + name); + if (data == null) { + throw new RuntimeException("Missing metadata file: " + name); + } + return new String(data, StandardCharsets.UTF_8); + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootableClientEntry.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootableClientEntry.java index 017c0f32..f495c791 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootableClientEntry.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/BootableClientEntry.java @@ -14,114 +14,79 @@ import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.BootMenuEntryPoint.Unsigned /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BootableClientEntry { + public static interface BootAdapter { + void bootClient(IProgressMsgCallback cb); + + void downloadEPK(IProgressMsgCallback cb); + + void downloadOffline(IProgressMsgCallback cb); + + Map> getBlobLoaders(); + + ClientDataEntry getClientDataEntry(); + + String getDisplayName(); + + LaunchConfigEntry getLaunchConfigEntry(); + } + public static enum EnumDataType { SITE_ORIGIN, EMBEDDED, LOCAL_STORAGE; } - public static interface BootAdapter { - String getDisplayName(); - void bootClient(IProgressMsgCallback cb); - void downloadOffline(IProgressMsgCallback cb); - void downloadEPK(IProgressMsgCallback cb); - ClientDataEntry getClientDataEntry(); - LaunchConfigEntry getLaunchConfigEntry(); - Map> getBlobLoaders(); - } + /** + * returns true if uuidsList has changed + */ + public static boolean applyClientOrdering(List uuidsList, + List bootableClients) { + if (bootableClients.isEmpty()) + return false; - public final EnumDataType dataType; - public final BootAdapter bootAdapter; + List bootableClientsCopy = new ArrayList<>(bootableClients); + Set uuidsSet = new HashSet<>(uuidsList); + Map bootableClientsLookup = new HashMap<>(bootableClients.size()); + bootableClients.clear(); - public BootableClientEntry(EnumDataType dataType, BootAdapter bootAdapter) { - this.dataType = dataType; - this.bootAdapter = bootAdapter; - } - - public static BootableClientEntry getOriginClient() { - final ClientDataEntry originClientDat; - final LaunchConfigEntry originLaunchDat; - final Map> siteOriginLoader = new HashMap<>(2); - if(BootMenuEntryPoint.isSignedClient()) { - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, BootMenuEntryPoint::getSignedClientSignature); - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, BootMenuEntryPoint::getSignedClientBundle); - originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, - BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, null, - BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, null); - originLaunchDat = new LaunchConfigEntry(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, - BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, - BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision - + " " + BootMenuConstants.client_projectOriginVersion, - EnumClientLaunchType.EAGLERX_SIGNED_V1, null, null, null, null, null, - BootMenuEntryPoint.getOriginLaunchOpts(), false); - }else { - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, BootMenuEntryPoint::getUnsignedClientClassesJS); - UnsignedClientEPKLoader loader = BootMenuEntryPoint.getUnsignedClientAssetsEPK(); - siteOriginLoader.putAll(loader.loaders); - originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, - BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, null, - null, loader.list); - originLaunchDat = new LaunchConfigEntry(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, - BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, - BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision - + " " + BootMenuConstants.client_projectOriginVersion, - EnumClientLaunchType.EAGLERX_V1, null, null, null, null, null, - BootMenuEntryPoint.getOriginLaunchOpts(), false); + for (int i = 0, l = bootableClientsCopy.size(); i < l; ++i) { + BootableClientEntry etr = bootableClientsCopy.get(i); + bootableClientsLookup.put(etr.bootAdapter.getLaunchConfigEntry().uuid, etr); } - return new BootableClientEntry(EnumDataType.SITE_ORIGIN, new BootAdapter() { - private final String displayName = BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision + " " - + BootMenuConstants.client_projectOriginVersion + " (site origin)"; - - @Override - public String getDisplayName() { - return displayName; + for (int i = 0, l = uuidsList.size(); i < l; ++i) { + BootableClientEntry etr = bootableClientsLookup.get(uuidsList.get(i)); + if (etr != null) { + bootableClients.add(etr); } + } - @Override - public void bootClient(IProgressMsgCallback cb) { - BootMenuMain.continueBootToOriginClient(BootMenuMain::sanitizeEaglercraftXOpts); + boolean flag = false; + for (int i = 0, l = bootableClientsCopy.size(); i < l; ++i) { + BootableClientEntry etr = bootableClientsCopy.get(i); + EaglercraftUUID uuid = etr.bootAdapter.getLaunchConfigEntry().uuid; + if (!uuidsSet.contains(uuid)) { + bootableClients.add(etr); + uuidsList.add(uuid); + flag = true; } + } - @Override - public void downloadOffline(IProgressMsgCallback cb) { - OfflineDownloadFactory.downloadOffline(originLaunchDat, originClientDat, siteOriginLoader, cb); - } - - @Override - public void downloadEPK(IProgressMsgCallback cb) { - EPKClientFactory.downloadEPKClient(originLaunchDat, originClientDat, siteOriginLoader, cb); - } - - @Override - public ClientDataEntry getClientDataEntry() { - return originClientDat; - } - - @Override - public LaunchConfigEntry getLaunchConfigEntry() { - return originLaunchDat; - } - - @Override - public Map> getBlobLoaders() { - return siteOriginLoader; - } - - }); + return flag; } public static List enumerateBootableClients() { @@ -129,9 +94,11 @@ public class BootableClientEntry { final Map> siteOriginLoader = new HashMap<>(2); final ClientDataEntry originClientDat; final LaunchConfigEntry originLaunchDat; - if(BootMenuEntryPoint.isSignedClient()) { - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, BootMenuEntryPoint::getSignedClientSignature); - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, BootMenuEntryPoint::getSignedClientBundle); + if (BootMenuEntryPoint.isSignedClient()) { + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, + BootMenuEntryPoint::getSignedClientSignature); + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, + BootMenuEntryPoint::getSignedClientBundle); originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, null, BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, null); @@ -141,53 +108,40 @@ public class BootableClientEntry { + " " + BootMenuConstants.client_projectOriginVersion, EnumClientLaunchType.EAGLERX_SIGNED_V1, null, null, null, null, null, BootMenuEntryPoint.getOriginLaunchOpts(), false); - }else { - siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, BootMenuEntryPoint::getUnsignedClientClassesJS); + } else { + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, + BootMenuEntryPoint::getUnsignedClientClassesJS); UnsignedClientEPKLoader loader = BootMenuEntryPoint.getUnsignedClientAssetsEPK(); siteOriginLoader.putAll(loader.loaders); originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, null, null, loader.list); originLaunchDat = new LaunchConfigEntry(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, - BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, - BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision - + " " + BootMenuConstants.client_projectOriginVersion, - EnumClientLaunchType.EAGLERX_V1, null, null, null, null, null, - BootMenuEntryPoint.getOriginLaunchOpts(), false); + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, + BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision + + " " + BootMenuConstants.client_projectOriginVersion, + EnumClientLaunchType.EAGLERX_V1, null, null, null, null, null, + BootMenuEntryPoint.getOriginLaunchOpts(), false); } ret.add(new BootableClientEntry(EnumDataType.SITE_ORIGIN, new BootAdapter() { - private final String displayName = BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision + " " + private final String displayName = BootMenuConstants.client_projectForkName + " " + + BootMenuConstants.client_projectOriginRevision + " " + BootMenuConstants.client_projectOriginVersion + " (site origin)"; - @Override - public String getDisplayName() { - return displayName; - } - @Override public void bootClient(IProgressMsgCallback cb) { BootMenuMain.continueBootToOriginClient(BootMenuMain::sanitizeEaglercraftXOpts); } - @Override - public void downloadOffline(IProgressMsgCallback cb) { - OfflineDownloadFactory.downloadOffline(originLaunchDat, originClientDat, siteOriginLoader, cb); - } - @Override public void downloadEPK(IProgressMsgCallback cb) { EPKClientFactory.downloadEPKClient(originLaunchDat, originClientDat, siteOriginLoader, cb); } @Override - public ClientDataEntry getClientDataEntry() { - return originClientDat; - } - - @Override - public LaunchConfigEntry getLaunchConfigEntry() { - return originLaunchDat; + public void downloadOffline(IProgressMsgCallback cb) { + OfflineDownloadFactory.downloadOffline(originLaunchDat, originClientDat, siteOriginLoader, cb); } @Override @@ -195,20 +149,35 @@ public class BootableClientEntry { return siteOriginLoader; } + @Override + public ClientDataEntry getClientDataEntry() { + return originClientDat; + } + + @Override + public String getDisplayName() { + return displayName; + } + + @Override + public LaunchConfigEntry getLaunchConfigEntry() { + return originLaunchDat; + } + })); - for(final LaunchConfigEntry etr : BootMenuMain.bootMenuFatOfflineLoader.launchDatas) { + for (final LaunchConfigEntry etr : BootMenuMain.bootMenuFatOfflineLoader.launchDatas) { final ClientDataEntry etr2 = BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(etr.clientDataUUID) ? originClientDat : BootMenuMain.bootMenuFatOfflineLoader.clientDatas.get(etr.clientDataUUID); - if(etr2 != null) { + if (etr2 != null) { Collection refBlobs = etr2.getReferencedBlobs(); final Map> loaderMap = new HashMap<>(2); - for(final EaglercraftUUID uuid : refBlobs) { + for (final EaglercraftUUID uuid : refBlobs) { loaderMap.put(uuid, () -> { Supplier sup = siteOriginLoader.get(uuid); - if(sup != null) { + if (sup != null) { byte[] ret2 = sup.get(); - if(ret2 != null) { + if (ret2 != null) { return ret2; } } @@ -220,34 +189,19 @@ public class BootableClientEntry { private final String displayName = etr.displayName + " (embedded" + (etr.type == EnumClientLaunchType.EAGLERX_SIGNED_V1 ? ", signed)" : ")"); - @Override - public String getDisplayName() { - return displayName; - } - @Override public void bootClient(IProgressMsgCallback cb) { ClientBootFactory.bootClient(etr, etr2, loaderMap, cb); } - @Override - public void downloadOffline(IProgressMsgCallback cb) { - OfflineDownloadFactory.downloadOffline(etr, etr2, loaderMap, cb); - } - @Override public void downloadEPK(IProgressMsgCallback cb) { EPKClientFactory.downloadEPKClient(etr, etr2, loaderMap, cb); } @Override - public ClientDataEntry getClientDataEntry() { - return etr2; - } - - @Override - public LaunchConfigEntry getLaunchConfigEntry() { - return etr; + public void downloadOffline(IProgressMsgCallback cb) { + OfflineDownloadFactory.downloadOffline(etr, etr2, loaderMap, cb); } @Override @@ -255,24 +209,39 @@ public class BootableClientEntry { return loaderMap; } + @Override + public ClientDataEntry getClientDataEntry() { + return etr2; + } + + @Override + public String getDisplayName() { + return displayName; + } + + @Override + public LaunchConfigEntry getLaunchConfigEntry() { + return etr; + } + })); } } - for(EaglercraftUUID etrUUID : BootMenuMain.bootMenuDataManager.launchDatasList) { + for (EaglercraftUUID etrUUID : BootMenuMain.bootMenuDataManager.launchDatasList) { final LaunchConfigEntry etr = BootMenuMain.bootMenuDataManager.launchDatas.get(etrUUID); - if(etr != null) { + if (etr != null) { final ClientDataEntry etr2 = BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(etr.clientDataUUID) ? originClientDat : BootMenuMain.bootMenuDataManager.clientDatas.get(etr.clientDataUUID); - if(etr2 != null) { + if (etr2 != null) { Collection refBlobs = etr2.getReferencedBlobs(); final Map> loaderMap = new HashMap<>(2); - for(final EaglercraftUUID uuid : refBlobs) { + for (final EaglercraftUUID uuid : refBlobs) { loaderMap.put(uuid, () -> { Supplier sup = siteOriginLoader.get(uuid); - if(sup != null) { + if (sup != null) { byte[] ret2 = sup.get(); - if(ret2 != null) { + if (ret2 != null) { return ret2; } } @@ -284,34 +253,19 @@ public class BootableClientEntry { private final String displayName = etr.displayName + " (local storage" + (etr.type == EnumClientLaunchType.EAGLERX_SIGNED_V1 ? ", signed)" : ")"); - @Override - public String getDisplayName() { - return displayName; - } - @Override public void bootClient(IProgressMsgCallback cb) { ClientBootFactory.bootClient(etr, etr2, loaderMap, cb); } - @Override - public void downloadOffline(IProgressMsgCallback cb) { - OfflineDownloadFactory.downloadOffline(etr, etr2, loaderMap, cb); - } - @Override public void downloadEPK(IProgressMsgCallback cb) { EPKClientFactory.downloadEPKClient(etr, etr2, loaderMap, cb); } @Override - public ClientDataEntry getClientDataEntry() { - return etr2; - } - - @Override - public LaunchConfigEntry getLaunchConfigEntry() { - return etr; + public void downloadOffline(IProgressMsgCallback cb) { + OfflineDownloadFactory.downloadOffline(etr, etr2, loaderMap, cb); } @Override @@ -319,6 +273,21 @@ public class BootableClientEntry { return loaderMap; } + @Override + public ClientDataEntry getClientDataEntry() { + return etr2; + } + + @Override + public String getDisplayName() { + return displayName; + } + + @Override + public LaunchConfigEntry getLaunchConfigEntry() { + return etr; + } + })); } } @@ -326,41 +295,90 @@ public class BootableClientEntry { return ret; } - /** - * returns true if uuidsList has changed - */ - public static boolean applyClientOrdering(List uuidsList, List bootableClients) { - if(bootableClients.isEmpty()) return false; - - List bootableClientsCopy = new ArrayList<>(bootableClients); - Set uuidsSet = new HashSet<>(uuidsList); - Map bootableClientsLookup = new HashMap<>(bootableClients.size()); - bootableClients.clear(); - - for(int i = 0, l = bootableClientsCopy.size(); i < l; ++i) { - BootableClientEntry etr = bootableClientsCopy.get(i); - bootableClientsLookup.put(etr.bootAdapter.getLaunchConfigEntry().uuid, etr); + public static BootableClientEntry getOriginClient() { + final ClientDataEntry originClientDat; + final LaunchConfigEntry originLaunchDat; + final Map> siteOriginLoader = new HashMap<>(2); + if (BootMenuEntryPoint.isSignedClient()) { + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, + BootMenuEntryPoint::getSignedClientSignature); + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, + BootMenuEntryPoint::getSignedClientBundle); + originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_SIGNED_BUNDLE, null, + BootMenuConstants.UUID_ORIGIN_SIGNED_SIGNATURE, null); + originLaunchDat = new LaunchConfigEntry(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, + BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision + + " " + BootMenuConstants.client_projectOriginVersion, + EnumClientLaunchType.EAGLERX_SIGNED_V1, null, null, null, null, null, + BootMenuEntryPoint.getOriginLaunchOpts(), false); + } else { + siteOriginLoader.put(BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, + BootMenuEntryPoint::getUnsignedClientClassesJS); + UnsignedClientEPKLoader loader = BootMenuEntryPoint.getUnsignedClientAssetsEPK(); + siteOriginLoader.putAll(loader.loaders); + originClientDat = new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, BootMenuConstants.UUID_ORIGIN_UNSIGNED_CLASSES_JS, null, + null, loader.list); + originLaunchDat = new LaunchConfigEntry(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, + BootMenuConstants.client_projectForkName + " " + BootMenuConstants.client_projectOriginRevision + + " " + BootMenuConstants.client_projectOriginVersion, + EnumClientLaunchType.EAGLERX_V1, null, null, null, null, null, + BootMenuEntryPoint.getOriginLaunchOpts(), false); } - - for(int i = 0, l = uuidsList.size(); i < l; ++i) { - BootableClientEntry etr = bootableClientsLookup.get(uuidsList.get(i)); - if(etr != null) { - bootableClients.add(etr); + return new BootableClientEntry(EnumDataType.SITE_ORIGIN, new BootAdapter() { + + private final String displayName = BootMenuConstants.client_projectForkName + " " + + BootMenuConstants.client_projectOriginRevision + " " + + BootMenuConstants.client_projectOriginVersion + " (site origin)"; + + @Override + public void bootClient(IProgressMsgCallback cb) { + BootMenuMain.continueBootToOriginClient(BootMenuMain::sanitizeEaglercraftXOpts); } - } - - boolean flag = false; - for(int i = 0, l = bootableClientsCopy.size(); i < l; ++i) { - BootableClientEntry etr = bootableClientsCopy.get(i); - EaglercraftUUID uuid = etr.bootAdapter.getLaunchConfigEntry().uuid; - if(!uuidsSet.contains(uuid)) { - bootableClients.add(etr); - uuidsList.add(uuid); - flag = true; + + @Override + public void downloadEPK(IProgressMsgCallback cb) { + EPKClientFactory.downloadEPKClient(originLaunchDat, originClientDat, siteOriginLoader, cb); } - } - - return flag; + + @Override + public void downloadOffline(IProgressMsgCallback cb) { + OfflineDownloadFactory.downloadOffline(originLaunchDat, originClientDat, siteOriginLoader, cb); + } + + @Override + public Map> getBlobLoaders() { + return siteOriginLoader; + } + + @Override + public ClientDataEntry getClientDataEntry() { + return originClientDat; + } + + @Override + public String getDisplayName() { + return displayName; + } + + @Override + public LaunchConfigEntry getLaunchConfigEntry() { + return originLaunchDat; + } + + }); + } + + public final EnumDataType dataType; + + public final BootAdapter bootAdapter; + + public BootableClientEntry(EnumDataType dataType, BootAdapter bootAdapter) { + this.dataType = dataType; + this.bootAdapter = bootAdapter; } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/CheckboxListController.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/CheckboxListController.java index 033ddb32..acc36630 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/CheckboxListController.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/CheckboxListController.java @@ -11,22 +11,43 @@ import com.google.common.collect.Lists; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class CheckboxListController extends SelectionListController { + protected static class ListItemWrapper implements SelectionListController.ListItem { + + protected final SelectionListController.ListItem parent; + + protected ListItemWrapper(SelectionListController.ListItem parent) { + this.parent = parent; + } + + @Override + public boolean getAlwaysSelected() { + return parent.getAlwaysSelected(); + } + + @Override + public String getName() { + return (parent.getAlwaysSelected() ? "[X] " : "[ ] ") + parent.getName(); + } + + } + protected static final SelectionListController.ListItem LIST_ITEM_CANCEL = new SelectionListController.ListItem() { @Override public String getName() { @@ -41,54 +62,27 @@ public abstract class CheckboxListController selectionList) { - super(parent, Lists.newArrayList(Iterators.concat(Iterators.transform(selectionList.iterator(), ListItemWrapper::new), + super(parent, + Lists.newArrayList(Iterators.concat(Iterators.transform(selectionList.iterator(), ListItemWrapper::new), Arrays.asList(LIST_ITEM_CANCEL, LIST_ITEM_DONE).iterator()))); } + protected abstract void cancelSelected(); + + protected abstract void doneSelected(List selectedItems); + public List getSelectedItems() { return Lists.newArrayList(Collections2.transform( Collections2.filter(selectionEnableList, (e) -> (e.userVal && !e.listItem.getAlwaysSelected())), (e) -> (T) ((ListItemWrapper) e.listItem).parent)); } - protected void itemSelectedLow(ListItemInstance item) { - if(item.listItem == LIST_ITEM_CANCEL) { - cancelSelected(); - }else if(item.listItem == LIST_ITEM_DONE) { - doneSelected(getSelectedItems()); - }else { - if(!item.listItem.getAlwaysSelected()) { - item.userVal = !item.userVal; - item.element.setInnerText((item.userVal ? "[X]" : "[ ]") + item.element.getInnerText().substring(3)); - } - } - } - + @Override public void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_SPACE) { - if(currentSelected >= 0 && currentSelected < selectionEnableList.size()) { - if(!selectionEnableList.get(currentSelected).listItem.getAlwaysSelected()) { + if (keyCode == KeyCodes.DOM_KEY_SPACE) { + if (currentSelected >= 0 && currentSelected < selectionEnableList.size()) { + if (!selectionEnableList.get(currentSelected).listItem.getAlwaysSelected()) { fireSelect(); } } @@ -101,8 +95,18 @@ public abstract class CheckboxListController selectedItems); + @Override + protected void itemSelectedLow(ListItemInstance item) { + if (item.listItem == LIST_ITEM_CANCEL) { + cancelSelected(); + } else if (item.listItem == LIST_ITEM_DONE) { + doneSelected(getSelectedItems()); + } else { + if (!item.listItem.getAlwaysSelected()) { + item.userVal = !item.userVal; + item.element.setInnerText((item.userVal ? "[X]" : "[ ]") + item.element.getInnerText().substring(3)); + } + } + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientBootFactory.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientBootFactory.java index 5fa269a5..9bb4d333 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientBootFactory.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientBootFactory.java @@ -34,23 +34,22 @@ import net.minecraft.nbt.NBTTagCompound; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientBootFactory { - private static final Logger logger = LogManager.getLogger("ClientBootFactory"); - private static class UUIDStringPair { private final EaglercraftUUID uuid; @@ -61,163 +60,337 @@ public class ClientBootFactory { this.str = str; } - @Override - public int hashCode() { - return (31 + uuid.hashCode()) * 31 + str.hashCode(); - } - @Override public boolean equals(Object obj) { - if(this == obj) + if (this == obj) return true; - if(obj == null || !(obj instanceof UUIDStringPair)) + if (obj == null || !(obj instanceof UUIDStringPair)) return false; UUIDStringPair other = (UUIDStringPair) obj; return Objects.equals(str, other.str) && Objects.equals(uuid, other.uuid); } + @Override + public int hashCode() { + return (31 + uuid.hashCode()) * 31 + str.hashCode(); + } + } + private static final Logger logger = LogManager.getLogger("ClientBootFactory"); + public static void bootClient(LaunchConfigEntry launchConf, ClientDataEntry clientData, Map> loaders, IProgressMsgCallback cb) { - if(launchConf.clearCookiesBeforeLaunch) { + if (launchConf.clearCookiesBeforeLaunch) { BootMenuEntryPoint.clearCookies(); } - if(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(clientData.uuid)) { + if (BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(clientData.uuid)) { bootOriginClient(launchConf, clientData, cb); return; } - EaglerLoadingCache loadingCacheA = new EaglerLoadingCache((uuid) -> { - Supplier sup = loaders.get(uuid); - return sup != null ? sup.get() : null; - }); - EaglerLoadingCache loadingCacheB = new EaglerLoadingCache((uuidMime) -> { - byte[] b = loadingCacheA.get(uuidMime.uuid); - return b != null ? TeaVMBlobURLManager.registerNewURLByte(b, uuidMime.str) : null; - }); - switch(launchConf.type) { + EaglerLoadingCache loadingCacheA = new EaglerLoadingCache( + (uuid) -> { + Supplier sup = loaders.get(uuid); + return sup != null ? sup.get() : null; + }); + EaglerLoadingCache loadingCacheB = new EaglerLoadingCache( + (uuidMime) -> { + byte[] b = loadingCacheA.get(uuidMime.uuid); + return b != null ? TeaVMBlobURLManager.registerNewURLByte(b, uuidMime.str) : null; + }); + switch (launchConf.type) { case STANDARD_OFFLINE_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientStandardOffline(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for STANDARD_OFFLINE_V1!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for STANDARD_OFFLINE_V1!"); } break; case EAGLERX_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientEaglerX18(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLERX_V1!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLERX_V1!"); } break; case EAGLERX_SIGNED_V1: - if(clientData.type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE) { bootClientEaglerX18Signed(launchConf, clientData, loadingCacheA, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLERX_SIGNED_V1!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLERX_SIGNED_V1!"); } break; case EAGLER_1_5_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientEagler15Old(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V1!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V1!"); } break; case EAGLER_1_5_V2: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE) { bootClientEagler15New(launchConf, clientData, loadingCacheA, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); } break; case EAGLER_BETA_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientEaglerB13(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); } break; case PEYTON_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientPeytonIndev(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for PEYTON_V1!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for PEYTON_V1!"); } break; case PEYTON_V2: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { bootClientPeytonAlphaBeta(launchConf, clientData, loadingCacheB, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for PEYTON_V2!"); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for PEYTON_V2!"); } break; } } - private static void doUpdateMessage(IProgressMsgCallback cb, String str) { - logger.info(str); - cb.updateMessage(str); + private static void bootClientEagler15New(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCacheBytes, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); + if (blockUnsigned) { + throw new UnsignedBootException(); + } + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + JSONObject launchOpts = new JSONObject(launchConf.launchOpts); + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + List toCleanOnException = new ArrayList<>(); + if (classesJSURL == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(classesJSURL); + doUpdateMessage(cb, "Resolving classes_server.js (" + clientData.integratedServer + ")"); + byte[] classesServerJS = loadingCacheBytes.get(clientData.integratedServer); + if (classesServerJS == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { + try { + TeaVMBlobURLManager.releaseURL(url); + } catch (Throwable t) { + } + } + String msg = "Could not resolve classes_server.js! (" + clientData.integratedServer + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + classesServerJS = OfflineDownloadFactory.removeUseStrict(classesServerJS); + byte[] appendToClassesServerJS = "\"use strict\";var eaglercraftServerOpts;onmessage = function(o) { eaglercraftServerOpts = o.data; main(); };" + .getBytes(StandardCharsets.UTF_8); + byte[] concatClassesServerJS = new byte[classesServerJS.length + appendToClassesServerJS.length]; + System.arraycopy(appendToClassesServerJS, 0, concatClassesServerJS, 0, appendToClassesServerJS.length); + System.arraycopy(classesServerJS, 0, concatClassesServerJS, appendToClassesServerJS.length, + classesServerJS.length); + TeaVMBlobURLHandle classesServerJSURL = TeaVMBlobURLManager.registerNewURLByte(concatClassesServerJS, + "text/javascript"); + toCleanOnException.add(classesServerJSURL); + launchOpts.put("serverWorkerURI", classesServerJSURL.toExternalForm()); + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); + TeaVMBlobURLHandle assetsEPKURL = loadingCache + .get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); + if (assetsEPKURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { + try { + TeaVMBlobURLManager.releaseURL(url); + } catch (Throwable t) { + } + } + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(assetsEPKURL); + launchOpts.put("assetsURI", assetsEPKURL.toExternalForm()); + doUpdateMessage(cb, "Launching client..."); + BootMenuMain.runLaterMS(() -> { + clearMain("main"); + HTMLDocument docTemp = BootMenuMain.doc; + launchOpts.put("container", BootMenuMain.createRootElementForClient()); + final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); + scriptElement.addEventListener("load", (evt) -> { + BootMenuMain.runLater(() -> { + while (!isMainReady("main")) { + logger.error("main function is not available yet! waiting 250ms..."); + EagUtils.sleep(250); + } + BootMenuMain.stopEventLoop(); + callMain("eaglercraftOpts", launchOptsStr, "main", blockUnsigned); + }); + }); + scriptElement.setType("text/javascript"); + scriptElement.setSrc(classesJSURL.toExternalForm()); + docTemp.getHead().appendChild(scriptElement); + }, 250); } - @JSBody(params = { "mainName" }, script = "window[mainName] = null;") - private static native boolean clearMain(String mainName); + private static void bootClientEagler15Old(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); + if (blockUnsigned) { + throw new UnsignedBootException(); + } + final String b64Opts = translateNBTOpts(launchConf.launchOpts); + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + final TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + List toCleanOnException = new ArrayList<>(); + if (classesJSURL == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(classesJSURL); + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); + final TeaVMBlobURLHandle assetsEPKURL = loadingCache + .get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); + if (assetsEPKURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { + try { + TeaVMBlobURLManager.releaseURL(url); + } catch (Throwable t) { + } + } + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(assetsEPKURL); + doUpdateMessage(cb, "Launching client..."); + BootMenuMain.runLaterMS(() -> { + clearMain("main"); + HTMLDocument docTemp = BootMenuMain.doc; + final String container = BootMenuMain.createRootElementForClient(); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); + scriptElement.addEventListener("load", (evt) -> { + BootMenuMain.runLater(() -> { + while (!isMainReady("main")) { + logger.error("main function is not available yet! waiting 250ms..."); + EagUtils.sleep(250); + } + BootMenuMain.stopEventLoop(); + callMainOld15("minecraftOpts", container, assetsEPKURL.toExternalForm(), b64Opts, + launchConf.joinServer, "main", blockUnsigned); + }); + }); + scriptElement.setType("text/javascript"); + scriptElement.setSrc(classesJSURL.toExternalForm()); + docTemp.getHead().appendChild(scriptElement); + }, 250); + } - @JSBody(params = { "mainName" }, script = "return (typeof window[mainName] === \"function\");") - private static native boolean isMainReady(String mainName); - - @JSBody(params = { "optsVarName", "optsVarJSON", "mainName", "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = JSON.parse(optsVarJSON); if(blockUnsigned) window[optsVarName].bootMenuBlocksUnsignedClients = true; window[mainName](); }, 1);") - private static native void callMain(String optsVarName, String optsVarJSON, String mainName, boolean blockUnsigned); - - @JSBody(params = { "clientSigURL", "clientPayloadURL", "launchOptsJSON", "blockUnsigned" }, script = "window.eaglercraftXOptsHints = JSON.parse(launchOptsJSON); if(blockUnsigned) window.eaglercraftXOptsHints.bootMenuBlocksUnsignedClients = true; window.eaglercraftXClientSignature = clientSigURL; window.eaglercraftXClientBundle = clientPayloadURL;") - private static native void setupSignedClientOpts(String clientSigURL, String clientPayloadURL, String launchOptsJSON, boolean blockUnsigned); - - @JSBody(params = { "optsVarName", "containerId", "assetsEPKURL", "b64Opts", "joinServer", "mainName", "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = [ containerId, assetsEPKURL, b64Opts ]; if(blockUnsigned && (typeof window.eaglercraftXOpts === \"object\")) window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; if(joinServer.length > 0) window[optsVarName].push(joinServer); window[mainName](); }, 1);") - private static native void callMainOld15(String optsVarName, String containerId, String assetsEPKURL, String b64Opts, String joinServer, String mainName, boolean blockUnsigned); - - @JSBody(params = { "optsVarName", "containerId", "assetsEPKURL", "joinServer", "mainName", "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = [ containerId, assetsEPKURL ]; if(blockUnsigned && (typeof window.eaglercraftXOpts === \"object\")) window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; if(joinServer.length > 0) window[optsVarName].push(joinServer); window[mainName](); }, 1);") - private static native void callMainOldB13(String optsVarName, String containerId, String assetsEPKURL, String joinServer, String mainName, boolean blockUnsigned); - - @JSBody(params = { "optsVarName", "optsVarJSON", "blockUnsigned" }, script = "window[optsVarName] = JSON.parse(optsVarJSON); if(blockUnsigned) window[optsVarName].bootMenuBlocksUnsignedClients = true;") - private static native void setJSONOpts(String optsVarName, String optsVarJSON, boolean blockUnsigned); - - private static void bootOriginClient(LaunchConfigEntry launchConf, ClientDataEntry clientData, - IProgressMsgCallback cb) { - doUpdateMessage(cb, "Preparing launch opts..."); - JSONObject launchOpts = new JSONObject(launchConf.launchOpts); - launchOpts.put("container", BootMenuEntryPoint.getOriginContainer()); - launchOpts.put("assetsURI", BootMenuEntryPoint.getUnsignedClientAssetsEPKRaw()); - final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); - BootMenuMain.continueBootToOriginClient(() -> { - setJSONOpts("eaglercraftXOpts", launchOptsStr, IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients()); - }); + private static void bootClientEaglerB13(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); + if (blockUnsigned) { + throw new UnsignedBootException(); + } + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + final TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + List toCleanOnException = new ArrayList<>(); + if (classesJSURL == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(classesJSURL); + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); + final TeaVMBlobURLHandle assetsEPKURL = loadingCache + .get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); + if (assetsEPKURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { + try { + TeaVMBlobURLManager.releaseURL(url); + } catch (Throwable t) { + } + } + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + toCleanOnException.add(assetsEPKURL); + doUpdateMessage(cb, "Launching client..."); + BootMenuMain.runLaterMS(() -> { + clearMain("main"); + HTMLDocument docTemp = BootMenuMain.doc; + final String container = BootMenuMain.createRootElementForClient(); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); + scriptElement.addEventListener("load", (evt) -> { + BootMenuMain.runLater(() -> { + while (!isMainReady("main")) { + logger.error("main function is not available yet! waiting 250ms..."); + EagUtils.sleep(250); + } + BootMenuMain.stopEventLoop(); + callMainOldB13("minecraftOpts", container, assetsEPKURL.toExternalForm(), launchConf.joinServer, + "main", blockUnsigned); + }); + }); + scriptElement.setType("text/javascript"); + scriptElement.setSrc(classesJSURL.toExternalForm()); + docTemp.getHead().appendChild(scriptElement); + }, 250); } private static void bootClientEaglerX18(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { + if (blockUnsigned) { throw new UnsignedBootException(); } JSONObject launchOpts = new JSONObject(launchConf.launchOpts); doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { + if (classesJSURL == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } toCleanOnException.add(classesJSURL); JSONArray epkFiles = new JSONArray(); - for(EPKDataEntry etr : clientData.epkFiles) { + for (EPKDataEntry etr : clientData.epkFiles) { doUpdateMessage(cb, "Resolving assets.epk (" + etr.dataUUID + ", path: /" + etr.extractTo + ")"); TeaVMBlobURLHandle epkURL = loadingCache.get(new UUIDStringPair(etr.dataUUID, "application/octet-stream")); - if(epkURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { + if (epkURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } String msg = "Could not resolve assets.epk! (" + etr.dataUUID + ", path: /" + etr.extractTo + ")"; @@ -237,10 +410,10 @@ public class ClientBootFactory { HTMLDocument docTemp = BootMenuMain.doc; launchOpts.put("container", BootMenuMain.createRootElementForClient()); final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); scriptElement.addEventListener("load", (evt) -> { BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { + while (!isMainReady("main")) { logger.error("main function is not available yet! waiting 250ms..."); EagUtils.sleep(250); } @@ -258,14 +431,15 @@ public class ClientBootFactory { EaglerLoadingCache loadingCacheBytes, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { JSONObject launchOpts = new JSONObject(launchConf.launchOpts); - if(!launchOpts.has("hintsVersion")) { + if (!launchOpts.has("hintsVersion")) { launchOpts.put("hintsVersion", 1); } doUpdateMessage(cb, "Resolving client signature (" + clientData.clientSignature + ")"); byte[] clientSigBytes = loadingCacheBytes.get(clientData.clientSignature); - final TeaVMBlobURLHandle clientSigURL = loadingCache.get(new UUIDStringPair(clientData.clientSignature, "application/octet-stream")); + final TeaVMBlobURLHandle clientSigURL = loadingCache + .get(new UUIDStringPair(clientData.clientSignature, "application/octet-stream")); List toCleanOnException = new ArrayList<>(); - if(clientSigURL == null) { + if (clientSigURL == null) { clientSigBytes = null; String msg = "Could not resolve client signature! (" + clientData.clientSignature + ")"; logger.error(msg); @@ -274,14 +448,15 @@ public class ClientBootFactory { toCleanOnException.add(clientSigURL); doUpdateMessage(cb, "Resolving client payload (" + clientData.mainPayload + ")"); byte[] clientPayloadBytes = loadingCacheBytes.get(clientData.mainPayload); - final TeaVMBlobURLHandle clientPayloadURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "application/octet-stream")); - if(clientPayloadURL == null) { + final TeaVMBlobURLHandle clientPayloadURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "application/octet-stream")); + if (clientPayloadURL == null) { clientSigBytes = null; clientPayloadBytes = null; - for(TeaVMBlobURLHandle url : toCleanOnException) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } String msg = "Could not resolve client payload! (" + clientData.mainPayload + ")"; @@ -290,14 +465,14 @@ public class ClientBootFactory { } toCleanOnException.add(clientPayloadURL); boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { + if (blockUnsigned) { doUpdateMessage(cb, "Verifying signature..."); boolean valid = SignatureCheckHelper.checkSignatureValid(clientSigBytes, clientPayloadBytes); - if(!valid) { - for(TeaVMBlobURLHandle url : toCleanOnException) { + if (!valid) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } throw new UnsignedBootException(); @@ -305,19 +480,19 @@ public class ClientBootFactory { } doUpdateMessage(cb, "Decompressing payload..."); EaglerOutputStream bao = new EaglerOutputStream(0x1000000); - try(InputStream is = EaglerZLIB.newGZIPInputStream(new EaglerInputStream(clientPayloadBytes))) { + try (InputStream is = EaglerZLIB.newGZIPInputStream(new EaglerInputStream(clientPayloadBytes))) { byte[] copybuffer = new byte[16384]; int i; - while((i = is.read(copybuffer)) != -1) { + while ((i = is.read(copybuffer)) != -1) { bao.write(copybuffer, 0, i); } - }catch(IOException ex) { + } catch (IOException ex) { clientSigBytes = null; clientPayloadBytes = null; - for(TeaVMBlobURLHandle url : toCleanOnException) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } throw new IllegalArgumentException("Could not decompress signed client payload!"); @@ -326,15 +501,17 @@ public class ClientBootFactory { bao = null; clientSigBytes = null; clientPayloadBytes = null; - final TeaVMBlobURLHandle clientPayloadURLDecompress = TeaVMBlobURLManager.registerNewURLByte(decompressed, "text/javascript"); + final TeaVMBlobURLHandle clientPayloadURLDecompress = TeaVMBlobURLManager.registerNewURLByte(decompressed, + "text/javascript"); toCleanOnException.add(clientPayloadURLDecompress); doUpdateMessage(cb, "Launching client..."); BootMenuMain.runLaterMS(() -> { HTMLDocument docTemp = BootMenuMain.doc; launchOpts.put("container", BootMenuMain.createRootElementForClient()); final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); - setupSignedClientOpts(clientSigURL.toExternalForm(), clientPayloadURL.toExternalForm(), launchOptsStr, blockUnsigned); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); + setupSignedClientOpts(clientSigURL.toExternalForm(), clientPayloadURL.toExternalForm(), launchOptsStr, + blockUnsigned); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); scriptElement.setType("text/javascript"); scriptElement.setSrc(clientPayloadURLDecompress.toExternalForm()); docTemp.getHead().appendChild(scriptElement); @@ -342,240 +519,34 @@ public class ClientBootFactory { }, 250); } - private static void bootClientEagler15New(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCacheBytes, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { - throw new UnsignedBootException(); - } - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - JSONObject launchOpts = new JSONObject(launchConf.launchOpts); - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); - List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(classesJSURL); - doUpdateMessage(cb, "Resolving classes_server.js (" + clientData.integratedServer + ")"); - byte[] classesServerJS = loadingCacheBytes.get(clientData.integratedServer); - if(classesServerJS == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { - try { - TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { - } - } - String msg = "Could not resolve classes_server.js! (" + clientData.integratedServer + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - classesServerJS = OfflineDownloadFactory.removeUseStrict(classesServerJS); - byte[] appendToClassesServerJS = "\"use strict\";var eaglercraftServerOpts;onmessage = function(o) { eaglercraftServerOpts = o.data; main(); };".getBytes(StandardCharsets.UTF_8); - byte[] concatClassesServerJS = new byte[classesServerJS.length + appendToClassesServerJS.length]; - System.arraycopy(appendToClassesServerJS, 0, concatClassesServerJS, 0, appendToClassesServerJS.length); - System.arraycopy(classesServerJS, 0, concatClassesServerJS, appendToClassesServerJS.length, classesServerJS.length); - TeaVMBlobURLHandle classesServerJSURL = TeaVMBlobURLManager.registerNewURLByte(concatClassesServerJS, "text/javascript"); - toCleanOnException.add(classesServerJSURL); - launchOpts.put("serverWorkerURI", classesServerJSURL); - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); - TeaVMBlobURLHandle assetsEPKURL = loadingCache.get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); - if(assetsEPKURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { - try { - TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { - } - } - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(assetsEPKURL); - launchOpts.put("assetsURI", assetsEPKURL.toExternalForm()); - doUpdateMessage(cb, "Launching client..."); - BootMenuMain.runLaterMS(() -> { - clearMain("main"); - HTMLDocument docTemp = BootMenuMain.doc; - launchOpts.put("container", BootMenuMain.createRootElementForClient()); - final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); - scriptElement.addEventListener("load", (evt) -> { - BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { - logger.error("main function is not available yet! waiting 250ms..."); - EagUtils.sleep(250); - } - BootMenuMain.stopEventLoop(); - callMain("eaglercraftOpts", launchOptsStr, "main", blockUnsigned); - }); - }); - scriptElement.setType("text/javascript"); - scriptElement.setSrc(classesJSURL.toExternalForm()); - docTemp.getHead().appendChild(scriptElement); - }, 250); - } - - private static void bootClientEagler15Old(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { - throw new UnsignedBootException(); - } - final String b64Opts = translateNBTOpts(launchConf.launchOpts); - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - final TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); - List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(classesJSURL); - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); - final TeaVMBlobURLHandle assetsEPKURL = loadingCache.get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); - if(assetsEPKURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { - try { - TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { - } - } - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(assetsEPKURL); - doUpdateMessage(cb, "Launching client..."); - BootMenuMain.runLaterMS(() -> { - clearMain("main"); - HTMLDocument docTemp = BootMenuMain.doc; - final String container = BootMenuMain.createRootElementForClient(); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); - scriptElement.addEventListener("load", (evt) -> { - BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { - logger.error("main function is not available yet! waiting 250ms..."); - EagUtils.sleep(250); - } - BootMenuMain.stopEventLoop(); - callMainOld15("minecraftOpts", container, assetsEPKURL.toExternalForm(), b64Opts, launchConf.joinServer, "main", blockUnsigned); - }); - }); - scriptElement.setType("text/javascript"); - scriptElement.setSrc(classesJSURL.toExternalForm()); - docTemp.getHead().appendChild(scriptElement); - }, 250); - } - - static String translateNBTOpts(String opts) { - opts = opts.trim(); - if(!opts.startsWith("[NBT]") || !opts.endsWith("[/NBT]")) { - throw new IllegalArgumentException("Eaglercraft opts are not in NBT format!"); - } - NBTTagCompound readTag; - try { - readTag = JsonToNBT.getTagFromJson(opts.substring(5, opts.length() - 6).trim()); - } catch (NBTException e) { - throw new IllegalArgumentException("Eaglercraft opts are invalid: " + e.getMessage()); - } - EaglerOutputStream bao = new EaglerOutputStream(256); - try { - CompressedStreamTools.write(readTag, new DataOutputStream(bao)); - } catch (IOException e) { - throw new RuntimeException("Could not write NBT tag compound!"); - } - return Base64.encodeBase64String(bao.toByteArray()); - } - - private static void bootClientEaglerB13(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { - throw new UnsignedBootException(); - } - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - final TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); - List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(classesJSURL); - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); - final TeaVMBlobURLHandle assetsEPKURL = loadingCache.get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); - if(assetsEPKURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { - try { - TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { - } - } - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - toCleanOnException.add(assetsEPKURL); - doUpdateMessage(cb, "Launching client..."); - BootMenuMain.runLaterMS(() -> { - clearMain("main"); - HTMLDocument docTemp = BootMenuMain.doc; - final String container = BootMenuMain.createRootElementForClient(); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); - scriptElement.addEventListener("load", (evt) -> { - BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { - logger.error("main function is not available yet! waiting 250ms..."); - EagUtils.sleep(250); - } - BootMenuMain.stopEventLoop(); - callMainOldB13("minecraftOpts", container, assetsEPKURL.toExternalForm(), launchConf.joinServer, "main", blockUnsigned); - }); - }); - scriptElement.setType("text/javascript"); - scriptElement.setSrc(classesJSURL.toExternalForm()); - docTemp.getHead().appendChild(scriptElement); - }, 250); - } - private static void bootClientPeytonAlphaBeta(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { + if (blockUnsigned) { throw new UnsignedBootException(); } - if(clientData.epkFiles.size() != 1) { + if (clientData.epkFiles.size() != 1) { throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); } JSONObject launchOpts = new JSONObject(launchConf.launchOpts); doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - final TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + final TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { + if (classesJSURL == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } toCleanOnException.add(classesJSURL); doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); - final TeaVMBlobURLHandle assetsEPKURL = loadingCache.get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); - if(assetsEPKURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { + final TeaVMBlobURLHandle assetsEPKURL = loadingCache + .get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); + if (assetsEPKURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; @@ -590,10 +561,10 @@ public class ClientBootFactory { HTMLDocument docTemp = BootMenuMain.doc; launchOpts.put("gameContainer", BootMenuMain.createRootElementForClient()); final String launchOptsStr = launchOpts.toString(); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); scriptElement.addEventListener("load", (evt) -> { BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { + while (!isMainReady("main")) { logger.error("main function is not available yet! waiting 250ms..."); EagUtils.sleep(250); } @@ -610,28 +581,30 @@ public class ClientBootFactory { private static void bootClientPeytonIndev(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { + if (blockUnsigned) { throw new UnsignedBootException(); } - if(clientData.epkFiles.size() != 1) { + if (clientData.epkFiles.size() != 1) { throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); } doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - final TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + final TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { + if (classesJSURL == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } toCleanOnException.add(classesJSURL); doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0) + ")"); - final TeaVMBlobURLHandle assetsEPKURL = loadingCache.get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); - if(assetsEPKURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { + final TeaVMBlobURLHandle assetsEPKURL = loadingCache + .get(new UUIDStringPair(clientData.epkFiles.get(0).dataUUID, "application/octet-stream")); + if (assetsEPKURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; @@ -644,15 +617,16 @@ public class ClientBootFactory { clearMain("main"); HTMLDocument docTemp = BootMenuMain.doc; final String container = BootMenuMain.createRootElementForClient(); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); scriptElement.addEventListener("load", (evt) -> { BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { + while (!isMainReady("main")) { logger.error("main function is not available yet! waiting 250ms..."); EagUtils.sleep(250); } BootMenuMain.stopEventLoop(); - callMainOldB13("classicConfig", container, assetsEPKURL.toExternalForm(), "", "main", blockUnsigned); + callMainOldB13("classicConfig", container, assetsEPKURL.toExternalForm(), "", "main", + blockUnsigned); }); }); scriptElement.setType("text/javascript"); @@ -664,28 +638,29 @@ public class ClientBootFactory { private static void bootClientStandardOffline(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { boolean blockUnsigned = IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients(); - if(blockUnsigned) { + if (blockUnsigned) { throw new UnsignedBootException(); } JSONObject launchOpts = new JSONObject(launchConf.launchOpts); doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - TeaVMBlobURLHandle classesJSURL = loadingCache.get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); + TeaVMBlobURLHandle classesJSURL = loadingCache + .get(new UUIDStringPair(clientData.mainPayload, "text/javascript")); List toCleanOnException = new ArrayList<>(); - if(classesJSURL == null) { + if (classesJSURL == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } toCleanOnException.add(classesJSURL); JSONArray epkFiles = new JSONArray(); - for(EPKDataEntry etr : clientData.epkFiles) { + for (EPKDataEntry etr : clientData.epkFiles) { doUpdateMessage(cb, "Resolving assets.epk (" + etr.dataUUID + ", path: /" + etr.extractTo + ")"); TeaVMBlobURLHandle epkURL = loadingCache.get(new UUIDStringPair(etr.dataUUID, "application/octet-stream")); - if(epkURL == null) { - for(TeaVMBlobURLHandle url : toCleanOnException) { + if (epkURL == null) { + for (TeaVMBlobURLHandle url : toCleanOnException) { try { TeaVMBlobURLManager.releaseURL(url); - }catch(Throwable t) { + } catch (Throwable t) { } } String msg = "Could not resolve assets.epk! (" + etr.dataUUID + ", path: /" + etr.extractTo + ")"; @@ -705,10 +680,10 @@ public class ClientBootFactory { HTMLDocument docTemp = BootMenuMain.doc; launchOpts.put(launchConf.launchOptsContainerVar, BootMenuMain.createRootElementForClient()); final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); - HTMLScriptElement scriptElement = (HTMLScriptElement)docTemp.createElement("script"); + HTMLScriptElement scriptElement = (HTMLScriptElement) docTemp.createElement("script"); scriptElement.addEventListener("load", (evt) -> { BootMenuMain.runLater(() -> { - while(!isMainReady("main")) { + while (!isMainReady("main")) { logger.error("main function is not available yet! waiting 250ms..."); EagUtils.sleep(250); } @@ -722,4 +697,71 @@ public class ClientBootFactory { }, 250); } + private static void bootOriginClient(LaunchConfigEntry launchConf, ClientDataEntry clientData, + IProgressMsgCallback cb) { + doUpdateMessage(cb, "Preparing launch opts..."); + JSONObject launchOpts = new JSONObject(launchConf.launchOpts); + launchOpts.put("container", BootMenuEntryPoint.getOriginContainer()); + launchOpts.put("assetsURI", BootMenuEntryPoint.getUnsignedClientAssetsEPKRaw()); + final String launchOptsStr = RelayRandomizeHelper.replaceRelayMacroWithConstant(launchOpts.toString()); + BootMenuMain.continueBootToOriginClient(() -> { + setJSONOpts("eaglercraftXOpts", launchOptsStr, + IBootMenuConfigAdapter.instance.isBootMenuBlocksUnsignedClients()); + }); + } + + @JSBody(params = { "optsVarName", "optsVarJSON", "mainName", + "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = JSON.parse(optsVarJSON); if(blockUnsigned) window[optsVarName].bootMenuBlocksUnsignedClients = true; window[mainName](); }, 1);") + private static native void callMain(String optsVarName, String optsVarJSON, String mainName, boolean blockUnsigned); + + @JSBody(params = { "optsVarName", "containerId", "assetsEPKURL", "b64Opts", "joinServer", "mainName", + "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = [ containerId, assetsEPKURL, b64Opts ]; if(blockUnsigned && (typeof window.eaglercraftXOpts === \"object\")) window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; if(joinServer.length > 0) window[optsVarName].push(joinServer); window[mainName](); }, 1);") + private static native void callMainOld15(String optsVarName, String containerId, String assetsEPKURL, + String b64Opts, String joinServer, String mainName, boolean blockUnsigned); + + @JSBody(params = { "optsVarName", "containerId", "assetsEPKURL", "joinServer", "mainName", + "blockUnsigned" }, script = "setTimeout(function() { window[optsVarName] = [ containerId, assetsEPKURL ]; if(blockUnsigned && (typeof window.eaglercraftXOpts === \"object\")) window.eaglercraftXOpts.bootMenuBlocksUnsignedClients = true; if(joinServer.length > 0) window[optsVarName].push(joinServer); window[mainName](); }, 1);") + private static native void callMainOldB13(String optsVarName, String containerId, String assetsEPKURL, + String joinServer, String mainName, boolean blockUnsigned); + + @JSBody(params = { "mainName" }, script = "window[mainName] = null;") + private static native boolean clearMain(String mainName); + + private static void doUpdateMessage(IProgressMsgCallback cb, String str) { + logger.info(str); + cb.updateMessage(str); + } + + @JSBody(params = { "mainName" }, script = "return (typeof window[mainName] === \"function\");") + private static native boolean isMainReady(String mainName); + + @JSBody(params = { "optsVarName", "optsVarJSON", + "blockUnsigned" }, script = "window[optsVarName] = JSON.parse(optsVarJSON); if(blockUnsigned) window[optsVarName].bootMenuBlocksUnsignedClients = true;") + private static native void setJSONOpts(String optsVarName, String optsVarJSON, boolean blockUnsigned); + + @JSBody(params = { "clientSigURL", "clientPayloadURL", "launchOptsJSON", + "blockUnsigned" }, script = "window.eaglercraftXOptsHints = JSON.parse(launchOptsJSON); if(blockUnsigned) window.eaglercraftXOptsHints.bootMenuBlocksUnsignedClients = true; window.eaglercraftXClientSignature = clientSigURL; window.eaglercraftXClientBundle = clientPayloadURL;") + private static native void setupSignedClientOpts(String clientSigURL, String clientPayloadURL, + String launchOptsJSON, boolean blockUnsigned); + + static String translateNBTOpts(String opts) { + opts = opts.trim(); + if (!opts.startsWith("[NBT]") || !opts.endsWith("[/NBT]")) { + throw new IllegalArgumentException("Eaglercraft opts are not in NBT format!"); + } + NBTTagCompound readTag; + try { + readTag = JsonToNBT.getTagFromJson(opts.substring(5, opts.length() - 6).trim()); + } catch (NBTException e) { + throw new IllegalArgumentException("Eaglercraft opts are invalid: " + e.getMessage()); + } + EaglerOutputStream bao = new EaglerOutputStream(256); + try { + CompressedStreamTools.write(readTag, new DataOutputStream(bao)); + } catch (IOException e) { + throw new RuntimeException("Could not write NBT tag compound!"); + } + return Base64.encodeBase64String(bao.toByteArray()); + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientDataEntry.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientDataEntry.java index 9819f7b5..96376d1a 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientDataEntry.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ClientDataEntry.java @@ -13,50 +13,68 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientDataEntry { + protected static List loadEPKFiles(JSONArray arr) { + int cnt = arr.length(); + List ret = new ArrayList<>(cnt); + for (int i = 0; i < cnt; ++i) { + JSONObject obj = arr.getJSONObject(i); + ret.add(new EPKDataEntry(obj.optString("path", ""), EaglercraftUUID.fromString(obj.getString("uuid")))); + } + return ret; + } + + protected static JSONArray storeEPKFiles(List arr) { + int cnt = arr.size(); + JSONArray ret = new JSONArray(cnt); + for (int i = 0; i < cnt; ++i) { + EPKDataEntry etr = arr.get(i); + JSONObject obj = (new JSONObject()).put("uuid", etr.dataUUID.toString()); + if (etr.extractTo.length() > 0) { + obj.put("path", etr.extractTo); + } + ret.put(obj); + } + return ret; + } + public final EnumClientFormatType type; public final EaglercraftUUID uuid; public final EaglercraftUUID mainPayload; public final EaglercraftUUID integratedServer; - public final EaglercraftUUID clientSignature; - public final List epkFiles; - public ClientDataEntry(EnumClientFormatType type, EaglercraftUUID uuid, EaglercraftUUID mainPayload, - EaglercraftUUID integratedServer, EaglercraftUUID clientSignature, List epkFiles) { - this.type = type; - this.uuid = uuid; - this.mainPayload = mainPayload; - this.integratedServer = integratedServer; - this.clientSignature = clientSignature; - this.epkFiles = epkFiles; - } + public final EaglercraftUUID clientSignature; + + public final List epkFiles; public ClientDataEntry(EaglercraftUUID uuid, JSONObject jsonObject) { this.uuid = uuid; EaglercraftUUID sanityUUID = EaglercraftUUID.fromString(jsonObject.getString("uuid")); - if(!sanityUUID.equals(uuid)) { - throw new IllegalArgumentException("The file's name UUID does not equal the UUID string found in the file!"); + if (!sanityUUID.equals(uuid)) { + throw new IllegalArgumentException( + "The file's name UUID does not equal the UUID string found in the file!"); } int typeId = jsonObject.getInt("type"); type = EnumClientFormatType.getById(typeId); - if(type == null) { + if (type == null) { throw new IllegalArgumentException("Unknown client data type " + typeId + "!"); } - switch(type) { + switch (type) { default: case EAGLER_STANDARD_OFFLINE: mainPayload = EaglercraftUUID.fromString(jsonObject.getString("mainPayload")); @@ -79,54 +97,19 @@ public class ClientDataEntry { } } - public void writeJSON(JSONObject jsonObject) { - jsonObject.put("uuid", uuid.toString()); - jsonObject.put("type", type.id); - switch(type) { - case EAGLER_STANDARD_OFFLINE: - default: - jsonObject.put("mainPayload", mainPayload.toString()); - jsonObject.put("epkFiles", storeEPKFiles(epkFiles)); - break; - case EAGLER_STANDARD_1_5_OFFLINE: - jsonObject.put("mainPayload", mainPayload.toString()); - jsonObject.put("integratedServer", integratedServer.toString()); - jsonObject.put("epkFiles", storeEPKFiles(epkFiles)); - break; - case EAGLER_SIGNED_OFFLINE: - jsonObject.put("mainPayload", mainPayload.toString()); - jsonObject.put("clientSignature", clientSignature.toString()); - break; - } - } - - protected static List loadEPKFiles(JSONArray arr) { - int cnt = arr.length(); - List ret = new ArrayList<>(cnt); - for(int i = 0; i < cnt; ++i) { - JSONObject obj = arr.getJSONObject(i); - ret.add(new EPKDataEntry(obj.optString("path", ""), EaglercraftUUID.fromString(obj.getString("uuid")))); - } - return ret; - } - - protected static JSONArray storeEPKFiles(List arr) { - int cnt = arr.size(); - JSONArray ret = new JSONArray(cnt); - for(int i = 0; i < cnt; ++i) { - EPKDataEntry etr = arr.get(i); - JSONObject obj = (new JSONObject()).put("uuid", etr.dataUUID.toString()); - if(etr.extractTo.length() > 0) { - obj.put("path", etr.extractTo); - } - ret.put(obj); - } - return ret; + public ClientDataEntry(EnumClientFormatType type, EaglercraftUUID uuid, EaglercraftUUID mainPayload, + EaglercraftUUID integratedServer, EaglercraftUUID clientSignature, List epkFiles) { + this.type = type; + this.uuid = uuid; + this.mainPayload = mainPayload; + this.integratedServer = integratedServer; + this.clientSignature = clientSignature; + this.epkFiles = epkFiles; } public Collection getReferencedBlobs() { List toRet = new ArrayList<>(4); - switch(type) { + switch (type) { case EAGLER_STANDARD_OFFLINE: default: toRet.add(mainPayload); @@ -149,4 +132,25 @@ public class ClientDataEntry { return new ClientDataEntry(type, rotatedClientUUID, mainPayload, integratedServer, clientSignature, epkFiles); } + public void writeJSON(JSONObject jsonObject) { + jsonObject.put("uuid", uuid.toString()); + jsonObject.put("type", type.id); + switch (type) { + case EAGLER_STANDARD_OFFLINE: + default: + jsonObject.put("mainPayload", mainPayload.toString()); + jsonObject.put("epkFiles", storeEPKFiles(epkFiles)); + break; + case EAGLER_STANDARD_1_5_OFFLINE: + jsonObject.put("mainPayload", mainPayload.toString()); + jsonObject.put("integratedServer", integratedServer.toString()); + jsonObject.put("epkFiles", storeEPKFiles(epkFiles)); + break; + case EAGLER_SIGNED_OFFLINE: + jsonObject.put("mainPayload", mainPayload.toString()); + jsonObject.put("clientSignature", clientSignature.toString()); + break; + } + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ConfirmationPopupController.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ConfirmationPopupController.java index 5b075e5e..d34e3c97 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ConfirmationPopupController.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/ConfirmationPopupController.java @@ -10,29 +10,42 @@ import com.google.common.html.HtmlEscapers; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class ConfirmationPopupController { + protected static class ConfirmationOptionInstance { + + protected final E listItem; + protected final HTMLElement element; + + protected ConfirmationOptionInstance(E listItem, HTMLElement element) { + this.listItem = listItem; + this.element = element; + } + + } + public static interface SelectionOption { - String getName(); - default boolean getEnabled() { return true; } + String getName(); + } public static class SelectionOptionEnum implements SelectionOption { @@ -53,11 +66,6 @@ public abstract class ConfirmationPopupController { - - protected final E listItem; - protected final HTMLElement element; - - protected ConfirmationOptionInstance(E listItem, HTMLElement element) { - this.listItem = listItem; - this.element = element; + @Override + public String getName() { + return displayName; } - + } protected final HTMLElement parent; @@ -92,15 +93,66 @@ public abstract class ConfirmationPopupController(optionList.size()); } + public void destroy() { + parent.setInnerHTML(""); + currentSelected = -1; + optionEnableList.clear(); + } + + public void handleKeyDown(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { + setSelected(currentSelected - 1); + } else if (keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { + setSelected(currentSelected + 1); + } else if (keyCode == KeyCodes.DOM_KEY_ENTER) { + if (currentSelected >= 0 && currentSelected < optionEnableList.size()) { + optionSelected(optionEnableList.get(currentSelected).listItem); + } + } + } + + public void handleKeyRepeat(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { + setSelected(currentSelected - 1); + } else if (keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { + setSelected(currentSelected + 1); + } + } + + protected abstract void optionSelected(T item); + + public void setSelected(int idx) { + int listLen = optionEnableList.size(); + if (listLen == 0) { + idx = -1; + } else if (idx >= listLen) { + idx = listLen - 1; + } else if (idx < 0) { + idx = 0; + } + if (idx == currentSelected) { + return; + } + if (currentSelected >= 0 && currentSelected < optionEnableList.size()) { + optionEnableList.get(currentSelected).element.getClassList() + .remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_confirm_opt_selected"); + } + currentSelected = idx; + if (idx != -1) { + optionEnableList.get(idx).element.getClassList() + .add(BootMenuConstants.cssClassPrefixBootMenu + "popup_confirm_opt_selected"); + } + } + public void setup() { optionEnableList.clear(); parent.setInnerHTML(""); StringBuilder htmlBuilder = new StringBuilder(); Escaper escaper = HtmlEscapers.htmlEscaper(); currentSelected = -1; - for(int i = 0, l = optionList.size(); i < l; ++i) { + for (int i = 0, l = optionList.size(); i < l; ++i) { T itm = optionList.get(i); - if(i > 0) { + if (i > 0) { htmlBuilder.append("   "); } htmlBuilder.append( @@ -110,14 +162,15 @@ public abstract class ConfirmationPopupController"); } parent.setInnerHTML(htmlBuilder.toString()); - for(int i = 0, l = optionList.size(); i < l; ++i) { + for (int i = 0, l = optionList.size(); i < l; ++i) { T itm = optionList.get(i); HTMLElement el = parent.querySelector("._eaglercraftX_boot_menu_popup_confirm_opt" + i); - if(el == null) { - throw new RuntimeException("Failed to select element from page: ._eaglercraftX_boot_menu_popup_confirm_opt" + i); + if (el == null) { + throw new RuntimeException( + "Failed to select element from page: ._eaglercraftX_boot_menu_popup_confirm_opt" + i); } - if(itm.getEnabled()) { - if(currentSelected == -1) { + if (itm.getEnabled()) { + if (currentSelected == -1) { currentSelected = 0; el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_confirm_opt_selected"); } @@ -134,58 +187,9 @@ public abstract class ConfirmationPopupController= listLen) { - idx = listLen - 1; - }else if(idx < 0) { - idx = 0; - } - if(idx == currentSelected) { - return; - } - if(currentSelected >= 0 && currentSelected < optionEnableList.size()) { - optionEnableList.get(currentSelected).element.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_confirm_opt_selected"); - } - currentSelected = idx; - if(idx != -1) { - optionEnableList.get(idx).element.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_confirm_opt_selected"); - } - } - - public void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { - setSelected(currentSelected - 1); - }else if(keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { - setSelected(currentSelected + 1); - }else if(keyCode == KeyCodes.DOM_KEY_ENTER) { - if(currentSelected >= 0 && currentSelected < optionEnableList.size()) { - optionSelected(optionEnableList.get(currentSelected).listItem); - } - } - } - - public void handleKeyRepeat(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { - setSelected(currentSelected - 1); - }else if(keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { - setSelected(currentSelected + 1); - } - } - - protected abstract void optionSelected(T item); } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientFactory.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientFactory.java index eaadb2fc..bfcca358 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientFactory.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientFactory.java @@ -17,18 +17,19 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.export.EPKCompiler; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKClientFactory { @@ -58,17 +59,17 @@ public class EPKClientFactory { manifestObj.put("launchData", launchDatas); manifestObj.put("clientData", clientDatas); byte[] manifestBytes = manifestObj.toString().getBytes(StandardCharsets.UTF_8); - Map blobs = new HashMap<>(); - for(EaglercraftUUID uuid : clientData.getReferencedBlobs()) { + Map blobs = new HashMap<>(); + for (EaglercraftUUID uuid : clientData.getReferencedBlobs()) { String name = uuid.toString(); doUpdateMessage(cb, "Resolving blobs (" + name + ")"); - if(!blobs.containsKey(name)) { + if (!blobs.containsKey(name)) { Supplier loader = loaders.get(uuid); byte[] dat = null; - if(loader != null) { + if (loader != null) { dat = loader.get(); } - if(dat == null) { + if (dat == null) { String msg = "Could not resolve blob! (" + name + ")"; logger.error(msg); throw new NullPointerException(msg); @@ -78,7 +79,7 @@ public class EPKClientFactory { } doUpdateMessage(cb, "Compressing EPK file..."); String fileName = launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_"); - if(fileName.length() > 251) { + if (fileName.length() > 251) { fileName = fileName.substring(0, 251); } fileName = fileName + ".epk"; @@ -87,10 +88,10 @@ public class EPKClientFactory { byte[] epkData; try { epkComp.append("manifest.json", manifestBytes); - for(Entry blob : blobs.entrySet()) { + for (Entry blob : blobs.entrySet()) { epkComp.append(blob.getKey(), blob.getValue()); } - }finally { + } finally { epkData = epkComp.complete(); } doUpdateMessage(cb, "Downloading file..."); diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientParser.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientParser.java index 728c73c6..1ad5580b 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientParser.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKClientParser.java @@ -21,18 +21,19 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.export.EPKDecompiler; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKClientParser { @@ -41,27 +42,27 @@ public class EPKClientParser { public static List parseEPKClient(byte[] epkData) throws IOException { EPKDecompiler epkDecompiler = new EPKDecompiler(epkData); EPKDecompiler.FileEntry fetr = epkDecompiler.readFile(); - if(fetr == null || !fetr.type.equals("HEAD") || !fetr.name.equals("file-type")) { + if (fetr == null || !fetr.type.equals("HEAD") || !fetr.name.equals("file-type")) { epkDecompiler.close(); throw new IOException("File is incomplete!"); } - if(!Arrays.equals(fetr.data, "epk/client-archive-v1".getBytes(StandardCharsets.UTF_8))) { + if (!Arrays.equals(fetr.data, "epk/client-archive-v1".getBytes(StandardCharsets.UTF_8))) { throw new IOException("File is not a client archive!"); } - Map files = new HashMap<>(); - while((fetr = epkDecompiler.readFile()) != null) { - if(fetr.type.equals("FILE")) { + Map files = new HashMap<>(); + while ((fetr = epkDecompiler.readFile()) != null) { + if (fetr.type.equals("FILE")) { files.put(fetr.name, fetr.data); - }else { + } else { logger.error("Skipping non-FILE entry: {} {}", fetr.type, fetr.name); } } byte[] manifestData = files.get("manifest.json"); - if(manifestData == null) { + if (manifestData == null) { throw new IOException("File is incomplete!"); } List lst = new ArrayList<>(); - Map clientDatas; + Map clientDatas; List launchDatas; try { JSONObject mainfestJSON = new JSONObject(new String(manifestData, StandardCharsets.UTF_8)); @@ -69,43 +70,44 @@ public class EPKClientParser { JSONArray clients = mainfestJSON.getJSONArray("clientData"); clientDatas = new HashMap<>(clients.length()); launchDatas = new ArrayList<>(launches.length()); - for(int i = 0, l = clients.length(); i < l; ++i) { + for (int i = 0, l = clients.length(); i < l; ++i) { JSONObject obj = clients.getJSONObject(i); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj.getString("uuid")); - if(!theUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { + if (!theUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { clientDatas.put(theUUID, new ClientDataEntry(theUUID, obj)); } } - for(int i = 0, l = launches.length(); i < l; ++i) { + for (int i = 0, l = launches.length(); i < l; ++i) { JSONObject obj = launches.getJSONObject(i); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj.getString("uuid")); - if(!theUUID.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { + if (!theUUID.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { LaunchConfigEntry theEtr = new LaunchConfigEntry(theUUID, obj); - if(!BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(theEtr.clientDataUUID)) { - if(clientDatas.containsKey(theEtr.clientDataUUID)) { + if (!BootMenuConstants.UUID_CLIENT_DATA_ORIGIN.equals(theEtr.clientDataUUID)) { + if (clientDatas.containsKey(theEtr.clientDataUUID)) { launchDatas.add(theEtr); - }else { - logger.warn("Skipping launch config {} because the client data {} is missing!", theUUID, theEtr.clientDataUUID); + } else { + logger.warn("Skipping launch config {} because the client data {} is missing!", theUUID, + theEtr.clientDataUUID); } } } } - }catch(JSONException ex) { + } catch (JSONException ex) { throw new IOException("File manifest is corrupt!", ex); } Map blobs = new HashMap<>(); Iterator itr = clientDatas.values().iterator(); - loadClientDatas: while(itr.hasNext()) { + loadClientDatas: while (itr.hasNext()) { ClientDataEntry etr = itr.next(); - for(EaglercraftUUID uuid : etr.getReferencedBlobs()) { - if(!blobs.containsKey(uuid)) { + for (EaglercraftUUID uuid : etr.getReferencedBlobs()) { + if (!blobs.containsKey(uuid)) { byte[] blobBytes = files.get(uuid.toString()); - if(blobBytes == null) { + if (blobBytes == null) { logger.error("Blob UUID {} for client data {} is missing!", uuid, etr.uuid); itr.remove(); continue loadClientDatas; } - if(!EaglercraftUUID.nameUUIDFromBytes(blobBytes).equals(uuid)) { + if (!EaglercraftUUID.nameUUIDFromBytes(blobBytes).equals(uuid)) { logger.error("Blob UUID {} for client data {} has an invalid checksum!", uuid, etr.uuid); itr.remove(); continue loadClientDatas; @@ -115,14 +117,14 @@ public class EPKClientParser { } } List list = new ArrayList<>(launchDatas.size()); - for(LaunchConfigEntry etr : launchDatas) { + for (LaunchConfigEntry etr : launchDatas) { ClientDataEntry clientData = clientDatas.get(etr.clientDataUUID); - if(clientData == null) { + if (clientData == null) { logger.error("Client data UUID {} for launch data {} is missing!", etr.clientDataUUID, etr.uuid); continue; } Map entryBlob = new HashMap<>(); - for(EaglercraftUUID uuid : clientData.getReferencedBlobs()) { + for (EaglercraftUUID uuid : clientData.getReferencedBlobs()) { entryBlob.put(uuid, blobs.get(uuid)); } list.add(new ParsedOfflineAdapter(etr, clientData, entryBlob)); diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKDataEntry.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKDataEntry.java index f956971f..cfdf91be 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKDataEntry.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EPKDataEntry.java @@ -4,18 +4,19 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKDataEntry { diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientFormatType.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientFormatType.java index fc8c1695..f906ac38 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientFormatType.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientFormatType.java @@ -6,24 +6,26 @@ import com.google.common.collect.Sets; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumClientFormatType { /** * Eagler 1.8, b1.3, or pre-singleplayer 1.5 offline */ - EAGLER_STANDARD_OFFLINE(0, "Standard Offline", Sets.newHashSet(EnumClientLaunchType.EAGLERX_V1, EnumClientLaunchType.EAGLER_1_5_V1, + EAGLER_STANDARD_OFFLINE(0, "Standard Offline", + Sets.newHashSet(EnumClientLaunchType.EAGLERX_V1, EnumClientLaunchType.EAGLER_1_5_V1, EnumClientLaunchType.EAGLER_BETA_V1, EnumClientLaunchType.PEYTON_V2, EnumClientLaunchType.PEYTON_V1, EnumClientLaunchType.STANDARD_OFFLINE_V1)), @@ -31,14 +33,32 @@ public enum EnumClientFormatType { * Eagler 1.5 offline with integrated server */ EAGLER_STANDARD_1_5_OFFLINE(1, "Standard 1.5 Offline", Sets.newHashSet(EnumClientLaunchType.EAGLER_1_5_V2)), - + /** * Eagler 1.8 with certificate */ EAGLER_SIGNED_OFFLINE(2, "Signed Offline", Sets.newHashSet(EnumClientLaunchType.EAGLERX_SIGNED_V1)); + private static final EnumClientFormatType[] lookup = new EnumClientFormatType[3]; + static { + EnumClientFormatType[] _values = values(); + for (int i = 0; i < _values.length; ++i) { + lookup[_values[i].id] = _values[i]; + } + } + + public static EnumClientFormatType getById(int id) { + if (id >= 0 && id < lookup.length) { + return lookup[id]; + } else { + return null; + } + } + public final int id; + public final String displayName; + public final Set launchTypes; private EnumClientFormatType(int id, String displayName, Set launchTypes) { @@ -47,21 +67,4 @@ public enum EnumClientFormatType { this.launchTypes = launchTypes; } - private static final EnumClientFormatType[] lookup = new EnumClientFormatType[3]; - - public static EnumClientFormatType getById(int id) { - if(id >= 0 && id < lookup.length) { - return lookup[id]; - }else { - return null; - } - } - - static { - EnumClientFormatType[] _values = values(); - for(int i = 0; i < _values.length; ++i) { - lookup[_values[i].id] = _values[i]; - } - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientLaunchType.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientLaunchType.java index eadbcc54..7630ca8b 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientLaunchType.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumClientLaunchType.java @@ -2,73 +2,72 @@ package net.lax1dude.eaglercraft.v1_8.boot_menu.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumClientLaunchType { /** * Configuable Eagler 1.8-like offline */ STANDARD_OFFLINE_V1(0), - + /** * Eagler 1.8 standard */ EAGLERX_V1(1), - + /** * Eagler 1.8 with certificate */ EAGLERX_SIGNED_V1(2), - + /** - * Eagler 1.5 array "window.minecraftOpts" of element id, epk file, servers, server to join + * Eagler 1.5 array "window.minecraftOpts" of element id, epk file, servers, + * server to join */ EAGLER_1_5_V1(3), - + /** - * Eagler 1.5 array "window.eaglercraftOpts" with "container" and "assetsURI" and "serverWorkerURI" + * Eagler 1.5 array "window.eaglercraftOpts" with "container" and "assetsURI" + * and "serverWorkerURI" */ EAGLER_1_5_V2(4), - + /** - * Eagler beta array "window.minecraftOpts" of element id, epk file, server to join + * Eagler beta array "window.minecraftOpts" of element id, epk file, server to + * join */ EAGLER_BETA_V1(5), - + /** - * Peyton format with "window.classicConfig" array of root element id and epk file + * Peyton format with "window.classicConfig" array of root element id and epk + * file */ PEYTON_V1(6), - + /** - * Peyton format with "window.config" JSON object with "gameContainer" and "assetsLocation" + * Peyton format with "window.config" JSON object with "gameContainer" and + * "assetsLocation" */ PEYTON_V2(7); - public final int id; - - private EnumClientLaunchType(int id) { - this.id = id; - } - private static final EnumClientLaunchType[] lookup = new EnumClientLaunchType[8]; - public static EnumClientLaunchType getById(int id) { - if(id >= 0 && id < lookup.length) { - return lookup[id]; - }else { - return null; + static { + EnumClientLaunchType[] _values = values(); + for (int i = 0; i < _values.length; ++i) { + lookup[_values[i].id] = _values[i]; } } @@ -76,11 +75,18 @@ public enum EnumClientLaunchType { return lookup; } - static { - EnumClientLaunchType[] _values = values(); - for(int i = 0; i < _values.length; ++i) { - lookup[_values[i].id] = _values[i]; + public static EnumClientLaunchType getById(int id) { + if (id >= 0 && id < lookup.length) { + return lookup[id]; + } else { + return null; } } + public final int id; + + private EnumClientLaunchType(int id) { + this.id = id; + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumOfflineParseType.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumOfflineParseType.java index 8639a27e..251a890c 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumOfflineParseType.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/EnumOfflineParseType.java @@ -2,34 +2,27 @@ package net.lax1dude.eaglercraft.v1_8.boot_menu.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumOfflineParseType { - EAGLERCRAFTX_1_8_OFFLINE, - EAGLERCRAFTX_1_8_SIGNED, - EAGLERCRAFTX_1_8_FAT_OFFLINE, - EAGLERCRAFTX_1_8_FAT_SIGNED, - EAGLERCRAFT_1_5_NEW_OFFLINE, - EAGLERCRAFT_1_5_OLD_OFFLINE, - EAGLERCRAFT_BETA_B1_3_OFFLINE, - PEYTONPLAYZ585_ALPHA_BETA, - PEYTONPLAYZ585_INDEV, - EXPORTED_STANDARD_OFFLINE, - EAGLERCRAFT_EPK_FILE; + EAGLERCRAFTX_1_8_OFFLINE, EAGLERCRAFTX_1_8_SIGNED, EAGLERCRAFTX_1_8_FAT_OFFLINE, EAGLERCRAFTX_1_8_FAT_SIGNED, + EAGLERCRAFT_1_5_NEW_OFFLINE, EAGLERCRAFT_1_5_OLD_OFFLINE, EAGLERCRAFT_BETA_B1_3_OFFLINE, PEYTONPLAYZ585_ALPHA_BETA, + PEYTONPLAYZ585_INDEV, EXPORTED_STANDARD_OFFLINE, EAGLERCRAFT_EPK_FILE; public static EnumOfflineParseType inferFromClientFormat(EnumClientLaunchType etr) { - switch(etr) { + switch (etr) { case STANDARD_OFFLINE_V1: return EXPORTED_STANDARD_OFFLINE; case EAGLERX_V1: diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/FatOfflineDownloadFactory.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/FatOfflineDownloadFactory.java index ec584eaf..ff818cad 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/FatOfflineDownloadFactory.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/FatOfflineDownloadFactory.java @@ -24,53 +24,81 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FatOfflineDownloadFactory { private static final Logger logger = LogManager.getLogger("FatOfflineDownloadFactory"); + private static boolean cacheLoad(Map loadedBlobs, + Map> loaders, EaglercraftUUID uuid) { + if (!loadedBlobs.containsKey(uuid)) { + Supplier getter = loaders.get(uuid); + if (getter != null) { + byte[] dat = getter.get(); + if (dat != null) { + loadedBlobs.put(uuid, dat); + return true; + } else { + return false; + } + } else { + return false; + } + } else { + return true; + } + } + + private static void doUpdateMessage(IProgressMsgCallback cb, String str) { + logger.info(str); + cb.updateMessage(str); + } + public static void downloadOffline(List lst, IProgressMsgCallback cb) { Map loadedBlobs = new HashMap<>(); JSONArray manifestClientDatas = new JSONArray(); Set manifestClientDatasSet = new HashSet<>(); JSONArray manifestLaunchDatas = new JSONArray(); Set manifestLaunchDatasSet = new HashSet<>(); - for(BootableClientEntry etr : lst) { + for (BootableClientEntry etr : lst) { ClientDataEntry clientData = etr.bootAdapter.getClientDataEntry(); LaunchConfigEntry launchConf = etr.bootAdapter.getLaunchConfigEntry(); - if(launchConf.uuid.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { + if (launchConf.uuid.equals(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN)) { logger.warn("Cannot export origin launch configuration to fat offline!"); continue; } - if(manifestLaunchDatasSet.add(launchConf.uuid)) { + if (manifestLaunchDatasSet.add(launchConf.uuid)) { JSONObject obj = new JSONObject(); launchConf.writeJSON(obj); manifestLaunchDatas.put(obj); - if(!clientData.uuid.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN) && manifestClientDatasSet.add(clientData.uuid)) { + if (!clientData.uuid.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN) + && manifestClientDatasSet.add(clientData.uuid)) { obj = new JSONObject(); clientData.writeJSON(obj); manifestClientDatas.put(obj); Map> loaders = etr.bootAdapter.getBlobLoaders(); - for(EaglercraftUUID uuid : clientData.getReferencedBlobs()) { + for (EaglercraftUUID uuid : clientData.getReferencedBlobs()) { doUpdateMessage(cb, "Resolving data for \"" + launchConf.displayName + "\" (" + uuid + ")"); - if(!cacheLoad(loadedBlobs, loaders, uuid)) { - throw new NullPointerException("Blob for configuration \"" + launchConf.displayName + "\" is missing: " + uuid); + if (!cacheLoad(loadedBlobs, loaders, uuid)) { + throw new NullPointerException( + "Blob for configuration \"" + launchConf.displayName + "\" is missing: " + uuid); } } } - }else { + } else { logger.warn("Skipping duplicate launch config uuid: {}", launchConf.uuid); } } @@ -80,10 +108,10 @@ public class FatOfflineDownloadFactory { String manifestStr = manifest.toString().replace(StringUtils.reverse(">elyts/<"), "<_style>"); boolean isSigned = BootMenuEntryPoint.isSignedClient(); String template; - if(isSigned) { + if (isSigned) { doUpdateMessage(cb, "Loading offline_template_eaglercraftX_1_8_fat_signed.html"); template = OfflineDownloadFactory.loadTemplate("offline_template_eaglercraftX_1_8_fat_signed.html"); - }else { + } else { doUpdateMessage(cb, "Loading offline_template_eaglercraftX_1_8_fat_offline.html"); template = OfflineDownloadFactory.loadTemplate("offline_template_eaglercraftX_1_8_fat_offline.html"); } @@ -101,41 +129,45 @@ public class FatOfflineDownloadFactory { null, null, optsStr, false)).writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); int relayIdCount = RelayRandomizeHelper.countRelayMacro(optsStr); - if(relayIdCount > 0) { + if (relayIdCount > 0) { optsStr = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(optsStr); } template = template.replace("${relayId_max}", Integer.toString(relayIdCount)); template = template.replace("${launch_opts}", optsStr); - if(isSigned) { + if (isSigned) { doUpdateMessage(cb, "Retrieving origin client signature and payload"); - template = template.replace("${client_signature}", Base64.encodeBase64String(BootMenuEntryPoint.getSignedClientSignature())); - template = template.replace("${client_bundle}", Base64.encodeBase64String(BootMenuEntryPoint.getSignedClientBundle())); - }else { + template = template.replace("${client_signature}", + Base64.encodeBase64String(BootMenuEntryPoint.getSignedClientSignature())); + template = template.replace("${client_bundle}", + Base64.encodeBase64String(BootMenuEntryPoint.getSignedClientBundle())); + } else { doUpdateMessage(cb, "Retrieving origin client classes.js"); byte[] classesJS = BootMenuEntryPoint.getUnsignedClientClassesJS(); - if(classesJS == null) { + if (classesJS == null) { throw new NullPointerException("Could not load classes.js!"); } - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(OfflineDownloadFactory.removeUseStrict(classesJS), StandardCharsets.UTF_8)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(OfflineDownloadFactory.removeUseStrict(classesJS), StandardCharsets.UTF_8)); UnsignedClientEPKLoader epkLoader = BootMenuEntryPoint.getUnsignedClientAssetsEPK(); String assetsEPKVal; int epkNum = epkLoader.list.size(); - if(epkNum > 1 || !StringUtils.isEmpty(epkLoader.list.get(0).extractTo)) { + if (epkNum > 1 || !StringUtils.isEmpty(epkLoader.list.get(0).extractTo)) { StringBuilder assetsEPKBuilder = new StringBuilder("[ "); - for(int i = 0; i < epkNum; ++i) { + for (int i = 0; i < epkNum; ++i) { EPKDataEntry epk = epkLoader.list.get(i); doUpdateMessage(cb, "Resolving assets.epk (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"); Supplier epkDataGetter = epkLoader.loaders.get(epk.dataUUID); byte[] epkData = null; - if(epkDataGetter != null) { + if (epkDataGetter != null) { epkData = epkDataGetter.get(); } - if(epkData == null) { - String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"; + if (epkData == null) { + String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /" + epk.extractTo + + ")"; logger.error(msg); throw new NullPointerException(msg); } - if(i > 0) { + if (i > 0) { assetsEPKBuilder.append(", "); } assetsEPKBuilder.append("{ url: \"data:application/octet-stream;base64,"); @@ -146,62 +178,40 @@ public class FatOfflineDownloadFactory { } assetsEPKBuilder.append(" ]"); assetsEPKVal = assetsEPKBuilder.toString(); - }else { + } else { EPKDataEntry epk = epkLoader.list.get(0); doUpdateMessage(cb, "Resolving assets.epk (" + epk.dataUUID + ", path: /)"); Supplier epkDataGetter = epkLoader.loaders.get(epk.dataUUID); byte[] epkData = null; - if(epkDataGetter != null) { + if (epkDataGetter != null) { epkData = epkDataGetter.get(); } - if(epkData == null) { + if (epkData == null) { String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /)"; logger.error(msg); throw new NullPointerException(msg); } assetsEPKVal = "\"data:application/octet-stream;base64," + Base64.encodeBase64String(epkData) + "\""; } - + template = template.replace(StringUtils.reverse("}kpe_stessa{$"), assetsEPKVal); } doUpdateMessage(cb, "Embedding additional clients as base64"); StringBuilder fatOfflineDataBuilder = new StringBuilder(); - fatOfflineDataBuilder.append(StringUtils.reverse(">\"1v_tsefinam_enilffOtaFrelgae_\"=di \"tfarcrelgae\"=epyt elyts<")); + fatOfflineDataBuilder + .append(StringUtils.reverse(">\"1v_tsefinam_enilffOtaFrelgae_\"=di \"tfarcrelgae\"=epyt elyts<")); fatOfflineDataBuilder.append(manifestStr); fatOfflineDataBuilder.append(StringUtils.reverse("\n>elyts/<")); - for(Entry etr : loadedBlobs.entrySet()) { - fatOfflineDataBuilder.append(StringUtils.reverse("_enilffOtaFrelgae_\"=di \"tfarcrelgae\"=epyt elyts<") + etr.getKey().toString() + "\">"); + for (Entry etr : loadedBlobs.entrySet()) { + fatOfflineDataBuilder.append(StringUtils.reverse("_enilffOtaFrelgae_\"=di \"tfarcrelgae\"=epyt elyts<") + + etr.getKey().toString() + "\">"); fatOfflineDataBuilder.append(Base64.encodeBase64String(etr.getValue())); fatOfflineDataBuilder.append(StringUtils.reverse("\n>elyts/<")); } template = template.replace(StringUtils.reverse("}atad_enilffo_taf{$"), fatOfflineDataBuilder.toString()); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName("EaglercraftX_1.8_Fat_Offline_Download.html", template.getBytes(StandardCharsets.UTF_8)); - } - - private static void doUpdateMessage(IProgressMsgCallback cb, String str) { - logger.info(str); - cb.updateMessage(str); - } - - private static boolean cacheLoad(Map loadedBlobs, - Map> loaders, EaglercraftUUID uuid) { - if(!loadedBlobs.containsKey(uuid)) { - Supplier getter = loaders.get(uuid); - if(getter != null) { - byte[] dat = getter.get(); - if(dat != null) { - loadedBlobs.put(uuid, dat); - return true; - }else { - return false; - } - }else { - return false; - } - }else { - return true; - } + EagRuntime.downloadFileWithName("EaglercraftX_1.8_Fat_Offline_Download.html", + template.getBytes(StandardCharsets.UTF_8)); } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IBootMenuConfigAdapter.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IBootMenuConfigAdapter.java index 785a9aa0..745e9940 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IBootMenuConfigAdapter.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IBootMenuConfigAdapter.java @@ -4,27 +4,28 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMClientConfigAdapter; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IBootMenuConfigAdapter { - public static final IBootMenuConfigAdapter instance = (IBootMenuConfigAdapter)TeaVMClientConfigAdapter.instance; + public static final IBootMenuConfigAdapter instance = (IBootMenuConfigAdapter) TeaVMClientConfigAdapter.instance; boolean isAllowBootMenu(); - boolean isShowBootMenuOnLaunch(); - boolean isBootMenuBlocksUnsignedClients(); + boolean isShowBootMenuOnLaunch(); + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IProgressMsgCallback.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IProgressMsgCallback.java index fa206ce5..6189c7c2 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IProgressMsgCallback.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/IProgressMsgCallback.java @@ -2,18 +2,19 @@ package net.lax1dude.eaglercraft.v1_8.boot_menu.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface IProgressMsgCallback { diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/InputPopupController.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/InputPopupController.java index 050194b3..d57c5460 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/InputPopupController.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/InputPopupController.java @@ -5,34 +5,105 @@ import org.teavm.jso.dom.html.HTMLInputElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class InputPopupController { public final HTMLInputElement inputField; public final boolean intValue; public final HTMLElement cancelButton; - public final HTMLElement doneButton; + public final HTMLElement doneButton; protected boolean cancelSelected = true; - public InputPopupController(HTMLInputElement inputField, boolean intValue, HTMLElement cancelButton, HTMLElement doneButton) { + public InputPopupController(HTMLInputElement inputField, boolean intValue, HTMLElement cancelButton, + HTMLElement doneButton) { this.inputField = inputField; this.intValue = intValue; this.cancelButton = cancelButton; this.doneButton = doneButton; } + public void handleKeyDown(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { + setCancelSelected(false); + } else if (keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { + setCancelSelected(true); + } else if (keyCode == KeyCodes.DOM_KEY_ENTER) { + handleOnChanged(inputField); + onSave(inputField); + } else if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { + onCancel(); + } + } + + public void handleOnChanged(HTMLElement htmlElement) { + if (inputField == htmlElement) { + if (intValue) { + int i; + try { + i = Integer.parseInt(inputField.getValue().trim()); + } catch (NumberFormatException ex) { + inputField.setValue("0"); + return; + } + if (i < 0) { + inputField.setValue("0"); + } + } else { + inputField.setValue(inputField.getValue().trim()); + } + } + } + + public void handleOnClick(HTMLElement htmlElement) { + if (doneButton == htmlElement) { + onSave(inputField); + } else if (cancelButton == htmlElement) { + onCancel(); + } + } + + public void handleOnMouseOver(HTMLElement htmlElement) { + if (doneButton == htmlElement) { + setCancelSelected(false); + } else if (cancelButton == htmlElement) { + setCancelSelected(true); + } + } + + protected abstract void onCancel(); + + protected abstract void onSave(HTMLInputElement inputField); + + public void setCancelSelected(boolean sel) { + if (sel) { + if (!cancelSelected) { + cancelSelected = true; + cancelButton.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); + doneButton.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); + } + } else { + if (cancelSelected) { + cancelSelected = false; + doneButton.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); + cancelButton.getClassList() + .remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); + } + } + } + public void setup(String initialValue) { cancelSelected = true; inputField.setValue(initialValue); @@ -40,72 +111,4 @@ public abstract class InputPopupController { doneButton.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); } - public void handleOnChanged(HTMLElement htmlElement) { - if(inputField == htmlElement) { - if(intValue) { - int i; - try { - i = Integer.parseInt(inputField.getValue().trim()); - }catch(NumberFormatException ex) { - inputField.setValue("0"); - return; - } - if(i < 0) { - inputField.setValue("0"); - } - }else { - inputField.setValue(inputField.getValue().trim()); - } - } - } - - public void handleOnClick(HTMLElement htmlElement) { - if(doneButton == htmlElement) { - onSave(inputField); - }else if(cancelButton == htmlElement) { - onCancel(); - } - } - - public void handleOnMouseOver(HTMLElement htmlElement) { - if(doneButton == htmlElement) { - setCancelSelected(false); - }else if(cancelButton == htmlElement) { - setCancelSelected(true); - } - } - - public void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ARROW_RIGHT) { - setCancelSelected(false); - }else if(keyCode == KeyCodes.DOM_KEY_ARROW_LEFT) { - setCancelSelected(true); - }else if(keyCode == KeyCodes.DOM_KEY_ENTER) { - handleOnChanged(inputField); - onSave(inputField); - }else if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { - onCancel(); - } - } - - public void setCancelSelected(boolean sel) { - if(sel) { - if(!cancelSelected) { - cancelSelected = true; - cancelButton.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); - doneButton.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); - } - }else { - if(cancelSelected) { - cancelSelected = false; - doneButton.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); - cancelButton.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "popup_input_opt_selected"); - } - } - } - - protected abstract void onSave(HTMLInputElement inputField); - - protected abstract void onCancel(); - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/KeyCodes.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/KeyCodes.java index c7d33efe..da765b44 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/KeyCodes.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/KeyCodes.java @@ -2,18 +2,19 @@ package net.lax1dude.eaglercraft.v1_8.boot_menu.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class KeyCodes { diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/LaunchConfigEntry.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/LaunchConfigEntry.java index de04f67a..23ef6787 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/LaunchConfigEntry.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/LaunchConfigEntry.java @@ -6,18 +6,19 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LaunchConfigEntry { @@ -57,18 +58,19 @@ public class LaunchConfigEntry { public LaunchConfigEntry(EaglercraftUUID uuid, JSONObject jsonObject) { this.uuid = uuid; EaglercraftUUID sanityUUID = EaglercraftUUID.fromString(jsonObject.getString("uuid")); - if(!sanityUUID.equals(uuid)) { - throw new IllegalArgumentException("The file's name UUID does not equal the UUID string found in the file!"); + if (!sanityUUID.equals(uuid)) { + throw new IllegalArgumentException( + "The file's name UUID does not equal the UUID string found in the file!"); } int typeId = jsonObject.getInt("type"); type = EnumClientLaunchType.getById(typeId); - if(type == null) { + if (type == null) { throw new IllegalArgumentException("Unknown launch configuration type " + typeId + "!"); } clientDataUUID = EaglercraftUUID.fromString(jsonObject.getString("dataUUID")); displayName = jsonObject.getString("displayName"); clearCookiesBeforeLaunch = jsonObject.getBoolean("clearCookies"); - switch(type) { + switch (type) { case STANDARD_OFFLINE_V1: launchOpts = jsonObject.getString("launchOpts"); launchOptsVar = jsonObject.getString("launchOptsVar"); @@ -91,18 +93,28 @@ public class LaunchConfigEntry { break; case PEYTON_V1: break; - default: //? + default: // ? break; } } + public LaunchConfigEntry fork() { + return new LaunchConfigEntry(uuid, clientDataUUID, displayName, type, joinServer, launchOptsVar, + launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiesBeforeLaunch); + } + + public LaunchConfigEntry rotateUUIDs(EaglercraftUUID rotatedLaunchUUID, EaglercraftUUID rotatedClientUUID) { + return new LaunchConfigEntry(rotatedLaunchUUID, rotatedClientUUID, displayName, type, joinServer, launchOptsVar, + launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiesBeforeLaunch); + } + public void writeJSON(JSONObject jsonObject) { jsonObject.put("uuid", uuid.toString()); jsonObject.put("type", type.id); jsonObject.put("dataUUID", clientDataUUID.toString()); jsonObject.put("displayName", displayName); jsonObject.put("clearCookies", clearCookiesBeforeLaunch); - switch(type) { + switch (type) { case STANDARD_OFFLINE_V1: jsonObject.put("launchOpts", launchOpts != null ? launchOpts : "{ }"); jsonObject.put("launchOptsVar", launchOptsVar != null ? launchOptsVar : "eaglercraftXOpts"); @@ -125,19 +137,9 @@ public class LaunchConfigEntry { break; case PEYTON_V1: break; - default: //? + default: // ? break; } } - public LaunchConfigEntry rotateUUIDs(EaglercraftUUID rotatedLaunchUUID, EaglercraftUUID rotatedClientUUID) { - return new LaunchConfigEntry(rotatedLaunchUUID, rotatedClientUUID, displayName, type, joinServer, launchOptsVar, - launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiesBeforeLaunch); - } - - public LaunchConfigEntry fork() { - return new LaunchConfigEntry(uuid, clientDataUUID, displayName, type, joinServer, launchOptsVar, - launchOptsAssetsURIVar, launchOptsContainerVar, mainFunction, launchOpts, clearCookiesBeforeLaunch); - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateConfirmation.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateConfirmation.java index 77762a16..df6b0516 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateConfirmation.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateConfirmation.java @@ -9,31 +9,31 @@ import com.google.common.collect.Collections2; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuPopupStateConfirmation extends MenuState { public static enum EnumYesNoHelper { - YES("Yes"), - NO("No"); - + YES("Yes"), NO("No"); + private final String str; - + private EnumYesNoHelper(String str) { this.str = str; } - + @Override public String toString() { return str; @@ -72,6 +72,11 @@ public abstract class MenuPopupStateConfirmation extends MenuState { }; } + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { popupController.setup(); @@ -80,6 +85,11 @@ public abstract class MenuPopupStateConfirmation extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.popup); } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { popupController.destroy(); @@ -87,55 +97,45 @@ public abstract class MenuPopupStateConfirmation extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { BootMenuMain.currentState.changePopupState(null); return; } popupController.handleKeyDown(keyCode); } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { popupController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - - } - @Override - protected void update() { - } protected abstract void selectCallback(E enumValue); + @Override + protected void update() { + + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditInteger.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditInteger.java index 67e560a2..071a8e71 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditInteger.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditInteger.java @@ -5,18 +5,19 @@ import org.teavm.jso.dom.html.HTMLInputElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuPopupStateEditInteger extends MenuState { @@ -25,29 +26,35 @@ public abstract class MenuPopupStateEditInteger extends MenuState { protected final int defaultValue; public MenuPopupStateEditInteger(String menuTitle, int defaultValue) { - this.inputPopupController = new InputPopupController((HTMLInputElement) BootMenuMain.bootMenuDOM.popup_input_val, - true, BootMenuMain.bootMenuDOM.popup_input_opt_cancel, BootMenuMain.bootMenuDOM.popup_input_opt_done) { + this.inputPopupController = new InputPopupController( + (HTMLInputElement) BootMenuMain.bootMenuDOM.popup_input_val, true, + BootMenuMain.bootMenuDOM.popup_input_opt_cancel, BootMenuMain.bootMenuDOM.popup_input_opt_done) { - @Override - protected void onSave(HTMLInputElement inputField) { - int i = 0; - try { - i = Integer.parseInt(inputField.getValue().trim()); - }catch(NumberFormatException ex) { - } - MenuPopupStateEditInteger.this.onSave(i); - } + @Override + protected void onCancel() { + MenuPopupStateEditInteger.this.onCancel(); + } - @Override - protected void onCancel() { - MenuPopupStateEditInteger.this.onCancel(); - } + @Override + protected void onSave(HTMLInputElement inputField) { + int i = 0; + try { + i = Integer.parseInt(inputField.getValue().trim()); + } catch (NumberFormatException ex) { + } + MenuPopupStateEditInteger.this.onSave(i); + } }; this.menuTitle = menuTitle; this.defaultValue = defaultValue; } + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { BootMenuMain.bootMenuDOM.popup_input_title.setInnerText(menuTitle); @@ -56,35 +63,30 @@ public abstract class MenuPopupStateEditInteger extends MenuState { inputPopupController.setup(Integer.toString(defaultValue)); } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup_view_input); BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { inputPopupController.handleKeyDown(keyCode); } @Override - protected void handleKeyUp(int keyCode) { - + protected void handleKeyRepeat(int keyCode) { + } @Override - protected void handleKeyRepeat(int keyCode) { - + protected void handleKeyUp(int keyCode) { + } @Override @@ -102,13 +104,13 @@ public abstract class MenuPopupStateEditInteger extends MenuState { inputPopupController.handleOnMouseOver(htmlElement); } - @Override - protected void update() { - - } + protected abstract void onCancel(); protected abstract void onSave(int i); - protected abstract void onCancel(); + @Override + protected void update() { + + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditString.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditString.java index 7f3e37c7..3a7eff64 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditString.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateEditString.java @@ -5,18 +5,19 @@ import org.teavm.jso.dom.html.HTMLInputElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuPopupStateEditString extends MenuState { @@ -25,24 +26,30 @@ public abstract class MenuPopupStateEditString extends MenuState { protected final String defaultValue; public MenuPopupStateEditString(String menuTitle, String defaultValue) { - this.inputPopupController = new InputPopupController((HTMLInputElement) BootMenuMain.bootMenuDOM.popup_input_val, - false, BootMenuMain.bootMenuDOM.popup_input_opt_cancel, BootMenuMain.bootMenuDOM.popup_input_opt_done) { + this.inputPopupController = new InputPopupController( + (HTMLInputElement) BootMenuMain.bootMenuDOM.popup_input_val, false, + BootMenuMain.bootMenuDOM.popup_input_opt_cancel, BootMenuMain.bootMenuDOM.popup_input_opt_done) { - @Override - protected void onSave(HTMLInputElement inputField) { - MenuPopupStateEditString.this.onSave(inputField.getValue().trim()); - } + @Override + protected void onCancel() { + MenuPopupStateEditString.this.onCancel(); + } - @Override - protected void onCancel() { - MenuPopupStateEditString.this.onCancel(); - } + @Override + protected void onSave(HTMLInputElement inputField) { + MenuPopupStateEditString.this.onSave(inputField.getValue().trim()); + } }; this.menuTitle = menuTitle; this.defaultValue = defaultValue; } + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { BootMenuMain.bootMenuDOM.popup_input_title.setInnerText(menuTitle); @@ -51,35 +58,30 @@ public abstract class MenuPopupStateEditString extends MenuState { inputPopupController.setup(defaultValue); } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup_view_input); BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { inputPopupController.handleKeyDown(keyCode); } @Override - protected void handleKeyUp(int keyCode) { - + protected void handleKeyRepeat(int keyCode) { + } @Override - protected void handleKeyRepeat(int keyCode) { - + protected void handleKeyUp(int keyCode) { + } @Override @@ -97,13 +99,13 @@ public abstract class MenuPopupStateEditString extends MenuState { inputPopupController.handleOnMouseOver(htmlElement); } - @Override - protected void update() { - - } + protected abstract void onCancel(); protected abstract void onSave(String str); - protected abstract void onCancel(); + @Override + protected void update() { + + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateFileChooser.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateFileChooser.java index d55a3648..c7c9c50a 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateFileChooser.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateFileChooser.java @@ -7,18 +7,19 @@ import net.lax1dude.eaglercraft.v1_8.internal.FileChooserResult; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuPopupStateFileChooser extends MenuState { @@ -34,6 +35,11 @@ public abstract class MenuPopupStateFileChooser extends MenuState { this.ext = ext; } + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { BootMenuMain.bootMenuDOM.popup_confirm_opts.setInnerHTML(""); @@ -44,63 +50,58 @@ public abstract class MenuPopupStateFileChooser extends MenuState { waitingForFile = true; } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup_view_confirm); BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { waitingForFile = false; onResult(null); } } @Override - protected void handleKeyUp(int keyCode) { - + protected void handleKeyRepeat(int keyCode) { + } @Override - protected void handleKeyRepeat(int keyCode) { - + protected void handleKeyUp(int keyCode) { + } @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + } + protected abstract void onResult(FileChooserResult res); + @Override protected void update() { - if(waitingForFile && EagRuntime.fileChooserHasResult()) { + if (waitingForFile && EagRuntime.fileChooserHasResult()) { waitingForFile = false; onResult(EagRuntime.getFileChooserResult()); } } - protected abstract void onResult(FileChooserResult res); - -} \ No newline at end of file +} diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateLoading.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateLoading.java index 084b3751..a14da44a 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateLoading.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateLoading.java @@ -7,18 +7,19 @@ import net.lax1dude.eaglercraft.v1_8.EagUtils; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuPopupStateLoading extends MenuState implements IProgressMsgCallback { @@ -29,70 +30,72 @@ public class MenuPopupStateLoading extends MenuState implements IProgressMsgCall this.text = text; } + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { BootMenuMain.bootMenuDOM.popup_confirm_opts.setInnerHTML(""); - BootMenuMain.bootMenuDOM.popup_confirm_title.setInnerText(!StringUtils.isAllEmpty(msg) ? (text + "\n\n" + msg) : text); + BootMenuMain.bootMenuDOM.popup_confirm_title + .setInnerText(!StringUtils.isAllEmpty(msg) ? (text + "\n\n" + msg) : text); BootMenuDOM.show(BootMenuMain.bootMenuDOM.popup_view_confirm); BootMenuDOM.show(BootMenuMain.bootMenuDOM.popup); } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup_view_confirm); BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { - - } - @Override - protected void handleKeyUp(int keyCode) { - } @Override protected void handleKeyRepeat(int keyCode) { - + + } + + @Override + protected void handleKeyUp(int keyCode) { + } @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + + } + + @Override + protected void update() { + } @Override public void updateMessage(String msg) { this.msg = msg; - BootMenuMain.bootMenuDOM.popup_confirm_title.setInnerText(!StringUtils.isAllEmpty(msg) ? (text + "\n\n" + msg) : text); + BootMenuMain.bootMenuDOM.popup_confirm_title + .setInnerText(!StringUtils.isAllEmpty(msg) ? (text + "\n\n" + msg) : text); EagUtils.sleep(50); } - @Override - protected void update() { - - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateSelection.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateSelection.java index fa02c6d4..4683eee5 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateSelection.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuPopupStateSelection.java @@ -10,18 +10,19 @@ import com.google.common.collect.Collections2; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuPopupStateSelection extends MenuState { @@ -30,13 +31,13 @@ public abstract class MenuPopupStateSelection extends MenuState { protected final String name; protected final E enumValue; - public SelectionItem(E enumValue, String name) { - this.name = name; + public SelectionItem(E enumValue) { + this.name = enumValue.toString(); this.enumValue = enumValue; } - public SelectionItem(E enumValue) { - this.name = enumValue.toString(); + public SelectionItem(E enumValue, String name) { + this.name = name; this.enumValue = enumValue; } @@ -47,21 +48,6 @@ public abstract class MenuPopupStateSelection extends MenuState { } - protected final String title; - protected final List> items; - protected SelectionListController> selectionController; - - public MenuPopupStateSelection(String title, List> items) { - this.title = title; - this.items = items; - this.selectionController = new SelectionListController>(BootMenuMain.bootMenuDOM.popup_selection, items) { - @Override - protected void itemSelected(SelectionItem item) { - MenuPopupStateSelection.this.itemSelected(item.enumValue); - } - }; - } - public static MenuPopupStateSelection createHelper(String title, List items, Consumer selectCallback) { return new MenuPopupStateSelection(title, new ArrayList>(Collections2.transform(items, SelectionItem::new))) { @@ -72,6 +58,28 @@ public abstract class MenuPopupStateSelection extends MenuState { }; } + protected final String title; + protected final List> items; + + protected SelectionListController> selectionController; + + public MenuPopupStateSelection(String title, List> items) { + this.title = title; + this.items = items; + this.selectionController = new SelectionListController>( + BootMenuMain.bootMenuDOM.popup_selection, items) { + @Override + protected void itemSelected(SelectionItem item) { + MenuPopupStateSelection.this.itemSelected(item.enumValue); + } + }; + } + + @Override + protected void enterPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void enterState() { selectionController.setup(); @@ -80,6 +88,11 @@ public abstract class MenuPopupStateSelection extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.popup); } + @Override + protected void exitPopupBlockingState() { + throw new IllegalStateException(); + } + @Override protected void exitState() { selectionController.destroy(); @@ -87,55 +100,45 @@ public abstract class MenuPopupStateSelection extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.popup); } - @Override - protected void enterPopupBlockingState() { - throw new IllegalStateException(); - } - - @Override - protected void exitPopupBlockingState() { - throw new IllegalStateException(); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { BootMenuMain.currentState.changePopupState(null); return; } selectionController.handleKeyDown(keyCode); } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - - } - @Override - protected void update() { - } protected abstract void itemSelected(T item); + @Override + protected void update() { + + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuState.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuState.java index a07f137e..0ae5858c 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuState.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuState.java @@ -4,32 +4,33 @@ import org.teavm.jso.dom.html.HTMLElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuState { protected MenuState currentPopup = null; public void changePopupState(MenuState popup) { - if(popup == null) { - if(currentPopup != null) { + if (popup == null) { + if (currentPopup != null) { currentPopup.exitState(); exitPopupBlockingState(); currentPopup = null; } - }else { - if(currentPopup != null) { + } else { + if (currentPopup != null) { currentPopup.exitState(); } currentPopup = popup; @@ -40,90 +41,90 @@ public abstract class MenuState { public void doEnterState() { enterState(); - if(currentPopup != null) { + if (currentPopup != null) { enterPopupBlockingState(); currentPopup.enterState(); } } public void doExitState() { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.exitState(); exitPopupBlockingState(); } exitState(); } - protected abstract void enterState(); - - protected abstract void exitState(); - - protected abstract void enterPopupBlockingState(); - - protected abstract void exitPopupBlockingState(); - public void doHandleKeyDown(int keyCode) { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doHandleKeyDown(keyCode); - }else { + } else { handleKeyDown(keyCode); } } - public void doHandleKeyUp(int keyCode) { - if(currentPopup != null) { - currentPopup.doHandleKeyUp(keyCode); - }else { - handleKeyUp(keyCode); - } - } - public void doHandleKeyRepeat(int keyCode) { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doHandleKeyRepeat(keyCode); - }else { + } else { handleKeyRepeat(keyCode); } } + public void doHandleKeyUp(int keyCode) { + if (currentPopup != null) { + currentPopup.doHandleKeyUp(keyCode); + } else { + handleKeyUp(keyCode); + } + } + public void doHandleOnChange(HTMLElement element) { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doHandleOnChange(element); - }else { + } else { handleOnChanged(element); } } public void doHandleOnClick(HTMLElement element) { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doHandleOnClick(element); - }else { + } else { handleOnClick(element); } } public void doHandleOnMouseOver(HTMLElement element) { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doHandleOnMouseOver(element); - }else { + } else { handleOnMouseOver(element); } } public void doUpdate() { - if(currentPopup != null) { + if (currentPopup != null) { currentPopup.doUpdate(); - }else { + } else { update(); } } + protected abstract void enterPopupBlockingState(); + + protected abstract void enterState(); + + protected abstract void exitPopupBlockingState(); + + protected abstract void exitState(); + protected abstract void handleKeyDown(int keyCode); - protected abstract void handleKeyUp(int keyCode); - protected abstract void handleKeyRepeat(int keyCode); + protected abstract void handleKeyUp(int keyCode); + protected abstract void handleOnChanged(HTMLElement htmlElement); protected abstract void handleOnClick(HTMLElement htmlElement); diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateBoot.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateBoot.java index ef1925e4..67d7d60f 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateBoot.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateBoot.java @@ -22,23 +22,22 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuStateBoot extends MenuState { - private static final Logger logger = LogManager.getLogger("MenuStateBoot"); - private static class BootItem implements SelectionListController.ListItem, Runnable { private final String name; @@ -63,16 +62,12 @@ public class MenuStateBoot extends MenuState { } - protected SelectionListController selectionController; - private static enum EnumImportExportMenu { - IMPORT_CLIENT("Import Client"), - EXPORT_CLIENT("Export Client"), - EXPORT_OFFLINE_BUNDLE("Export Offline Bundle"), + IMPORT_CLIENT("Import Client"), EXPORT_CLIENT("Export Client"), EXPORT_OFFLINE_BUNDLE("Export Offline Bundle"), CANCEL("Cancel"); - + private final String str; - + private EnumImportExportMenu(String str) { this.str = str; } @@ -84,16 +79,8 @@ public class MenuStateBoot extends MenuState { } - private static final List OPTIONS_NO_BUNDLE = Arrays.asList( - EnumImportExportMenu.IMPORT_CLIENT, EnumImportExportMenu.EXPORT_CLIENT, EnumImportExportMenu.CANCEL); - - private static final List OPTIONS_BUNDLE = Arrays.asList(EnumImportExportMenu.IMPORT_CLIENT, - EnumImportExportMenu.EXPORT_CLIENT, EnumImportExportMenu.EXPORT_OFFLINE_BUNDLE, - EnumImportExportMenu.CANCEL); - private static enum EnumImportModeMenu { - AUTO_DETECT("Auto Detect"), - EAGLERCRAFT_EPK_FILE(".EPK Client Archive"), + AUTO_DETECT("Auto Detect"), EAGLERCRAFT_EPK_FILE(".EPK Client Archive"), EAGLERCRAFTX_1_8_OFFLINE("EaglercraftX 1.8 Offline .HTML"), EAGLERCRAFTX_1_8_SIGNED("EaglercraftX 1.8 Signed .HTML"), EAGLERCRAFTX_1_8_FAT_OFFLINE("EaglercraftX 1.8 Fat Offline .HTML"), @@ -103,11 +90,10 @@ public class MenuStateBoot extends MenuState { EAGLERCRAFT_BETA_B1_3_OFFLINE("Eaglercraft Beta 1.3 Offline .HTML"), PEYTONPLAYZ585_BETA_1_7_3("PeytonPlayz585 Beta 1.7.3 Offline .HTML"), PEYTONPLAYZ585_ALPHA_1_2_6("PeytonPlayz585 Alpha 1.2.6 Offline .HTML"), - PEYTONPLAYZ585_INDEV("PeytonPlayz585 Indev Offline .HTML"), - CANCEL("Cancel"); - + PEYTONPLAYZ585_INDEV("PeytonPlayz585 Indev Offline .HTML"), CANCEL("Cancel"); + private final String str; - + private EnumImportModeMenu(String str) { this.str = str; } @@ -120,40 +106,47 @@ public class MenuStateBoot extends MenuState { } private static enum EnumUnsignedClientAction { - DOWNLOAD_OFFLINE("Download Client"), - DOWNLOAD_EAGLERX_OFFLINE("Download EaglercraftX"), - CANCEL("Cancel"); - + DOWNLOAD_OFFLINE("Download Client"), DOWNLOAD_EAGLERX_OFFLINE("Download EaglercraftX"), CANCEL("Cancel"); + private final String str; - + private EnumUnsignedClientAction(String str) { this.str = str; } - + @Override public String toString() { return str; } } - public static void displayUnsignedError(final MenuState parentState, final Consumer onDownloadOffline, final Runnable onDone) { + private static final Logger logger = LogManager.getLogger("MenuStateBoot"); + + private static final List OPTIONS_NO_BUNDLE = Arrays.asList( + EnumImportExportMenu.IMPORT_CLIENT, EnumImportExportMenu.EXPORT_CLIENT, EnumImportExportMenu.CANCEL); + + private static final List OPTIONS_BUNDLE = Arrays.asList(EnumImportExportMenu.IMPORT_CLIENT, + EnumImportExportMenu.EXPORT_CLIENT, EnumImportExportMenu.EXPORT_OFFLINE_BUNDLE, + EnumImportExportMenu.CANCEL); + + public static void displayUnsignedError(final MenuState parentState, + final Consumer onDownloadOffline, final Runnable onDone) { parentState.changePopupState(new MenuPopupStateConfirmation( "Error: This client does not have a valid signature!\n\nUnsigned clients are disabled on this website", Arrays.asList(EnumUnsignedClientAction.values())) { @Override protected void selectCallback(EnumUnsignedClientAction enumValue) { - switch(enumValue) { + switch (enumValue) { case DOWNLOAD_OFFLINE: MenuPopupStateLoading loadingScreen = new MenuPopupStateLoading("Downloading client..."); parentState.changePopupState(loadingScreen); try { onDownloadOffline.accept(loadingScreen); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Failed to invoke download offline function!"); logger.error(t); parentState.changePopupState(new MenuPopupStateConfirmation( - "Error: Failed to download!\n\n" + t.toString(), - Arrays.asList("OK")) { + "Error: Failed to download!\n\n" + t.toString(), Arrays.asList("OK")) { @Override protected void selectCallback(String enumValue) { onDone.run(); @@ -168,12 +161,11 @@ public class MenuStateBoot extends MenuState { parentState.changePopupState(loadingScreen); try { BootableClientEntry.getOriginClient().bootAdapter.downloadOffline(loadingScreen); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Failed to invoke download offline function!"); logger.error(t); parentState.changePopupState(new MenuPopupStateConfirmation( - "Error: Failed to download!\n\n" + t.toString(), - Arrays.asList("OK")) { + "Error: Failed to download!\n\n" + t.toString(), Arrays.asList("OK")) { @Override protected void selectCallback(String enumValue) { onDone.run(); @@ -192,6 +184,8 @@ public class MenuStateBoot extends MenuState { }); } + protected SelectionListController selectionController; + protected int bootCountDown = 0; protected int bootCountDownCur = 0; protected long bootCountDownStart = 0l; @@ -201,243 +195,337 @@ public class MenuStateBoot extends MenuState { this.doCountDown = doCountDown; List list = new ArrayList<>(); final List bootableClients = BootableClientEntry.enumerateBootableClients(); - if(BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, bootableClients)) { + if (BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, + bootableClients)) { BootMenuMain.bootMenuDataManager.writeManifest(); } - for(int i = 0, l = bootableClients.size(); i < l; ++i) { + for (int i = 0, l = bootableClients.size(); i < l; ++i) { final BootableClientEntry etr = bootableClients.get(i); - list.add(new BootItem(etr.bootAdapter.getDisplayName(), - (itm) -> { - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Booting: '" + itm.name + "'..."); - MenuStateBoot.this.changePopupState(popupState); - BootMenuMain.runLaterMS(() -> { - try { - etr.bootAdapter.bootClient(popupState); - }catch(UnsignedBootException ex) { - displayUnsignedError(MenuStateBoot.this, etr.bootAdapter::downloadOffline, () -> { - MenuStateBoot.this.changePopupState(null); - }); - return; - }catch(Throwable t) { - logger.error("Failed to boot client!"); - logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Failed to boot client!\n\n" + t.toString(), - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateBoot.this.changePopupState(null); - } - }); - return; + list.add(new BootItem(etr.bootAdapter.getDisplayName(), (itm) -> { + MenuPopupStateLoading popupState = new MenuPopupStateLoading("Booting: '" + itm.name + "'..."); + MenuStateBoot.this.changePopupState(popupState); + BootMenuMain.runLaterMS(() -> { + try { + etr.bootAdapter.bootClient(popupState); + } catch (UnsignedBootException ex) { + displayUnsignedError(MenuStateBoot.this, etr.bootAdapter::downloadOffline, () -> { + MenuStateBoot.this.changePopupState(null); + }); + return; + } catch (Throwable t) { + logger.error("Failed to boot client!"); + logger.error(t); + changePopupState(new MenuPopupStateConfirmation( + "Error: Failed to boot client!\n\n" + t.toString(), Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateBoot.this.changePopupState(null); } - }, 250); - }, (itm) -> { - ClientDataEntry clientData = etr.bootAdapter.getClientDataEntry(); - LaunchConfigEntry launchConf = etr.bootAdapter.getLaunchConfigEntry(); - if(clientData != null && launchConf != null) { - BootMenuMain.changeState(new MenuStateEditingLaunch(MenuStateBoot.this, launchConf.fork(), - clientData, false, etr.bootAdapter.getBlobLoaders())); - } - })); + }); + return; + } + }, 250); + }, (itm) -> { + ClientDataEntry clientData = etr.bootAdapter.getClientDataEntry(); + LaunchConfigEntry launchConf = etr.bootAdapter.getLaunchConfigEntry(); + if (clientData != null && launchConf != null) { + BootMenuMain.changeState(new MenuStateEditingLaunch(MenuStateBoot.this, launchConf.fork(), + clientData, false, etr.bootAdapter.getBlobLoaders())); + } + })); } - list.add(new BootItem("Import/Export", - (itm) -> { - MenuStateBoot.this.changePopupState(MenuPopupStateSelection.createHelper("What do you wanna do?", - bootableClients.size() > 1 ? OPTIONS_BUNDLE : OPTIONS_NO_BUNDLE, (enumValue) -> { - switch(enumValue) { - case IMPORT_CLIENT: - MenuStateBoot.this.changePopupState(MenuPopupStateSelection.createHelper("Select the format of the client:", + list.add(new BootItem("Import/Export", (itm) -> { + MenuStateBoot.this.changePopupState(MenuPopupStateSelection.createHelper("What do you wanna do?", + bootableClients.size() > 1 ? OPTIONS_BUNDLE : OPTIONS_NO_BUNDLE, (enumValue) -> { + switch (enumValue) { + case IMPORT_CLIENT: + MenuStateBoot.this.changePopupState( + MenuPopupStateSelection.createHelper("Select the format of the client:", Arrays.asList(EnumImportModeMenu.values()), (enumValue2) -> { EnumOfflineParseType parseType = null; - if(enumValue2 == EnumImportModeMenu.CANCEL) { + if (enumValue2 == EnumImportModeMenu.CANCEL) { MenuStateBoot.this.changePopupState(null); return; - }else if(enumValue2 != EnumImportModeMenu.AUTO_DETECT) { - switch(enumValue2) { - case EAGLERCRAFTX_1_8_OFFLINE: parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; break; - case EAGLERCRAFTX_1_8_SIGNED: parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; break; - case EAGLERCRAFTX_1_8_FAT_OFFLINE: parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_OFFLINE; break; - case EAGLERCRAFTX_1_8_FAT_SIGNED: parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_SIGNED; break; - case EAGLERCRAFT_1_5_NEW_OFFLINE: parseType = EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; break; - case EAGLERCRAFT_1_5_OLD_OFFLINE: parseType = EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; break; - case EAGLERCRAFT_BETA_B1_3_OFFLINE: parseType = EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; break; - case PEYTONPLAYZ585_BETA_1_7_3: parseType = EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; break; - case PEYTONPLAYZ585_ALPHA_1_2_6: parseType = EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; break; - case PEYTONPLAYZ585_INDEV: parseType = EnumOfflineParseType.PEYTONPLAYZ585_INDEV; break; - case EAGLERCRAFT_EPK_FILE: parseType = EnumOfflineParseType.EAGLERCRAFT_EPK_FILE; break; + } else if (enumValue2 != EnumImportModeMenu.AUTO_DETECT) { + switch (enumValue2) { + case EAGLERCRAFTX_1_8_OFFLINE: + parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; + break; + case EAGLERCRAFTX_1_8_SIGNED: + parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; + break; + case EAGLERCRAFTX_1_8_FAT_OFFLINE: + parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_OFFLINE; + break; + case EAGLERCRAFTX_1_8_FAT_SIGNED: + parseType = EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_SIGNED; + break; + case EAGLERCRAFT_1_5_NEW_OFFLINE: + parseType = EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; + break; + case EAGLERCRAFT_1_5_OLD_OFFLINE: + parseType = EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; + break; + case EAGLERCRAFT_BETA_B1_3_OFFLINE: + parseType = EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; + break; + case PEYTONPLAYZ585_BETA_1_7_3: + parseType = EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; + break; + case PEYTONPLAYZ585_ALPHA_1_2_6: + parseType = EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; + break; + case PEYTONPLAYZ585_INDEV: + parseType = EnumOfflineParseType.PEYTONPLAYZ585_INDEV; + break; + case EAGLERCRAFT_EPK_FILE: + parseType = EnumOfflineParseType.EAGLERCRAFT_EPK_FILE; + break; default: MenuStateBoot.this.changePopupState(null); return; } } - String mime = parseType == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE ? null : "text/html"; - String ext = parseType == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE ? "epk" : "html"; + String mime = parseType == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE + ? null + : "text/html"; + String ext = parseType == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE + ? "epk" + : "html"; final EnumOfflineParseType parseTypeF = parseType; - MenuStateBoot.this.changePopupState(new MenuPopupStateFileChooser("Importing client...", mime, ext) { + MenuStateBoot.this.changePopupState(new MenuPopupStateFileChooser( + "Importing client...", mime, ext) { @Override protected void onResult(FileChooserResult res) { - if(res != null) { - MenuPopupStateLoading loadingScreen = new MenuPopupStateLoading("Importing client..."); + if (res != null) { + MenuPopupStateLoading loadingScreen = new MenuPopupStateLoading( + "Importing client..."); MenuStateBoot.this.changePopupState(loadingScreen); EagUtils.sleep(50); - String offlineData = new String(res.fileData, StandardCharsets.UTF_8).replace("\r\n", "\n"); + String offlineData = new String(res.fileData, + StandardCharsets.UTF_8).replace("\r\n", "\n"); EnumOfflineParseType parseType2 = parseTypeF; - if(parseType2 == null) { + if (parseType2 == null) { loadingScreen.updateMessage("Detecting type..."); try { - parseType2 = OfflineDownloadParser.detectOfflineType(offlineData); - if(parseType2 == null) { - throw new IllegalStateException("Failed to detect offline download type!"); + parseType2 = OfflineDownloadParser + .detectOfflineType(offlineData); + if (parseType2 == null) { + throw new IllegalStateException( + "Failed to detect offline download type!"); } - }catch(Throwable t) { - MenuStateBoot.this.changePopupState(new MenuPopupStateConfirmation( - t.toString(), Arrays.asList(EnumImportModeMenu.CANCEL)) { - @Override - protected void selectCallback(EnumImportModeMenu enumValue) { - MenuStateBoot.this.changePopupState(null); - return; - } - }); + } catch (Throwable t) { + MenuStateBoot.this.changePopupState( + new MenuPopupStateConfirmation( + t.toString(), Arrays.asList( + EnumImportModeMenu.CANCEL)) { + @Override + protected void selectCallback( + EnumImportModeMenu enumValue) { + MenuStateBoot.this + .changePopupState(null); + return; + } + }); return; } } loadingScreen.updateMessage("Parsing file..."); List parsedOfflines; try { - if(parseType2 == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE) { - parsedOfflines = EPKClientParser.parseEPKClient(res.fileData); - }else { - parsedOfflines = OfflineDownloadParser.parseOffline(parseType2, offlineData); + if (parseType2 == EnumOfflineParseType.EAGLERCRAFT_EPK_FILE) { + parsedOfflines = EPKClientParser + .parseEPKClient(res.fileData); + } else { + parsedOfflines = OfflineDownloadParser + .parseOffline(parseType2, offlineData); } - if(parsedOfflines == null || parsedOfflines.size() == 0) { - throw new IllegalStateException("Failed to parse the file as \"" + parseType2 + "\"!"); + if (parsedOfflines == null + || parsedOfflines.size() == 0) { + throw new IllegalStateException( + "Failed to parse the file as \"" + + parseType2 + "\"!"); } - }catch(Throwable t) { - MenuStateBoot.this.changePopupState(new MenuPopupStateConfirmation( - t.toString(), Arrays.asList(EnumImportModeMenu.CANCEL)) { - @Override - protected void selectCallback(EnumImportModeMenu enumValue) { - MenuStateBoot.this.changePopupState(null); - } - }); + } catch (Throwable t) { + MenuStateBoot.this.changePopupState( + new MenuPopupStateConfirmation( + t.toString(), Arrays.asList( + EnumImportModeMenu.CANCEL)) { + @Override + protected void selectCallback( + EnumImportModeMenu enumValue) { + MenuStateBoot.this + .changePopupState(null); + } + }); return; } - if(parsedOfflines.size() == 1) { + if (parsedOfflines.size() == 1) { ParsedOfflineAdapter pp = parsedOfflines.get(0); - if(pp.launchData == null) { - List templates = BootMenuMain.bootMenuMetadata.getTemplatesForParseType(pp.parseType); - if(templates.size() == 0) { - throw new IllegalStateException("Missing default launch type for parse type: " + pp.parseType); + if (pp.launchData == null) { + List templates = BootMenuMain.bootMenuMetadata + .getTemplatesForParseType(pp.parseType); + if (templates.size() == 0) { + throw new IllegalStateException( + "Missing default launch type for parse type: " + + pp.parseType); } - if(templates.size() == 1) { - EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); - EaglercraftUUID rotatedClientUUID = EaglercraftUUID.randomUUID(); - LaunchConfigEntry launchConfig = templates.get(0).createLaunchConfig(rotatedLaunchUUID, rotatedClientUUID); - ClientDataEntry clientData = pp.clientData.rotateUUID(rotatedClientUUID); + if (templates.size() == 1) { + EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID + .randomUUID(); + EaglercraftUUID rotatedClientUUID = EaglercraftUUID + .randomUUID(); + LaunchConfigEntry launchConfig = templates + .get(0) + .createLaunchConfig(rotatedLaunchUUID, + rotatedClientUUID); + ClientDataEntry clientData = pp.clientData + .rotateUUID(rotatedClientUUID); MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(MenuStateEditingLaunch.createHelper(MenuStateBoot.this, launchConfig, clientData, true, pp.blobs)); - }else { + BootMenuMain.changeState(MenuStateEditingLaunch + .createHelper(MenuStateBoot.this, + launchConfig, clientData, true, + pp.blobs)); + } else { MenuStateBoot.this.changePopupState( MenuPopupStateSelection.createHelper( "Please select the template launch configuration to use:", templates, (template) -> { - if(template != null) { - EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); - EaglercraftUUID rotatedClientUUID = EaglercraftUUID.randomUUID(); - LaunchConfigEntry launchConfig = template.createLaunchConfig(rotatedLaunchUUID, rotatedClientUUID); - ClientDataEntry clientData = pp.clientData.rotateUUID(rotatedClientUUID); - MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(MenuStateEditingLaunch.createHelper(MenuStateBoot.this, launchConfig, clientData, true, pp.blobs)); - }else { - MenuStateBoot.this.changePopupState(null); - } - })); + if (template != null) { + EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID + .randomUUID(); + EaglercraftUUID rotatedClientUUID = EaglercraftUUID + .randomUUID(); + LaunchConfigEntry launchConfig = template + .createLaunchConfig( + rotatedLaunchUUID, + rotatedClientUUID); + ClientDataEntry clientData = pp.clientData + .rotateUUID( + rotatedClientUUID); + MenuStateBoot.this + .changePopupState( + null); + BootMenuMain + .changeState( + MenuStateEditingLaunch + .createHelper( + MenuStateBoot.this, + launchConfig, + clientData, + true, + pp.blobs)); + } else { + MenuStateBoot.this + .changePopupState( + null); + } + })); } - }else { - EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID.randomUUID(); - EaglercraftUUID rotatedClientUUID = EaglercraftUUID.randomUUID(); - LaunchConfigEntry launchConfig = pp.launchData.rotateUUIDs(rotatedLaunchUUID, rotatedClientUUID); - ClientDataEntry clientData = pp.clientData.rotateUUID(rotatedClientUUID); + } else { + EaglercraftUUID rotatedLaunchUUID = EaglercraftUUID + .randomUUID(); + EaglercraftUUID rotatedClientUUID = EaglercraftUUID + .randomUUID(); + LaunchConfigEntry launchConfig = pp.launchData + .rotateUUIDs(rotatedLaunchUUID, + rotatedClientUUID); + ClientDataEntry clientData = pp.clientData + .rotateUUID(rotatedClientUUID); MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(MenuStateEditingLaunch.createHelper(MenuStateBoot.this, launchConfig, clientData, true, pp.blobs)); + BootMenuMain.changeState( + MenuStateEditingLaunch.createHelper( + MenuStateBoot.this, launchConfig, + clientData, true, pp.blobs)); } - }else { + } else { MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(new MenuStateImportMultiSelect(MenuStateBoot.this, parsedOfflines)); + BootMenuMain.changeState(new MenuStateImportMultiSelect( + MenuStateBoot.this, parsedOfflines)); } - }else { + } else { MenuStateBoot.this.changePopupState(null); return; } } }); - + })); - break; - case EXPORT_CLIENT: - final MenuState[] formatSelState = new MenuState[1]; - formatSelState[0] = MenuPopupStateSelection.createHelper("Select the format of the client:", - Arrays.asList(EnumImportModeMenu.AUTO_DETECT, EnumImportModeMenu.EAGLERCRAFT_EPK_FILE, - EnumImportModeMenu.EAGLERCRAFTX_1_8_OFFLINE, - EnumImportModeMenu.EAGLERCRAFTX_1_8_SIGNED, - EnumImportModeMenu.EAGLERCRAFT_1_5_NEW_OFFLINE, - EnumImportModeMenu.EAGLERCRAFT_1_5_OLD_OFFLINE, - EnumImportModeMenu.EAGLERCRAFT_BETA_B1_3_OFFLINE, - EnumImportModeMenu.PEYTONPLAYZ585_BETA_1_7_3, - EnumImportModeMenu.PEYTONPLAYZ585_ALPHA_1_2_6, - EnumImportModeMenu.PEYTONPLAYZ585_INDEV, - EnumImportModeMenu.CANCEL), (enumValue2) -> { - List filteredList; - if(enumValue2 == EnumImportModeMenu.CANCEL) { - MenuStateBoot.this.changePopupState(null); - return; - }else if(enumValue2 == EnumImportModeMenu.AUTO_DETECT || enumValue2 == EnumImportModeMenu.EAGLERCRAFT_EPK_FILE) { - filteredList = bootableClients; - }else { - filteredList = Lists.newArrayList(Collections2.filter(bootableClients, (etr) -> { - switch(enumValue2) { + break; + case EXPORT_CLIENT: + final MenuState[] formatSelState = new MenuState[1]; + formatSelState[0] = MenuPopupStateSelection.createHelper("Select the format of the client:", + Arrays.asList(EnumImportModeMenu.AUTO_DETECT, + EnumImportModeMenu.EAGLERCRAFT_EPK_FILE, + EnumImportModeMenu.EAGLERCRAFTX_1_8_OFFLINE, + EnumImportModeMenu.EAGLERCRAFTX_1_8_SIGNED, + EnumImportModeMenu.EAGLERCRAFT_1_5_NEW_OFFLINE, + EnumImportModeMenu.EAGLERCRAFT_1_5_OLD_OFFLINE, + EnumImportModeMenu.EAGLERCRAFT_BETA_B1_3_OFFLINE, + EnumImportModeMenu.PEYTONPLAYZ585_BETA_1_7_3, + EnumImportModeMenu.PEYTONPLAYZ585_ALPHA_1_2_6, + EnumImportModeMenu.PEYTONPLAYZ585_INDEV, EnumImportModeMenu.CANCEL), + (enumValue2) -> { + List filteredList; + if (enumValue2 == EnumImportModeMenu.CANCEL) { + MenuStateBoot.this.changePopupState(null); + return; + } else if (enumValue2 == EnumImportModeMenu.AUTO_DETECT + || enumValue2 == EnumImportModeMenu.EAGLERCRAFT_EPK_FILE) { + filteredList = bootableClients; + } else { + filteredList = Lists + .newArrayList(Collections2.filter(bootableClients, (etr) -> { + switch (enumValue2) { case EAGLERCRAFTX_1_8_OFFLINE: case EAGLERCRAFT_1_5_OLD_OFFLINE: case EAGLERCRAFT_BETA_B1_3_OFFLINE: case PEYTONPLAYZ585_BETA_1_7_3: case PEYTONPLAYZ585_ALPHA_1_2_6: case PEYTONPLAYZ585_INDEV: - return etr.bootAdapter.getClientDataEntry().type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE; + return etr.bootAdapter + .getClientDataEntry().type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE; case EAGLERCRAFTX_1_8_SIGNED: - return etr.bootAdapter.getClientDataEntry().type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE; + return etr.bootAdapter + .getClientDataEntry().type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE; case EAGLERCRAFT_1_5_NEW_OFFLINE: - return etr.bootAdapter.getClientDataEntry().type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE; + return etr.bootAdapter + .getClientDataEntry().type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE; default: return false; } })); - } - if(filteredList.size() > 0) { - MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(new MenuStateSelectExportClients(enumValue2 == EnumImportModeMenu.EAGLERCRAFT_EPK_FILE, MenuStateBoot.this, filteredList)); - }else { - changePopupState(new MenuPopupStateConfirmation("Error: No clients available to export!", - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateBoot.this.changePopupState(formatSelState[0]); - } - }); + } + if (filteredList.size() > 0) { + MenuStateBoot.this.changePopupState(null); + BootMenuMain.changeState(new MenuStateSelectExportClients( + enumValue2 == EnumImportModeMenu.EAGLERCRAFT_EPK_FILE, + MenuStateBoot.this, filteredList)); + } else { + changePopupState(new MenuPopupStateConfirmation( + "Error: No clients available to export!", Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateBoot.this.changePopupState(formatSelState[0]); } }); - MenuStateBoot.this.changePopupState(formatSelState[0]); - break; - case EXPORT_OFFLINE_BUNDLE: - MenuStateBoot.this.changePopupState(null); - BootMenuMain.changeState(new MenuStateClientMultiSelect(MenuStateBoot.this, bootableClients) { + } + }); + MenuStateBoot.this.changePopupState(formatSelState[0]); + break; + case EXPORT_OFFLINE_BUNDLE: + MenuStateBoot.this.changePopupState(null); + BootMenuMain + .changeState(new MenuStateClientMultiSelect(MenuStateBoot.this, bootableClients) { @Override protected void onDone(List entries) { - if(entries.size() > 0) { - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Exporting Fat Offline..."); + if (entries.size() > 0) { + MenuPopupStateLoading popupState = new MenuPopupStateLoading( + "Exporting Fat Offline..."); this.changePopupState(popupState); try { FatOfflineDownloadFactory.downloadOffline(entries, popupState); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Failed to export fat offline!"); logger.error(t); changePopupState(new MenuPopupStateConfirmation( @@ -454,44 +542,61 @@ public class MenuStateBoot extends MenuState { BootMenuMain.changeState(MenuStateBoot.this); } }); - break; - case CANCEL: - MenuStateBoot.this.changePopupState(null); - break; - default: - break; - } - })); - }, null)); - list.add(new BootItem("Enter Setup", - (itm) -> { - BootMenuMain.changeState(new MenuStateEnterSetup(bootableClients)); - }, null)); + break; + case CANCEL: + MenuStateBoot.this.changePopupState(null); + break; + default: + break; + } + })); + }, null)); + list.add(new BootItem("Enter Setup", (itm) -> { + BootMenuMain.changeState(new MenuStateEnterSetup(bootableClients)); + }, null)); selectionController = new SelectionListController(BootMenuMain.bootMenuDOM.content_selection, list) { - @Override - protected void itemSelected(BootItem item) { - item.run(); - } + @Override + protected void itemSelected(BootItem item) { + item.run(); + } }; } + public void cancelCountdown() { + if (bootCountDown > 0) { + bootCountDown = 0; + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_boot_select_count); + BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_boot_select); + } + } + + @Override + protected void enterPopupBlockingState() { + selectionController.setCursorEventsSuspended(true); + } + @Override protected void enterState() { - if(doCountDown) { + if (doCountDown) { bootCountDownStart = EagRuntime.steadyTimeMillis(); bootCountDown = BootMenuMain.bootMenuDataManager.confBootTimeout; bootCountDownCur = bootCountDown; } selectionController.setup(); - if(bootCountDown > 0) { + if (bootCountDown > 0) { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_boot_select_count); BootMenuMain.bootMenuDOM.footer_text_boot_countdown.setInnerText(Integer.toString(bootCountDown)); - }else { + } else { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_boot_select); } BootMenuDOM.show(BootMenuMain.bootMenuDOM.content_view_selection); } + @Override + protected void exitPopupBlockingState() { + selectionController.setCursorEventsSuspended(false); + } + @Override protected void exitState() { selectionController.destroy(); @@ -500,84 +605,66 @@ public class MenuStateBoot extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.content_view_selection); } - @Override - protected void enterPopupBlockingState() { - selectionController.setCursorEventsSuspended(true); - } - - @Override - protected void exitPopupBlockingState() { - selectionController.setCursorEventsSuspended(false); - } - @Override protected void handleKeyDown(int keyCode) { boolean cancelEsc = bootCountDown > 0; cancelCountdown(); - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { - if(!cancelEsc) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (!cancelEsc) { BootItem def = selectionController.selectionEnableList.get(0).listItem; def.runnable.accept(def); } - }else if(keyCode == KeyCodes.DOM_KEY_E) { + } else if (keyCode == KeyCodes.DOM_KEY_E) { BootItem itm = selectionController.getSelected(); - if(itm.onEdit != null) { + if (itm.onEdit != null) { itm.onEdit.accept(itm); } - }else { + } else { selectionController.handleKeyDown(keyCode); } } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { cancelCountdown(); selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + } @Override protected void update() { - if(bootCountDown > 0) { - int countDownCur = bootCountDown - (int)((EagRuntime.steadyTimeMillis() - bootCountDownStart) / 1000l); - if(countDownCur < 0) { + if (bootCountDown > 0) { + int countDownCur = bootCountDown - (int) ((EagRuntime.steadyTimeMillis() - bootCountDownStart) / 1000l); + if (countDownCur < 0) { BootItem def = selectionController.selectionEnableList.get(0).listItem; def.runnable.accept(def); bootCountDown = 0; return; } - if(bootCountDownCur != countDownCur) { + if (bootCountDownCur != countDownCur) { bootCountDownCur = countDownCur; BootMenuMain.bootMenuDOM.footer_text_boot_countdown.setInnerText(Integer.toString(countDownCur)); } } } - public void cancelCountdown() { - if(bootCountDown > 0) { - bootCountDown = 0; - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_boot_select_count); - BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_boot_select); - } - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateClientMultiSelect.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateClientMultiSelect.java index 8cf17a8c..e6dabe48 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateClientMultiSelect.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateClientMultiSelect.java @@ -10,18 +10,19 @@ import com.google.common.collect.Lists; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuStateClientMultiSelect extends MenuState { @@ -37,13 +38,13 @@ public abstract class MenuStateClientMultiSelect extends MenuState { } @Override - public String getName() { - return bootableClient.bootAdapter.getDisplayName(); + public boolean getAlwaysSelected() { + return alwaysSelected; } @Override - public boolean getAlwaysSelected() { - return alwaysSelected; + public String getName() { + return bootableClient.bootAdapter.getDisplayName(); } } @@ -63,12 +64,18 @@ public abstract class MenuStateClientMultiSelect extends MenuState { @Override protected void doneSelected(List selectedItems) { - MenuStateClientMultiSelect.this.onDone(Lists.newArrayList(Collections2.transform(selectedItems, (itm) -> itm.bootableClient))); + MenuStateClientMultiSelect.this + .onDone(Lists.newArrayList(Collections2.transform(selectedItems, (itm) -> itm.bootableClient))); } }; } + @Override + protected void enterPopupBlockingState() { + selectionController.setCursorEventsSuspended(true); + } + @Override protected void enterState() { selectionController.setup(); @@ -76,6 +83,11 @@ public abstract class MenuStateClientMultiSelect extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_menu_select); } + @Override + protected void exitPopupBlockingState() { + selectionController.setCursorEventsSuspended(false); + } + @Override protected void exitState() { selectionController.destroy(); @@ -83,55 +95,45 @@ public abstract class MenuStateClientMultiSelect extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_menu_select); } - @Override - protected void enterPopupBlockingState() { - selectionController.setCursorEventsSuspended(true); - } - - @Override - protected void exitPopupBlockingState() { - selectionController.setCursorEventsSuspended(false); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { BootMenuMain.changeState(MenuStateClientMultiSelect.this.parentState); - }else { + } else { selectionController.handleKeyDown(keyCode); } } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - - } - @Override - protected void update() { - } protected abstract void onDone(List entries); + @Override + protected void update() { + + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditBootOrder.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditBootOrder.java index 22399d47..efd89ba6 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditBootOrder.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditBootOrder.java @@ -12,27 +12,22 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MenuStateEditBootOrder extends MenuState { - private static final EaglercraftUUID MAGIC_UUID_CANCEL = new EaglercraftUUID(0xD13983F5B764B3DL, 0xBF2C5157DEFDB5F9L); - private static final EaglercraftUUID MAGIC_UUID_DONE = new EaglercraftUUID(0x1F2BBFD548DD4818L, 0xB00B79D143BBF607L); - - private static final BootOrderItem CANCEL_ITEM = new BootOrderItem("Cancel", MAGIC_UUID_CANCEL); - private static final BootOrderItem DONE_ITEM = new BootOrderItem("Done", MAGIC_UUID_DONE); - public static class BootOrderItem implements SelectionListController.ListItem { public final String displayName; @@ -62,42 +57,52 @@ public abstract class MenuStateEditBootOrder extends MenuState { } + private static final EaglercraftUUID MAGIC_UUID_CANCEL = new EaglercraftUUID(0xD13983F5B764B3DL, + 0xBF2C5157DEFDB5F9L); + private static final EaglercraftUUID MAGIC_UUID_DONE = new EaglercraftUUID(0x1F2BBFD548DD4818L, + 0xB00B79D143BBF607L); + + private static final BootOrderItem CANCEL_ITEM = new BootOrderItem("Cancel", MAGIC_UUID_CANCEL); + + private static final BootOrderItem DONE_ITEM = new BootOrderItem("Done", MAGIC_UUID_DONE); + + private static List helper() { + List enumBootItems = BootableClientEntry.enumerateBootableClients(); + if (BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, enumBootItems)) { + BootMenuMain.bootMenuDataManager.writeManifest(); + } + return enumBootItems; + } + protected final MenuState parent; protected final SelectionListController selectionController; protected final List existingBootItems; protected final List allBootItems; + protected boolean controlDown = false; public MenuStateEditBootOrder(MenuState parent) { this(parent, helper()); } - private static List helper() { - List enumBootItems = BootableClientEntry.enumerateBootableClients(); - if(BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, enumBootItems)) { - BootMenuMain.bootMenuDataManager.writeManifest(); - } - return enumBootItems; - } - public MenuStateEditBootOrder(MenuState parent, List enumBootItems) { this.parent = parent; - Map enumBootItemsMap = new HashMap<>(enumBootItems.size()); - for(int i = 0, l = enumBootItems.size(); i < l; ++i) { + Map enumBootItemsMap = new HashMap<>(enumBootItems.size()); + for (int i = 0, l = enumBootItems.size(); i < l; ++i) { BootableClientEntry etr = enumBootItems.get(i); enumBootItemsMap.put(etr.bootAdapter.getLaunchConfigEntry().uuid, etr); } List lst = new ArrayList<>(); List lst2 = new ArrayList<>(); List lstSrc = BootMenuMain.bootMenuDataManager.launchOrderList; - for(int i = 0, l = lstSrc.size(); i < l; ++i) { + for (int i = 0, l = lstSrc.size(); i < l; ++i) { EaglercraftUUID uuid = lstSrc.get(i); - BootableClientEntry etr = enumBootItemsMap.get(uuid); - if(etr != null) { + BootableClientEntry etr = enumBootItemsMap.get(uuid); + if (etr != null) { BootOrderItem itm = new BootOrderItem(etr.bootAdapter.getDisplayName(), uuid); lst.add(itm); lst2.add(new BootOrderItemContainer(uuid, itm)); - }else { + } else { lst2.add(new BootOrderItemContainer(uuid, null)); } } @@ -107,12 +112,13 @@ public abstract class MenuStateEditBootOrder extends MenuState { lst3.addAll(lst); lst3.add(CANCEL_ITEM); lst3.add(DONE_ITEM); - selectionController = new SelectionListController(BootMenuMain.bootMenuDOM.content_selection, lst3) { + selectionController = new SelectionListController(BootMenuMain.bootMenuDOM.content_selection, + lst3) { @Override protected void itemSelected(BootOrderItem item) { - if(item == DONE_ITEM) { + if (item == DONE_ITEM) { MenuStateEditBootOrder.this.fireHandleSave(); - }else if(item == CANCEL_ITEM) { + } else if (item == CANCEL_ITEM) { MenuStateEditBootOrder.this.handleCancel(); } } @@ -120,12 +126,9 @@ public abstract class MenuStateEditBootOrder extends MenuState { selectionController.setCursorEventsSuspended(true); // mouse over events might make it hard to reorder } - protected void fireHandleSave() { - List retList = new ArrayList<>(allBootItems.size()); - for(int i = 0, l = allBootItems.size(); i < l; ++i) { - retList.add(allBootItems.get(i).uuid); - } - handleSave(retList); + @Override + protected void enterPopupBlockingState() { + } @Override @@ -135,6 +138,11 @@ public abstract class MenuStateEditBootOrder extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.content_view_selection); } + @Override + protected void exitPopupBlockingState() { + + } + @Override protected void exitState() { selectionController.destroy(); @@ -142,127 +150,125 @@ public abstract class MenuStateEditBootOrder extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.content_view_selection); } - @Override - protected void enterPopupBlockingState() { - + protected void fireHandleSave() { + List retList = new ArrayList<>(allBootItems.size()); + for (int i = 0, l = allBootItems.size(); i < l; ++i) { + retList.add(allBootItems.get(i).uuid); + } + handleSave(retList); } - @Override - protected void exitPopupBlockingState() { - - } + protected abstract void handleCancel(); @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { handleCancel(); - }else if(keyCode == KeyCodes.DOM_KEY_CONTROL) { + } else if (keyCode == KeyCodes.DOM_KEY_CONTROL) { controlDown = true; - }else if(controlDown && keyCode == KeyCodes.DOM_KEY_ARROW_UP) { + } else if (controlDown && keyCode == KeyCodes.DOM_KEY_ARROW_UP) { moveEntryUp(); - }else if(controlDown && keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { + } else if (controlDown && keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { moveEntryDown(); - }else { + } else { selectionController.handleKeyDown(keyCode); } } - protected void moveEntryUp() { - BootOrderItem itm = selectionController.getSelected(); - if(itm == null || itm == DONE_ITEM || itm == CANCEL_ITEM) { - return; - } - int index = selectionController.currentSelected; - if(index <= 0) { - return; - } - EaglercraftUUID currentUUID = itm.uuid; - int index2 = -1; - for(int i = 0, l = allBootItems.size(); i < l; ++i) { - BootOrderItemContainer itm2 = allBootItems.get(i); - if(itm2.uuid.equals(currentUUID)) { - index2 = i; - break; - } - } - if(index2 == -1) { - throw new IllegalStateException(); - } - int newIndex = index - 1; - int newIndex2 = index2 - 1; - while(newIndex2 > 0 && allBootItems.get(newIndex2).exists == null) { - --newIndex2; - } - Collections.swap(existingBootItems, index, newIndex); - Collections.swap(allBootItems, index2, newIndex2); - selectionController.moveEntryUp(index); - } - - protected void moveEntryDown() { - BootOrderItem itm = selectionController.getSelected(); - if(itm == null || itm == DONE_ITEM || itm == CANCEL_ITEM) { - return; - } - int index = selectionController.currentSelected; - if(index >= existingBootItems.size() - 1) { - return; - } - EaglercraftUUID currentUUID = itm.uuid; - int index2 = -1; - for(int i = 0, l = allBootItems.size(); i < l; ++i) { - BootOrderItemContainer itm2 = allBootItems.get(i); - if(itm2.uuid.equals(currentUUID)) { - index2 = i; - break; - } - } - if(index2 == -1) { - throw new IllegalStateException(); - } - int newIndex = index + 1; - int newIndex2 = index2 + 1; - while(newIndex2 < allBootItems.size() - 1 && allBootItems.get(newIndex2).exists == null) { - ++newIndex2; - } - Collections.swap(existingBootItems, index, newIndex); - Collections.swap(allBootItems, index2, newIndex2); - selectionController.moveEntryDown(index); - } - - @Override - protected void handleKeyUp(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_CONTROL) { - controlDown = false; - } - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyDown(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_CONTROL) { + controlDown = false; + } + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - - } - @Override - protected void update() { - } protected abstract void handleSave(List reorderedList); - protected abstract void handleCancel(); + protected void moveEntryDown() { + BootOrderItem itm = selectionController.getSelected(); + if (itm == null || itm == DONE_ITEM || itm == CANCEL_ITEM) { + return; + } + int index = selectionController.currentSelected; + if (index >= existingBootItems.size() - 1) { + return; + } + EaglercraftUUID currentUUID = itm.uuid; + int index2 = -1; + for (int i = 0, l = allBootItems.size(); i < l; ++i) { + BootOrderItemContainer itm2 = allBootItems.get(i); + if (itm2.uuid.equals(currentUUID)) { + index2 = i; + break; + } + } + if (index2 == -1) { + throw new IllegalStateException(); + } + int newIndex = index + 1; + int newIndex2 = index2 + 1; + while (newIndex2 < allBootItems.size() - 1 && allBootItems.get(newIndex2).exists == null) { + ++newIndex2; + } + Collections.swap(existingBootItems, index, newIndex); + Collections.swap(allBootItems, index2, newIndex2); + selectionController.moveEntryDown(index); + } + + protected void moveEntryUp() { + BootOrderItem itm = selectionController.getSelected(); + if (itm == null || itm == DONE_ITEM || itm == CANCEL_ITEM) { + return; + } + int index = selectionController.currentSelected; + if (index <= 0) { + return; + } + EaglercraftUUID currentUUID = itm.uuid; + int index2 = -1; + for (int i = 0, l = allBootItems.size(); i < l; ++i) { + BootOrderItemContainer itm2 = allBootItems.get(i); + if (itm2.uuid.equals(currentUUID)) { + index2 = i; + break; + } + } + if (index2 == -1) { + throw new IllegalStateException(); + } + int newIndex = index - 1; + int newIndex2 = index2 - 1; + while (newIndex2 > 0 && allBootItems.get(newIndex2).exists == null) { + --newIndex2; + } + Collections.swap(existingBootItems, index, newIndex); + Collections.swap(allBootItems, index2, newIndex2); + selectionController.moveEntryUp(index); + } + + @Override + protected void update() { + + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditingLaunch.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditingLaunch.java index bc850b56..f5427ebe 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditingLaunch.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEditingLaunch.java @@ -23,38 +23,77 @@ import net.minecraft.nbt.NBTException; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuStateEditingLaunch extends MenuState { - private static final Logger logger = LogManager.getLogger("MenuStateEditingLaunch"); + public static enum EnumEditorMenu { + BOOT("Boot configuration"), SAVE("Save configuration"), SAVE_COPY("Save a copy"), + LOAD_DEFAULTS("Load defaults"), LOAD_TEMPLATE("Load template"), EXPORT_OFFLINE("Export Offline"), + DELETE("Delete configuration"), RETURN("Return to menu"), CANCEL("Cancel"); - protected final MenuState previousMenu; - protected final LaunchConfigEntry launchConf; - protected final ClientDataEntry clientData; - protected final boolean isImporting; - protected final Map> importClientBlobs; - protected boolean controlDown = false; + private final String str; + + private EnumEditorMenu(String str) { + this.str = str; + } + + @Override + public String toString() { + return str; + } + } + + private static final Logger logger = LogManager.getLogger("MenuStateEditingLaunch"); + protected static final List EDITOR_MENU = Arrays.asList(EnumEditorMenu.BOOT, EnumEditorMenu.SAVE, + EnumEditorMenu.SAVE_COPY, EnumEditorMenu.LOAD_DEFAULTS, EnumEditorMenu.LOAD_TEMPLATE, + EnumEditorMenu.EXPORT_OFFLINE, EnumEditorMenu.DELETE, EnumEditorMenu.RETURN, EnumEditorMenu.CANCEL); + protected static final List IMPORTER_MENU = Arrays.asList(EnumEditorMenu.SAVE, + EnumEditorMenu.LOAD_DEFAULTS, EnumEditorMenu.LOAD_TEMPLATE, EnumEditorMenu.EXPORT_OFFLINE, + EnumEditorMenu.RETURN, EnumEditorMenu.CANCEL); public static MenuStateEditingLaunch createHelper(MenuState previousMenu, LaunchConfigEntry launchConf, ClientDataEntry clientData, boolean isImporting, Map importClientBlobs) { return new MenuStateEditingLaunch(previousMenu, launchConf, clientData, isImporting, Maps.transformValues(importClientBlobs, (blob) -> { - return () -> blob; - })); + return () -> blob; + })); } + private static String tryJSONFormat(String input) { + try { + return (new JSONObject(input)).toString(4); + } catch (JSONException ex) { + logger.warn("This client's JSON is corrupt! Failed to format"); + logger.warn(ex); + return input; + } + } + + protected final MenuState previousMenu; + + protected final LaunchConfigEntry launchConf; + + protected final ClientDataEntry clientData; + + protected final boolean isImporting; + + protected final Map> importClientBlobs; + + protected boolean controlDown = false; + public MenuStateEditingLaunch(MenuState previousMenu, LaunchConfigEntry launchConf, ClientDataEntry clientData, boolean isImporting, Map> importClientBlobs) { this.previousMenu = previousMenu; @@ -64,45 +103,402 @@ public class MenuStateEditingLaunch extends MenuState { this.importClientBlobs = importClientBlobs; } - private void setVisibleControlSet() { + private void bootCurrentConfig() { + readAllValues(); + String err = validateLaunchOpts(); + if (err != null) { + changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + MenuPopupStateLoading popupState = new MenuPopupStateLoading("Booting: '" + launchConf.displayName + "'..."); + changePopupState(popupState); + BootMenuMain.runLaterMS(() -> { + try { + ClientBootFactory.bootClient(launchConf, clientData, importClientBlobs, popupState); + } catch (UnsignedBootException ex) { + MenuStateBoot.displayUnsignedError(MenuStateEditingLaunch.this, (cb) -> { + MenuStateEditingLaunch.this.exportOffline(); + }, () -> { + MenuStateEditingLaunch.this.changePopupState(null); + }); + return; + } catch (Throwable t) { + logger.error("Failed to boot client!"); + logger.error(t); + changePopupState(new MenuPopupStateConfirmation( + "Error: Failed to boot client!\n\n" + t.toString(), Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + try { + changePopupState(null); + } catch (Throwable t) { + } + }, 250); + } + + private void deleteConfig() { + changePopupState(new MenuPopupStateLoading("Deleting: '" + launchConf.displayName + "'...")); + BootMenuMain.runLaterMS(() -> { + try { + BootMenuMain.bootMenuDataManager.deleteLaunchConfig(launchConf.uuid); + } finally { + BootMenuMain.changeState(new MenuStateBoot(false)); + } + }, 250); + } + + @Override + protected void enterPopupBlockingState() { + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_opt_editor, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_join_server, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_opts_name, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_assetsURI, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_container, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_main_func, true); + BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies, true); + } + + @Override + protected void enterState() { + if (isImporting) { + BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_opts_editor_alt); + } else { + BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_opts_editor); + } + BootMenuDOM.show(BootMenuMain.bootMenuDOM.content_view_editor); + setEnabledControlSet(); + setControlSetValues(); + setVisibleControlSet(); + } + + @Override + protected void exitPopupBlockingState() { + setEnabledControlSet(); + } + + @Override + protected void exitState() { + if (isImporting) { + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_opts_editor_alt); + } else { + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_opts_editor); + } + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.content_view_editor); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); + } + + private void exportOffline() { + readAllValues(); + String err = validateLaunchOpts(); + if (err != null) { + changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + MenuPopupStateLoading popupState = new MenuPopupStateLoading("Exporting: '" + launchConf.displayName + "'..."); + changePopupState(popupState); + BootMenuMain.runLaterMS(() -> { + try { + OfflineDownloadFactory.downloadOffline(launchConf, clientData, importClientBlobs, popupState); + } catch (Throwable t) { + logger.error("Failed to export offline!"); + logger.error(t); + changePopupState(new MenuPopupStateConfirmation( + "Error: Failed to export offline!\n\n" + t.toString(), Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + MenuStateEditingLaunch.this.changePopupState(null); + }, 250); + + } + + @Override + protected void handleKeyDown(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { + returnToMenu(); + } else if (keyCode == KeyCodes.DOM_KEY_CONTROL) { + controlDown = true; + } else if (keyCode == KeyCodes.DOM_KEY_SHIFT) { + if (controlDown) { + changePopupState(MenuPopupStateSelection.createHelper("What do you wanna do?", + isImporting ? IMPORTER_MENU : EDITOR_MENU, (opt) -> { + switch (opt) { + case BOOT: + bootCurrentConfig(); + break; + case SAVE: + saveAndExit(); + break; + case SAVE_COPY: + saveCopy(); + break; + case LOAD_DEFAULTS: + loadDefaults(); + break; + case LOAD_TEMPLATE: + loadTemplate(); + break; + case EXPORT_OFFLINE: + exportOffline(); + break; + case DELETE: + deleteConfig(); + break; + case RETURN: + returnToMenu(); + break; + case CANCEL: + default: + changePopupState(null); + break; + } + })); + } + } else if (keyCode == KeyCodes.DOM_KEY_ENTER) { + if (controlDown) { + if (isImporting) { + saveAndExit(); + } else { + bootCurrentConfig(); + } + } + } + } + + @Override + protected void handleKeyRepeat(int keyCode) { + + } + + @Override + protected void handleKeyUp(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_CONTROL) { + controlDown = false; + } + } + + @Override + protected void handleOnChanged(HTMLElement htmlElement) { + if (BootMenuMain.bootMenuDOM.launch_conf_val_launch_type == htmlElement) { + EnumClientLaunchType launchType = launchConf.type; + readAllValues(); + if (launchConf.type != launchType) { + setEnabledControlSet(); + setControlSetValues(); + setVisibleControlSet(); + } + } + } + + @Override + protected void handleOnClick(HTMLElement htmlElement) { + + } + + @Override + protected void handleOnMouseOver(HTMLElement htmlElement) { + + } + + private void loadDefaults() { + LaunchTemplate def = BootMenuMain.bootMenuMetadata.formatDefaultOptsMap.get(launchConf.type); + if (def != null) { + def.configureLaunchConfig(launchConf); + setControlSetValues(); + changePopupState(null); + } else { + changePopupState(new MenuPopupStateConfirmation("Error: Could not find default config!", + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + } + } + + private void loadTemplate() { + List templates = BootMenuMain.bootMenuMetadata + .getTemplatesForParseType(EnumOfflineParseType.inferFromClientFormat(launchConf.type)); + if (templates != null && !templates.isEmpty()) { + List listWithCancel = Lists.newArrayList(templates); + listWithCancel.add("Cancel"); + changePopupState(MenuPopupStateSelection.createHelper("Select the template you would like to load:", + listWithCancel, (template) -> { + if (template != null) { + if (!"Cancel".equals(template)) { + ((DefaultLaunchTemplate) template).templateState.configureLaunchConfig(launchConf); + setControlSetValues(); + changePopupState(null); + } else { + changePopupState(null); + } + } + })); + } else { + changePopupState(new MenuPopupStateConfirmation("Error: Could not find any templates!", + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + } + } + + private void readAllValues() { + EnumClientLaunchType newLaunchType = EnumClientLaunchType + .valueOf(BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type)); + if (!clientData.type.launchTypes.contains(newLaunchType)) { + logger.error("nope!"); + throw new IllegalStateException("nope!"); + } EnumClientLaunchType launchType = launchConf.type; - switch(launchType) { + launchConf.type = newLaunchType; + launchConf.displayName = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name).trim(); + launchConf.clearCookiesBeforeLaunch = BootMenuDOM + .getChecked(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies); + switch (launchType) { case EAGLERX_V1: case EAGLERX_SIGNED_V1: case EAGLER_1_5_V2: case PEYTON_V2: - case PEYTON_V1: - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); + launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); break; case EAGLER_1_5_V1: + launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); + launchConf.joinServer = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_join_server).trim(); + break; case EAGLER_BETA_V1: - BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_join_server); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); + launchConf.joinServer = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_join_server).trim(); + break; + case PEYTON_V1: break; case STANDARD_OFFLINE_V1: - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); - BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_opts_name); - BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); - BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_container); - BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_main_func); + launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); + launchConf.launchOptsVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_opts_name).trim(); + launchConf.launchOptsAssetsURIVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_assetsURI) + .trim(); + launchConf.launchOptsContainerVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_container) + .trim(); + launchConf.mainFunction = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_main_func).trim(); break; } } + private void returnToMenu() { + if (previousMenu != null) { + BootMenuMain.changeState(previousMenu); + } + } + + private void saveAndExit() { + readAllValues(); + String err = validateLaunchOpts(); + if (err != null) { + changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + MenuPopupStateLoading popupState = new MenuPopupStateLoading("Saving: '" + launchConf.displayName + "'..."); + changePopupState(popupState); + BootMenuMain.runLaterMS(() -> { + try { + BootMenuMain.bootMenuDataManager.installNewLaunchConfig(launchConf, clientData, + Maps.transformValues(importClientBlobs, (e) -> e.get()), false); + } catch (Throwable t) { + logger.error("Error: could not save launch config!"); + logger.error(t); + changePopupState(new MenuPopupStateConfirmation( + "Error: Could not save launch config!\n\n" + t.toString(), Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + BootMenuMain.changeState(new MenuStateBoot(false)); + }, 250); + } + + private void saveCopy() { + readAllValues(); + String err = validateLaunchOpts(); + if (err != null) { + changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, + Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + final LaunchConfigEntry launchConfCopy = launchConf.rotateUUIDs(EaglercraftUUID.randomUUID(), + launchConf.clientDataUUID); + MenuPopupStateLoading popupState = new MenuPopupStateLoading("Saving: '" + launchConfCopy.displayName + "'..."); + changePopupState(popupState); + BootMenuMain.runLaterMS(() -> { + try { + BootMenuMain.bootMenuDataManager.installNewLaunchConfig(launchConfCopy, clientData, + Maps.transformValues(importClientBlobs, (e) -> e.get()), false); + } catch (Throwable t) { + logger.error("Error: could not save launch config!"); + logger.error(t); + changePopupState(new MenuPopupStateConfirmation( + "Error: Could not save launch config!\n\n" + t.toString(), Arrays.asList("OK")) { + @Override + protected void selectCallback(String enumValue) { + MenuStateEditingLaunch.this.changePopupState(null); + } + }); + return; + } + BootMenuMain.changeState(new MenuStateBoot(false)); + }, 250); + } + private void setControlSetValues() { BootMenuMain.bootMenuDOM.launch_conf_val_data_format.setInnerText(clientData.type.displayName); EnumClientLaunchType launchType = launchConf.type; BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type, launchType.toString()); BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name, launchConf.displayName); - BootMenuDOM.setChecked(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies, launchConf.clearCookiesBeforeLaunch); - switch(launchType) { + BootMenuDOM.setChecked(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies, + launchConf.clearCookiesBeforeLaunch); + switch (launchType) { case EAGLERX_V1: case EAGLERX_SIGNED_V1: case EAGLER_1_5_V2: @@ -123,7 +519,8 @@ public class MenuStateEditingLaunch extends MenuState { BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_main_func, ""); break; case EAGLER_BETA_V1: - BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_opt_editor, "JSON opts are not supported for Eaglercraft b1.3!"); + BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_opt_editor, + "JSON opts are not supported for Eaglercraft b1.3!"); BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_join_server, launchConf.joinServer); BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_opts_name, ""); BootMenuDOM.setValue(BootMenuMain.bootMenuDOM.launch_conf_val_assetsURI, ""); @@ -155,7 +552,7 @@ public class MenuStateEditingLaunch extends MenuState { BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name, false); BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies, false); EnumClientLaunchType launchType = launchConf.type; - switch(launchType) { + switch (launchType) { case EAGLERX_V1: case EAGLERX_SIGNED_V1: case EAGLER_1_5_V2: @@ -202,195 +599,57 @@ public class MenuStateEditingLaunch extends MenuState { } } - private void readAllValues() { - EnumClientLaunchType newLaunchType = EnumClientLaunchType.valueOf(BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type)); - if(!clientData.type.launchTypes.contains(newLaunchType)) { - logger.error("nope!"); - throw new IllegalStateException("nope!"); - } - EnumClientLaunchType launchType = launchConf.type; - launchConf.type = newLaunchType; - launchConf.displayName = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name).trim(); - launchConf.clearCookiesBeforeLaunch = BootMenuDOM.getChecked(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies); - switch(launchType) { - case EAGLERX_V1: - case EAGLERX_SIGNED_V1: - case EAGLER_1_5_V2: - case PEYTON_V2: - launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); - break; - case EAGLER_1_5_V1: - launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); - launchConf.joinServer = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_join_server).trim(); - break; - case EAGLER_BETA_V1: - launchConf.joinServer = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_join_server).trim(); - break; - case PEYTON_V1: - break; - case STANDARD_OFFLINE_V1: - launchConf.launchOpts = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_opt_editor).trim(); - launchConf.launchOptsVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_opts_name).trim(); - launchConf.launchOptsAssetsURIVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_assetsURI).trim(); - launchConf.launchOptsContainerVar = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_container).trim(); - launchConf.mainFunction = BootMenuDOM.getValue(BootMenuMain.bootMenuDOM.launch_conf_val_main_func).trim(); - break; - } - } - private void setEnabledLaunchTypes() { EnumClientFormatType clientType = clientData.type; Set launchTypes = clientType.launchTypes; EnumClientLaunchType[] itr = EnumClientLaunchType._values(); - for(int i = 0; i < itr.length; ++i) { + for (int i = 0; i < itr.length; ++i) { EnumClientLaunchType enumType = itr[i]; BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type_opts.get(enumType), !launchTypes.contains(enumType)); } } - private static String tryJSONFormat(String input) { - try { - return (new JSONObject(input)).toString(4); - }catch(JSONException ex) { - logger.warn("This client's JSON is corrupt! Failed to format"); - logger.warn(ex); - return input; + private void setVisibleControlSet() { + EnumClientLaunchType launchType = launchConf.type; + switch (launchType) { + case EAGLERX_V1: + case EAGLERX_SIGNED_V1: + case EAGLER_1_5_V2: + case PEYTON_V2: + case PEYTON_V1: + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); + break; + case EAGLER_1_5_V1: + case EAGLER_BETA_V1: + BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_join_server); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); + break; + case STANDARD_OFFLINE_V1: + BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); + BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_opts_name); + BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); + BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_container); + BootMenuDOM.show(BootMenuMain.bootMenuDOM.launch_conf_main_func); + break; } } @Override - protected void enterState() { - if(isImporting) { - BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_opts_editor_alt); - }else { - BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_opts_editor); - } - BootMenuDOM.show(BootMenuMain.bootMenuDOM.content_view_editor); - setEnabledControlSet(); - setControlSetValues(); - setVisibleControlSet(); - } + protected void update() { - @Override - protected void exitState() { - if(isImporting) { - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_opts_editor_alt); - }else { - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_opts_editor); - } - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.content_view_editor); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_join_server); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_opts_name); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_assetsURI); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_container); - BootMenuDOM.hide(BootMenuMain.bootMenuDOM.launch_conf_main_func); - } - - @Override - protected void enterPopupBlockingState() { - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_opt_editor, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_profile_name, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_join_server, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_opts_name, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_assetsURI, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_container, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_main_func, true); - BootMenuDOM.setDisabled(BootMenuMain.bootMenuDOM.launch_conf_val_clear_cookies, true); - } - - @Override - protected void exitPopupBlockingState() { - setEnabledControlSet(); - } - - public static enum EnumEditorMenu { - BOOT("Boot configuration"), - SAVE("Save configuration"), - SAVE_COPY("Save a copy"), - LOAD_DEFAULTS("Load defaults"), - LOAD_TEMPLATE("Load template"), - EXPORT_OFFLINE("Export Offline"), - DELETE("Delete configuration"), - RETURN("Return to menu"), - CANCEL("Cancel"); - - private final String str; - - private EnumEditorMenu(String str) { - this.str = str; - } - - @Override - public String toString() { - return str; - } - } - - protected static final List EDITOR_MENU = Arrays.asList(EnumEditorMenu.BOOT, EnumEditorMenu.SAVE, - EnumEditorMenu.SAVE_COPY, EnumEditorMenu.LOAD_DEFAULTS, EnumEditorMenu.LOAD_TEMPLATE, - EnumEditorMenu.EXPORT_OFFLINE, EnumEditorMenu.DELETE, EnumEditorMenu.RETURN, EnumEditorMenu.CANCEL); - - protected static final List IMPORTER_MENU = Arrays.asList(EnumEditorMenu.SAVE, - EnumEditorMenu.LOAD_DEFAULTS, EnumEditorMenu.LOAD_TEMPLATE, EnumEditorMenu.EXPORT_OFFLINE, - EnumEditorMenu.RETURN, EnumEditorMenu.CANCEL); - - @Override - protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { - returnToMenu(); - }else if(keyCode == KeyCodes.DOM_KEY_CONTROL) { - controlDown = true; - }else if(keyCode == KeyCodes.DOM_KEY_SHIFT) { - if(controlDown) { - changePopupState(MenuPopupStateSelection.createHelper("What do you wanna do?", isImporting ? IMPORTER_MENU : EDITOR_MENU, (opt) -> { - switch(opt) { - case BOOT: - bootCurrentConfig(); - break; - case SAVE: - saveAndExit(); - break; - case SAVE_COPY: - saveCopy(); - break; - case LOAD_DEFAULTS: - loadDefaults(); - break; - case LOAD_TEMPLATE: - loadTemplate(); - break; - case EXPORT_OFFLINE: - exportOffline(); - break; - case DELETE: - deleteConfig(); - break; - case RETURN: - returnToMenu(); - break; - case CANCEL: - default: - changePopupState(null); - break; - } - })); - } - }else if(keyCode == KeyCodes.DOM_KEY_ENTER) { - if(controlDown) { - if(isImporting) { - saveAndExit(); - }else { - bootCurrentConfig(); - } - } - } } private String validateLaunchOpts() { EnumClientLaunchType launchType = launchConf.type; - switch(launchType) { + switch (launchType) { case EAGLERX_V1: case EAGLERX_SIGNED_V1: case EAGLER_1_5_V2: @@ -399,18 +658,18 @@ public class MenuStateEditingLaunch extends MenuState { try { new JSONObject(launchConf.launchOpts); return null; - }catch(JSONException ex) { + } catch (JSONException ex) { return ex.toString(); } case EAGLER_1_5_V1: - if(!launchConf.launchOpts.startsWith("[NBT]") || !launchConf.launchOpts.endsWith("[/NBT]")) { + if (!launchConf.launchOpts.startsWith("[NBT]") || !launchConf.launchOpts.endsWith("[/NBT]")) { return "Content does not begin/end with \"[NBT]\" and \"[/NBT]\""; } try { String str = launchConf.launchOpts; JsonToNBT.getTagFromJson(str.substring(5, str.length() - 6).trim()); return null; - }catch(NBTException ex) { + } catch (NBTException ex) { return ex.toString(); } case EAGLER_BETA_V1: @@ -420,255 +679,4 @@ public class MenuStateEditingLaunch extends MenuState { } } - private void bootCurrentConfig() { - readAllValues(); - String err = validateLaunchOpts(); - if(err != null) { - changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Booting: '" + launchConf.displayName + "'..."); - changePopupState(popupState); - BootMenuMain.runLaterMS(() -> { - try { - ClientBootFactory.bootClient(launchConf, clientData, importClientBlobs, popupState); - }catch(UnsignedBootException ex) { - MenuStateBoot.displayUnsignedError(MenuStateEditingLaunch.this, (cb) -> { - MenuStateEditingLaunch.this.exportOffline(); - }, () -> { - MenuStateEditingLaunch.this.changePopupState(null); - }); - return; - }catch(Throwable t) { - logger.error("Failed to boot client!"); - logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Failed to boot client!\n\n" + t.toString(), - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - try { - changePopupState(null); - }catch(Throwable t) { - } - }, 250); - } - - private void saveAndExit() { - readAllValues(); - String err = validateLaunchOpts(); - if(err != null) { - changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Saving: '" + launchConf.displayName + "'..."); - changePopupState(popupState); - BootMenuMain.runLaterMS(() -> { - try { - BootMenuMain.bootMenuDataManager.installNewLaunchConfig(launchConf, clientData, - Maps.transformValues(importClientBlobs, (e) -> e.get()), false); - }catch(Throwable t) { - logger.error("Error: could not save launch config!"); - logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Could not save launch config!\n\n" + t.toString(), - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - BootMenuMain.changeState(new MenuStateBoot(false)); - }, 250); - } - - private void saveCopy() { - readAllValues(); - String err = validateLaunchOpts(); - if(err != null) { - changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - final LaunchConfigEntry launchConfCopy = launchConf.rotateUUIDs(EaglercraftUUID.randomUUID(), launchConf.clientDataUUID); - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Saving: '" + launchConfCopy.displayName + "'..."); - changePopupState(popupState); - BootMenuMain.runLaterMS(() -> { - try { - BootMenuMain.bootMenuDataManager.installNewLaunchConfig(launchConfCopy, clientData, - Maps.transformValues(importClientBlobs, (e) -> e.get()), false); - }catch(Throwable t) { - logger.error("Error: could not save launch config!"); - logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Could not save launch config!\n\n" + t.toString(), - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - BootMenuMain.changeState(new MenuStateBoot(false)); - }, 250); - } - - private void loadDefaults() { - LaunchTemplate def = BootMenuMain.bootMenuMetadata.formatDefaultOptsMap.get(launchConf.type); - if(def != null) { - def.configureLaunchConfig(launchConf); - setControlSetValues(); - changePopupState(null); - }else { - changePopupState(new MenuPopupStateConfirmation("Error: Could not find default config!", - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - } - } - - private void loadTemplate() { - List templates = BootMenuMain.bootMenuMetadata.getTemplatesForParseType(EnumOfflineParseType.inferFromClientFormat(launchConf.type)); - if(templates != null && !templates.isEmpty()) { - List listWithCancel = Lists.newArrayList(templates); - listWithCancel.add("Cancel"); - changePopupState(MenuPopupStateSelection.createHelper("Select the template you would like to load:", listWithCancel, (template) -> { - if(template != null) { - if(!"Cancel".equals(template)) { - ((DefaultLaunchTemplate)template).templateState.configureLaunchConfig(launchConf); - setControlSetValues(); - changePopupState(null); - }else { - changePopupState(null); - } - } - })); - }else { - changePopupState(new MenuPopupStateConfirmation("Error: Could not find any templates!", - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - } - } - - private void exportOffline() { - readAllValues(); - String err = validateLaunchOpts(); - if(err != null) { - changePopupState(new MenuPopupStateConfirmation("Error: Invalid syntax in launch opts!\n\n" + err, - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Exporting: '" + launchConf.displayName + "'..."); - changePopupState(popupState); - BootMenuMain.runLaterMS(() -> { - try { - OfflineDownloadFactory.downloadOffline(launchConf, clientData, importClientBlobs, popupState); - }catch(Throwable t) { - logger.error("Failed to export offline!"); - logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Failed to export offline!\n\n" + t.toString(), - Arrays.asList("OK")) { - @Override - protected void selectCallback(String enumValue) { - MenuStateEditingLaunch.this.changePopupState(null); - } - }); - return; - } - MenuStateEditingLaunch.this.changePopupState(null); - }, 250); - - } - - private void deleteConfig() { - changePopupState(new MenuPopupStateLoading("Deleting: '" + launchConf.displayName + "'...")); - BootMenuMain.runLaterMS(() -> { - try { - BootMenuMain.bootMenuDataManager.deleteLaunchConfig(launchConf.uuid); - }finally { - BootMenuMain.changeState(new MenuStateBoot(false)); - } - }, 250); - } - - private void returnToMenu() { - if(previousMenu != null) { - BootMenuMain.changeState(previousMenu); - } - } - - @Override - protected void handleKeyUp(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_CONTROL) { - controlDown = false; - } - } - - @Override - protected void handleKeyRepeat(int keyCode) { - - } - - @Override - protected void handleOnChanged(HTMLElement htmlElement) { - if(BootMenuMain.bootMenuDOM.launch_conf_val_launch_type == htmlElement) { - EnumClientLaunchType launchType = launchConf.type; - readAllValues(); - if(launchConf.type != launchType) { - setEnabledControlSet(); - setControlSetValues(); - setVisibleControlSet(); - } - } - } - - @Override - protected void handleOnClick(HTMLElement htmlElement) { - - } - - @Override - protected void handleOnMouseOver(HTMLElement htmlElement) { - - } - - @Override - protected void update() { - - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEnterSetup.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEnterSetup.java index c60d6970..397a152e 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEnterSetup.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateEnterSetup.java @@ -11,23 +11,25 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuStateEnterSetup extends MenuState { private static enum EnumListMultiSelectType { - CHECKBOX_ALWAYS_SHOW, SUBMENU_BOOT_ORDER, SUBMENU_DELETE_ITEM, AUTOMATIC_BOOT_TIMEOUT, SUBMENU_CHANGE_TITLE, DONE; + CHECKBOX_ALWAYS_SHOW, SUBMENU_BOOT_ORDER, SUBMENU_DELETE_ITEM, AUTOMATIC_BOOT_TIMEOUT, SUBMENU_CHANGE_TITLE, + DONE; } private static class MenuItem implements SelectionListController.ListItem { @@ -54,48 +56,57 @@ public class MenuStateEnterSetup extends MenuState { final int bootFlags = bootFlagsRet == -1 ? 0 : bootFlagsRet; final boolean[] alwaysShowState = new boolean[] { (bootFlags & 1) != 0 }; int timeout = BootMenuMain.bootMenuDataManager.confBootTimeout; - selectionController = new SelectionListController(BootMenuMain.bootMenuDOM.content_selection, Arrays.asList( - new MenuItem(EnumListMultiSelectType.CHECKBOX_ALWAYS_SHOW, (alwaysShowState[0] ? "[X]" : "[ ]") + " Always show boot menu on launch"), - new MenuItem(EnumListMultiSelectType.SUBMENU_BOOT_ORDER, "Change Boot Order"), - new MenuItem(EnumListMultiSelectType.SUBMENU_DELETE_ITEM, "Delete Boot Item"), - new MenuItem(EnumListMultiSelectType.AUTOMATIC_BOOT_TIMEOUT, "Automatic Boot Timeout: " + (timeout == 0 ? "Disabled" : timeout)), - new MenuItem(EnumListMultiSelectType.SUBMENU_CHANGE_TITLE, "Change Menu Title"), - new MenuItem(EnumListMultiSelectType.DONE, "Done") - )) { + selectionController = new SelectionListController(BootMenuMain.bootMenuDOM.content_selection, + Arrays.asList( + new MenuItem(EnumListMultiSelectType.CHECKBOX_ALWAYS_SHOW, + (alwaysShowState[0] ? "[X]" : "[ ]") + " Always show boot menu on launch"), + new MenuItem(EnumListMultiSelectType.SUBMENU_BOOT_ORDER, "Change Boot Order"), + new MenuItem(EnumListMultiSelectType.SUBMENU_DELETE_ITEM, "Delete Boot Item"), + new MenuItem(EnumListMultiSelectType.AUTOMATIC_BOOT_TIMEOUT, + "Automatic Boot Timeout: " + (timeout == 0 ? "Disabled" : timeout)), + new MenuItem(EnumListMultiSelectType.SUBMENU_CHANGE_TITLE, "Change Menu Title"), + new MenuItem(EnumListMultiSelectType.DONE, "Done"))) { @Override public void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_SPACE) { - if(currentSelected == 0) { // the checkbox + if (keyCode == KeyCodes.DOM_KEY_SPACE) { + if (currentSelected == 0) { // the checkbox fireSelect(); } - }else { + } else { super.handleKeyDown(keyCode); } } + @Override + protected void itemSelected(MenuItem item) { + } + @Override protected void itemSelectedLow(ListItemInstance item) { - switch(item.listItem.type) { + switch (item.listItem.type) { case CHECKBOX_ALWAYS_SHOW: alwaysShowState[0] = !alwaysShowState[0]; - BootMenuDataManager.setBootMenuFlags(BootMenuMain.win, (bootFlags & ~1) | (alwaysShowState[0] ? 1 : 0)); - item.element.setInnerText((alwaysShowState[0] ? "[X]" : "[ ]") + " Always show boot menu on launch"); + BootMenuDataManager.setBootMenuFlags(BootMenuMain.win, + (bootFlags & ~1) | (alwaysShowState[0] ? 1 : 0)); + item.element + .setInnerText((alwaysShowState[0] ? "[X]" : "[ ]") + " Always show boot menu on launch"); break; case SUBMENU_BOOT_ORDER: BootMenuMain.changeState(new MenuStateEditBootOrder(MenuStateEnterSetup.this, bootableClients) { @Override - protected void handleSave(List reorderedList) { - BootMenuMain.bootMenuDataManager.launchOrderList.clear(); - BootMenuMain.bootMenuDataManager.launchOrderList.addAll(reorderedList); - BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, bootableClients); - BootMenuMain.bootMenuDataManager.writeManifest(); + protected void handleCancel() { BootMenuMain.changeState(MenuStateEnterSetup.this); } @Override - protected void handleCancel() { + protected void handleSave(List reorderedList) { + BootMenuMain.bootMenuDataManager.launchOrderList.clear(); + BootMenuMain.bootMenuDataManager.launchOrderList.addAll(reorderedList); + BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, + bootableClients); + BootMenuMain.bootMenuDataManager.writeManifest(); BootMenuMain.changeState(MenuStateEnterSetup.this); } @@ -103,34 +114,37 @@ public class MenuStateEnterSetup extends MenuState { break; case SUBMENU_DELETE_ITEM: List deletableClients = new ArrayList<>(bootableClients.size() - 1); - for(int i = 0, l = bootableClients.size(); i < l; ++i) { + for (int i = 0, l = bootableClients.size(); i < l; ++i) { BootableClientEntry etr = bootableClients.get(i); - if(etr.dataType == BootableClientEntry.EnumDataType.LOCAL_STORAGE) { + if (etr.dataType == BootableClientEntry.EnumDataType.LOCAL_STORAGE) { deletableClients.add(etr); } } - if(!deletableClients.isEmpty()) { - BootMenuMain.changeState(new MenuStateClientMultiSelect(MenuStateEnterSetup.this, deletableClients) { - @Override - protected void onDone(List entries) { - if(entries != null && !entries.isEmpty()) { - for(int i = 0, l = entries.size(); i < l; ++i) { - EaglercraftUUID toDelete = entries.get(i).bootAdapter.getLaunchConfigEntry().uuid; - BootMenuMain.bootMenuDataManager.deleteLaunchConfig(toDelete); + if (!deletableClients.isEmpty()) { + BootMenuMain.changeState( + new MenuStateClientMultiSelect(MenuStateEnterSetup.this, deletableClients) { + @Override + protected void onDone(List entries) { + if (entries != null && !entries.isEmpty()) { + for (int i = 0, l = entries.size(); i < l; ++i) { + EaglercraftUUID toDelete = entries.get(i).bootAdapter + .getLaunchConfigEntry().uuid; + BootMenuMain.bootMenuDataManager.deleteLaunchConfig(toDelete); + } + List newEnum = BootableClientEntry + .enumerateBootableClients(); + if (BootableClientEntry.applyClientOrdering( + BootMenuMain.bootMenuDataManager.launchOrderList, newEnum)) { + BootMenuMain.bootMenuDataManager.writeManifest(); + } + BootMenuMain.changeState(new MenuStateEnterSetup(newEnum)); + } else { + BootMenuMain.changeState(MenuStateEnterSetup.this); + } } - List newEnum = BootableClientEntry.enumerateBootableClients(); - if(BootableClientEntry.applyClientOrdering(BootMenuMain.bootMenuDataManager.launchOrderList, newEnum)) { - BootMenuMain.bootMenuDataManager.writeManifest(); - } - BootMenuMain.changeState(new MenuStateEnterSetup(newEnum)); - }else { - BootMenuMain.changeState(MenuStateEnterSetup.this); - } - } - }); - }else { - changePopupState(new MenuPopupStateConfirmation( - "Error: No deletable clients!", + }); + } else { + changePopupState(new MenuPopupStateConfirmation("Error: No deletable clients!", Arrays.asList("OK")) { @Override protected void selectCallback(String enumValue) { @@ -140,43 +154,48 @@ public class MenuStateEnterSetup extends MenuState { } break; case AUTOMATIC_BOOT_TIMEOUT: - MenuStateEnterSetup.this.changePopupState(new MenuPopupStateEditInteger("Enter the number of seconds, or 0 to disable:", BootMenuMain.bootMenuDataManager.confBootTimeout) { + MenuStateEnterSetup.this.changePopupState( + new MenuPopupStateEditInteger("Enter the number of seconds, or 0 to disable:", + BootMenuMain.bootMenuDataManager.confBootTimeout) { - @Override - protected void onSave(int i) { - if(i < 0) i = 0; - if(i != BootMenuMain.bootMenuDataManager.confBootTimeout) { - BootMenuMain.bootMenuDataManager.confBootTimeout = i; - BootMenuMain.bootMenuDataManager.saveAdditionalConf(); - item.element.setInnerText("Automatic Boot Timeout: " + (i == 0 ? "Disabled" : i)); - } - MenuStateEnterSetup.this.changePopupState(null); - } + @Override + protected void onCancel() { + MenuStateEnterSetup.this.changePopupState(null); + } - @Override - protected void onCancel() { - MenuStateEnterSetup.this.changePopupState(null); - } + @Override + protected void onSave(int i) { + if (i < 0) + i = 0; + if (i != BootMenuMain.bootMenuDataManager.confBootTimeout) { + BootMenuMain.bootMenuDataManager.confBootTimeout = i; + BootMenuMain.bootMenuDataManager.saveAdditionalConf(); + item.element + .setInnerText("Automatic Boot Timeout: " + (i == 0 ? "Disabled" : i)); + } + MenuStateEnterSetup.this.changePopupState(null); + } - }); + }); break; case SUBMENU_CHANGE_TITLE: MenuStateEnterSetup.this.changePopupState(new MenuPopupStateEditString( "Enter the title to display on the menu:", BootMenuMain.bootMenuDataManager.confMenuTitle) { @Override - protected void onSave(String str) { - str = str.trim(); - if(!StringUtils.isEmpty(str) && !str.equals(BootMenuMain.bootMenuDataManager.confMenuTitle)) { - BootMenuMain.bootMenuDataManager.confMenuTitle = str; - BootMenuMain.bootMenuDataManager.saveAdditionalConf(); - BootMenuMain.bootMenuDOM.header_title.setInnerText(str); - } + protected void onCancel() { MenuStateEnterSetup.this.changePopupState(null); } @Override - protected void onCancel() { + protected void onSave(String str) { + str = str.trim(); + if (!StringUtils.isEmpty(str) + && !str.equals(BootMenuMain.bootMenuDataManager.confMenuTitle)) { + BootMenuMain.bootMenuDataManager.confMenuTitle = str; + BootMenuMain.bootMenuDataManager.saveAdditionalConf(); + BootMenuMain.bootMenuDOM.header_title.setInnerText(str); + } MenuStateEnterSetup.this.changePopupState(null); } @@ -189,12 +208,14 @@ public class MenuStateEnterSetup extends MenuState { break; } } - @Override - protected void itemSelected(MenuItem item) { - } }; } + @Override + protected void enterPopupBlockingState() { + selectionController.setCursorEventsSuspended(true); + } + @Override protected void enterState() { selectionController.setup(); @@ -202,6 +223,11 @@ public class MenuStateEnterSetup extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_menu_select); } + @Override + protected void exitPopupBlockingState() { + selectionController.setCursorEventsSuspended(false); + } + @Override protected void exitState() { selectionController.destroy(); @@ -209,53 +235,43 @@ public class MenuStateEnterSetup extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_menu_select); } - @Override - protected void enterPopupBlockingState() { - selectionController.setCursorEventsSuspended(true); - } - - @Override - protected void exitPopupBlockingState() { - selectionController.setCursorEventsSuspended(false); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { BootMenuMain.changeState(new MenuStateBoot(false)); - }else { + } else { selectionController.handleKeyDown(keyCode); } } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + } @Override protected void update() { - + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateImportMultiSelect.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateImportMultiSelect.java index 6d38f8c4..9093270d 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateImportMultiSelect.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateImportMultiSelect.java @@ -11,18 +11,19 @@ import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.OfflineDownloadParser.Parse /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuStateImportMultiSelect extends MenuState { @@ -35,13 +36,13 @@ public class MenuStateImportMultiSelect extends MenuState { } @Override - public String getName() { - return parsedClient.launchData.displayName; + public boolean getAlwaysSelected() { + return false; } @Override - public boolean getAlwaysSelected() { - return false; + public String getName() { + return parsedClient.launchData.displayName; } } @@ -61,13 +62,13 @@ public class MenuStateImportMultiSelect extends MenuState { @Override protected void doneSelected(List selectedItems) { - if(selectedItems.isEmpty()) { + if (selectedItems.isEmpty()) { cancelSelected(); return; } MenuPopupStateLoading loadingScreen = new MenuPopupStateLoading("Importing clients..."); MenuStateImportMultiSelect.this.changePopupState(loadingScreen); - for(int i = 0, l = selectedItems.size(); i < l; ++i) { + for (int i = 0, l = selectedItems.size(); i < l; ++i) { loadingScreen.updateMessage("Importing (" + (i + 1) + " / " + l + ")..."); ParsedOfflineAdapter cl = selectedItems.get(i).parsedClient; BootMenuMain.bootMenuDataManager.installNewClientData(cl.launchData, cl.clientData, cl.blobs, true); @@ -78,6 +79,11 @@ public class MenuStateImportMultiSelect extends MenuState { }; } + @Override + protected void enterPopupBlockingState() { + selectionController.setCursorEventsSuspended(true); + } + @Override protected void enterState() { selectionController.setup(); @@ -85,6 +91,11 @@ public class MenuStateImportMultiSelect extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_menu_select); } + @Override + protected void exitPopupBlockingState() { + selectionController.setCursorEventsSuspended(false); + } + @Override protected void exitState() { selectionController.destroy(); @@ -92,53 +103,43 @@ public class MenuStateImportMultiSelect extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_menu_select); } - @Override - protected void enterPopupBlockingState() { - selectionController.setCursorEventsSuspended(true); - } - - @Override - protected void exitPopupBlockingState() { - selectionController.setCursorEventsSuspended(false); - } - @Override protected void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ESCAPE) { + if (keyCode == KeyCodes.DOM_KEY_ESCAPE) { BootMenuMain.changeState(MenuStateImportMultiSelect.this.parentState); - }else { + } else { selectionController.handleKeyDown(keyCode); } } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + } @Override protected void update() { - + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateSelectExportClients.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateSelectExportClients.java index fe1cc687..8bd9b208 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateSelectExportClients.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/MenuStateSelectExportClients.java @@ -12,23 +12,22 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MenuStateSelectExportClients extends MenuState { - private static final Logger logger = LogManager.getLogger("MenuStateSelectExportClients"); - private static class BootItem implements SelectionListController.ListItem { private final BootableClientEntry bootEntry; @@ -46,30 +45,34 @@ public class MenuStateSelectExportClients extends MenuState { } + private static final Logger logger = LogManager.getLogger("MenuStateSelectExportClients"); + protected final boolean exportEPK; protected final MenuState parentState; protected SelectionListController selectionController; - public MenuStateSelectExportClients(boolean exportEPK, MenuStateBoot parentState, List filteredList) { + public MenuStateSelectExportClients(boolean exportEPK, MenuStateBoot parentState, + List filteredList) { this.exportEPK = exportEPK; this.parentState = parentState; List lst = new ArrayList<>(filteredList.size()); - for(int i = 0, l = filteredList.size(); i < l; ++i) { + for (int i = 0, l = filteredList.size(); i < l; ++i) { lst.add(new BootItem(filteredList.get(i), (etr) -> { - MenuPopupStateLoading popupState = new MenuPopupStateLoading("Downloading: '" + etr.bootAdapter.getDisplayName() + "'..."); + MenuPopupStateLoading popupState = new MenuPopupStateLoading( + "Downloading: '" + etr.bootAdapter.getDisplayName() + "'..."); MenuStateSelectExportClients.this.changePopupState(popupState); BootMenuMain.runLaterMS(() -> { try { - if(exportEPK) { + if (exportEPK) { etr.bootAdapter.downloadEPK(popupState); - }else { + } else { etr.bootAdapter.downloadOffline(popupState); } - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Failed to download client!"); logger.error(t); - changePopupState(new MenuPopupStateConfirmation("Error: Failed to download client!\n\n" + t.toString(), - Arrays.asList("OK")) { + changePopupState(new MenuPopupStateConfirmation( + "Error: Failed to download client!\n\n" + t.toString(), Arrays.asList("OK")) { @Override protected void selectCallback(String enumValue) { BootMenuMain.changeState(parentState); @@ -89,6 +92,11 @@ public class MenuStateSelectExportClients extends MenuState { }; } + @Override + protected void enterPopupBlockingState() { + selectionController.setCursorEventsSuspended(true); + } + @Override protected void enterState() { selectionController.setup(); @@ -96,6 +104,11 @@ public class MenuStateSelectExportClients extends MenuState { BootMenuDOM.show(BootMenuMain.bootMenuDOM.footer_text_menu_select); } + @Override + protected void exitPopupBlockingState() { + selectionController.setCursorEventsSuspended(false); + } + @Override protected void exitState() { selectionController.destroy(); @@ -103,49 +116,39 @@ public class MenuStateSelectExportClients extends MenuState { BootMenuDOM.hide(BootMenuMain.bootMenuDOM.footer_text_menu_select); } - @Override - protected void enterPopupBlockingState() { - selectionController.setCursorEventsSuspended(true); - } - - @Override - protected void exitPopupBlockingState() { - selectionController.setCursorEventsSuspended(false); - } - @Override protected void handleKeyDown(int keyCode) { selectionController.handleKeyDown(keyCode); } - @Override - protected void handleKeyUp(int keyCode) { - - } - @Override protected void handleKeyRepeat(int keyCode) { selectionController.handleKeyRepeat(keyCode); } + @Override + protected void handleKeyUp(int keyCode) { + + } + @Override protected void handleOnChanged(HTMLElement htmlElement) { - + } @Override protected void handleOnClick(HTMLElement htmlElement) { - + } @Override protected void handleOnMouseOver(HTMLElement htmlElement) { - + } @Override protected void update() { - + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadFactory.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadFactory.java index de93e925..302fcddc 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadFactory.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadFactory.java @@ -26,126 +26,206 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateCertificate; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class OfflineDownloadFactory { private static final Logger logger = LogManager.getLogger("OfflineDownloadFactory"); - public static void downloadOffline(LaunchConfigEntry launchConf, ClientDataEntry clientData, - Map> loaders, IProgressMsgCallback cb) { - EaglerLoadingCache loadingCache = new EaglerLoadingCache((uuid) -> { - Supplier sup = loaders.get(uuid); - return sup != null ? sup.get() : null; - }); - switch(launchConf.type) { - case STANDARD_OFFLINE_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientStandardOffline(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for STANDARD_OFFLINE_V1!"); - } - break; - case EAGLERX_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientEaglerX18(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLERX_V1!"); - } - break; - case EAGLERX_SIGNED_V1: - if(clientData.type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE) { - downloadClientEaglerX18Signed(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLERX_SIGNED_V1!"); - } - break; - case EAGLER_1_5_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientEagler15Old(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V1!"); - } - break; - case EAGLER_1_5_V2: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE) { - downloadClientEagler15New(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); - } - break; - case EAGLER_BETA_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientEaglerB13(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); - } - break; - case PEYTON_V1: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientPeytonIndev(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for PEYTON_V1!"); - } - break; - case PEYTON_V2: - if(clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { - downloadClientPeytonAlphaBeta(launchConf, clientData, loadingCache, cb); - }else { - throw new UnsupportedOperationException("Wrong client data type " + clientData.type + " for PEYTON_V2!"); - } - break; - } - } - - static String loadTemplate(String name) { - name = "/assets/eagler/boot_menu/" + name; - String template = BootMenuAssets.loadResourceString(name); - if(template == null) { - throw new NullPointerException("Could not locate offline download template: " + name); - } - return template; - } - private static void doUpdateMessage(IProgressMsgCallback cb, String str) { logger.info(str); cb.updateMessage(str); } + private static byte[] doUseStrict(byte[] input, int removeLength, boolean addUseStrict) { + if (addUseStrict) { + byte[] useStrict = new byte[] { (byte) 34, (byte) 117, (byte) 115, (byte) 101, (byte) 32, (byte) 115, + (byte) 116, (byte) 114, (byte) 105, (byte) 99, (byte) 116, (byte) 34, (byte) 59, (byte) 10 }; + while (removeLength < input.length && (input[removeLength] == '\n' || input[removeLength] == '\r')) { + ++removeLength; + } + int endRemoveLength = input.length; + while (endRemoveLength > removeLength + 1 + && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { + --endRemoveLength; + } + byte[] ret = new byte[endRemoveLength - removeLength + useStrict.length]; + System.arraycopy(useStrict, 0, ret, 0, useStrict.length); + System.arraycopy(input, removeLength, ret, useStrict.length, endRemoveLength - removeLength); + return ret; + } else { + int endRemoveLength = input.length; + while (endRemoveLength > removeLength + 1 + && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { + --endRemoveLength; + } + if (removeLength > 0 || endRemoveLength != input.length) { + return Arrays.copyOfRange(input, removeLength, endRemoveLength); + } else { + return input; + } + } + } + + private static void downloadClientEagler15New(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); + if (classesJSBytes == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Resolving classes_server.js (" + clientData.integratedServer + ")"); + byte[] classesServerJSBytes = loadingCache.get(clientData.integratedServer); + if (classesServerJSBytes == null) { + String msg = "Could not resolve classes_server.js! (" + clientData.integratedServer + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); + byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); + if (assetsEPKBytes == null) { + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Loading offline_template_eaglercraft_1_5.html"); + String template = loadTemplate("offline_template_eaglercraft_1_5.html"); + template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); + template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); + int relayIdCount = RelayRandomizeHelper.countRelayMacro(launchConf.launchOpts); + template = template.replace("${relayId_max}", Integer.toString(relayIdCount)); + String launchOptsFormatted; + try { + launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); + } catch (JSONException ex) { + throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); + } + if (relayIdCount > 0) { + launchOptsFormatted = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(launchOptsFormatted); + } + template = template.replace("${launch_opts}", launchOptsFormatted); + JSONObject launchConfJSON = new JSONObject(); + launchConf.writeJSON(launchConfJSON); + template = template.replace("${launch_conf_json}", launchConfJSON.toString()); + template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + template = template.replace("${classes_server_js}", + new String(removeUseStrict(classesServerJSBytes), StandardCharsets.UTF_8)); + doUpdateMessage(cb, "Downloading file..."); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); + } + + private static void downloadClientEagler15Old(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); + if (classesJSBytes == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); + byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); + if (assetsEPKBytes == null) { + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Loading offline_template_eaglercraft_1_5_legacy.html"); + String template = loadTemplate("offline_template_eaglercraft_1_5_legacy.html"); + template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); + template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); + JSONObject launchConfJSON = new JSONObject(); + launchConf.writeJSON(launchConfJSON); + template = template.replace("${launch_conf_json}", launchConfJSON.toString()); + template = template.replace("${launch_opts}", ClientBootFactory.translateNBTOpts(launchConf.launchOpts)); + template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + doUpdateMessage(cb, "Downloading file..."); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); + } + + private static void downloadClientEaglerB13(LaunchConfigEntry launchConf, ClientDataEntry clientData, + EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { + if (clientData.epkFiles.size() != 1) { + throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); + } + doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); + byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); + if (classesJSBytes == null) { + String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); + byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); + if (assetsEPKBytes == null) { + String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; + logger.error(msg); + throw new NullPointerException(msg); + } + doUpdateMessage(cb, "Loading offline_template_eaglercraft_b1_3.html"); + String template = loadTemplate("offline_template_eaglercraft_b1_3.html"); + template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); + template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); + JSONObject launchConfJSON = new JSONObject(); + launchConf.writeJSON(launchConfJSON); + template = template.replace("${launch_conf_json}", launchConfJSON.toString()); + template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + doUpdateMessage(cb, "Downloading file..."); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); + } + private static void downloadClientEaglerX18(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { + if (classesJSBytes == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } String assetsEPKVal; int epkNum = clientData.epkFiles.size(); - if(epkNum > 1 || !StringUtils.isEmpty(clientData.epkFiles.get(0).extractTo)) { + if (epkNum > 1 || !StringUtils.isEmpty(clientData.epkFiles.get(0).extractTo)) { StringBuilder assetsEPKBuilder = new StringBuilder("[ "); - for(int i = 0; i < epkNum; ++i) { + for (int i = 0; i < epkNum; ++i) { EPKDataEntry epk = clientData.epkFiles.get(i); doUpdateMessage(cb, "Resolving assets.epk (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"); byte[] epkData = loadingCache.get(epk.dataUUID); - if(epkData == null) { + if (epkData == null) { String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"; logger.error(msg); throw new NullPointerException(msg); } - if(i > 0) { + if (i > 0) { assetsEPKBuilder.append(", "); } assetsEPKBuilder.append("{ url: \"data:application/octet-stream;base64,"); @@ -156,11 +236,11 @@ public class OfflineDownloadFactory { } assetsEPKBuilder.append(" ]"); assetsEPKVal = assetsEPKBuilder.toString(); - }else { + } else { EPKDataEntry epk = clientData.epkFiles.get(0); doUpdateMessage(cb, "Resolving assets.epk (" + epk.dataUUID + ", path: /)"); byte[] epkData = loadingCache.get(epk.dataUUID); - if(epkData == null) { + if (epkData == null) { String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /)"; logger.error(msg); throw new NullPointerException(msg); @@ -176,10 +256,10 @@ public class OfflineDownloadFactory { String launchOptsFormatted; try { launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); - }catch(JSONException ex) { + } catch (JSONException ex) { throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); } - if(relayIdCount > 0) { + if (relayIdCount > 0) { launchOptsFormatted = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(launchOptsFormatted); } template = template.replace("${launch_opts}", launchOptsFormatted); @@ -187,23 +267,25 @@ public class OfflineDownloadFactory { launchConf.writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); template = template.replace(StringUtils.reverse("}kpe_stessa{$"), assetsEPKVal); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); } private static void downloadClientEaglerX18Signed(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { doUpdateMessage(cb, "Resolving client signature (" + clientData.clientSignature + ")"); byte[] clientSignature = loadingCache.get(clientData.clientSignature); - if(clientSignature == null) { + if (clientSignature == null) { String msg = "Could not resolve client signature! (" + clientData.clientSignature + ")"; logger.error(msg); throw new NullPointerException(msg); } doUpdateMessage(cb, "Resolving client payload (" + clientData.mainPayload + ")"); byte[] clientPayload = loadingCache.get(clientData.mainPayload); - if(clientPayload == null) { + if (clientPayload == null) { String msg = "Could not resolve client payload! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); @@ -212,22 +294,23 @@ public class OfflineDownloadFactory { UpdateCertificate cert = null; try { cert = UpdateCertificate.parseAndVerifyCertificate(clientSignature); - }catch(CertificateInvalidException | IOException e) { + } catch (CertificateInvalidException | IOException e) { logger.error("Signature invalid or not recognized!"); logger.error(e); logger.info("The client will be exported anyway. RIP"); } - if(cert != null) { - if(!cert.isBundleDataValid(clientPayload)) { + if (cert != null) { + if (!cert.isBundleDataValid(clientPayload)) { logger.error("Client payload checksum does not match the certificate!"); cert = null; } - }else { + } else { logger.info("Signature is valid: {} - {}", cert.bundleDisplayName, cert.bundleDisplayVersion); } doUpdateMessage(cb, "Loading offline_template_eaglercraftX_1_8_signed.html"); String template = loadTemplate("offline_template_eaglercraftX_1_8_signed.html"); - template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(cert != null ? (cert.bundleDisplayName + " " + cert.bundleDisplayVersion) : launchConf.displayName)); + template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape( + cert != null ? (cert.bundleDisplayName + " " + cert.bundleDisplayVersion) : launchConf.displayName)); SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy"); template = template.replace("${date}", df.format(new Date())); int relayIdCount = RelayRandomizeHelper.countRelayMacro(launchConf.launchOpts); @@ -235,10 +318,10 @@ public class OfflineDownloadFactory { String launchOptsFormatted; try { launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); - }catch(JSONException ex) { + } catch (JSONException ex) { throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); } - if(relayIdCount > 0) { + if (relayIdCount > 0) { launchOptsFormatted = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(launchOptsFormatted); } template = template.replace("${launch_opts}", launchOptsFormatted); @@ -246,155 +329,41 @@ public class OfflineDownloadFactory { launchConf.writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); String fileName; - if(cert != null) { + if (cert != null) { String d8 = df.format(new Date(cert.sigTimestamp)); template = template.replace("${signature_details}", cert.bundleDisplayName + " " + cert.bundleDisplayVersion + " (" + cert.bundleVersionInteger + ") " + d8 + ", Author: " + cert.bundleAuthorName); - template = template.replace("${client_name_or_origin_date}", "This file is from " + d8 + ""); + template = template.replace("${client_name_or_origin_date}", + "This file is from " + d8 + ""); fileName = cert.bundleDisplayName + "_" + cert.bundleDisplayVersion + "_Offline_Signed"; - }else { + } else { template = template.replace("${signature_details}", "INVALID! (Or just from a 3rd party client)"); - template = template.replace("${client_name_or_origin_date}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); + template = template.replace("${client_name_or_origin_date}", + HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); fileName = launchConf.displayName; } template = template.replace("${client_signature}", Base64.encodeBase64String(clientSignature)); template = template.replace("${client_bundle}", Base64.encodeBase64String(clientPayload)); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(fileName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); - } - - private static void downloadClientEagler15New(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Resolving classes_server.js (" + clientData.integratedServer + ")"); - byte[] classesServerJSBytes = loadingCache.get(clientData.integratedServer); - if(classesServerJSBytes == null) { - String msg = "Could not resolve classes_server.js! (" + clientData.integratedServer + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); - byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); - if(assetsEPKBytes == null) { - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Loading offline_template_eaglercraft_1_5.html"); - String template = loadTemplate("offline_template_eaglercraft_1_5.html"); - template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); - template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); - int relayIdCount = RelayRandomizeHelper.countRelayMacro(launchConf.launchOpts); - template = template.replace("${relayId_max}", Integer.toString(relayIdCount)); - String launchOptsFormatted; - try { - launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); - }catch(JSONException ex) { - throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); - } - if(relayIdCount > 0) { - launchOptsFormatted = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(launchOptsFormatted); - } - template = template.replace("${launch_opts}", launchOptsFormatted); - JSONObject launchConfJSON = new JSONObject(); - launchConf.writeJSON(launchConfJSON); - template = template.replace("${launch_conf_json}", launchConfJSON.toString()); - template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); - template = template.replace("${classes_server_js}", new String(removeUseStrict(classesServerJSBytes), StandardCharsets.UTF_8)); - doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); - } - - private static void downloadClientEagler15Old(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); - byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); - if(assetsEPKBytes == null) { - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Loading offline_template_eaglercraft_1_5_legacy.html"); - String template = loadTemplate("offline_template_eaglercraft_1_5_legacy.html"); - template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); - template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); - JSONObject launchConfJSON = new JSONObject(); - launchConf.writeJSON(launchConfJSON); - template = template.replace("${launch_conf_json}", launchConfJSON.toString()); - template = template.replace("${launch_opts}", ClientBootFactory.translateNBTOpts(launchConf.launchOpts)); - template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); - doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); - } - - private static void downloadClientEaglerB13(LaunchConfigEntry launchConf, ClientDataEntry clientData, - EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - if(clientData.epkFiles.size() != 1) { - throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); - } - doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); - byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { - String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); - byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); - if(assetsEPKBytes == null) { - String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; - logger.error(msg); - throw new NullPointerException(msg); - } - doUpdateMessage(cb, "Loading offline_template_eaglercraft_b1_3.html"); - String template = loadTemplate("offline_template_eaglercraft_b1_3.html"); - template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); - template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); - JSONObject launchConfJSON = new JSONObject(); - launchConf.writeJSON(launchConfJSON); - template = template.replace("${launch_conf_json}", launchConfJSON.toString()); - template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); - doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); + EagRuntime.downloadFileWithName(fileName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); } private static void downloadClientPeytonAlphaBeta(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - if(clientData.epkFiles.size() != 1) { + if (clientData.epkFiles.size() != 1) { throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); } doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { + if (classesJSBytes == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); - if(assetsEPKBytes == null) { + if (assetsEPKBytes == null) { String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; logger.error(msg); throw new NullPointerException(msg); @@ -406,7 +375,7 @@ public class OfflineDownloadFactory { String launchOptsFormatted; try { launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); - }catch(JSONException ex) { + } catch (JSONException ex) { throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); } template = template.replace("${launch_opts}", launchOptsFormatted); @@ -414,26 +383,28 @@ public class OfflineDownloadFactory { launchConf.writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); } private static void downloadClientPeytonIndev(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { - if(clientData.epkFiles.size() != 1) { + if (clientData.epkFiles.size() != 1) { throw new UnsupportedOperationException("Wrong number of EPK files: " + clientData.epkFiles.size()); } doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { + if (classesJSBytes == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } doUpdateMessage(cb, "Resolving assets.epk (" + clientData.epkFiles.get(0).dataUUID + ")"); byte[] assetsEPKBytes = loadingCache.get(clientData.epkFiles.get(0).dataUUID); - if(assetsEPKBytes == null) { + if (assetsEPKBytes == null) { String msg = "Could not resolve assets.epk! (" + clientData.epkFiles.get(0).dataUUID + ")"; logger.error(msg); throw new NullPointerException(msg); @@ -446,30 +417,27 @@ public class OfflineDownloadFactory { launchConf.writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); template = template.replace(StringUtils.reverse("}kpe_stessa{$"), Base64.encodeBase64String(assetsEPKBytes)); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); - } - - static String stupidJSONEscape(String str) { - str = (new JSONArray().put(str)).toString(); - return str.substring(2, str.length() - 2); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); } private static void downloadClientStandardOffline(LaunchConfigEntry launchConf, ClientDataEntry clientData, EaglerLoadingCache loadingCache, IProgressMsgCallback cb) { doUpdateMessage(cb, "Resolving classes.js (" + clientData.mainPayload + ")"); byte[] classesJSBytes = loadingCache.get(clientData.mainPayload); - if(classesJSBytes == null) { + if (classesJSBytes == null) { String msg = "Could not resolve classes.js! (" + clientData.mainPayload + ")"; logger.error(msg); throw new NullPointerException(msg); } JSONArray assetsEPKs = new JSONArray(); - for(EPKDataEntry epk : clientData.epkFiles) { + for (EPKDataEntry epk : clientData.epkFiles) { doUpdateMessage(cb, "Resolving assets.epk (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"); byte[] epkData = loadingCache.get(epk.dataUUID); - if(epkData == null) { + if (epkData == null) { String msg = "Could not resolve assets.epk! (" + epk.dataUUID + ", path: /" + epk.extractTo + ")"; logger.error(msg); throw new NullPointerException(msg); @@ -484,18 +452,20 @@ public class OfflineDownloadFactory { template = template.replace("${client_name}", HtmlEscapers.htmlEscaper().escape(launchConf.displayName)); template = template.replace("${date}", (new SimpleDateFormat("MM/dd/yyyy")).format(new Date())); template = template.replace("${launch_opts_var_name}", stupidJSONEscape(launchConf.launchOptsVar)); - template = template.replace("${launch_opts_var_container_name}", stupidJSONEscape(launchConf.launchOptsContainerVar)); - template = template.replace("${launch_opts_var_assetsURI_name}", stupidJSONEscape(launchConf.launchOptsAssetsURIVar)); + template = template.replace("${launch_opts_var_container_name}", + stupidJSONEscape(launchConf.launchOptsContainerVar)); + template = template.replace("${launch_opts_var_assetsURI_name}", + stupidJSONEscape(launchConf.launchOptsAssetsURIVar)); template = template.replace("${main_function_name}", stupidJSONEscape(launchConf.mainFunction)); int relayIdCount = RelayRandomizeHelper.countRelayMacro(launchConf.launchOpts); template = template.replace("${relayId_max}", Integer.toString(relayIdCount)); String launchOptsFormatted; try { launchOptsFormatted = (new JSONObject(launchConf.launchOpts)).toString(4); - }catch(JSONException ex) { + } catch (JSONException ex) { throw new IllegalArgumentException("Launch options JSON is invalid! " + ex.toString()); } - if(relayIdCount > 0) { + if (relayIdCount > 0) { launchOptsFormatted = RelayRandomizeHelper.replaceRelayMacroWithEqRelayId(launchOptsFormatted); } template = template.replace("${launch_opts}", launchOptsFormatted); @@ -503,85 +473,148 @@ public class OfflineDownloadFactory { launchConf.writeJSON(launchConfJSON); template = template.replace("${launch_conf_json}", launchConfJSON.toString()); template = template.replace(StringUtils.reverse("}kpe_stessa{$"), assetsEPKs.toString()); - template = template.replace(StringUtils.reverse("}sj_sessalc{$"), new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); + template = template.replace(StringUtils.reverse("}sj_sessalc{$"), + new String(removeUseStrict(classesJSBytes), StandardCharsets.UTF_8)); doUpdateMessage(cb, "Downloading file..."); - EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", template.getBytes(StandardCharsets.UTF_8)); + EagRuntime.downloadFileWithName(launchConf.displayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + ".html", + template.getBytes(StandardCharsets.UTF_8)); + } + + public static void downloadOffline(LaunchConfigEntry launchConf, ClientDataEntry clientData, + Map> loaders, IProgressMsgCallback cb) { + EaglerLoadingCache loadingCache = new EaglerLoadingCache( + (uuid) -> { + Supplier sup = loaders.get(uuid); + return sup != null ? sup.get() : null; + }); + switch (launchConf.type) { + case STANDARD_OFFLINE_V1: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientStandardOffline(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for STANDARD_OFFLINE_V1!"); + } + break; + case EAGLERX_V1: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientEaglerX18(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLERX_V1!"); + } + break; + case EAGLERX_SIGNED_V1: + if (clientData.type == EnumClientFormatType.EAGLER_SIGNED_OFFLINE) { + downloadClientEaglerX18Signed(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLERX_SIGNED_V1!"); + } + break; + case EAGLER_1_5_V1: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientEagler15Old(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V1!"); + } + break; + case EAGLER_1_5_V2: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE) { + downloadClientEagler15New(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); + } + break; + case EAGLER_BETA_V1: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientEaglerB13(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for EAGLER_1_5_V2!"); + } + break; + case PEYTON_V1: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientPeytonIndev(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for PEYTON_V1!"); + } + break; + case PEYTON_V2: + if (clientData.type == EnumClientFormatType.EAGLER_STANDARD_OFFLINE) { + downloadClientPeytonAlphaBeta(launchConf, clientData, loadingCache, cb); + } else { + throw new UnsupportedOperationException( + "Wrong client data type " + clientData.type + " for PEYTON_V2!"); + } + break; + } + } + + static String loadTemplate(String name) { + name = "/assets/eagler/boot_menu/" + name; + String template = BootMenuAssets.loadResourceString(name); + if (template == null) { + throw new NullPointerException("Could not locate offline download template: " + name); + } + return template; } public static byte[] removeClientScriptElement(byte[] input, boolean addUseStrict) { - byte[] str = "\"use strict\";\r\nif(typeof window !== \"undefined\") window.eaglercraftXClientScriptElement = document.currentScript;".getBytes(StandardCharsets.UTF_8); - if(input.length < str.length + 2) { + byte[] str = "\"use strict\";\r\nif(typeof window !== \"undefined\") window.eaglercraftXClientScriptElement = document.currentScript;" + .getBytes(StandardCharsets.UTF_8); + if (input.length < str.length + 2) { return input; } - if(Arrays.equals(str, 0, str.length, input, 0, str.length)) { + if (Arrays.equals(str, 0, str.length, input, 0, str.length)) { return doUseStrict(input, str.length, addUseStrict); } - if(Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { + if (Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { return doUseStrict(input, str.length + 1, addUseStrict); } - if(Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { + if (Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { return doUseStrict(input, str.length + 2, addUseStrict); } - str = "\"use strict\";\nif(typeof window !== \"undefined\") window.eaglercraftXClientScriptElement = document.currentScript;".getBytes(StandardCharsets.UTF_8); - if(input.length < str.length) { + str = "\"use strict\";\nif(typeof window !== \"undefined\") window.eaglercraftXClientScriptElement = document.currentScript;" + .getBytes(StandardCharsets.UTF_8); + if (input.length < str.length) { return input; } - if(Arrays.equals(str, 0, str.length, input, 0, str.length)) { + if (Arrays.equals(str, 0, str.length, input, 0, str.length)) { return doUseStrict(input, str.length, addUseStrict); } - if(Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { + if (Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { return doUseStrict(input, str.length + 1, addUseStrict); } - if(Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { + if (Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { return doUseStrict(input, str.length + 2, addUseStrict); } - if(addUseStrict) { - str = new byte[] {(byte)34, (byte)117, (byte)115, (byte)101, (byte)32, (byte)115, (byte)116, (byte)114, (byte)105, (byte)99, (byte)116, (byte)34, (byte)59}; - if(Arrays.equals(str, 0, str.length, input, 0, str.length)) { + if (addUseStrict) { + str = new byte[] { (byte) 34, (byte) 117, (byte) 115, (byte) 101, (byte) 32, (byte) 115, (byte) 116, + (byte) 114, (byte) 105, (byte) 99, (byte) 116, (byte) 34, (byte) 59 }; + if (Arrays.equals(str, 0, str.length, input, 0, str.length)) { return input; } - if(Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { + if (Arrays.equals(str, 0, str.length, input, 1, str.length + 1)) { return input; } - if(Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { + if (Arrays.equals(str, 0, str.length, input, 2, str.length + 2)) { return input; } return doUseStrict(input, 0, addUseStrict); - }else { + } else { return input; } } - private static byte[] doUseStrict(byte[] input, int removeLength, boolean addUseStrict) { - if(addUseStrict) { - byte[] useStrict = new byte[] {(byte)34, (byte)117, (byte)115, (byte)101, (byte)32, (byte)115, (byte)116, (byte)114, (byte)105, (byte)99, (byte)116, (byte)34, (byte)59, (byte)10}; - while(removeLength < input.length && (input[removeLength] == '\n' || input[removeLength] == '\r')) { - ++removeLength; - } - int endRemoveLength = input.length; - while(endRemoveLength > removeLength + 1 && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { - --endRemoveLength; - } - byte[] ret = new byte[endRemoveLength - removeLength + useStrict.length]; - System.arraycopy(useStrict, 0, ret, 0, useStrict.length); - System.arraycopy(input, removeLength, ret, useStrict.length, endRemoveLength - removeLength); - return ret; - }else { - int endRemoveLength = input.length; - while(endRemoveLength > removeLength + 1 && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { - --endRemoveLength; - } - if(removeLength > 0 || endRemoveLength != input.length) { - return Arrays.copyOfRange(input, removeLength, endRemoveLength); - }else { - return input; - } - } - } - public static byte[] removeUseStrict(byte[] input) { - byte[] str = new byte[] {(byte)34, (byte)117, (byte)115, (byte)101, (byte)32, (byte)115, (byte)116, (byte)114, (byte)105, (byte)99, (byte)116, (byte)34, (byte)59}; - if(input.length < str.length + 2) { + byte[] str = new byte[] { (byte) 34, (byte) 117, (byte) 115, (byte) 101, (byte) 32, (byte) 115, (byte) 116, + (byte) 114, (byte) 105, (byte) 99, (byte) 116, (byte) 34, (byte) 59 }; + if (input.length < str.length + 2) { return input; } int i = 0; @@ -589,25 +622,31 @@ public class OfflineDownloadFactory { || Arrays.equals(str, 0, str.length, input, ++i, str.length + i) || Arrays.equals(str, 0, str.length, input, ++i, str.length + i)) { int removeLength = str.length + i; - while(removeLength < input.length && (input[removeLength] == '\n' || input[removeLength] == '\r')) { + while (removeLength < input.length && (input[removeLength] == '\n' || input[removeLength] == '\r')) { ++removeLength; } int endRemoveLength = input.length; - while(endRemoveLength > removeLength + 1 && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { + while (endRemoveLength > removeLength + 1 + && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { --endRemoveLength; } return Arrays.copyOfRange(input, removeLength, endRemoveLength); - }else { + } else { int endRemoveLength = input.length; - while(endRemoveLength > 1 && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { + while (endRemoveLength > 1 && (input[endRemoveLength - 1] == '\n' || input[endRemoveLength - 1] == '\r')) { --endRemoveLength; } - if(endRemoveLength != input.length) { + if (endRemoveLength != input.length) { return Arrays.copyOfRange(input, 0, endRemoveLength); - }else { + } else { return input; } } } + static String stupidJSONEscape(String str) { + str = (new JSONArray().put(str)).toString(); + return str.substring(2, str.length() - 2); + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadParser.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadParser.java index 6bb96983..0391795a 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadParser.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/OfflineDownloadParser.java @@ -22,115 +22,22 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class OfflineDownloadParser { - private static final Logger logger = LogManager.getLogger("OfflineDownloadParser"); - - public static EnumOfflineParseType detectOfflineType(String offlineDownloadData) { - int hintIndex = offlineDownloadData.indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); - if(hintIndex != -1) { - hintIndex += 42; - int closeTagIndex = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), hintIndex); - if(closeTagIndex != -1) { - try { - JSONObject parseHint = new JSONObject(offlineDownloadData.substring(hintIndex, closeTagIndex)); - return EnumOfflineParseType.valueOf(parseHint.getString("type")); - }catch(JSONException | IllegalArgumentException ex) { - logger.error("This offline download has a parse hint section, but the JSON is corrupt!"); - logger.error(ex); - } - } - } - if(offlineDownloadData.startsWith("EAGPKG$$")) { - logger.info("Detected format: EAGLERCRAFT_EPK_FILE"); - return EnumOfflineParseType.EAGLERCRAFT_EPK_FILE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad>\"erutangiStneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<")), 32, 2048)) { - logger.info("Detected format: EAGLERCRAFTX_1_8_SIGNED (post u24)"); - return EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = erutangiStneilCXtfarcrelgae.wodniw")), 32, 2048)) { - logger.info("Detected format: EAGLERCRAFTX_1_8_SIGNED (pre u24)"); - return EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")), 8388608, offlineDownloadData.length() - 1048576)) { - logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (en_US)"); - return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")), 8388608, offlineDownloadData.length() - 1048576)) { - logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (International)"); - return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse("{ = stpOtfarcrelgae.wodniw")), 32, 2048) && foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">\"rekrow_ps\"=di \"rekrowrelgae/txet\"=epyt tpircs<")), 4194304, offlineDownloadData.length() - 1048576)) { - logger.info("Detected format: EAGLERCRAFTX_1_5_NEW_OFFLINE"); - return EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\"\t\t\n[ = stpOtfarcenim.wodniw")), 32, 2048) || foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\" \n[ = stpOtfarcenim.wodniw")), 32, 2048)) { - if(foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"b1.3\\\"\\n\""), 524288, offlineDownloadData.length() - 1048576)) { - logger.info("Detected format: EAGLERCRAFT_BETA_B1_3_OFFLINE"); - return EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; - }else if(foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"1.5.2\\\"\\n\""), 2097152, offlineDownloadData.length() - 2097152)) { - logger.info("Detected format: EAGLERCRAFTX_1_5_OLD_OFFLINE"); - return EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; - } - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse("{ = gifnoc.wodniw")), 32, 512)) { - logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA"); - return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\"\t\t\n[ = gifnoCcissalc.wodniw")), 32, 512) || foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\" \n[ = gifnoCcissalc.wodniw")), 32, 512)) { - logger.info("Detected format: PEYTONPLAYZ585_INDEV"); - return EnumOfflineParseType.PEYTONPLAYZ585_INDEV; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/eltit<\n>/ \"8-FTU\"=tesrahc atem<\n>daeh<")), 32, 2048)) { - logger.info("Detected format: EAGLERCRAFTX_1_5_NEW_OFFLINE (maybe)"); - return EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/eltit<\n>daeh<")), 32, 2048)) { - if(foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"b1.3\\\"\\n\""), 524288, offlineDownloadData.length() - 1048576)) { - logger.info("Detected format: EAGLERCRAFT_BETA_B1_3_OFFLINE"); - return EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; - }else if(foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"1.5.2\\\"\\n\""), 2097152, offlineDownloadData.length() - 2097152)) { - logger.info("Detected format: EAGLERCRAFTX_1_5_OLD_OFFLINE"); - return EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; - } - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/<8.1 XtfarcrelgaE>eltit<\n>/ \"8.8.1 ,8.1 ,tfarcenim ,xtfarcrelgae ,tfarcrelgae\"=tnetnoc \"sdrowyek\"=eman atem<\n>/ \"enilffO 8.1 XtfarcrelgaE\"=tnetnoc \"noitpircsed\"=eman atem<")), 32, 2048)) { - logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (maybe)"); - return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/<3.7.1 ateB>eltit<")), 8, 512)) { - logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA (maybe)"); - return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/<6.2.1v ahplA>eltit<")), 8, 512)) { - logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA (maybe)"); - return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; - } - if(foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/eltit<")), 8, 512)) { - logger.info("Detected format: PEYTONPLAYZ585_INDEV (maybe)"); - return EnumOfflineParseType.PEYTONPLAYZ585_INDEV; - } - return null; - } - - private static boolean foundWithin(int idx, int min, int max) { - return idx >= min && idx < max; - } - public static class ParsedOfflineAdapter { public final EnumOfflineParseType parseType; @@ -156,14 +63,193 @@ public class OfflineDownloadParser { } + public static class TagIsolator { + + protected final String openTag; + protected final String closeTag; + protected final String str; + protected int currentIndex = 0; + + public TagIsolator(String openTag, String closeTag, String str) { + this.openTag = openTag; + this.closeTag = closeTag; + this.str = str; + } + + public List getAllTags() { + List ret = new ArrayList<>(); + String str; + while ((str = nextScript()) != null) { + ret.add(str); + } + return ret; + } + + public String nextScript() { + if (currentIndex != -1) { + currentIndex = str.indexOf(openTag, currentIndex); + if (currentIndex == -1) { + return null; + } + currentIndex += openTag.length(); + int i2 = str.indexOf(closeTag, currentIndex); + if (i2 == -1) { + currentIndex = -1; + return null; + } + String ret = str.substring(currentIndex, i2); + currentIndex = i2 + closeTag.length(); + return ret; + } else { + return null; + } + } + + } + + private static final Logger logger = LogManager.getLogger("OfflineDownloadParser"); + + public static EnumOfflineParseType detectOfflineType(String offlineDownloadData) { + int hintIndex = offlineDownloadData + .indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); + if (hintIndex != -1) { + hintIndex += 42; + int closeTagIndex = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), hintIndex); + if (closeTagIndex != -1) { + try { + JSONObject parseHint = new JSONObject(offlineDownloadData.substring(hintIndex, closeTagIndex)); + return EnumOfflineParseType.valueOf(parseHint.getString("type")); + } catch (JSONException | IllegalArgumentException ex) { + logger.error("This offline download has a parse hint section, but the JSON is corrupt!"); + logger.error(ex); + } + } + } + if (offlineDownloadData.startsWith("EAGPKG$$")) { + logger.info("Detected format: EAGLERCRAFT_EPK_FILE"); + return EnumOfflineParseType.EAGLERCRAFT_EPK_FILE; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse( + ",46esab;maerts-tetco/noitacilppa:atad>\"erutangiStneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<")), + 32, 2048)) { + logger.info("Detected format: EAGLERCRAFTX_1_8_SIGNED (post u24)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" = erutangiStneilCXtfarcrelgae.wodniw")), + 32, 2048)) { + logger.info("Detected format: EAGLERCRAFTX_1_8_SIGNED (pre u24)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")), + 8388608, offlineDownloadData.length() - 1048576)) { + logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (en_US)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils.reverse( + ",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")), + 8388608, offlineDownloadData.length() - 1048576)) { + logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (International)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse("]OFNI[ :partstooBredaoL")), 0, 16384)) { + if (offlineDownloadData.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")) != -1) { + logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (WASM-GC)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; + } + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse("{ = stpOtfarcrelgae.wodniw")), 32, 2048) + && foundWithin( + offlineDownloadData + .indexOf(StringUtils.reverse(">\"rekrow_ps\"=di \"rekrowrelgae/txet\"=epyt tpircs<")), + 4194304, offlineDownloadData.length() - 1048576)) { + logger.info("Detected format: EAGLERCRAFTX_1_5_NEW_OFFLINE"); + return EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\"\t\t\n[ = stpOtfarcenim.wodniw")), 32, + 2048) + || foundWithin(offlineDownloadData + .indexOf(StringUtils.reverse(",\"emarf_emag\" \n[ = stpOtfarcenim.wodniw")), 32, 2048)) { + if (foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"b1.3\\\"\\n\""), 524288, + offlineDownloadData.length() - 1048576)) { + logger.info("Detected format: EAGLERCRAFT_BETA_B1_3_OFFLINE"); + return EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; + } else if (foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"1.5.2\\\"\\n\""), 2097152, + offlineDownloadData.length() - 2097152)) { + logger.info("Detected format: EAGLERCRAFTX_1_5_OLD_OFFLINE"); + return EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; + } + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse("{ = gifnoc.wodniw")), 32, 512)) { + logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA"); + return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils.reverse(",\"emarf_emag\"\t\t\n[ = gifnoCcissalc.wodniw")), 32, + 512) + || foundWithin(offlineDownloadData + .indexOf(StringUtils.reverse(",\"emarf_emag\" \n[ = gifnoCcissalc.wodniw")), 32, 512)) { + logger.info("Detected format: PEYTONPLAYZ585_INDEV"); + return EnumOfflineParseType.PEYTONPLAYZ585_INDEV; + } + if (foundWithin( + offlineDownloadData.indexOf(StringUtils + .reverse(">eltit/eltit<\n>/ \"8-FTU\"=tesrahc atem<\n>daeh<")), + 32, 2048)) { + logger.info("Detected format: EAGLERCRAFTX_1_5_NEW_OFFLINE (maybe)"); + return EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/eltit<\n>daeh<")), + 32, 2048)) { + if (foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"b1.3\\\"\\n\""), 524288, + offlineDownloadData.length() - 1048576)) { + logger.info("Detected format: EAGLERCRAFT_BETA_B1_3_OFFLINE"); + return EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE; + } else if (foundWithin(offlineDownloadData.indexOf("\"eaglercraft.minecraft = \\\"1.5.2\\\"\\n\""), 2097152, + offlineDownloadData.length() - 2097152)) { + logger.info("Detected format: EAGLERCRAFTX_1_5_OLD_OFFLINE"); + return EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE; + } + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse( + ">eltit/<8.1 XtfarcrelgaE>eltit<\n>/ \"8.8.1 ,8.1 ,tfarcenim ,xtfarcrelgae ,tfarcrelgae\"=tnetnoc \"sdrowyek\"=eman atem<\n>/ \"enilffO 8.1 XtfarcrelgaE\"=tnetnoc \"noitpircsed\"=eman atem<")), + 32, 2048)) { + logger.info("Detected format: EAGLERCRAFTX_1_8_OFFLINE (maybe)"); + return EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/<3.7.1 ateB>eltit<")), 8, 512)) { + logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA (maybe)"); + return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/<6.2.1v ahplA>eltit<")), 8, 512)) { + logger.info("Detected format: PEYTONPLAYZ585_ALPHA_BETA (maybe)"); + return EnumOfflineParseType.PEYTONPLAYZ585_ALPHA_BETA; + } + if (foundWithin(offlineDownloadData.indexOf(StringUtils.reverse(">eltit/eltit<")), 8, 512)) { + logger.info("Detected format: PEYTONPLAYZ585_INDEV (maybe)"); + return EnumOfflineParseType.PEYTONPLAYZ585_INDEV; + } + return null; + } + + private static boolean foundWithin(int idx, int min, int max) { + return idx >= min && idx < max; + } + public static List parseOffline(EnumOfflineParseType parseType, String offlineDownloadData) { - if(parseType == null) { + if (parseType == null) { parseType = detectOfflineType(offlineDownloadData); - if(parseType == null) { + if (parseType == null) { throw new IllegalArgumentException("Could not automatically detect offline download type!"); } } - switch(parseType) { + switch (parseType) { case EAGLERCRAFTX_1_8_OFFLINE: return parseOfflineEaglerX18(offlineDownloadData); case EAGLERCRAFTX_1_8_SIGNED: @@ -189,104 +275,270 @@ public class OfflineDownloadParser { } } - public static class TagIsolator { - - protected final String openTag; - protected final String closeTag; - protected final String str; - protected int currentIndex = 0; - - public TagIsolator(String openTag, String closeTag, String str) { - this.openTag = openTag; - this.closeTag = closeTag; - this.str = str; - } - - public String nextScript() { - if(currentIndex != -1) { - currentIndex = str.indexOf(openTag, currentIndex); - if(currentIndex == -1) { - return null; - } - currentIndex += openTag.length(); - int i2 = str.indexOf(closeTag, currentIndex); - if(i2 == -1) { - currentIndex = -1; - return null; - } - String ret = str.substring(currentIndex, i2); - currentIndex = i2 + closeTag.length(); - return ret; - }else { - return null; - } - } - - public List getAllTags() { - List ret = new ArrayList<>(); - String str; - while((str = nextScript()) != null) { - ret.add(str); - } - return ret; - } - - } - - private static LaunchConfigEntry tryReadParseHint(EnumOfflineParseType expectedType, String offlineDownloadData) { - int hintIndex = offlineDownloadData.indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); - if(hintIndex != -1) { - hintIndex += 42; - int closeTagIndex = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), hintIndex); - if(closeTagIndex != -1) { - try { - JSONObject parseHint = new JSONObject(offlineDownloadData.substring(hintIndex, closeTagIndex)); - EnumOfflineParseType realType = EnumOfflineParseType.valueOf(parseHint.getString("type")); - if(realType != expectedType) { - throw new IllegalStateException("The offline download type is not \"" + expectedType + "\", metadata says it is \"" + realType + "\"!"); - } - JSONObject launchConf = parseHint.getJSONObject("launchConf"); - EaglercraftUUID theUUID = EaglercraftUUID.fromString(launchConf.getString("uuid")); - return new LaunchConfigEntry(theUUID, launchConf); - }catch(JSONException | IllegalArgumentException ex) { - logger.error("This offline download has a parse hint section, but the JSON is corrupt!"); - logger.error(ex); - } - } - } - return null; - } - - private static List parseOfflineEaglerX18(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_OFFLINE"); - return parseOfflineEaglerX18(EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE, offlineDownloadData); - } - - private static List parseOfflineEaglerX18(EnumOfflineParseType expectedType, String offlineDownloadData) { + private static List parseOfflineEagler15New(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFTX_1_5_NEW_OFFLINE"); LaunchConfigEntry launchConf = null; try { - launchConf = tryReadParseHint(expectedType, offlineDownloadData); - }catch(IllegalStateException ex) { + launchConf = tryReadParseHint(EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE, offlineDownloadData); + } catch (IllegalStateException ex) { logger.error(ex.getMessage()); return null; } - List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); - if(scripts.size() == 1) { + byte[] assetsEPK = null; + byte[] classesJS = null; + List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), + StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); + for (String str : scripts) { + if (str.length() > 262144) { + int i = -1; + int j = -1; + i = str.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\t\n{ )(IRUstessAteg noitcnuf")); + if (i == -1 || i >= 1024) { + i = str.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\n{ )(IRUstessAteg noitcnuf")); + if (i != -1 && i < 1024) { + i += 71; + } else { + i = -1; + } + } else { + i += 72; + } + if (i != -1) { + j = str.indexOf("\";", i); + if (j != -1) { + if (assetsEPK == null) { + try { + assetsEPK = Base64.decodeBase64(str.substring(i, j)); + } catch (IllegalStateException | IllegalArgumentException ex) { + } + } + if (assetsEPK != null) { + continue; + } + } else { + j = -1; + } + } + i = -1; + j = -1; + if (foundWithin(str.indexOf(StringUtils.reverse("{ )le(IRUrekroWetaerc noitcnuf")), 0, 512)) { + continue; + } + if (foundWithin( + str.indexOf(StringUtils.reverse( + ";)0001 ,} ;\")4 ni hcnual lliw emaG(\" = txeTrenni.c {)(noitcnuf(tuoemiTtes")), + 0, 512)) { + continue; + } + if (foundWithin(str.indexOf(StringUtils.reverse("{ )(noitcnuf ,\"daol\"(renetsiLtnevEdda.wodniw")), 0, + 512)) { + continue; + } + if (classesJS == null) { + classesJS = str.trim().getBytes(StandardCharsets.UTF_8); + } + if (assetsEPK != null && classesJS != null) { + break; + } + } + } + if (classesJS == null) { + logger.error("Could not find classes.js!"); + return null; + } + if (assetsEPK == null) { + logger.error("Could not find assets.epk!"); + return null; + } + int workerIdx = offlineDownloadData + .indexOf(StringUtils.reverse(">\"rekrow_ps\"=di \"rekrowrelgae/txet\"=epyt tpircs<")); + if (workerIdx == -1) { + logger.error("Could not find start of integrated server!"); + return null; + } else { + workerIdx += 48; + } + int workerIdxEnd = offlineDownloadData.indexOf(StringUtils.reverse(">tpircs/<"), workerIdx); + if (workerIdxEnd == -1) { + logger.error("Could not find end of integrated server!"); + return null; + } + byte[] classesServerJS = offlineDownloadData.substring(workerIdx, workerIdxEnd).trim() + .getBytes(StandardCharsets.UTF_8); + Map blobs = new HashMap<>(); + EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJS); + blobs.put(classesJSUUID, classesJS); + EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); + blobs.put(assetsEPKUUID, assetsEPK); + EaglercraftUUID classesServerJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesServerJS); + blobs.put(classesServerJSUUID, classesServerJS); + logger.info("Successfully loaded classes.js {}, classes_server.js {}, and assets.epk {}", classesJSUUID, + classesServerJS, assetsEPKUUID); + if (launchConf == null) { + return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE, + new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE, EaglercraftUUID.randomUUID(), + classesJSUUID, classesServerJSUUID, null, + Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), + blobs)); + } else { + return Arrays.asList(new ParsedOfflineAdapter(launchConf, + new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE, EaglercraftUUID.randomUUID(), + classesJSUUID, classesServerJSUUID, null, + Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), + blobs)); + } + } + + private static List parseOfflineEagler15Old(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFTX_1_5_OLD_OFFLINE"); + return parseOfflineEagler15OldImpl(EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE, offlineDownloadData); + } + + private static List parseOfflineEagler15OldImpl(EnumOfflineParseType parseType, + String offlineDownloadData) { + LaunchConfigEntry launchConf = null; + try { + launchConf = tryReadParseHint(parseType, offlineDownloadData); + } catch (IllegalStateException ex) { + logger.error(ex.getMessage()); + return null; + } + byte[] assetsEPK = null; + byte[] classesJS = null; + List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), + StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); + for (String str : scripts) { + if (str.length() > 262144) { + if (foundWithin(str.indexOf(StringUtils.reverse("{ )le(IRUtessAetaerc noitcnuf")), 0, 512)) { + continue; + } + if (foundWithin( + str.indexOf(StringUtils.reverse( + ";)0001 ,} ;\")4 ni hcnual lliw emaG(\" = txeTrenni.c {)(noitcnuf(tuoemiTtes")), + 0, 512)) { + continue; + } + if (foundWithin(str.indexOf(StringUtils.reverse("{ )(noitcnuf ,\"daol\"(renetsiLtnevEdda.wodniw")), 0, + 512)) { + continue; + } + if (assetsEPK == null) { + int i = str.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\t\n{ )(IRUstessAteg noitcnuf")); + if (i == -1 || i >= 1024) { + i = str.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\n{ )(IRUstessAteg noitcnuf")); + if (i != -1 && i < 1024) { + i += 71; + } else { + i = -1; + } + } else { + i += 72; + } + if (i != -1) { + int j = str.indexOf("\";", i); + if (j != -1) { + if (assetsEPK == null) { + try { + assetsEPK = Base64.decodeBase64(str.substring(i, j)); + } catch (IllegalStateException | IllegalArgumentException ex) { + } + } + if (assetsEPK != null) { + continue; + } + } + } + } + if (classesJS == null) { + classesJS = str.trim().getBytes(StandardCharsets.UTF_8); + } + if (assetsEPK != null && classesJS != null) { + break; + } + } + } + if (classesJS == null) { + logger.error("Could not find classes.js!"); + return null; + } + if (assetsEPK == null) { + int epkIdx = offlineDownloadData + .indexOf(StringUtils.reverse(">\"stessa\"=di \";enon:yalpsid\"=elyts vid<")); + if (epkIdx == -1) { + logger.error("Could not find start of assets.epk!"); + return null; + } else { + epkIdx += 39; + } + int epkIdxEnd = offlineDownloadData.indexOf(StringUtils.reverse(">vid/<"), epkIdx); + if (epkIdxEnd == -1) { + logger.error("Could not find end of assets.epk!"); + return null; + } + try { + assetsEPK = Base64.decodeBase64(offlineDownloadData.substring(epkIdx, epkIdxEnd).trim()); + } catch (IllegalStateException | IllegalArgumentException ex) { + logger.error("Could not base64 decode assets.epk!"); + return null; + } + } + Map blobs = new HashMap<>(); + EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJS); + blobs.put(classesJSUUID, classesJS); + EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); + blobs.put(assetsEPKUUID, assetsEPK); + logger.info("Successfully loaded classes.js {}, and assets.epk {}", classesJSUUID, assetsEPKUUID); + if (launchConf == null) { + return Arrays.asList(new ParsedOfflineAdapter(parseType, + new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), + classesJSUUID, null, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), + blobs)); + } else { + return Arrays.asList(new ParsedOfflineAdapter(launchConf, + new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), + classesJSUUID, null, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), + blobs)); + } + } + + private static List parseOfflineEaglerB13(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFT_BETA_B1_3_OFFLINE"); + return parseOfflineEagler15OldImpl(EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE, offlineDownloadData); + } + + private static List parseOfflineEaglerX18(EnumOfflineParseType expectedType, + String offlineDownloadData) { + LaunchConfigEntry launchConf = null; + try { + launchConf = tryReadParseHint(expectedType, offlineDownloadData); + } catch (IllegalStateException ex) { + logger.error(ex.getMessage()); + return null; + } + List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), + StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); + if (scripts.size() == 1) { logger.info("Detected a single script tag, must be u19 or earlier"); return parseOfflineEaglerX18PreU20(launchConf, scripts.get(0)); } byte[] classesJSSrc = null; int classesTagIndex = -1; - for(int i = 0, l = scripts.size(); i < l; ++i) { + for (int i = 0, l = scripts.size(); i < l; ++i) { String script = scripts.get(i); int j; - if(foundWithin(j = script.indexOf(StringUtils.reverse("\n;tpircStnerruc.tnemucod = tnemelEtpircStneilCXtfarcrelgae.wodniw )\"denifednu\" ==! wodniw foepyt(fi")), 0, 32)) { + if (foundWithin(j = script.indexOf(StringUtils.reverse( + "\n;tpircStnerruc.tnemucod = tnemelEtpircStneilCXtfarcrelgae.wodniw )\"denifednu\" ==! wodniw foepyt(fi")), + 0, 32)) { classesJSSrc = ("\"use strict\";\n" + script.substring(j + 99).trim()).getBytes(StandardCharsets.UTF_8); classesTagIndex = i; break; } } - if(classesJSSrc == null) { + if (classesJSSrc == null) { logger.error("Could not find script tag for classes.js!"); return null; } @@ -294,16 +546,19 @@ public class OfflineDownloadParser { Map blobs = new HashMap<>(); List epks = new ArrayList<>(2); blobs.put(classesJSUUID, classesJSSrc); - for(int i = 0, l = scripts.size(); i < l; ++i) { - if(i == classesTagIndex) { + for (int i = 0, l = scripts.size(); i < l; ++i) { + if (i == classesTagIndex) { continue; } String script = scripts.get(i); int j; - if(foundWithin(j = script.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")), 0, 512)) { + if (foundWithin( + j = script.indexOf(StringUtils.reverse( + ",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")), + 0, 512)) { int assetsEPKStart = j + 36; int assetsEPKEnd = script.indexOf("];", assetsEPKStart); - if(assetsEPKEnd == -1) { + if (assetsEPKEnd == -1) { logger.error("Could not find where assets.epk ends!"); return null; } @@ -313,11 +568,11 @@ public class OfflineDownloadParser { assetsEPKs = assetsEPKs.replace("path:", "\"path\":"); try { JSONArray epksJSON = new JSONArray(assetsEPKs); - for(int ii = 0, ll = epksJSON.length(); ii < ll; ++ii) { + for (int ii = 0, ll = epksJSON.length(); ii < ll; ++ii) { JSONObject obj = epksJSON.getJSONObject(ii); String path = obj.optString("path", ""); String url = obj.getString("url"); - if(!url.startsWith("data:application/octet-stream;base64,")) { + if (!url.startsWith("data:application/octet-stream;base64,")) { logger.error("assetsURI is not base64!"); return null; } @@ -326,21 +581,24 @@ public class OfflineDownloadParser { blobs.put(assetsEPKUUID, binary); epks.add(new EPKDataEntry(path, assetsEPKUUID)); } - }catch(JSONException | IllegalStateException | IllegalArgumentException ex) { + } catch (JSONException | IllegalStateException | IllegalArgumentException ex) { logger.error("assetsURI is not valid json!"); return null; } - }else if(foundWithin(j = script.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")), 0, 512)) { + } else if (foundWithin( + j = script.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")), + 0, 512)) { int assetsEPKStart = j + 74; int assetsEPKEnd = script.indexOf("\";", assetsEPKStart); - if(assetsEPKEnd == -1) { + if (assetsEPKEnd == -1) { logger.error("Could not find where assets.epk ends!"); return null; } byte[] assetsEPK; try { assetsEPK = Base64.decodeBase64(script.substring(assetsEPKStart, assetsEPKEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { + } catch (IllegalArgumentException | IllegalStateException ex) { logger.error("assets.epk is not valid base64!"); return null; } @@ -349,276 +607,77 @@ public class OfflineDownloadParser { epks.add(new EPKDataEntry("", assetsEPKUUID)); } } - logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); - if(launchConf == null) { + logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, + String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); + if (launchConf == null) { return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE, new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, epks), blobs)); - }else { + classesJSUUID, null, null, epks), + blobs)); + } else { return Arrays.asList(new ParsedOfflineAdapter(launchConf, new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, epks), blobs)); + classesJSUUID, null, null, epks), + blobs)); } } - private static List parseOfflineEaglerX18PreU20(LaunchConfigEntry launchConf, String script) { - int classesJSStart = script.indexOf(StringUtils.reverse(";dees_tr$=x rav{)(dItxen_tr$ noitcnuf;2424353642=dees_tr$ rav\n{)(noitcnuf(;niam rav")); - if(classesJSStart == -1 || classesJSStart > 32767) { - logger.error("Could not find where classes.js begins!"); - return null; - } - boolean isInternational = false; - int classesJSEnd = script.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")); - if(classesJSEnd == -1) { - classesJSEnd = script.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")); - if(classesJSEnd == -1) { - logger.error("Could not find where classes.js ends!"); - return null; - }else { - isInternational = true; - } - } - byte[] classesJSSrc = script.substring(classesJSStart, classesJSEnd).trim().getBytes(StandardCharsets.UTF_8); - EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJSSrc); - Map blobs = new HashMap<>(); - List epks = new ArrayList<>(2); - blobs.put(classesJSUUID, classesJSSrc); - if(isInternational) { - int assetsEPKStart = classesJSEnd + 36; - int assetsEPKEnd = script.indexOf("];", assetsEPKStart); - if(assetsEPKEnd == -1) { - logger.error("Could not find where assets.epk ends!"); - return null; - } - assetsEPKEnd += 1; - String assetsEPKs = script.substring(assetsEPKStart, assetsEPKEnd); - assetsEPKs = assetsEPKs.replace("url:", "\"url\":"); - assetsEPKs = assetsEPKs.replace("path:", "\"path\":"); - try { - JSONArray epksJSON = new JSONArray(assetsEPKs); - for(int i = 0, l = epksJSON.length(); i < l; ++i) { - JSONObject obj = epksJSON.getJSONObject(i); - String path = obj.optString("path", ""); - String url = obj.getString("url"); - if(!url.startsWith("data:application/octet-stream;base64,")) { - logger.error("assetsURI is not base64!"); - return null; - } - byte[] binary = Base64.decodeBase64(url.substring(37)); - EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(binary); - blobs.put(assetsEPKUUID, binary); - epks.add(new EPKDataEntry(path, assetsEPKUUID)); - } - }catch(JSONException | IllegalStateException | IllegalArgumentException ex) { - logger.error("assetsURI is not valid json!"); - return null; - } - }else { - int assetsEPKStart = classesJSEnd + 74; - int assetsEPKEnd = script.indexOf("\";", assetsEPKStart); - if(assetsEPKEnd == -1) { - logger.error("Could not find where assets.epk ends!"); - return null; - } - byte[] assetsEPK; - try { - assetsEPK = Base64.decodeBase64(script.substring(assetsEPKStart, assetsEPKEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { - logger.error("assets.epk is not valid base64!"); - return null; - } - EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); - blobs.put(assetsEPKUUID, assetsEPK); - epks.add(new EPKDataEntry("", assetsEPKUUID)); - } - logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); - if(launchConf == null) { - return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE, - new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, epks), blobs)); - }else { - return Arrays.asList(new ParsedOfflineAdapter(launchConf, - new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, epks), blobs)); - } - } - - private static List parseOfflineEaglerX18Signed(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_SIGNED"); - return parseOfflineEaglerX18Signed(EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED, offlineDownloadData); - } - - private static List parseOfflineEaglerX18Signed(EnumOfflineParseType expectType, String offlineDownloadData) { - LaunchConfigEntry launchConf = null; - try { - launchConf = tryReadParseHint(expectType, offlineDownloadData); - }catch(IllegalStateException ex) { - logger.error(ex.getMessage()); - return null; - } - int signatureStart = offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad>\"erutangiStneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<")); - boolean isPreU24 = false; - if(signatureStart == -1) { - signatureStart = offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = erutangiStneilCXtfarcrelgae.wodniw")); - if(signatureStart == -1) { - logger.error("Could not find client signature!"); - return null; - } - isPreU24 = true; - signatureStart += 75; - logger.info("Client is a pre-u24 signed offline"); - }else { - signatureStart += 96; - } - Map blobs = new HashMap<>(); - EaglercraftUUID signatureUUID; - EaglercraftUUID payloadUUID; - if(!isPreU24) { - int signatureEnd = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), signatureStart); - if(signatureEnd == -1) { - logger.error("Could not find end of client signature!"); - return null; - } - byte[] signature; - try { - signature = Base64.decodeBase64(offlineDownloadData.substring(signatureStart, signatureEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { - logger.error("Client signature is not valid base64!"); - return null; - } - int bundleStart = offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad>\"eldnuBtneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<"), signatureStart); - if(bundleStart == -1) { - logger.error("Could not find client payload!"); - return null; - } - bundleStart += 93; - int bundleEnd = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), bundleStart); - if(bundleEnd == -1) { - logger.error("Could not find end of client payload!"); - return null; - } - byte[] payload; - try { - payload = Base64.decodeBase64(offlineDownloadData.substring(bundleStart, bundleEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { - logger.error("Client payload is not valid base64!"); - return null; - } - signatureUUID = EaglercraftUUID.nameUUIDFromBytes(signature); - blobs.put(signatureUUID, signature); - payloadUUID = EaglercraftUUID.nameUUIDFromBytes(payload); - blobs.put(payloadUUID, payload); - }else { - int signatureEnd = offlineDownloadData.indexOf(StringUtils.reverse(";\""), signatureStart); - if(signatureEnd == -1) { - logger.error("Could not find end of client signature!"); - return null; - } - byte[] signature; - try { - signature = Base64.decodeBase64(offlineDownloadData.substring(signatureStart, signatureEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { - logger.error("Client signature is not valid base64!"); - return null; - } - int bundleStart = offlineDownloadData.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = eldnuBtneilCXtfarcrelgae.wodniw"), signatureStart); - if(bundleStart == -1) { - logger.error("Could not find client payload!"); - return null; - } - bundleStart += 72; - int bundleEnd = offlineDownloadData.indexOf(StringUtils.reverse(";\""), bundleStart); - if(bundleEnd == -1) { - logger.error("Could not find end of client payload!"); - return null; - } - byte[] payload; - try { - payload = Base64.decodeBase64(offlineDownloadData.substring(bundleStart, bundleEnd)); - }catch(IllegalArgumentException | IllegalStateException ex) { - logger.error("Client payload is not valid base64!"); - return null; - } - signatureUUID = EaglercraftUUID.nameUUIDFromBytes(signature); - blobs.put(signatureUUID, signature); - payloadUUID = EaglercraftUUID.nameUUIDFromBytes(payload); - blobs.put(payloadUUID, payload); - } - logger.info("Successfully loaded signature {} and payload {}", signatureUUID, payloadUUID); - if(launchConf == null) { - return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED, - new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, EaglercraftUUID.randomUUID(), - payloadUUID, null, signatureUUID, null), blobs)); - }else { - return Arrays.asList(new ParsedOfflineAdapter(launchConf, - new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, EaglercraftUUID.randomUUID(), - payloadUUID, null, signatureUUID, null), blobs)); - } + private static List parseOfflineEaglerX18(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_OFFLINE"); + return parseOfflineEaglerX18(EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE, offlineDownloadData); } private static List parseOfflineEaglerX18Fat(String offlineDownloadData) { logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_FAT_OFFLINE"); - List lst = parseOfflineEaglerX18(EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_OFFLINE, offlineDownloadData); - if(lst == null || lst.size() != 1) { + List lst = parseOfflineEaglerX18(EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_OFFLINE, + offlineDownloadData); + if (lst == null || lst.size() != 1) { logger.error("Fat client type is not EAGLERCRAFTX_1_8_FAT_OFFLINE"); return null; } List lst2 = parseOfflineEaglerX18FatEmbeddedClients(lst.get(0), offlineDownloadData); - if(lst2 == null) { + if (lst2 == null) { logger.error("Could not parse embedded clients!"); return null; } return lst2; } - private static List parseOfflineEaglerX18FatSigned(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_FAT_SIGNED"); - List lst = parseOfflineEaglerX18Signed(EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_SIGNED, offlineDownloadData); - if(lst == null || lst.size() != 1) { - logger.error("Fat client type is not EAGLERCRAFTX_1_8_FAT_OFFLINE"); - return null; - } - List lst2 = parseOfflineEaglerX18FatEmbeddedClients(lst.get(0), offlineDownloadData); - if(lst2 == null) { - logger.error("Could not parse embedded clients!"); - return null; - } - return lst2; - } - - private static List parseOfflineEaglerX18FatEmbeddedClients(ParsedOfflineAdapter parentClient, String offlineDownloadData) { + private static List parseOfflineEaglerX18FatEmbeddedClients(ParsedOfflineAdapter parentClient, + String offlineDownloadData) { logger.info("Attempting to parse embedded clients"); String magicStart = StringUtils.reverse("_enilffOtaFrelgae_\"=di \"tfarcrelgae\"=epyt elyts<"); String magicEnd = StringUtils.reverse("\n>elyts/<"); - Map fatClientData = new HashMap<>(); + Map fatClientData = new HashMap<>(); int i = 0, j, k, l; - for(;;) { - if((i = offlineDownloadData.indexOf(magicStart, i)) == -1) { + for (;;) { + if ((i = offlineDownloadData.indexOf(magicStart, i)) == -1) { break; } i += 48; - if((j = offlineDownloadData.indexOf("\">", i)) == -1 && j - i < 64) { + if ((j = offlineDownloadData.indexOf("\">", i)) == -1 && j - i < 64) { break; } String name = offlineDownloadData.substring(i, j); - if((k = offlineDownloadData.indexOf(magicEnd, j + 2)) == -1) { + if ((k = offlineDownloadData.indexOf(magicEnd, j + 2)) == -1) { break; } fatClientData.put(name, offlineDownloadData.substring(j + 2, k)); } String manifest = fatClientData.get("manifest_v1"); - if(manifest == null) { + if (manifest == null) { logger.error("Could not find manifest tag!"); } - Map clientDatas; + Map clientDatas; List launchDatas; try { JSONObject obj = new JSONObject(manifest); JSONArray manifestClientDatas = obj.getJSONArray("clientData"); int n = manifestClientDatas.length(); clientDatas = new HashMap<>(n + 1); - clientDatas.put(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, parentClient.clientData.rotateUUID(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)); - for(l = 0; l < n; ++l) { + clientDatas.put(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN, + parentClient.clientData.rotateUUID(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)); + for (l = 0; l < n; ++l) { JSONObject obj2 = manifestClientDatas.getJSONObject(l); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj2.getString("uuid")); clientDatas.put(theUUID, new ClientDataEntry(theUUID, obj2)); @@ -626,26 +685,27 @@ public class OfflineDownloadParser { JSONArray manifestLaunchDatas = obj.getJSONArray("launchData"); n = manifestLaunchDatas.length(); launchDatas = new ArrayList<>(n + 1); - launchDatas.add(parentClient.launchData.rotateUUIDs(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)); - for(l = 0; l < n; ++l) { + launchDatas.add(parentClient.launchData.rotateUUIDs(BootMenuConstants.UUID_CLIENT_LAUNCH_ORIGIN, + BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)); + for (l = 0; l < n; ++l) { JSONObject obj2 = manifestLaunchDatas.getJSONObject(l); EaglercraftUUID theUUID = EaglercraftUUID.fromString(obj2.getString("uuid")); launchDatas.add(new LaunchConfigEntry(theUUID, obj2)); } - - }catch(JSONException ex) { + + } catch (JSONException ex) { logger.error("The manifest JSON is corrupt!"); logger.error(ex); return null; } Map blobs = new HashMap<>(); Iterator itr = clientDatas.values().iterator(); - loadClientDatas: while(itr.hasNext()) { + loadClientDatas: while (itr.hasNext()) { ClientDataEntry etr = itr.next(); - for(EaglercraftUUID uuid : etr.getReferencedBlobs()) { - if(!blobs.containsKey(uuid)) { + for (EaglercraftUUID uuid : etr.getReferencedBlobs()) { + if (!blobs.containsKey(uuid)) { String str = fatClientData.get(uuid.toString()); - if(str == null) { + if (str == null) { logger.error("Blob UUID {} for client data {} is missing!", uuid, etr.uuid); itr.remove(); continue loadClientDatas; @@ -653,12 +713,12 @@ public class OfflineDownloadParser { byte[] blobBytes; try { blobBytes = Base64.decodeBase64(str); - }catch(IllegalArgumentException | IllegalStateException ex) { + } catch (IllegalArgumentException | IllegalStateException ex) { logger.error("Blob UUID {} for client data {} is invalid base64!", uuid, etr.uuid); itr.remove(); continue loadClientDatas; } - if(!EaglercraftUUID.nameUUIDFromBytes(blobBytes).equals(uuid)) { + if (!EaglercraftUUID.nameUUIDFromBytes(blobBytes).equals(uuid)) { logger.error("Blob UUID {} for client data {} has an invalid checksum!", uuid, etr.uuid); itr.remove(); continue loadClientDatas; @@ -668,18 +728,18 @@ public class OfflineDownloadParser { } } List list = new ArrayList<>(launchDatas.size()); - for(LaunchConfigEntry etr : launchDatas) { + for (LaunchConfigEntry etr : launchDatas) { EaglercraftUUID clientDataUUID = etr.clientDataUUID; - if(clientDataUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { + if (clientDataUUID.equals(BootMenuConstants.UUID_CLIENT_DATA_ORIGIN)) { list.add(new ParsedOfflineAdapter(etr, parentClient.clientData, parentClient.blobs)); - }else { + } else { ClientDataEntry clientData = clientDatas.get(clientDataUUID); - if(clientData == null) { + if (clientData == null) { logger.error("Client data UUID {} for launch data {} is missing!", clientDataUUID, etr.uuid); continue; } Map entryBlob = new HashMap<>(); - for(EaglercraftUUID uuid : clientData.getReferencedBlobs()) { + for (EaglercraftUUID uuid : clientData.getReferencedBlobs()) { entryBlob.put(uuid, blobs.get(uuid)); } list.add(new ParsedOfflineAdapter(etr, clientData, entryBlob)); @@ -691,214 +751,229 @@ public class OfflineDownloadParser { return list; } - private static List parseOfflineEagler15New(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFTX_1_5_NEW_OFFLINE"); - LaunchConfigEntry launchConf = null; - try { - launchConf = tryReadParseHint(EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE, offlineDownloadData); - }catch(IllegalStateException ex) { - logger.error(ex.getMessage()); + private static List parseOfflineEaglerX18FatSigned(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_FAT_SIGNED"); + List lst = parseOfflineEaglerX18Signed(EnumOfflineParseType.EAGLERCRAFTX_1_8_FAT_SIGNED, + offlineDownloadData); + if (lst == null || lst.size() != 1) { + logger.error("Fat client type is not EAGLERCRAFTX_1_8_FAT_OFFLINE"); return null; } - byte[] assetsEPK = null; - byte[] classesJS = null; - List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); - for(String str : scripts) { - if(str.length() > 262144) { - int i = -1; - int j = -1; - i = str.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\t\n{ )(IRUstessAteg noitcnuf")); - if(i == -1 || i >= 1024) { - i = str.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\n{ )(IRUstessAteg noitcnuf")); - if(i != -1 && i < 1024) { - i += 71; - }else { - i = -1; - } - }else { - i += 72; - } - if(i != -1) { - j = str.indexOf("\";", i); - if(j != -1) { - if(assetsEPK == null) { - try { - assetsEPK = Base64.decodeBase64(str.substring(i, j)); - }catch(IllegalStateException | IllegalArgumentException ex) { - } - } - if(assetsEPK != null) { - continue; - } - }else { - j = -1; - } - } - i = -1; - j = -1; - if(foundWithin(str.indexOf(StringUtils.reverse("{ )le(IRUrekroWetaerc noitcnuf")), 0, 512)) { - continue; - } - if(foundWithin(str.indexOf(StringUtils.reverse(";)0001 ,} ;\")4 ni hcnual lliw emaG(\" = txeTrenni.c {)(noitcnuf(tuoemiTtes")), 0, 512)) { - continue; - } - if(foundWithin(str.indexOf(StringUtils.reverse("{ )(noitcnuf ,\"daol\"(renetsiLtnevEdda.wodniw")), 0, 512)) { - continue; - } - if(classesJS == null) { - classesJS = str.trim().getBytes(StandardCharsets.UTF_8); - } - if(assetsEPK != null && classesJS != null) { - break; - } + List lst2 = parseOfflineEaglerX18FatEmbeddedClients(lst.get(0), offlineDownloadData); + if (lst2 == null) { + logger.error("Could not parse embedded clients!"); + return null; + } + return lst2; + } + + private static List parseOfflineEaglerX18PreU20(LaunchConfigEntry launchConf, String script) { + int classesJSStart = script.indexOf(StringUtils + .reverse(";dees_tr$=x rav{)(dItxen_tr$ noitcnuf;2424353642=dees_tr$ rav\n{)(noitcnuf(;niam rav")); + if (classesJSStart == -1 || classesJSStart > 32767) { + logger.error("Could not find where classes.js begins!"); + return null; + } + boolean isInternational = false; + int classesJSEnd = script.indexOf( + StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = IRUstessa.stpOXtfarcrelgae.wodniw")); + if (classesJSEnd == -1) { + classesJSEnd = script.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" :lru { [ = IRUstessa.stpOXtfarcrelgae.wodniw")); + if (classesJSEnd == -1) { + logger.error("Could not find where classes.js ends!"); + return null; + } else { + isInternational = true; } } - if(classesJS == null) { - logger.error("Could not find classes.js!"); - return null; - } - if(assetsEPK == null) { - logger.error("Could not find assets.epk!"); - return null; - } - int workerIdx = offlineDownloadData.indexOf(StringUtils.reverse(">\"rekrow_ps\"=di \"rekrowrelgae/txet\"=epyt tpircs<")); - if(workerIdx == -1) { - logger.error("Could not find start of integrated server!"); - return null; - }else { - workerIdx += 48; - } - int workerIdxEnd = offlineDownloadData.indexOf(StringUtils.reverse(">tpircs/<"), workerIdx); - if(workerIdxEnd == -1) { - logger.error("Could not find end of integrated server!"); - return null; - } - byte[] classesServerJS = offlineDownloadData.substring(workerIdx, workerIdxEnd).trim().getBytes(StandardCharsets.UTF_8); + byte[] classesJSSrc = script.substring(classesJSStart, classesJSEnd).trim().getBytes(StandardCharsets.UTF_8); + EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJSSrc); Map blobs = new HashMap<>(); - EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJS); - blobs.put(classesJSUUID, classesJS); - EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); - blobs.put(assetsEPKUUID, assetsEPK); - EaglercraftUUID classesServerJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesServerJS); - blobs.put(classesServerJSUUID, classesServerJS); - logger.info("Successfully loaded classes.js {}, classes_server.js {}, and assets.epk {}", classesJSUUID, classesServerJS, assetsEPKUUID); - if(launchConf == null) { - return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFT_1_5_NEW_OFFLINE, - new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, classesServerJSUUID, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), blobs)); - }else { - return Arrays.asList(new ParsedOfflineAdapter(launchConf, - new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_1_5_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, classesServerJSUUID, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), blobs)); - } - } - - private static List parseOfflineEagler15Old(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFTX_1_5_OLD_OFFLINE"); - return parseOfflineEagler15OldImpl(EnumOfflineParseType.EAGLERCRAFT_1_5_OLD_OFFLINE, offlineDownloadData); - } - - private static List parseOfflineEagler15OldImpl(EnumOfflineParseType parseType, String offlineDownloadData) { - LaunchConfigEntry launchConf = null; - try { - launchConf = tryReadParseHint(parseType, offlineDownloadData); - }catch(IllegalStateException ex) { - logger.error(ex.getMessage()); - return null; - } - byte[] assetsEPK = null; - byte[] classesJS = null; - List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); - for(String str : scripts) { - if(str.length() > 262144) { - if(foundWithin(str.indexOf(StringUtils.reverse("{ )le(IRUtessAetaerc noitcnuf")), 0, 512)) { - continue; - } - if(foundWithin(str.indexOf(StringUtils.reverse(";)0001 ,} ;\")4 ni hcnual lliw emaG(\" = txeTrenni.c {)(noitcnuf(tuoemiTtes")), 0, 512)) { - continue; - } - if(foundWithin(str.indexOf(StringUtils.reverse("{ )(noitcnuf ,\"daol\"(renetsiLtnevEdda.wodniw")), 0, 512)) { - continue; - } - if(assetsEPK == null) { - int i = str.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\t\n{ )(IRUstessAteg noitcnuf")); - if(i == -1 || i >= 1024) { - i = str.indexOf(StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" nruter\n{ )(IRUstessAteg noitcnuf")); - if(i != -1 && i < 1024) { - i += 71; - }else { - i = -1; - } - }else { - i += 72; - } - if(i != -1) { - int j = str.indexOf("\";", i); - if(j != -1) { - if(assetsEPK == null) { - try { - assetsEPK = Base64.decodeBase64(str.substring(i, j)); - }catch(IllegalStateException | IllegalArgumentException ex) { - } - } - if(assetsEPK != null) { - continue; - } - } - } - } - if(classesJS == null) { - classesJS = str.trim().getBytes(StandardCharsets.UTF_8); - } - if(assetsEPK != null && classesJS != null) { - break; - } - } - } - if(classesJS == null) { - logger.error("Could not find classes.js!"); - return null; - } - if(assetsEPK == null) { - int epkIdx = offlineDownloadData.indexOf(StringUtils.reverse(">\"stessa\"=di \";enon:yalpsid\"=elyts vid<")); - if(epkIdx == -1) { - logger.error("Could not find start of assets.epk!"); - return null; - }else { - epkIdx += 39; - } - int epkIdxEnd = offlineDownloadData.indexOf(StringUtils.reverse(">vid/<"), epkIdx); - if(epkIdxEnd == -1) { - logger.error("Could not find end of assets.epk!"); + List epks = new ArrayList<>(2); + blobs.put(classesJSUUID, classesJSSrc); + if (isInternational) { + int assetsEPKStart = classesJSEnd + 36; + int assetsEPKEnd = script.indexOf("];", assetsEPKStart); + if (assetsEPKEnd == -1) { + logger.error("Could not find where assets.epk ends!"); return null; } + assetsEPKEnd += 1; + String assetsEPKs = script.substring(assetsEPKStart, assetsEPKEnd); + assetsEPKs = assetsEPKs.replace("url:", "\"url\":"); + assetsEPKs = assetsEPKs.replace("path:", "\"path\":"); try { - assetsEPK = Base64.decodeBase64(offlineDownloadData.substring(epkIdx, epkIdxEnd).trim()); - }catch(IllegalStateException | IllegalArgumentException ex) { - logger.error("Could not base64 decode assets.epk!"); + JSONArray epksJSON = new JSONArray(assetsEPKs); + for (int i = 0, l = epksJSON.length(); i < l; ++i) { + JSONObject obj = epksJSON.getJSONObject(i); + String path = obj.optString("path", ""); + String url = obj.getString("url"); + if (!url.startsWith("data:application/octet-stream;base64,")) { + logger.error("assetsURI is not base64!"); + return null; + } + byte[] binary = Base64.decodeBase64(url.substring(37)); + EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(binary); + blobs.put(assetsEPKUUID, binary); + epks.add(new EPKDataEntry(path, assetsEPKUUID)); + } + } catch (JSONException | IllegalStateException | IllegalArgumentException ex) { + logger.error("assetsURI is not valid json!"); return null; } + } else { + int assetsEPKStart = classesJSEnd + 74; + int assetsEPKEnd = script.indexOf("\";", assetsEPKStart); + if (assetsEPKEnd == -1) { + logger.error("Could not find where assets.epk ends!"); + return null; + } + byte[] assetsEPK; + try { + assetsEPK = Base64.decodeBase64(script.substring(assetsEPKStart, assetsEPKEnd)); + } catch (IllegalArgumentException | IllegalStateException ex) { + logger.error("assets.epk is not valid base64!"); + return null; + } + EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); + blobs.put(assetsEPKUUID, assetsEPK); + epks.add(new EPKDataEntry("", assetsEPKUUID)); } - Map blobs = new HashMap<>(); - EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJS); - blobs.put(classesJSUUID, classesJS); - EaglercraftUUID assetsEPKUUID = EaglercraftUUID.nameUUIDFromBytes(assetsEPK); - blobs.put(assetsEPKUUID, assetsEPK); - logger.info("Successfully loaded classes.js {}, and assets.epk {}", classesJSUUID, assetsEPKUUID); - if(launchConf == null) { - return Arrays.asList(new ParsedOfflineAdapter(parseType, + logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, + String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); + if (launchConf == null) { + return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFTX_1_8_OFFLINE, new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), blobs)); - }else { + classesJSUUID, null, null, epks), + blobs)); + } else { return Arrays.asList(new ParsedOfflineAdapter(launchConf, new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, Arrays.asList(new EPKDataEntry("", assetsEPKUUID))), blobs)); + classesJSUUID, null, null, epks), + blobs)); } } - private static List parseOfflineEaglerB13(String offlineDownloadData) { - logger.info("Attempting to parse as: EAGLERCRAFT_BETA_B1_3_OFFLINE"); - return parseOfflineEagler15OldImpl(EnumOfflineParseType.EAGLERCRAFT_BETA_B1_3_OFFLINE, offlineDownloadData); + private static List parseOfflineEaglerX18Signed(EnumOfflineParseType expectType, + String offlineDownloadData) { + LaunchConfigEntry launchConf = null; + try { + launchConf = tryReadParseHint(expectType, offlineDownloadData); + } catch (IllegalStateException ex) { + logger.error(ex.getMessage()); + return null; + } + int signatureStart = offlineDownloadData.indexOf(StringUtils.reverse( + ",46esab;maerts-tetco/noitacilppa:atad>\"erutangiStneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<")); + boolean isPreU24 = false; + if (signatureStart == -1) { + signatureStart = offlineDownloadData.indexOf(StringUtils + .reverse(",46esab;maerts-tetco/noitacilppa:atad\" = erutangiStneilCXtfarcrelgae.wodniw")); + if (signatureStart == -1) { + logger.error("Could not find client signature!"); + return null; + } + isPreU24 = true; + signatureStart += 75; + logger.info("Client is a pre-u24 signed offline"); + } else { + signatureStart += 96; + } + Map blobs = new HashMap<>(); + EaglercraftUUID signatureUUID; + EaglercraftUUID payloadUUID; + if (!isPreU24) { + int signatureEnd = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), signatureStart); + if (signatureEnd == -1) { + logger.error("Could not find end of client signature!"); + return null; + } + byte[] signature; + try { + signature = Base64.decodeBase64(offlineDownloadData.substring(signatureStart, signatureEnd)); + } catch (IllegalArgumentException | IllegalStateException ex) { + logger.error("Client signature is not valid base64!"); + return null; + } + int bundleStart = offlineDownloadData.indexOf(StringUtils.reverse( + ",46esab;maerts-tetco/noitacilppa:atad>\"eldnuBtneilCXtfarcrelgae\"=di \"tfarcrelgae\"=epyt elyts<"), + signatureStart); + if (bundleStart == -1) { + logger.error("Could not find client payload!"); + return null; + } + bundleStart += 93; + int bundleEnd = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), bundleStart); + if (bundleEnd == -1) { + logger.error("Could not find end of client payload!"); + return null; + } + byte[] payload; + try { + payload = Base64.decodeBase64(offlineDownloadData.substring(bundleStart, bundleEnd)); + } catch (IllegalArgumentException | IllegalStateException ex) { + logger.error("Client payload is not valid base64!"); + return null; + } + signatureUUID = EaglercraftUUID.nameUUIDFromBytes(signature); + blobs.put(signatureUUID, signature); + payloadUUID = EaglercraftUUID.nameUUIDFromBytes(payload); + blobs.put(payloadUUID, payload); + } else { + int signatureEnd = offlineDownloadData.indexOf(StringUtils.reverse(";\""), signatureStart); + if (signatureEnd == -1) { + logger.error("Could not find end of client signature!"); + return null; + } + byte[] signature; + try { + signature = Base64.decodeBase64(offlineDownloadData.substring(signatureStart, signatureEnd)); + } catch (IllegalArgumentException | IllegalStateException ex) { + logger.error("Client signature is not valid base64!"); + return null; + } + int bundleStart = offlineDownloadData.indexOf( + StringUtils.reverse(",46esab;maerts-tetco/noitacilppa:atad\" = eldnuBtneilCXtfarcrelgae.wodniw"), + signatureStart); + if (bundleStart == -1) { + logger.error("Could not find client payload!"); + return null; + } + bundleStart += 72; + int bundleEnd = offlineDownloadData.indexOf(StringUtils.reverse(";\""), bundleStart); + if (bundleEnd == -1) { + logger.error("Could not find end of client payload!"); + return null; + } + byte[] payload; + try { + payload = Base64.decodeBase64(offlineDownloadData.substring(bundleStart, bundleEnd)); + } catch (IllegalArgumentException | IllegalStateException ex) { + logger.error("Client payload is not valid base64!"); + return null; + } + signatureUUID = EaglercraftUUID.nameUUIDFromBytes(signature); + blobs.put(signatureUUID, signature); + payloadUUID = EaglercraftUUID.nameUUIDFromBytes(payload); + blobs.put(payloadUUID, payload); + } + logger.info("Successfully loaded signature {} and payload {}", signatureUUID, payloadUUID); + if (launchConf == null) { + return Arrays.asList(new ParsedOfflineAdapter(EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED, + new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, EaglercraftUUID.randomUUID(), + payloadUUID, null, signatureUUID, null), + blobs)); + } else { + return Arrays.asList( + new ParsedOfflineAdapter(launchConf, new ClientDataEntry(EnumClientFormatType.EAGLER_SIGNED_OFFLINE, + EaglercraftUUID.randomUUID(), payloadUUID, null, signatureUUID, null), blobs)); + } + } + + private static List parseOfflineEaglerX18Signed(String offlineDownloadData) { + logger.info("Attempting to parse as: EAGLERCRAFTX_1_8_SIGNED"); + return parseOfflineEaglerX18Signed(EnumOfflineParseType.EAGLERCRAFTX_1_8_SIGNED, offlineDownloadData); } private static List parseOfflinePeytonAlphaBeta(String offlineDownloadData) { @@ -913,61 +988,64 @@ public class OfflineDownloadParser { private static List parseStandardOffline(String offlineDownloadData) { LaunchConfigEntry launchConf; - int hintIndex = offlineDownloadData.indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); - if(hintIndex != -1) { + int hintIndex = offlineDownloadData + .indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); + if (hintIndex != -1) { hintIndex += 42; int closeTagIndex = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), hintIndex); - if(closeTagIndex != -1) { + if (closeTagIndex != -1) { try { JSONObject parseHint = new JSONObject(offlineDownloadData.substring(hintIndex, closeTagIndex)); EnumOfflineParseType typeEnum = EnumOfflineParseType.valueOf(parseHint.getString("type")); - if(typeEnum != EnumOfflineParseType.EXPORTED_STANDARD_OFFLINE) { + if (typeEnum != EnumOfflineParseType.EXPORTED_STANDARD_OFFLINE) { logger.error("This is not a \"EXPORTED_STANDARD_OFFLINE\" type offline!"); return null; } JSONObject launchConfJSON = parseHint.getJSONObject("launchConf"); EaglercraftUUID theUUID = EaglercraftUUID.fromString(launchConfJSON.getString("uuid")); launchConf = new LaunchConfigEntry(theUUID, launchConfJSON); - }catch(JSONException | IllegalArgumentException ex) { + } catch (JSONException | IllegalArgumentException ex) { logger.error("This offline download has a parse hint section, but the JSON is corrupt!"); logger.error(ex); return null; } - }else { + } else { logger.error("Could not find parse hint section!"); return null; } - }else { + } else { logger.error("Could not find parse hint section!"); return null; } - List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); - if(scripts.size() != 3) { + List scripts = (new TagIsolator(StringUtils.reverse(">\"tpircsavaj/txet\"=epyt tpircs<"), + StringUtils.reverse(">tpircs/<"), offlineDownloadData)).getAllTags(); + if (scripts.size() != 3) { logger.error("Wrong number of script tags!"); return null; } - byte[] classesJSSrc = OfflineDownloadFactory.removeClientScriptElement(scripts.get(1).getBytes(StandardCharsets.UTF_8), true); + byte[] classesJSSrc = OfflineDownloadFactory + .removeClientScriptElement(scripts.get(1).getBytes(StandardCharsets.UTF_8), true); EaglercraftUUID classesJSUUID = EaglercraftUUID.nameUUIDFromBytes(classesJSSrc); Map blobs = new HashMap<>(); List epks = new ArrayList<>(2); blobs.put(classesJSUUID, classesJSSrc); String script = scripts.get(2); int j; - if(foundWithin(j = script.indexOf(StringUtils.reverse("/*}:KPE_STESSA_NIGEB:{*/")), 0, 512)) { + if (foundWithin(j = script.indexOf(StringUtils.reverse("/*}:KPE_STESSA_NIGEB:{*/")), 0, 512)) { int assetsEPKStart = j + 24; int assetsEPKEnd = script.indexOf(StringUtils.reverse("/*}:KPE_STESSA_DNE:{*/"), assetsEPKStart); - if(assetsEPKEnd == -1) { + if (assetsEPKEnd == -1) { logger.error("Could not find where assets.epk ends!"); return null; } String assetsEPKs = script.substring(assetsEPKStart, assetsEPKEnd); try { JSONArray epksJSON = new JSONArray(assetsEPKs); - for(int ii = 0, ll = epksJSON.length(); ii < ll; ++ii) { + for (int ii = 0, ll = epksJSON.length(); ii < ll; ++ii) { JSONObject obj = epksJSON.getJSONObject(ii); String path = obj.optString("path", ""); String url = obj.getString("url"); - if(!url.startsWith("data:application/octet-stream;base64,")) { + if (!url.startsWith("data:application/octet-stream;base64,")) { logger.error("assetsURI is not base64!"); return null; } @@ -976,15 +1054,42 @@ public class OfflineDownloadParser { blobs.put(assetsEPKUUID, binary); epks.add(new EPKDataEntry(path, assetsEPKUUID)); } - }catch(JSONException | IllegalStateException | IllegalArgumentException ex) { + } catch (JSONException | IllegalStateException | IllegalArgumentException ex) { logger.error("assetsURI is not valid json!"); return null; } } - logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); - return Arrays.asList(new ParsedOfflineAdapter(launchConf, - new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, EaglercraftUUID.randomUUID(), - classesJSUUID, null, null, epks), blobs)); + logger.info("Successfully loaded classes.js {} and assets.epk {}", classesJSUUID, + String.join(", ", Lists.transform(epks, (e) -> e.dataUUID.toString()))); + return Arrays.asList( + new ParsedOfflineAdapter(launchConf, new ClientDataEntry(EnumClientFormatType.EAGLER_STANDARD_OFFLINE, + EaglercraftUUID.randomUUID(), classesJSUUID, null, null, epks), blobs)); + } + + private static LaunchConfigEntry tryReadParseHint(EnumOfflineParseType expectedType, String offlineDownloadData) { + int hintIndex = offlineDownloadData + .indexOf(StringUtils.reverse(">\"tniHesraPenilffOtfarcrelgae\"=epyt elyts<")); + if (hintIndex != -1) { + hintIndex += 42; + int closeTagIndex = offlineDownloadData.indexOf(StringUtils.reverse(">elyts/<"), hintIndex); + if (closeTagIndex != -1) { + try { + JSONObject parseHint = new JSONObject(offlineDownloadData.substring(hintIndex, closeTagIndex)); + EnumOfflineParseType realType = EnumOfflineParseType.valueOf(parseHint.getString("type")); + if (realType != expectedType) { + throw new IllegalStateException("The offline download type is not \"" + expectedType + + "\", metadata says it is \"" + realType + "\"!"); + } + JSONObject launchConf = parseHint.getJSONObject("launchConf"); + EaglercraftUUID theUUID = EaglercraftUUID.fromString(launchConf.getString("uuid")); + return new LaunchConfigEntry(theUUID, launchConf); + } catch (JSONException | IllegalArgumentException ex) { + logger.error("This offline download has a parse hint section, but the JSON is corrupt!"); + logger.error(ex); + } + } + } + return null; } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/RelayRandomizeHelper.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/RelayRandomizeHelper.java index 5e24b6d1..f73cdd47 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/RelayRandomizeHelper.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/RelayRandomizeHelper.java @@ -7,60 +7,38 @@ import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class RelayRandomizeHelper { public static int countRelayMacro(String launchOpts) { int i = 0; - while(launchOpts.contains("\"$random_relay_primary_" + i + "\"")) { + while (launchOpts.contains("\"$random_relay_primary_" + i + "\"")) { ++i; } return i; } - public static String replaceRelayMacroWithConstant(String launchOpts) { - int i = countRelayMacro(launchOpts); - if(i == 0) { - return launchOpts; - } - int randomRelay = ThreadLocalRandom.current().nextInt(i); - for(int j = 0; j < i; ++j) { - launchOpts = launchOpts.replace("\"$random_relay_primary_" + j + "\"", randomRelay == j ? "true" : "false"); - } - return launchOpts; - } - - public static String replaceRelayMacroWithEqRelayId(String launchOpts) { - int i = countRelayMacro(launchOpts); - if(i == 0) { - return launchOpts; - } - for(int j = 0; j < i; ++j) { - launchOpts = launchOpts.replace("\"$random_relay_primary_" + j + "\"", "relayId === " + j); - } - return launchOpts; - } - public static void makeOptsJSONHaveMacroHack(JSONObject optsDump) { int i = 0; JSONArray arr = optsDump.optJSONArray("relays"); - if(arr != null) { - for(int j = 0, l = arr.length(); j < l; ++j) { + if (arr != null) { + for (int j = 0, l = arr.length(); j < l; ++j) { JSONObject relay = arr.optJSONObject(j); - if(relay != null) { - if(relay.has("primary")) { + if (relay != null) { + if (relay.has("primary")) { relay.put("primary", "$random_relay_primary_" + i++); } } @@ -68,4 +46,27 @@ public class RelayRandomizeHelper { } } + public static String replaceRelayMacroWithConstant(String launchOpts) { + int i = countRelayMacro(launchOpts); + if (i == 0) { + return launchOpts; + } + int randomRelay = ThreadLocalRandom.current().nextInt(i); + for (int j = 0; j < i; ++j) { + launchOpts = launchOpts.replace("\"$random_relay_primary_" + j + "\"", randomRelay == j ? "true" : "false"); + } + return launchOpts; + } + + public static String replaceRelayMacroWithEqRelayId(String launchOpts) { + int i = countRelayMacro(launchOpts); + if (i == 0) { + return launchOpts; + } + for (int j = 0; j < i; ++j) { + launchOpts = launchOpts.replace("\"$random_relay_primary_" + j + "\"", "relayId === " + j); + } + return launchOpts; + } + } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SelectionListController.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SelectionListController.java index c7ee279d..2be13301 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SelectionListController.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SelectionListController.java @@ -8,33 +8,34 @@ import org.teavm.jso.dom.html.HTMLElement; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class SelectionListController { public static interface ListItem { - - String getName(); - - default boolean getEnabled() { - return true; - } - + default boolean getAlwaysSelected() { return true; } - + + default boolean getEnabled() { + return true; + } + + String getName(); + } public static class ListItemEnum implements ListItem { @@ -55,11 +56,6 @@ public abstract class SelectionListController { - + protected final E listItem; protected final HTMLElement element; protected int index; protected boolean userVal = false; - + protected ListItemInstance(E listItem, HTMLElement element, int index) { this.listItem = listItem; this.element = element; this.index = index; } - + } protected final HTMLElement parent; @@ -98,82 +99,73 @@ public abstract class SelectionListController(selectionList.size()); } - public void setup() { - selectionEnableList.clear(); - parent.setInnerHTML(""); - currentSelected = -1; - for(int i = 0, l = selectionList.size(); i < l; ++i) { - T itm = selectionList.get(i); - HTMLElement el = BootMenuMain.doc.createElement("p"); - el.setInnerText(itm.getName()); - el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item"); - if(itm.getEnabled()) { - if(currentSelected == -1) { - currentSelected = 0; - el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); - } - final int ii = selectionEnableList.size(); - final ListItemInstance newInstance = new ListItemInstance(itm, el, ii); - el.addEventListener("mouseover", (evt) -> { - BootMenuMain.runLater(() -> { - if(!cursorEventsSuspended) { - setSelected(newInstance.index); - } - }); - }); - el.addEventListener("click", (evt) -> { - BootMenuMain.runLater(() -> { - if(!cursorEventsSuspended) { - itemSelectedLow(newInstance); - } - }); - }); - selectionEnableList.add(newInstance); - }else { - el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_disabled"); - } - parent.appendChild(el); - } - } - public void destroy() { parent.setInnerHTML(""); currentSelected = -1; selectionEnableList.clear(); } - public void setSelected(int idx) { - int listLen = selectionEnableList.size(); - if(listLen == 0) { - idx = -1; - }else if(idx >= listLen) { - idx = listLen - 1; - }else if(idx < 0) { - idx = 0; - } - if(idx == currentSelected) { - return; - } - if(currentSelected >= 0 && currentSelected < selectionEnableList.size()) { - selectionEnableList.get(currentSelected).element.getClassList().remove(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); - } - currentSelected = idx; - if(idx != -1) { - selectionEnableList.get(idx).element.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); + protected void fireSelect() { + if (currentSelected >= 0 && currentSelected < selectionEnableList.size()) { + itemSelectedLow(selectionEnableList.get(currentSelected)); } } public T getSelected() { - if(currentSelected >= 0 && currentSelected < selectionEnableList.size()) { + if (currentSelected >= 0 && currentSelected < selectionEnableList.size()) { return selectionEnableList.get(currentSelected).listItem; - }else { + } else { return null; } } + public void handleKeyDown(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ARROW_UP) { + setSelected(currentSelected - 1); + } else if (keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { + setSelected(currentSelected + 1); + } else if (keyCode == KeyCodes.DOM_KEY_ENTER) { + fireSelect(); + } + } + + public void handleKeyRepeat(int keyCode) { + if (keyCode == KeyCodes.DOM_KEY_ARROW_UP) { + setSelected(currentSelected - 1); + } else if (keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { + setSelected(currentSelected + 1); + } + } + + protected abstract void itemSelected(T item); + + protected void itemSelectedLow(ListItemInstance item) { + itemSelected(item.listItem); + } + + public void moveEntryDown(int index) { + if (index < 0 || index >= selectionEnableList.size() - 1) + return; + if (currentSelected == index) { + ++currentSelected; + } + ListItemInstance etr = selectionEnableList.get(index); + Collections.swap(selectionEnableList, index, index + 1); + etr.index++; + selectionEnableList.get(index + 1).index--; + parent.removeChild(etr.element); + if (index >= selectionEnableList.size() - 2) { + parent.appendChild(etr.element); + } else { + ListItemInstance etr2 = selectionEnableList.get(index + 2); + parent.insertBefore(etr.element, etr2.element); + } + } + public void moveEntryUp(int index) { - if(index < 1 || index >= selectionEnableList.size()) return; - if(currentSelected == index) { + if (index < 1 || index >= selectionEnableList.size()) + return; + if (currentSelected == index) { --currentSelected; } ListItemInstance etr = selectionEnableList.get(index); @@ -185,56 +177,69 @@ public abstract class SelectionListController= selectionEnableList.size() - 1) return; - if(currentSelected == index) { - ++currentSelected; - } - ListItemInstance etr = selectionEnableList.get(index); - Collections.swap(selectionEnableList, index, index + 1); - etr.index++; - selectionEnableList.get(index + 1).index--; - parent.removeChild(etr.element); - if(index >= selectionEnableList.size() - 2) { - parent.appendChild(etr.element); - }else { - ListItemInstance etr2 = selectionEnableList.get(index + 2); - parent.insertBefore(etr.element, etr2.element); - } - } - - public void handleKeyDown(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ARROW_UP) { - setSelected(currentSelected - 1); - }else if(keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { - setSelected(currentSelected + 1); - }else if(keyCode == KeyCodes.DOM_KEY_ENTER) { - fireSelect(); - } - } - - protected void fireSelect() { - if(currentSelected >= 0 && currentSelected < selectionEnableList.size()) { - itemSelectedLow(selectionEnableList.get(currentSelected)); - } - } - - public void handleKeyRepeat(int keyCode) { - if(keyCode == KeyCodes.DOM_KEY_ARROW_UP) { - setSelected(currentSelected - 1); - }else if(keyCode == KeyCodes.DOM_KEY_ARROW_DOWN) { - setSelected(currentSelected + 1); - } - } - public void setCursorEventsSuspended(boolean sus) { cursorEventsSuspended = sus; } - protected void itemSelectedLow(ListItemInstance item) { - itemSelected(item.listItem); + public void setSelected(int idx) { + int listLen = selectionEnableList.size(); + if (listLen == 0) { + idx = -1; + } else if (idx >= listLen) { + idx = listLen - 1; + } else if (idx < 0) { + idx = 0; + } + if (idx == currentSelected) { + return; + } + if (currentSelected >= 0 && currentSelected < selectionEnableList.size()) { + selectionEnableList.get(currentSelected).element.getClassList() + .remove(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); + } + currentSelected = idx; + if (idx != -1) { + selectionEnableList.get(idx).element.getClassList() + .add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); + } } - protected abstract void itemSelected(T item); + public void setup() { + selectionEnableList.clear(); + parent.setInnerHTML(""); + currentSelected = -1; + for (int i = 0, l = selectionList.size(); i < l; ++i) { + T itm = selectionList.get(i); + HTMLElement el = BootMenuMain.doc.createElement("p"); + el.setInnerText(itm.getName()); + el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item"); + if (itm.getEnabled()) { + if (currentSelected == -1) { + currentSelected = 0; + el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_selected"); + } + final int ii = selectionEnableList.size(); + final ListItemInstance newInstance = new ListItemInstance(itm, el, ii); + el.addEventListener("mouseover", (evt) -> { + BootMenuMain.runLater(() -> { + if (!cursorEventsSuspended) { + setSelected(newInstance.index); + } + }); + }); + el.addEventListener("click", (evt) -> { + BootMenuMain.runLater(() -> { + if (!cursorEventsSuspended) { + itemSelectedLow(newInstance); + } + }); + }); + selectionEnableList.add(newInstance); + } else { + el.getClassList().add(BootMenuConstants.cssClassPrefixBootMenu + "content_item_disabled"); + } + parent.appendChild(el); + } + } } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignatureCheckHelper.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignatureCheckHelper.java index d04f4e8b..c6ec94d1 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignatureCheckHelper.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignatureCheckHelper.java @@ -9,18 +9,19 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateCertificate; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SignatureCheckHelper { @@ -35,11 +36,13 @@ public class SignatureCheckHelper { logger.error(e); return false; } - if(!cert.isBundleDataValid(payloadBytes)) { - logger.error("The client's signature is invalid because the payload checksum does not match the expected checksum in the update certificate"); - logger.error("(Update certificate client name and version: {} - {})", cert.bundleDisplayName, cert.bundleDisplayVersion); + if (!cert.isBundleDataValid(payloadBytes)) { + logger.error( + "The client's signature is invalid because the payload checksum does not match the expected checksum in the update certificate"); + logger.error("(Update certificate client name and version: {} - {})", cert.bundleDisplayName, + cert.bundleDisplayVersion); return false; - }else { + } else { logger.info("Signature is valid: {} - {}", cert.bundleDisplayName, cert.bundleDisplayVersion); return true; } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignedClientInstaller.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignedClientInstaller.java index c980a319..a728e7af 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignedClientInstaller.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/SignedClientInstaller.java @@ -12,18 +12,19 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SignedClientInstaller { @@ -33,7 +34,8 @@ public class SignedClientInstaller { byte[] clientPayload, boolean setDefault, boolean setTimeout) { logger.info("Enabling boot menu..."); int f = BootMenuDataManager.getBootMenuFlags(win); - if(f == -1) f = 0; + if (f == -1) + f = 0; f |= 1; BootMenuDataManager.setBootMenuFlags(win, f); logger.info("Loading datastore..."); @@ -53,22 +55,24 @@ public class SignedClientInstaller { launchOptsJSON.put("bootMenuBlocksUnsignedClients", false); RelayRandomizeHelper.makeOptsJSONHaveMacroHack(launchOptsJSON); String launchOpts = launchOptsJSON.toString(4); - LaunchConfigEntry launchData = new LaunchConfigEntry(EaglercraftUUID.randomUUID(), clientData.uuid, displayName, - EnumClientLaunchType.EAGLERX_SIGNED_V1, null, null, null, null, null, launchOpts, false); + LaunchConfigEntry launchData = new LaunchConfigEntry(EaglercraftUUID.randomUUID(), clientData.uuid, + displayName, EnumClientLaunchType.EAGLERX_SIGNED_V1, null, null, null, null, null, launchOpts, + false); logger.info("Installing client data..."); dmgr.installNewClientData(launchData, clientData, blobs, false); - if(setDefault) { + if (setDefault) { logger.info("Setting boot order..."); - while(dmgr.launchOrderList.remove(launchData.uuid)); + while (dmgr.launchOrderList.remove(launchData.uuid)) + ; dmgr.launchOrderList.add(0, launchData.uuid); dmgr.writeManifest(); - if(setTimeout) { + if (setTimeout) { logger.info("Setting boot timeout..."); dmgr.confBootTimeout = 5; dmgr.saveAdditionalConf(); } } - }finally { + } finally { logger.info("Cleaning up..."); dstore.closeDatastore(); } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateLoader.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateLoader.java index c5e48258..d08e6474 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateLoader.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateLoader.java @@ -8,23 +8,24 @@ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TemplateLoader { public static final Map baseGlobals; - + static { baseGlobals = new HashMap<>(); baseGlobals.put("client_name", BootMenuConstants.client_projectForkName); @@ -41,7 +42,7 @@ public class TemplateLoader { EaglercraftRandom randomCharGenerator = new EaglercraftRandom(); char[] vigg = new char[16]; String charSel = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - for(int i = 0; i < vigg.length; ++i) { + for (int i = 0; i < vigg.length; ++i) { vigg[i] = charSel.charAt(randomCharGenerator.nextInt(charSel.length())); } baseGlobals.put("root_class_gen", BootMenuConstants.cssClassPrefix + (new String(vigg))); @@ -54,21 +55,21 @@ public class TemplateLoader { public static String loadTemplate(String path, Map globals) throws IOException { String basePath; int i = path.lastIndexOf('/'); - if(i != -1) { + if (i != -1) { basePath = path.substring(0, i); - }else { + } else { basePath = ""; } - if(globals != null) { + if (globals != null) { Map newGlobals = new HashMap<>(); newGlobals.putAll(baseGlobals); newGlobals.putAll(globals); globals = newGlobals; - }else { + } else { globals = baseGlobals; } String templateContent = BootMenuAssets.loadResourceString(path); - if(templateContent == null) { + if (templateContent == null) { throw new IOException("Could not load template: \"" + path + "\""); } return TemplateParser.loadTemplate(templateContent, basePath, true, globals); diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateParser.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateParser.java index cf80b482..e80b9b20 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateParser.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/TemplateParser.java @@ -12,21 +12,34 @@ import net.lax1dude.eaglercraft.v1_8.Base64; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TemplateParser { + public static class InvalidMacroException extends RuntimeException { + + public InvalidMacroException(String message) { + super(message); + } + + public InvalidMacroException(String message, Throwable cause) { + super(message, cause); + } + + } + private static class State { private boolean evalAllowed; private String baseDir; @@ -35,31 +48,83 @@ public class TemplateParser { private boolean strEscape; private boolean disableMacros; private boolean enableEval; + private State(String baseDir, boolean evalAllowed, Map globals) { this.baseDir = baseDir; this.evalAllowed = evalAllowed; this.globals = globals; } + private State push() { return new State(baseDir, evalAllowed, globals); } } - public static String loadTemplate(String content, String baseDir, boolean evalAllowed, Map globals) throws IOException { - return loadTemplate(content, new State(baseDir, evalAllowed, globals)); + private static void argCheck(int expect, int actual) { + if (expect != actual) { + throw new InvalidMacroException("Wrong number of arguments (" + actual + ", expected " + expect + ")"); + } + } + + private static void argCheck(int expectMin, int expectMax, int actual) { + if (expectMin > actual || expectMax < actual) { + throw new InvalidMacroException( + "Wrong number of arguments (" + actual + ", expected " + expectMin + " to " + expectMax + ")"); + } + } + + private static void argCheckMin(int expectMin, int actual) { + if (expectMin > actual) { + throw new InvalidMacroException( + "Wrong number of arguments (expected " + expectMin + " or more, got " + actual + ")"); + } + } + + private static String escapeMacroResult(String str, State state) throws IOException { + if (str.length() > 0) { + if (state.evalAllowed && state.enableEval) { + str = loadTemplate(str, state.push()); + } + if (state.strEscape) { + str = (new JSONObject()).put("e", str).toString(); // rip + if (str.length() >= 8) { + str = str.substring(6, str.length() - 2); + } + } + if (state.htmlEscape) { + str = HtmlEscapers.htmlEscaper().escape(str); + } + } + return str; + } + + private static byte[] loadResourceBytes(String path) { + byte[] res = BootMenuAssets.loadResourceBytes(path); + if (res == null) { + throw new InvalidMacroException("Unknown file: " + path); + } + return res; + } + + private static String loadResourceString(String path) { + String res = BootMenuAssets.loadResourceString(path); + if (res == null) { + throw new InvalidMacroException("Unknown file: " + path); + } + return res; } private static String loadTemplate(String content, State state) throws IOException { StringBuilder ret = new StringBuilder(); int i = 0, j = 0; - while((i = content.indexOf("{%", j)) != -1) { + while ((i = content.indexOf("{%", j)) != -1) { ret.append(content, j, i); j = i; i = content.indexOf("%}", j + 2); - if(i != -1) { + if (i != -1) { ret.append(processMacro(content.substring(j + 2, i), state)); j = i + 2; - }else { + } else { break; } } @@ -67,31 +132,24 @@ public class TemplateParser { return ret.toString(); } - public static class InvalidMacroException extends RuntimeException { - - public InvalidMacroException(String message, Throwable cause) { - super(message, cause); - } - - public InvalidMacroException(String message) { - super(message); - } - + public static String loadTemplate(String content, String baseDir, boolean evalAllowed, Map globals) + throws IOException { + return loadTemplate(content, new State(baseDir, evalAllowed, globals)); } private static String processMacro(String content, State state) throws IOException { String trimmed = content.trim(); try { String[] strs = (new StrTokenizer(trimmed, ' ', '`')).getTokenArray(); - if(strs.length < 1) { + if (strs.length < 1) { return "{%" + content + "%}"; } - if(strs[0].equals("disablemacros") && strs.length == 2) { - switch(strs[1]) { + if (strs[0].equals("disablemacros") && strs.length == 2) { + switch (strs[1]) { case "on": - if(state.disableMacros) { + if (state.disableMacros) { return "{%" + content + "%}"; - }else { + } else { state.disableMacros = true; return ""; } @@ -99,33 +157,38 @@ public class TemplateParser { state.disableMacros = false; return ""; default: - if(state.disableMacros) { + if (state.disableMacros) { return "{%" + content + "%}"; - }else { - throw new InvalidMacroException("Unknown disablemacros mode: " + strs[1] + " (Expected: on, off)"); + } else { + throw new InvalidMacroException( + "Unknown disablemacros mode: " + strs[1] + " (Expected: on, off)"); } } - }else if(!state.disableMacros) { - switch(strs[0]) { + } else if (!state.disableMacros) { + switch (strs[0]) { case "embed": argCheck(3, strs.length); - switch(strs[1]) { + switch (strs[1]) { case "base64": return Base64.encodeBase64String(loadResourceBytes(state.baseDir + "/" + strs[2])); case "text": return escapeMacroResult(loadResourceString(state.baseDir + "/" + strs[2]), state); case "eval": - if(state.evalAllowed) { - return escapeMacroResult(loadTemplate(loadResourceString(state.baseDir + "/" + strs[2]), state.push()), state); - }else { - throw new InvalidMacroException("Template tried to eval file \"" + strs[2] + "\"! (eval is disabled)"); + if (state.evalAllowed) { + return escapeMacroResult( + loadTemplate(loadResourceString(state.baseDir + "/" + strs[2]), state.push()), + state); + } else { + throw new InvalidMacroException( + "Template tried to eval file \"" + strs[2] + "\"! (eval is disabled)"); } default: - throw new InvalidMacroException("Unknown embed mode: " + strs[1] + " (Expected: base64, text, eval)"); + throw new InvalidMacroException( + "Unknown embed mode: " + strs[1] + " (Expected: base64, text, eval)"); } case "htmlescape": argCheck(2, strs.length); - switch(strs[1]) { + switch (strs[1]) { case "on": state.htmlEscape = true; return ""; @@ -137,7 +200,7 @@ public class TemplateParser { } case "strescape": argCheck(2, strs.length); - switch(strs[1]) { + switch (strs[1]) { case "on": state.strEscape = true; return ""; @@ -149,9 +212,9 @@ public class TemplateParser { } case "eval": argCheck(2, strs.length); - switch(strs[1]) { + switch (strs[1]) { case "on": - if(!state.evalAllowed) { + if (!state.evalAllowed) { throw new InvalidMacroException("Template tried to enable eval! (eval is disabled)"); } state.enableEval = true; @@ -165,21 +228,22 @@ public class TemplateParser { case "global": argCheck(2, 3, strs.length); String ret = state.globals.get(strs[1]); - if(ret == null) { - if(strs.length == 3) { + if (ret == null) { + if (strs.length == 3) { ret = strs[2]; - }else { - throw new InvalidMacroException("Unknown global \"" + strs[1] + "\"! (Available: " + String.join(", ", state.globals.keySet()) + ")"); + } else { + throw new InvalidMacroException("Unknown global \"" + strs[1] + "\"! (Available: " + + String.join(", ", state.globals.keySet()) + ")"); } } return escapeMacroResult(ret, state); case "property": argCheck(2, 3, strs.length); ret = System.getProperty(strs[1]); - if(ret == null) { - if(strs.length == 3) { + if (ret == null) { + if (strs.length == 3) { ret = strs[2]; - }else { + } else { throw new InvalidMacroException("Unknown system property \"" + strs[1] + "\"!"); } } @@ -195,66 +259,14 @@ public class TemplateParser { default: return "{%" + content + "%}"; } - }else { + } else { return "{%" + content + "%}"; } - }catch(InvalidMacroException ex) { + } catch (InvalidMacroException ex) { throw new IOException("Invalid macro: {% " + trimmed + " %}, message: " + ex.getMessage(), ex); - }catch(Throwable th) { + } catch (Throwable th) { throw new IOException("Error processing: {% " + trimmed + " %}, raised: " + th.toString(), th); } } - private static String escapeMacroResult(String str, State state) throws IOException { - if(str.length() > 0) { - if(state.evalAllowed && state.enableEval) { - str = loadTemplate(str, state.push()); - } - if(state.strEscape) { - str = (new JSONObject()).put("e", str).toString(); //rip - if(str.length() >= 8) { - str = str.substring(6, str.length() - 2); - } - } - if(state.htmlEscape) { - str = HtmlEscapers.htmlEscaper().escape(str); - } - } - return str; - } - - private static void argCheck(int expect, int actual) { - if(expect != actual) { - throw new InvalidMacroException("Wrong number of arguments (" + actual + ", expected " + expect + ")"); - } - } - - private static void argCheck(int expectMin, int expectMax, int actual) { - if(expectMin > actual || expectMax < actual) { - throw new InvalidMacroException("Wrong number of arguments (" + actual + ", expected " + expectMin + " to " + expectMax + ")"); - } - } - - private static void argCheckMin(int expectMin, int actual) { - if(expectMin > actual) { - throw new InvalidMacroException("Wrong number of arguments (expected " + expectMin + " or more, got " + actual + ")"); - } - } - - private static byte[] loadResourceBytes(String path) { - byte[] res = BootMenuAssets.loadResourceBytes(path); - if(res == null) { - throw new InvalidMacroException("Unknown file: " + path); - } - return res; - } - - private static String loadResourceString(String path) { - String res = BootMenuAssets.loadResourceString(path); - if(res == null) { - throw new InvalidMacroException("Unknown file: " + path); - } - return res; - } - } diff --git a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/UnsignedBootException.java b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/UnsignedBootException.java index 2641b756..f0efe5f7 100644 --- a/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/UnsignedBootException.java +++ b/src/teavm-boot-menu/java/net/lax1dude/eaglercraft/v1_8/boot_menu/teavm/UnsignedBootException.java @@ -2,18 +2,19 @@ package net.lax1dude.eaglercraft.v1_8.boot_menu.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class UnsignedBootException extends RuntimeException { diff --git a/src/teavm/java/com/jcraft/jogg/Buffer.java b/src/teavm/java/com/jcraft/jogg/Buffer.java index dde9158a..804f313e 100644 --- a/src/teavm/java/com/jcraft/jogg/Buffer.java +++ b/src/teavm/java/com/jcraft/jogg/Buffer.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -35,88 +35,56 @@ public class Buffer { 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff }; + public static int ilog(int v) { + int ret = 0; + while (v > 0) { + ret++; + v >>>= 1; + } + return (ret); + } + + public static void report(String in) { + System.err.println(in); + System.exit(1); + } + int ptr = 0; byte[] buffer = null; int endbit = 0; + int endbyte = 0; + int storage = 0; - public void writeinit() { - buffer = new byte[BUFFER_INCREMENT]; - ptr = 0; - buffer[0] = (byte) '\0'; - storage = BUFFER_INCREMENT; - } - - public void write(byte[] s) { - for (int i = 0; i < s.length; i++) { - if (s[i] == 0) - break; - write(s[i], 8); - } - } - - public void read(byte[] s, int bytes) { - int i = 0; - while (bytes-- != 0) { - s[i++] = (byte) (read(8)); - } - } - - void reset() { - ptr = 0; - buffer[0] = (byte) '\0'; - endbit = endbyte = 0; - } - - public void writeclear() { - buffer = null; - } - - public void readinit(byte[] buf, int bytes) { - readinit(buf, 0, bytes); - } - - public void readinit(byte[] buf, int start, int bytes) { - ptr = start; - buffer = buf; - endbit = endbyte = 0; - storage = bytes; - } - - public void write(int value, int bits) { - if (endbyte + 4 >= storage) { - byte[] foo = new byte[storage + BUFFER_INCREMENT]; - System.arraycopy(buffer, 0, foo, 0, storage); - buffer = foo; - storage += BUFFER_INCREMENT; - } - - value &= mask[bits]; + public void adv(int bits) { bits += endbit; - buffer[ptr] |= (byte) (value << endbit); - - if (bits >= 8) { - buffer[ptr + 1] = (byte) (value >>> (8 - endbit)); - if (bits >= 16) { - buffer[ptr + 2] = (byte) (value >>> (16 - endbit)); - if (bits >= 24) { - buffer[ptr + 3] = (byte) (value >>> (24 - endbit)); - if (bits >= 32) { - if (endbit > 0) - buffer[ptr + 4] = (byte) (value >>> (32 - endbit)); - else - buffer[ptr + 4] = 0; - } - } - } - } - - endbyte += bits / 8; ptr += bits / 8; + endbyte += bits / 8; endbit = bits & 7; } + public void adv1() { + ++endbit; + if (endbit > 7) { + endbit = 0; + ptr++; + endbyte++; + } + } + + public int bits() { + return (endbyte * 8 + endbit); + } + + public byte[] buffer() { + return (buffer); + } + + public int bytes() { + return (endbyte + (endbit + 7) / 8); + } + public int look(int bits) { int ret; int m = mask[bits]; @@ -150,19 +118,10 @@ public class Buffer { return ((buffer[ptr] >> endbit) & 1); } - public void adv(int bits) { - bits += endbit; - ptr += bits / 8; - endbyte += bits / 8; - endbit = bits & 7; - } - - public void adv1() { - ++endbit; - if (endbit > 7) { - endbit = 0; - ptr++; - endbyte++; + public void read(byte[] s, int bytes) { + int i = 0; + while (bytes-- != 0) { + s[i++] = (byte) (read(8)); } } @@ -204,6 +163,30 @@ public class Buffer { return (ret); } + public int read1() { + int ret; + if (endbyte >= storage) { + ret = -1; + endbit++; + if (endbit > 7) { + endbit = 0; + ptr++; + endbyte++; + } + return (ret); + } + + ret = (buffer[ptr] >> endbit) & 1; + + endbit++; + if (endbit > 7) { + endbit = 0; + ptr++; + endbyte++; + } + return (ret); + } + public int readB(int bits) { int ret; int m = 32 - bits; @@ -241,53 +224,72 @@ public class Buffer { return (ret); } - public int read1() { - int ret; - if (endbyte >= storage) { - ret = -1; - endbit++; - if (endbit > 7) { - endbit = 0; - ptr++; - endbyte++; + public void readinit(byte[] buf, int bytes) { + readinit(buf, 0, bytes); + } + + public void readinit(byte[] buf, int start, int bytes) { + ptr = start; + buffer = buf; + endbit = endbyte = 0; + storage = bytes; + } + + void reset() { + ptr = 0; + buffer[0] = (byte) '\0'; + endbit = endbyte = 0; + } + + public void write(byte[] s) { + for (int i = 0; i < s.length; i++) { + if (s[i] == 0) + break; + write(s[i], 8); + } + } + + public void write(int value, int bits) { + if (endbyte + 4 >= storage) { + byte[] foo = new byte[storage + BUFFER_INCREMENT]; + System.arraycopy(buffer, 0, foo, 0, storage); + buffer = foo; + storage += BUFFER_INCREMENT; + } + + value &= mask[bits]; + bits += endbit; + buffer[ptr] |= (byte) (value << endbit); + + if (bits >= 8) { + buffer[ptr + 1] = (byte) (value >>> (8 - endbit)); + if (bits >= 16) { + buffer[ptr + 2] = (byte) (value >>> (16 - endbit)); + if (bits >= 24) { + buffer[ptr + 3] = (byte) (value >>> (24 - endbit)); + if (bits >= 32) { + if (endbit > 0) + buffer[ptr + 4] = (byte) (value >>> (32 - endbit)); + else + buffer[ptr + 4] = 0; + } + } } - return (ret); } - ret = (buffer[ptr] >> endbit) & 1; - - endbit++; - if (endbit > 7) { - endbit = 0; - ptr++; - endbyte++; - } - return (ret); + endbyte += bits / 8; + ptr += bits / 8; + endbit = bits & 7; } - public int bytes() { - return (endbyte + (endbit + 7) / 8); + public void writeclear() { + buffer = null; } - public int bits() { - return (endbyte * 8 + endbit); - } - - public byte[] buffer() { - return (buffer); - } - - public static int ilog(int v) { - int ret = 0; - while (v > 0) { - ret++; - v >>>= 1; - } - return (ret); - } - - public static void report(String in) { - System.err.println(in); - System.exit(1); + public void writeinit() { + buffer = new byte[BUFFER_INCREMENT]; + ptr = 0; + buffer[0] = (byte) '\0'; + storage = BUFFER_INCREMENT; } } diff --git a/src/teavm/java/com/jcraft/jogg/Packet.java b/src/teavm/java/com/jcraft/jogg/Packet.java index d78e6f5a..4784ea4f 100644 --- a/src/teavm/java/com/jcraft/jogg/Packet.java +++ b/src/teavm/java/com/jcraft/jogg/Packet.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/src/teavm/java/com/jcraft/jogg/Page.java b/src/teavm/java/com/jcraft/jogg/Page.java index f9d29fe7..1a2895c0 100644 --- a/src/teavm/java/com/jcraft/jogg/Page.java +++ b/src/teavm/java/com/jcraft/jogg/Page.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -56,44 +56,10 @@ public class Page { public int body; public int body_len; - int version() { - return header_base[header + 4] & 0xff; - } - - int continued() { - return (header_base[header + 5] & 0x01); - } - public int bos() { return (header_base[header + 5] & 0x02); } - public int eos() { - return (header_base[header + 5] & 0x04); - } - - public long granulepos() { - long foo = header_base[header + 13] & 0xff; - foo = (foo << 8) | (header_base[header + 12] & 0xff); - foo = (foo << 8) | (header_base[header + 11] & 0xff); - foo = (foo << 8) | (header_base[header + 10] & 0xff); - foo = (foo << 8) | (header_base[header + 9] & 0xff); - foo = (foo << 8) | (header_base[header + 8] & 0xff); - foo = (foo << 8) | (header_base[header + 7] & 0xff); - foo = (foo << 8) | (header_base[header + 6] & 0xff); - return (foo); - } - - public int serialno() { - return (header_base[header + 14] & 0xff) | ((header_base[header + 15] & 0xff) << 8) - | ((header_base[header + 16] & 0xff) << 16) | ((header_base[header + 17] & 0xff) << 24); - } - - int pageno() { - return (header_base[header + 18] & 0xff) | ((header_base[header + 19] & 0xff) << 8) - | ((header_base[header + 20] & 0xff) << 16) | ((header_base[header + 21] & 0xff) << 24); - } - void checksum() { int crc_reg = 0; @@ -109,6 +75,10 @@ public class Page { header_base[header + 25] = (byte) (crc_reg >>> 24); } + int continued() { + return (header_base[header + 5] & 0x01); + } + public Page copy() { return copy(new Page()); } @@ -127,4 +97,34 @@ public class Page { return p; } + public int eos() { + return (header_base[header + 5] & 0x04); + } + + public long granulepos() { + long foo = header_base[header + 13] & 0xff; + foo = (foo << 8) | (header_base[header + 12] & 0xff); + foo = (foo << 8) | (header_base[header + 11] & 0xff); + foo = (foo << 8) | (header_base[header + 10] & 0xff); + foo = (foo << 8) | (header_base[header + 9] & 0xff); + foo = (foo << 8) | (header_base[header + 8] & 0xff); + foo = (foo << 8) | (header_base[header + 7] & 0xff); + foo = (foo << 8) | (header_base[header + 6] & 0xff); + return (foo); + } + + int pageno() { + return (header_base[header + 18] & 0xff) | ((header_base[header + 19] & 0xff) << 8) + | ((header_base[header + 20] & 0xff) << 16) | ((header_base[header + 21] & 0xff) << 24); + } + + public int serialno() { + return (header_base[header + 14] & 0xff) | ((header_base[header + 15] & 0xff) << 8) + | ((header_base[header + 16] & 0xff) << 16) | ((header_base[header + 17] & 0xff) << 24); + } + + int version() { + return header_base[header + 4] & 0xff; + } + } diff --git a/src/teavm/java/com/jcraft/jogg/StreamState.java b/src/teavm/java/com/jcraft/jogg/StreamState.java index e9c36634..cfa41942 100644 --- a/src/teavm/java/com/jcraft/jogg/StreamState.java +++ b/src/teavm/java/com/jcraft/jogg/StreamState.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -69,6 +69,151 @@ public class StreamState { init(serialno); } + void body_expand(int needed) { + if (body_storage <= body_fill + needed) { + body_storage += (needed + 1024); + byte[] foo = new byte[body_storage]; + System.arraycopy(body_data, 0, foo, 0, body_data.length); + body_data = foo; + } + } + + public void clear() { + body_data = null; + lacing_vals = null; + granule_vals = null; + } + + void destroy() { + clear(); + } + + public int eof() { + return e_o_s; + } + + public int flush(Page og) { + + int i; + int vals = 0; + int maxvals = (lacing_fill > 255 ? 255 : lacing_fill); + int bytes = 0; + int acc = 0; + long granule_pos = granule_vals[0]; + + if (maxvals == 0) + return (0); + + /* construct a page */ + /* decide how many segments to include */ + + /* + * If this is the initial header case, the first page must only include the + * initial header packet + */ + if (b_o_s == 0) { /* 'initial header page' case */ + granule_pos = 0; + for (vals = 0; vals < maxvals; vals++) { + if ((lacing_vals[vals] & 0x0ff) < 255) { + vals++; + break; + } + } + } else { + for (vals = 0; vals < maxvals; vals++) { + if (acc > 4096) + break; + acc += (lacing_vals[vals] & 0x0ff); + granule_pos = granule_vals[vals]; + } + } + + /* construct the header in temp storage */ + System.arraycopy("OggS".getBytes(), 0, header, 0, 4); + + /* stream structure version */ + header[4] = 0x00; + + /* continued packet flag? */ + header[5] = 0x00; + if ((lacing_vals[0] & 0x100) == 0) + header[5] |= 0x01; + /* first page flag? */ + if (b_o_s == 0) + header[5] |= 0x02; + /* last page flag? */ + if (e_o_s != 0 && lacing_fill == vals) + header[5] |= 0x04; + b_o_s = 1; + + /* 64 bits of PCM position */ + for (i = 6; i < 14; i++) { + header[i] = (byte) granule_pos; + granule_pos >>>= 8; + } + + /* 32 bits of stream serial number */ + { + int _serialno = serialno; + for (i = 14; i < 18; i++) { + header[i] = (byte) _serialno; + _serialno >>>= 8; + } + } + + /* + * 32 bits of page counter (we have both counter and page header because this + * val can roll over) + */ + if (pageno == -1) + pageno = 0; /* + * because someone called stream_reset; this would be a strange thing to do in + * an encode stream, but it has plausible uses + */ + { + int _pageno = pageno++; + for (i = 18; i < 22; i++) { + header[i] = (byte) _pageno; + _pageno >>>= 8; + } + } + + /* zero for computation; filled in later */ + header[22] = 0; + header[23] = 0; + header[24] = 0; + header[25] = 0; + + /* segment table */ + header[26] = (byte) vals; + for (i = 0; i < vals; i++) { + header[i + 27] = (byte) lacing_vals[i]; + bytes += (header[i + 27] & 0xff); + } + + /* set pointers in the ogg_page struct */ + og.header_base = header; + og.header = 0; + og.header_len = header_fill = vals + 27; + og.body_base = body_data; + og.body = body_returned; + og.body_len = bytes; + + /* advance the lacing data and set the body_returned pointer */ + + lacing_fill -= vals; + System.arraycopy(lacing_vals, vals, lacing_vals, 0, lacing_fill * 4); + System.arraycopy(granule_vals, vals, granule_vals, 0, lacing_fill * 8); + body_returned += bytes; + + /* calculate the checksum */ + + og.checksum(); + + /* done */ + return (1); + } + void init() { body_storage = 16 * 1024; body_data = new byte[body_storage]; @@ -91,25 +236,6 @@ public class StreamState { this.serialno = serialno; } - public void clear() { - body_data = null; - lacing_vals = null; - granule_vals = null; - } - - void destroy() { - clear(); - } - - void body_expand(int needed) { - if (body_storage <= body_fill + needed) { - body_storage += (needed + 1024); - byte[] foo = new byte[body_storage]; - System.arraycopy(body_data, 0, foo, 0, body_data.length); - body_data = foo; - } - } - void lacing_expand(int needed) { if (lacing_storage <= lacing_fill + needed) { lacing_storage += (needed + 32); @@ -123,6 +249,9 @@ public class StreamState { } } + // add the incoming page to the stream state; we decompose the page + // into packet segments here as well. + /* submit data to the internal buffer of the framing engine */ public int packetin(Packet op) { int lacing_val = op.bytes / 255 + 1; @@ -175,6 +304,21 @@ public class StreamState { return (0); } + /* + * This will flush remaining packets into a page (returning nonzero), even if + * there is not enough data to trigger a flush normally (undersized page). If + * there are no packets or partial packets to flush, ogg_stream_flush returns 0. + * Note that ogg_stream_flush will try to flush a normal sized page like + * ogg_stream_pageout; a call to ogg_stream_flush does not gurantee that all + * packets have flushed. Only a return value of 0 from ogg_stream_flush + * indicates all packet data is flushed into pages. + * + * ogg_stream_page will flush the last page in a stream even if it's undersized; + * you almost certainly want to use ogg_stream_pageout (and *not* + * ogg_stream_flush) unless you need to flush an undersized page in the middle + * of a stream for some reason. + */ + public int packetout(Packet op) { /* @@ -231,9 +375,6 @@ public class StreamState { return (1); } - // add the incoming page to the stream state; we decompose the page - // into packet segments here as well. - public int pagein(Page og) { byte[] header_base = og.header_base; int header = og.header; @@ -362,143 +503,6 @@ public class StreamState { return (0); } - /* - * This will flush remaining packets into a page (returning nonzero), even if - * there is not enough data to trigger a flush normally (undersized page). If - * there are no packets or partial packets to flush, ogg_stream_flush returns 0. - * Note that ogg_stream_flush will try to flush a normal sized page like - * ogg_stream_pageout; a call to ogg_stream_flush does not gurantee that all - * packets have flushed. Only a return value of 0 from ogg_stream_flush - * indicates all packet data is flushed into pages. - * - * ogg_stream_page will flush the last page in a stream even if it's undersized; - * you almost certainly want to use ogg_stream_pageout (and *not* - * ogg_stream_flush) unless you need to flush an undersized page in the middle - * of a stream for some reason. - */ - - public int flush(Page og) { - - int i; - int vals = 0; - int maxvals = (lacing_fill > 255 ? 255 : lacing_fill); - int bytes = 0; - int acc = 0; - long granule_pos = granule_vals[0]; - - if (maxvals == 0) - return (0); - - /* construct a page */ - /* decide how many segments to include */ - - /* - * If this is the initial header case, the first page must only include the - * initial header packet - */ - if (b_o_s == 0) { /* 'initial header page' case */ - granule_pos = 0; - for (vals = 0; vals < maxvals; vals++) { - if ((lacing_vals[vals] & 0x0ff) < 255) { - vals++; - break; - } - } - } else { - for (vals = 0; vals < maxvals; vals++) { - if (acc > 4096) - break; - acc += (lacing_vals[vals] & 0x0ff); - granule_pos = granule_vals[vals]; - } - } - - /* construct the header in temp storage */ - System.arraycopy("OggS".getBytes(), 0, header, 0, 4); - - /* stream structure version */ - header[4] = 0x00; - - /* continued packet flag? */ - header[5] = 0x00; - if ((lacing_vals[0] & 0x100) == 0) - header[5] |= 0x01; - /* first page flag? */ - if (b_o_s == 0) - header[5] |= 0x02; - /* last page flag? */ - if (e_o_s != 0 && lacing_fill == vals) - header[5] |= 0x04; - b_o_s = 1; - - /* 64 bits of PCM position */ - for (i = 6; i < 14; i++) { - header[i] = (byte) granule_pos; - granule_pos >>>= 8; - } - - /* 32 bits of stream serial number */ - { - int _serialno = serialno; - for (i = 14; i < 18; i++) { - header[i] = (byte) _serialno; - _serialno >>>= 8; - } - } - - /* - * 32 bits of page counter (we have both counter and page header because this - * val can roll over) - */ - if (pageno == -1) - pageno = 0; /* - * because someone called stream_reset; this would be a strange thing to do in - * an encode stream, but it has plausible uses - */ - { - int _pageno = pageno++; - for (i = 18; i < 22; i++) { - header[i] = (byte) _pageno; - _pageno >>>= 8; - } - } - - /* zero for computation; filled in later */ - header[22] = 0; - header[23] = 0; - header[24] = 0; - header[25] = 0; - - /* segment table */ - header[26] = (byte) vals; - for (i = 0; i < vals; i++) { - header[i + 27] = (byte) lacing_vals[i]; - bytes += (header[i + 27] & 0xff); - } - - /* set pointers in the ogg_page struct */ - og.header_base = header; - og.header = 0; - og.header_len = header_fill = vals + 27; - og.body_base = body_data; - og.body = body_returned; - og.body_len = bytes; - - /* advance the lacing data and set the body_returned pointer */ - - lacing_fill -= vals; - System.arraycopy(lacing_vals, vals, lacing_vals, 0, lacing_fill * 4); - System.arraycopy(granule_vals, vals, granule_vals, 0, lacing_fill * 8); - body_returned += bytes; - - /* calculate the checksum */ - - og.checksum(); - - /* done */ - return (1); - } - /* * This constructs pages from buffered packet segments. The pointers returned * are to static buffers; do not free. The returned buffers are good only until @@ -514,10 +518,6 @@ public class StreamState { return 0; } - public int eof() { - return e_o_s; - } - public int reset() { body_fill = 0; body_returned = 0; diff --git a/src/teavm/java/com/jcraft/jogg/SyncState.java b/src/teavm/java/com/jcraft/jogg/SyncState.java index a706c4fe..b1139c05 100644 --- a/src/teavm/java/com/jcraft/jogg/SyncState.java +++ b/src/teavm/java/com/jcraft/jogg/SyncState.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -53,10 +53,16 @@ public class SyncState { int headerbytes; int bodybytes; - public int clear() { - data = null; - return (0); - } + // sync the stream. This is meant to be useful for finding page + // boundaries. + // + // return values for this: + // -n) skipped n bytes + // 0) page not ready; more data (no bytes skipped) + // n) page synced at current location; page length n bytes + private Page pageseek = new Page(); + + private byte[] chksum = new byte[4]; public int buffer(int size) { // first, clear out any space that has been previously returned @@ -84,22 +90,57 @@ public class SyncState { return (fill); } - public int wrote(int bytes) { - if (fill + bytes > storage) - return (-1); - fill += bytes; + public int clear() { + data = null; return (0); } - // sync the stream. This is meant to be useful for finding page - // boundaries. + public int getBufferOffset() { + return fill; + } + + public int getDataOffset() { + return returned; + } + + // sync the stream and get a page. Keep trying until we find a page. + // Supress 'sync errors' after reporting the first. // - // return values for this: - // -n) skipped n bytes - // 0) page not ready; more data (no bytes skipped) - // n) page synced at current location; page length n bytes - private Page pageseek = new Page(); - private byte[] chksum = new byte[4]; + // return values: + // -1) recapture (hole in data) + // 0) need more data + // 1) page returned + // + // Returns pointers into buffered data; invalidated by next call to + // _stream, _clear, _init, or _buffer + + public void init() { + } + + public int pageout(Page og) { + // all we need to do is verify a page at the head of the stream + // buffer. If it doesn't verify, we look for the next potential + // frame + + while (true) { + int ret = pageseek(og); + if (ret > 0) { + // have a page + return (1); + } + if (ret == 0) { + // need more data + return (0); + } + + // head did not start a synced page... skipped some bytes + if (unsynced == 0) { + unsynced = 1; + return (-1); + } + // loop. keep looking + } + } public int pageseek(Page og) { int page = returned; @@ -214,42 +255,6 @@ public class SyncState { } } - // sync the stream and get a page. Keep trying until we find a page. - // Supress 'sync errors' after reporting the first. - // - // return values: - // -1) recapture (hole in data) - // 0) need more data - // 1) page returned - // - // Returns pointers into buffered data; invalidated by next call to - // _stream, _clear, _init, or _buffer - - public int pageout(Page og) { - // all we need to do is verify a page at the head of the stream - // buffer. If it doesn't verify, we look for the next potential - // frame - - while (true) { - int ret = pageseek(og); - if (ret > 0) { - // have a page - return (1); - } - if (ret == 0) { - // need more data - return (0); - } - - // head did not start a synced page... skipped some bytes - if (unsynced == 0) { - unsynced = 1; - return (-1); - } - // loop. keep looking - } - } - // clear things to an initial state. Good to call, eg, before seeking public int reset() { fill = 0; @@ -260,14 +265,10 @@ public class SyncState { return (0); } - public void init() { - } - - public int getDataOffset() { - return returned; - } - - public int getBufferOffset() { - return fill; + public int wrote(int bytes) { + if (fill + bytes > storage) + return (-1); + fill += bytes; + return (0); } } diff --git a/src/teavm/java/com/jcraft/jorbis/Block.java b/src/teavm/java/com/jcraft/jorbis/Block.java index 0a0e1663..f53d27c9 100644 --- a/src/teavm/java/com/jcraft/jorbis/Block.java +++ b/src/teavm/java/com/jcraft/jorbis/Block.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,7 +26,8 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; +import com.jcraft.jogg.Packet; public class Block { /// necessary stream state for linking to the framing abstraction @@ -57,10 +58,6 @@ public class Block { } } - public void init(DspState vd) { - this.vd = vd; - } - public int clear() { if (vd != null) { if (vd.analysisp != 0) { @@ -70,6 +67,10 @@ public class Block { return (0); } + public void init(DspState vd) { + this.vd = vd; + } + public int synthesis(Packet op) { Info vi = vd.vi; diff --git a/src/teavm/java/com/jcraft/jorbis/CodeBook.java b/src/teavm/java/com/jcraft/jorbis/CodeBook.java index c6c7f9fd..91f5d538 100644 --- a/src/teavm/java/com/jcraft/jorbis/CodeBook.java +++ b/src/teavm/java/com/jcraft/jorbis/CodeBook.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,280 +26,17 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class CodeBook { - int dim; // codebook dimensions (elements per vector) - int entries; // codebook entries - StaticCodeBook c = new StaticCodeBook(); + class DecodeAux { + int[] tab; + int[] tabl; + int tabn; - float[] valuelist; // list of dim*entries actual entry values - int[] codelist; // list of bitstream codewords for each entry - DecodeAux decode_tree; - - // returns the number of bits - int encode(int a, Buffer b) { - b.write(codelist[a], c.lengthlist[a]); - return (c.lengthlist[a]); - } - - // One the encode side, our vector writers are each designed for a - // specific purpose, and the encoder is not flexible without modification: - // - // The LSP vector coder uses a single stage nearest-match with no - // interleave, so no step and no error return. This is specced by floor0 - // and doesn't change. - // - // Residue0 encoding interleaves, uses multiple stages, and each stage - // peels of a specific amount of resolution from a lattice (thus we want - // to match by threshhold, not nearest match). Residue doesn't *have* to - // be encoded that way, but to change it, one will need to add more - // infrastructure on the encode side (decode side is specced and simpler) - - // floor0 LSP (single stage, non interleaved, nearest match) - // returns entry number and *modifies a* to the quantization value - int errorv(float[] a) { - int best = best(a, 1); - for (int k = 0; k < dim; k++) { - a[k] = valuelist[best * dim + k]; - } - return (best); - } - - // returns the number of bits and *modifies a* to the quantization value - int encodev(int best, float[] a, Buffer b) { - for (int k = 0; k < dim; k++) { - a[k] = valuelist[best * dim + k]; - } - return (encode(best, b)); - } - - // res0 (multistage, interleave, lattice) - // returns the number of bits and *modifies a* to the remainder value - int encodevs(float[] a, Buffer b, int step, int addmul) { - int best = besterror(a, step, addmul); - return (encode(best, b)); - } - - private int[] t = new int[15]; // decodevs_add is synchronized for re-using t. - - synchronized int decodevs_add(float[] a, int offset, Buffer b, int n) { - int step = n / dim; - int entry; - int i, j, o; - - if (t.length < step) { - t = new int[step]; - } - - for (i = 0; i < step; i++) { - entry = decode(b); - if (entry == -1) - return (-1); - t[i] = entry * dim; - } - for (i = 0, o = 0; i < dim; i++, o += step) { - for (j = 0; j < step; j++) { - a[offset + o + j] += valuelist[t[j] + i]; - } - } - - return (0); - } - - int decodev_add(float[] a, int offset, Buffer b, int n) { - int i, j, entry; - int t; - - if (dim > 8) { - for (i = 0; i < n;) { - entry = decode(b); - if (entry == -1) - return (-1); - t = entry * dim; - for (j = 0; j < dim;) { - a[offset + (i++)] += valuelist[t + (j++)]; - } - } - } else { - for (i = 0; i < n;) { - entry = decode(b); - if (entry == -1) - return (-1); - t = entry * dim; - j = 0; - switch (dim) { - case 8: - a[offset + (i++)] += valuelist[t + (j++)]; - case 7: - a[offset + (i++)] += valuelist[t + (j++)]; - case 6: - a[offset + (i++)] += valuelist[t + (j++)]; - case 5: - a[offset + (i++)] += valuelist[t + (j++)]; - case 4: - a[offset + (i++)] += valuelist[t + (j++)]; - case 3: - a[offset + (i++)] += valuelist[t + (j++)]; - case 2: - a[offset + (i++)] += valuelist[t + (j++)]; - case 1: - a[offset + (i++)] += valuelist[t + (j++)]; - case 0: - break; - } - } - } - return (0); - } - - int decodev_set(float[] a, int offset, Buffer b, int n) { - int i, j, entry; - int t; - - for (i = 0; i < n;) { - entry = decode(b); - if (entry == -1) - return (-1); - t = entry * dim; - for (j = 0; j < dim;) { - a[offset + i++] = valuelist[t + (j++)]; - } - } - return (0); - } - - int decodevv_add(float[][] a, int offset, int ch, Buffer b, int n) { - int i, j, entry; - int chptr = 0; - - for (i = offset / ch; i < (offset + n) / ch;) { - entry = decode(b); - if (entry == -1) - return (-1); - - int t = entry * dim; - for (j = 0; j < dim; j++) { - a[chptr++][i] += valuelist[t + j]; - if (chptr == ch) { - chptr = 0; - i++; - } - } - } - return (0); - } - - // Decode side is specced and easier, because we don't need to find - // matches using different criteria; we simply read and map. There are - // two things we need to do 'depending': - // - // We may need to support interleave. We don't really, but it's - // convenient to do it here rather than rebuild the vector later. - // - // Cascades may be additive or multiplicitive; this is not inherent in - // the codebook, but set in the code using the codebook. Like - // interleaving, it's easiest to do it here. - // stage==0 -> declarative (set the value) - // stage==1 -> additive - // stage==2 -> multiplicitive - - // returns the entry number or -1 on eof - int decode(Buffer b) { - int ptr = 0; - DecodeAux t = decode_tree; - int lok = b.look(t.tabn); - - if (lok >= 0) { - ptr = t.tab[lok]; - b.adv(t.tabl[lok]); - if (ptr <= 0) { - return -ptr; - } - } - do { - switch (b.read1()) { - case 0: - ptr = t.ptr0[ptr]; - break; - case 1: - ptr = t.ptr1[ptr]; - break; - case -1: - default: - return (-1); - } - } while (ptr > 0); - return (-ptr); - } - - // returns the entry number or -1 on eof - int decodevs(float[] a, int index, Buffer b, int step, int addmul) { - int entry = decode(b); - if (entry == -1) - return (-1); - switch (addmul) { - case -1: - for (int i = 0, o = 0; i < dim; i++, o += step) - a[index + o] = valuelist[entry * dim + i]; - break; - case 0: - for (int i = 0, o = 0; i < dim; i++, o += step) - a[index + o] += valuelist[entry * dim + i]; - break; - case 1: - for (int i = 0, o = 0; i < dim; i++, o += step) - a[index + o] *= valuelist[entry * dim + i]; - break; - default: - // System.err.println("CodeBook.decodeves: addmul="+addmul); - } - return (entry); - } - - int best(float[] a, int step) { - // brute force it! - { - int besti = -1; - float best = 0.f; - int e = 0; - for (int i = 0; i < entries; i++) { - if (c.lengthlist[i] > 0) { - float _this = dist(dim, valuelist, e, a, step); - if (besti == -1 || _this < best) { - best = _this; - besti = i; - } - } - e += dim; - } - return (besti); - } - } - - // returns the entry number and *modifies a* to the remainder value - int besterror(float[] a, int step, int addmul) { - int best = best(a, step); - switch (addmul) { - case 0: - for (int i = 0, o = 0; i < dim; i++, o += step) - a[o] -= valuelist[best * dim + i]; - break; - case 1: - for (int i = 0, o = 0; i < dim; i++, o += step) { - float val = valuelist[best * dim + i]; - if (val == 0) { - a[o] = 0; - } else { - a[o] /= val; - } - } - break; - } - return (best); - } - - void clear() { + int[] ptr0; + int[] ptr1; + int aux; // number of tree entries } private static float dist(int el, float[] ref, int index, float[] b, int step) { @@ -311,20 +48,6 @@ class CodeBook { return (acc); } - int init_decode(StaticCodeBook s) { - c = s; - entries = s.entries; - dim = s.dim; - valuelist = s.unquantize(); - - decode_tree = make_decode_tree(); - if (decode_tree == null) { - clear(); - return (-1); - } - return (0); - } - // given a list of word lengths, generate a list of codewords. Works // for length ordered or unordered, always assigns the lowest valued // codewords first. Extended to handle unused entries (length 0) @@ -395,6 +118,295 @@ class CodeBook { return (r); } + int dim; // codebook dimensions (elements per vector) + int entries; // codebook entries + StaticCodeBook c = new StaticCodeBook(); + + float[] valuelist; // list of dim*entries actual entry values + + // One the encode side, our vector writers are each designed for a + // specific purpose, and the encoder is not flexible without modification: + // + // The LSP vector coder uses a single stage nearest-match with no + // interleave, so no step and no error return. This is specced by floor0 + // and doesn't change. + // + // Residue0 encoding interleaves, uses multiple stages, and each stage + // peels of a specific amount of resolution from a lattice (thus we want + // to match by threshhold, not nearest match). Residue doesn't *have* to + // be encoded that way, but to change it, one will need to add more + // infrastructure on the encode side (decode side is specced and simpler) + + int[] codelist; // list of bitstream codewords for each entry + + DecodeAux decode_tree; + + private int[] t = new int[15]; // decodevs_add is synchronized for re-using t. + + int best(float[] a, int step) { + // brute force it! + { + int besti = -1; + float best = 0.f; + int e = 0; + for (int i = 0; i < entries; i++) { + if (c.lengthlist[i] > 0) { + float _this = dist(dim, valuelist, e, a, step); + if (besti == -1 || _this < best) { + best = _this; + besti = i; + } + } + e += dim; + } + return (besti); + } + } + + // returns the entry number and *modifies a* to the remainder value + int besterror(float[] a, int step, int addmul) { + int best = best(a, step); + switch (addmul) { + case 0: + for (int i = 0, o = 0; i < dim; i++, o += step) + a[o] -= valuelist[best * dim + i]; + break; + case 1: + for (int i = 0, o = 0; i < dim; i++, o += step) { + float val = valuelist[best * dim + i]; + if (val == 0) { + a[o] = 0; + } else { + a[o] /= val; + } + } + break; + } + return (best); + } + + void clear() { + } + + // returns the entry number or -1 on eof + int decode(Buffer b) { + int ptr = 0; + DecodeAux t = decode_tree; + int lok = b.look(t.tabn); + + if (lok >= 0) { + ptr = t.tab[lok]; + b.adv(t.tabl[lok]); + if (ptr <= 0) { + return -ptr; + } + } + do { + switch (b.read1()) { + case 0: + ptr = t.ptr0[ptr]; + break; + case 1: + ptr = t.ptr1[ptr]; + break; + case -1: + default: + return (-1); + } + } while (ptr > 0); + return (-ptr); + } + + int decodev_add(float[] a, int offset, Buffer b, int n) { + int i, j, entry; + int t; + + if (dim > 8) { + for (i = 0; i < n;) { + entry = decode(b); + if (entry == -1) + return (-1); + t = entry * dim; + for (j = 0; j < dim;) { + a[offset + (i++)] += valuelist[t + (j++)]; + } + } + } else { + for (i = 0; i < n;) { + entry = decode(b); + if (entry == -1) + return (-1); + t = entry * dim; + j = 0; + switch (dim) { + case 8: + a[offset + (i++)] += valuelist[t + (j++)]; + case 7: + a[offset + (i++)] += valuelist[t + (j++)]; + case 6: + a[offset + (i++)] += valuelist[t + (j++)]; + case 5: + a[offset + (i++)] += valuelist[t + (j++)]; + case 4: + a[offset + (i++)] += valuelist[t + (j++)]; + case 3: + a[offset + (i++)] += valuelist[t + (j++)]; + case 2: + a[offset + (i++)] += valuelist[t + (j++)]; + case 1: + a[offset + (i++)] += valuelist[t + (j++)]; + case 0: + break; + } + } + } + return (0); + } + + // Decode side is specced and easier, because we don't need to find + // matches using different criteria; we simply read and map. There are + // two things we need to do 'depending': + // + // We may need to support interleave. We don't really, but it's + // convenient to do it here rather than rebuild the vector later. + // + // Cascades may be additive or multiplicitive; this is not inherent in + // the codebook, but set in the code using the codebook. Like + // interleaving, it's easiest to do it here. + // stage==0 -> declarative (set the value) + // stage==1 -> additive + // stage==2 -> multiplicitive + + int decodev_set(float[] a, int offset, Buffer b, int n) { + int i, j, entry; + int t; + + for (i = 0; i < n;) { + entry = decode(b); + if (entry == -1) + return (-1); + t = entry * dim; + for (j = 0; j < dim;) { + a[offset + i++] = valuelist[t + (j++)]; + } + } + return (0); + } + + // returns the entry number or -1 on eof + int decodevs(float[] a, int index, Buffer b, int step, int addmul) { + int entry = decode(b); + if (entry == -1) + return (-1); + switch (addmul) { + case -1: + for (int i = 0, o = 0; i < dim; i++, o += step) + a[index + o] = valuelist[entry * dim + i]; + break; + case 0: + for (int i = 0, o = 0; i < dim; i++, o += step) + a[index + o] += valuelist[entry * dim + i]; + break; + case 1: + for (int i = 0, o = 0; i < dim; i++, o += step) + a[index + o] *= valuelist[entry * dim + i]; + break; + default: + // System.err.println("CodeBook.decodeves: addmul="+addmul); + } + return (entry); + } + + synchronized int decodevs_add(float[] a, int offset, Buffer b, int n) { + int step = n / dim; + int entry; + int i, j, o; + + if (t.length < step) { + t = new int[step]; + } + + for (i = 0; i < step; i++) { + entry = decode(b); + if (entry == -1) + return (-1); + t[i] = entry * dim; + } + for (i = 0, o = 0; i < dim; i++, o += step) { + for (j = 0; j < step; j++) { + a[offset + o + j] += valuelist[t[j] + i]; + } + } + + return (0); + } + + int decodevv_add(float[][] a, int offset, int ch, Buffer b, int n) { + int i, j, entry; + int chptr = 0; + + for (i = offset / ch; i < (offset + n) / ch;) { + entry = decode(b); + if (entry == -1) + return (-1); + + int t = entry * dim; + for (j = 0; j < dim; j++) { + a[chptr++][i] += valuelist[t + j]; + if (chptr == ch) { + chptr = 0; + i++; + } + } + } + return (0); + } + + // returns the number of bits + int encode(int a, Buffer b) { + b.write(codelist[a], c.lengthlist[a]); + return (c.lengthlist[a]); + } + + // returns the number of bits and *modifies a* to the quantization value + int encodev(int best, float[] a, Buffer b) { + for (int k = 0; k < dim; k++) { + a[k] = valuelist[best * dim + k]; + } + return (encode(best, b)); + } + + // res0 (multistage, interleave, lattice) + // returns the number of bits and *modifies a* to the remainder value + int encodevs(float[] a, Buffer b, int step, int addmul) { + int best = besterror(a, step, addmul); + return (encode(best, b)); + } + + // floor0 LSP (single stage, non interleaved, nearest match) + // returns entry number and *modifies a* to the quantization value + int errorv(float[] a) { + int best = best(a, 1); + for (int k = 0; k < dim; k++) { + a[k] = valuelist[best * dim + k]; + } + return (best); + } + + int init_decode(StaticCodeBook s) { + c = s; + entries = s.entries; + dim = s.dim; + valuelist = s.unquantize(); + + decode_tree = make_decode_tree(); + if (decode_tree == null) { + clear(); + return (-1); + } + return (0); + } + // build the decode helper tree from the codewords DecodeAux make_decode_tree() { int top = 0; @@ -458,14 +470,4 @@ class CodeBook { return (t); } - - class DecodeAux { - int[] tab; - int[] tabl; - int tabn; - - int[] ptr0; - int[] ptr1; - int aux; // number of tree entries - } } diff --git a/src/teavm/java/com/jcraft/jorbis/Comment.java b/src/teavm/java/com/jcraft/jorbis/Comment.java index 77f95db7..516fc825 100644 --- a/src/teavm/java/com/jcraft/jorbis/Comment.java +++ b/src/teavm/java/com/jcraft/jorbis/Comment.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,7 +26,8 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; +import com.jcraft.jogg.Packet; // the comments are not part of vorbis_info so that vorbis_info can be // static storage @@ -36,22 +37,31 @@ public class Comment { private static final int OV_EIMPL = -130; + static boolean tagcompare(byte[] s1, byte[] s2, int n) { + int c = 0; + byte u1, u2; + while (c < n) { + u1 = s1[c]; + u2 = s2[c]; + if ('Z' >= u1 && u1 >= 'A') + u1 = (byte) (u1 - 'A' + 'a'); + if ('Z' >= u2 && u2 >= 'A') + u2 = (byte) (u2 - 'A' + 'a'); + if (u1 != u2) { + return false; + } + c++; + } + return true; + } + // unlimited user comment fields. public byte[][] user_comments; public int[] comment_lengths; public int comments; + public byte[] vendor; - public void init() { - user_comments = null; - comments = 0; - vendor = null; - } - - public void add(String comment) { - add(comment.getBytes()); - } - private void add(byte[] comment) { byte[][] foo = new byte[comments + 2][]; if (user_comments != null) { @@ -73,45 +83,79 @@ public class Comment { user_comments[comments] = null; } + public void add(String comment) { + add(comment.getBytes()); + } + public void add_tag(String tag, String contents) { if (contents == null) contents = ""; add(tag + "=" + contents); } - static boolean tagcompare(byte[] s1, byte[] s2, int n) { - int c = 0; - byte u1, u2; - while (c < n) { - u1 = s1[c]; - u2 = s2[c]; - if ('Z' >= u1 && u1 >= 'A') - u1 = (byte) (u1 - 'A' + 'a'); - if ('Z' >= u2 && u2 >= 'A') - u2 = (byte) (u2 - 'A' + 'a'); - if (u1 != u2) { - return false; - } - c++; - } - return true; + void clear() { + for (int i = 0; i < comments; i++) + user_comments[i] = null; + user_comments = null; + vendor = null; } - public String query(String tag) { - return query(tag, 0); - } - - public String query(String tag, int count) { - int foo = query(tag.getBytes(), count); - if (foo == -1) + public String getComment(int i) { + if (comments <= i) return null; - byte[] comment = user_comments[foo]; - for (int i = 0; i < comment_lengths[foo]; i++) { - if (comment[i] == '=') { - return new String(comment, i + 1, comment_lengths[foo] - (i + 1)); + return new String(user_comments[i], 0, user_comments[i].length - 1); + } + + public String getVendor() { + return new String(vendor, 0, vendor.length - 1); + } + + public int header_out(Packet op) { + Buffer opb = new Buffer(); + opb.writeinit(); + + if (pack(opb) != 0) + return OV_EIMPL; + + op.packet_base = new byte[opb.bytes()]; + op.packet = 0; + op.bytes = opb.bytes(); + System.arraycopy(opb.buffer(), 0, op.packet_base, 0, op.bytes); + op.b_o_s = 0; + op.e_o_s = 0; + op.granulepos = 0; + return 0; + } + + public void init() { + user_comments = null; + comments = 0; + vendor = null; + } + + int pack(Buffer opb) { + // preamble + opb.write(0x03, 8); + opb.write(_vorbis); + + // vendor + opb.write(_vendor.length, 32); + opb.write(_vendor); + + // comments + opb.write(comments, 32); + if (comments != 0) { + for (int i = 0; i < comments; i++) { + if (user_comments[i] != null) { + opb.write(comment_lengths[i], 32); + opb.write(user_comments[i]); + } else { + opb.write(0, 32); + } } } - return null; + opb.write(1, 1); + return (0); } private int query(byte[] tag, int count) { @@ -136,6 +180,33 @@ public class Comment { return -1; } + public String query(String tag) { + return query(tag, 0); + } + + public String query(String tag, int count) { + int foo = query(tag.getBytes(), count); + if (foo == -1) + return null; + byte[] comment = user_comments[foo]; + for (int i = 0; i < comment_lengths[foo]; i++) { + if (comment[i] == '=') { + return new String(comment, i + 1, comment_lengths[foo] - (i + 1)); + } + } + return null; + } + + @Override + public String toString() { + String foo = "Vendor: " + new String(vendor, 0, vendor.length - 1); + for (int i = 0; i < comments; i++) { + foo = foo + "\nComment: " + new String(user_comments[i], 0, user_comments[i].length - 1); + } + foo = foo + "\n"; + return foo; + } + int unpack(Buffer opb) { int vendorlen = opb.read(32); if (vendorlen < 0) { @@ -169,72 +240,4 @@ public class Comment { } return (0); } - - int pack(Buffer opb) { - // preamble - opb.write(0x03, 8); - opb.write(_vorbis); - - // vendor - opb.write(_vendor.length, 32); - opb.write(_vendor); - - // comments - opb.write(comments, 32); - if (comments != 0) { - for (int i = 0; i < comments; i++) { - if (user_comments[i] != null) { - opb.write(comment_lengths[i], 32); - opb.write(user_comments[i]); - } else { - opb.write(0, 32); - } - } - } - opb.write(1, 1); - return (0); - } - - public int header_out(Packet op) { - Buffer opb = new Buffer(); - opb.writeinit(); - - if (pack(opb) != 0) - return OV_EIMPL; - - op.packet_base = new byte[opb.bytes()]; - op.packet = 0; - op.bytes = opb.bytes(); - System.arraycopy(opb.buffer(), 0, op.packet_base, 0, op.bytes); - op.b_o_s = 0; - op.e_o_s = 0; - op.granulepos = 0; - return 0; - } - - void clear() { - for (int i = 0; i < comments; i++) - user_comments[i] = null; - user_comments = null; - vendor = null; - } - - public String getVendor() { - return new String(vendor, 0, vendor.length - 1); - } - - public String getComment(int i) { - if (comments <= i) - return null; - return new String(user_comments[i], 0, user_comments[i].length - 1); - } - - public String toString() { - String foo = "Vendor: " + new String(vendor, 0, vendor.length - 1); - for (int i = 0; i < comments; i++) { - foo = foo + "\nComment: " + new String(user_comments[i], 0, user_comments[i].length - 1); - } - foo = foo + "\n"; - return foo; - } } diff --git a/src/teavm/java/com/jcraft/jorbis/Drft.java b/src/teavm/java/com/jcraft/jorbis/Drft.java index de8aad4e..b07dfdae 100644 --- a/src/teavm/java/com/jcraft/jorbis/Drft.java +++ b/src/teavm/java/com/jcraft/jorbis/Drft.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -27,675 +27,16 @@ package com.jcraft.jorbis; class Drft { - int n; - float[] trigcache; - int[] splitcache; - - void backward(float[] data) { - if (n == 1) - return; - drftb1(n, data, trigcache, trigcache, n, splitcache); - } - - void init(int n) { - this.n = n; - trigcache = new float[3 * n]; - splitcache = new int[32]; - fdrffti(n, trigcache, splitcache); - } - - void clear() { - if (trigcache != null) - trigcache = null; - if (splitcache != null) - splitcache = null; - } - static int[] ntryh = { 4, 2, 3, 5 }; static float tpi = 6.28318530717958647692528676655900577f; static float hsqt2 = .70710678118654752440084436210485f; + static float taui = .86602540378443864676372317075293618f; + static float taur = -.5f; + static float sqrt2 = 1.4142135623730950488016887242097f; - static void drfti1(int n, float[] wa, int index, int[] ifac) { - float arg, argh, argld, fi; - int ntry = 0, i, j = -1; - int k1, l1, l2, ib; - int ld, ii, ip, is, nq, nr; - int ido, ipm, nfm1; - int nl = n; - int nf = 0; - - int state = 101; - - loop: while (true) { - switch (state) { - case 101: - j++; - if (j < 4) - ntry = ntryh[j]; - else - ntry += 2; - case 104: - nq = nl / ntry; - nr = nl - ntry * nq; - if (nr != 0) { - state = 101; - break; - } - nf++; - ifac[nf + 1] = ntry; - nl = nq; - if (ntry != 2) { - state = 107; - break; - } - if (nf == 1) { - state = 107; - break; - } - - for (i = 1; i < nf; i++) { - ib = nf - i + 1; - ifac[ib + 1] = ifac[ib]; - } - ifac[2] = 2; - case 107: - if (nl != 1) { - state = 104; - break; - } - ifac[0] = n; - ifac[1] = nf; - argh = tpi / n; - is = 0; - nfm1 = nf - 1; - l1 = 1; - - if (nfm1 == 0) - return; - - for (k1 = 0; k1 < nfm1; k1++) { - ip = ifac[k1 + 2]; - ld = 0; - l2 = l1 * ip; - ido = n / l2; - ipm = ip - 1; - - for (j = 0; j < ipm; j++) { - ld += l1; - i = is; - argld = (float) ld * argh; - fi = 0.f; - for (ii = 2; ii < ido; ii += 2) { - fi += 1.f; - arg = fi * argld; - wa[index + i++] = (float) Math.cos(arg); - wa[index + i++] = (float) Math.sin(arg); - } - is += ido; - } - l1 = l2; - } - break loop; - } - } - } - - static void fdrffti(int n, float[] wsave, int[] ifac) { - if (n == 1) - return; - drfti1(n, wsave, n, ifac); - } - - static void dradf2(int ido, int l1, float[] cc, float[] ch, float[] wa1, int index) { - int i, k; - float ti2, tr2; - int t0, t1, t2, t3, t4, t5, t6; - - t1 = 0; - t0 = (t2 = l1 * ido); - t3 = ido << 1; - for (k = 0; k < l1; k++) { - ch[t1 << 1] = cc[t1] + cc[t2]; - ch[(t1 << 1) + t3 - 1] = cc[t1] - cc[t2]; - t1 += ido; - t2 += ido; - } - - if (ido < 2) - return; - - if (ido != 2) { - t1 = 0; - t2 = t0; - for (k = 0; k < l1; k++) { - t3 = t2; - t4 = (t1 << 1) + (ido << 1); - t5 = t1; - t6 = t1 + t1; - for (i = 2; i < ido; i += 2) { - t3 += 2; - t4 -= 2; - t5 += 2; - t6 += 2; - tr2 = wa1[index + i - 2] * cc[t3 - 1] + wa1[index + i - 1] * cc[t3]; - ti2 = wa1[index + i - 2] * cc[t3] - wa1[index + i - 1] * cc[t3 - 1]; - ch[t6] = cc[t5] + ti2; - ch[t4] = ti2 - cc[t5]; - ch[t6 - 1] = cc[t5 - 1] + tr2; - ch[t4 - 1] = cc[t5 - 1] - tr2; - } - t1 += ido; - t2 += ido; - } - if (ido % 2 == 1) - return; - } - - t3 = (t2 = (t1 = ido) - 1); - t2 += t0; - for (k = 0; k < l1; k++) { - ch[t1] = -cc[t2]; - ch[t1 - 1] = cc[t3]; - t1 += ido << 1; - t2 += ido; - t3 += ido; - } - } - - static void dradf4(int ido, int l1, float[] cc, float[] ch, float[] wa1, int index1, float[] wa2, int index2, - float[] wa3, int index3) { - int i, k, t0, t1, t2, t3, t4, t5, t6; - float ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; - t0 = l1 * ido; - - t1 = t0; - t4 = t1 << 1; - t2 = t1 + (t1 << 1); - t3 = 0; - - for (k = 0; k < l1; k++) { - tr1 = cc[t1] + cc[t2]; - tr2 = cc[t3] + cc[t4]; - - ch[t5 = t3 << 2] = tr1 + tr2; - ch[(ido << 2) + t5 - 1] = tr2 - tr1; - ch[(t5 += (ido << 1)) - 1] = cc[t3] - cc[t4]; - ch[t5] = cc[t2] - cc[t1]; - - t1 += ido; - t2 += ido; - t3 += ido; - t4 += ido; - } - if (ido < 2) - return; - - if (ido != 2) { - t1 = 0; - for (k = 0; k < l1; k++) { - t2 = t1; - t4 = t1 << 2; - t5 = (t6 = ido << 1) + t4; - for (i = 2; i < ido; i += 2) { - t3 = (t2 += 2); - t4 += 2; - t5 -= 2; - - t3 += t0; - cr2 = wa1[index1 + i - 2] * cc[t3 - 1] + wa1[index1 + i - 1] * cc[t3]; - ci2 = wa1[index1 + i - 2] * cc[t3] - wa1[index1 + i - 1] * cc[t3 - 1]; - t3 += t0; - cr3 = wa2[index2 + i - 2] * cc[t3 - 1] + wa2[index2 + i - 1] * cc[t3]; - ci3 = wa2[index2 + i - 2] * cc[t3] - wa2[index2 + i - 1] * cc[t3 - 1]; - t3 += t0; - cr4 = wa3[index3 + i - 2] * cc[t3 - 1] + wa3[index3 + i - 1] * cc[t3]; - ci4 = wa3[index3 + i - 2] * cc[t3] - wa3[index3 + i - 1] * cc[t3 - 1]; - - tr1 = cr2 + cr4; - tr4 = cr4 - cr2; - ti1 = ci2 + ci4; - ti4 = ci2 - ci4; - - ti2 = cc[t2] + ci3; - ti3 = cc[t2] - ci3; - tr2 = cc[t2 - 1] + cr3; - tr3 = cc[t2 - 1] - cr3; - - ch[t4 - 1] = tr1 + tr2; - ch[t4] = ti1 + ti2; - - ch[t5 - 1] = tr3 - ti4; - ch[t5] = tr4 - ti3; - - ch[t4 + t6 - 1] = ti4 + tr3; - ch[t4 + t6] = tr4 + ti3; - - ch[t5 + t6 - 1] = tr2 - tr1; - ch[t5 + t6] = ti1 - ti2; - } - t1 += ido; - } - if ((ido & 1) != 0) - return; - } - - t2 = (t1 = t0 + ido - 1) + (t0 << 1); - t3 = ido << 2; - t4 = ido; - t5 = ido << 1; - t6 = ido; - - for (k = 0; k < l1; k++) { - ti1 = -hsqt2 * (cc[t1] + cc[t2]); - tr1 = hsqt2 * (cc[t1] - cc[t2]); - - ch[t4 - 1] = tr1 + cc[t6 - 1]; - ch[t4 + t5 - 1] = cc[t6 - 1] - tr1; - - ch[t4] = ti1 - cc[t1 + t0]; - ch[t4 + t5] = ti1 + cc[t1 + t0]; - - t1 += ido; - t2 += ido; - t4 += t3; - t6 += ido; - } - } - - static void dradfg(int ido, int ip, int l1, int idl1, float[] cc, float[] c1, float[] c2, float[] ch, float[] ch2, - float[] wa, int index) { - int idij, ipph, i, j, k, l, ic, ik, is; - int t0, t1, t2 = 0, t3, t4, t5, t6, t7, t8, t9, t10; - float dc2, ai1, ai2, ar1, ar2, ds2; - int nbd; - float dcp = 0, arg, dsp = 0, ar1h, ar2h; - int idp2, ipp2; - - arg = tpi / (float) ip; - dcp = (float) Math.cos(arg); - dsp = (float) Math.sin(arg); - ipph = (ip + 1) >> 1; - ipp2 = ip; - idp2 = ido; - nbd = (ido - 1) >> 1; - t0 = l1 * ido; - t10 = ip * ido; - - int state = 100; - loop: while (true) { - switch (state) { - case 101: - if (ido == 1) { - state = 119; - break; - } - for (ik = 0; ik < idl1; ik++) - ch2[ik] = c2[ik]; - - t1 = 0; - for (j = 1; j < ip; j++) { - t1 += t0; - t2 = t1; - for (k = 0; k < l1; k++) { - ch[t2] = c1[t2]; - t2 += ido; - } - } - - is = -ido; - t1 = 0; - if (nbd > l1) { - for (j = 1; j < ip; j++) { - t1 += t0; - is += ido; - t2 = -ido + t1; - for (k = 0; k < l1; k++) { - idij = is - 1; - t2 += ido; - t3 = t2; - for (i = 2; i < ido; i += 2) { - idij += 2; - t3 += 2; - ch[t3 - 1] = wa[index + idij - 1] * c1[t3 - 1] + wa[index + idij] * c1[t3]; - ch[t3] = wa[index + idij - 1] * c1[t3] - wa[index + idij] * c1[t3 - 1]; - } - } - } - } else { - - for (j = 1; j < ip; j++) { - is += ido; - idij = is - 1; - t1 += t0; - t2 = t1; - for (i = 2; i < ido; i += 2) { - idij += 2; - t2 += 2; - t3 = t2; - for (k = 0; k < l1; k++) { - ch[t3 - 1] = wa[index + idij - 1] * c1[t3 - 1] + wa[index + idij] * c1[t3]; - ch[t3] = wa[index + idij - 1] * c1[t3] - wa[index + idij] * c1[t3 - 1]; - t3 += ido; - } - } - } - } - - t1 = 0; - t2 = ipp2 * t0; - if (nbd < l1) { - for (j = 1; j < ipph; j++) { - t1 += t0; - t2 -= t0; - t3 = t1; - t4 = t2; - for (i = 2; i < ido; i += 2) { - t3 += 2; - t4 += 2; - t5 = t3 - ido; - t6 = t4 - ido; - for (k = 0; k < l1; k++) { - t5 += ido; - t6 += ido; - c1[t5 - 1] = ch[t5 - 1] + ch[t6 - 1]; - c1[t6 - 1] = ch[t5] - ch[t6]; - c1[t5] = ch[t5] + ch[t6]; - c1[t6] = ch[t6 - 1] - ch[t5 - 1]; - } - } - } - } else { - for (j = 1; j < ipph; j++) { - t1 += t0; - t2 -= t0; - t3 = t1; - t4 = t2; - for (k = 0; k < l1; k++) { - t5 = t3; - t6 = t4; - for (i = 2; i < ido; i += 2) { - t5 += 2; - t6 += 2; - c1[t5 - 1] = ch[t5 - 1] + ch[t6 - 1]; - c1[t6 - 1] = ch[t5] - ch[t6]; - c1[t5] = ch[t5] + ch[t6]; - c1[t6] = ch[t6 - 1] - ch[t5 - 1]; - } - t3 += ido; - t4 += ido; - } - } - } - case 119: - for (ik = 0; ik < idl1; ik++) - c2[ik] = ch2[ik]; - - t1 = 0; - t2 = ipp2 * idl1; - for (j = 1; j < ipph; j++) { - t1 += t0; - t2 -= t0; - t3 = t1 - ido; - t4 = t2 - ido; - for (k = 0; k < l1; k++) { - t3 += ido; - t4 += ido; - c1[t3] = ch[t3] + ch[t4]; - c1[t4] = ch[t4] - ch[t3]; - } - } - - ar1 = 1.f; - ai1 = 0.f; - t1 = 0; - t2 = ipp2 * idl1; - t3 = (ip - 1) * idl1; - for (l = 1; l < ipph; l++) { - t1 += idl1; - t2 -= idl1; - ar1h = dcp * ar1 - dsp * ai1; - ai1 = dcp * ai1 + dsp * ar1; - ar1 = ar1h; - t4 = t1; - t5 = t2; - t6 = t3; - t7 = idl1; - - for (ik = 0; ik < idl1; ik++) { - ch2[t4++] = c2[ik] + ar1 * c2[t7++]; - ch2[t5++] = ai1 * c2[t6++]; - } - - dc2 = ar1; - ds2 = ai1; - ar2 = ar1; - ai2 = ai1; - - t4 = idl1; - t5 = (ipp2 - 1) * idl1; - for (j = 2; j < ipph; j++) { - t4 += idl1; - t5 -= idl1; - - ar2h = dc2 * ar2 - ds2 * ai2; - ai2 = dc2 * ai2 + ds2 * ar2; - ar2 = ar2h; - - t6 = t1; - t7 = t2; - t8 = t4; - t9 = t5; - for (ik = 0; ik < idl1; ik++) { - ch2[t6++] += ar2 * c2[t8++]; - ch2[t7++] += ai2 * c2[t9++]; - } - } - } - t1 = 0; - for (j = 1; j < ipph; j++) { - t1 += idl1; - t2 = t1; - for (ik = 0; ik < idl1; ik++) - ch2[ik] += c2[t2++]; - } - - if (ido < l1) { - state = 132; - break; - } - - t1 = 0; - t2 = 0; - for (k = 0; k < l1; k++) { - t3 = t1; - t4 = t2; - for (i = 0; i < ido; i++) - cc[t4++] = ch[t3++]; - t1 += ido; - t2 += t10; - } - state = 135; - break; - - case 132: - for (i = 0; i < ido; i++) { - t1 = i; - t2 = i; - for (k = 0; k < l1; k++) { - cc[t2] = ch[t1]; - t1 += ido; - t2 += t10; - } - } - case 135: - t1 = 0; - t2 = ido << 1; - t3 = 0; - t4 = ipp2 * t0; - for (j = 1; j < ipph; j++) { - t1 += t2; - t3 += t0; - t4 -= t0; - - t5 = t1; - t6 = t3; - t7 = t4; - - for (k = 0; k < l1; k++) { - cc[t5 - 1] = ch[t6]; - cc[t5] = ch[t7]; - t5 += t10; - t6 += ido; - t7 += ido; - } - } - - if (ido == 1) - return; - if (nbd < l1) { - state = 141; - break; - } - - t1 = -ido; - t3 = 0; - t4 = 0; - t5 = ipp2 * t0; - for (j = 1; j < ipph; j++) { - t1 += t2; - t3 += t2; - t4 += t0; - t5 -= t0; - t6 = t1; - t7 = t3; - t8 = t4; - t9 = t5; - for (k = 0; k < l1; k++) { - for (i = 2; i < ido; i += 2) { - ic = idp2 - i; - cc[i + t7 - 1] = ch[i + t8 - 1] + ch[i + t9 - 1]; - cc[ic + t6 - 1] = ch[i + t8 - 1] - ch[i + t9 - 1]; - cc[i + t7] = ch[i + t8] + ch[i + t9]; - cc[ic + t6] = ch[i + t9] - ch[i + t8]; - } - t6 += t10; - t7 += t10; - t8 += ido; - t9 += ido; - } - } - return; - case 141: - t1 = -ido; - t3 = 0; - t4 = 0; - t5 = ipp2 * t0; - for (j = 1; j < ipph; j++) { - t1 += t2; - t3 += t2; - t4 += t0; - t5 -= t0; - for (i = 2; i < ido; i += 2) { - t6 = idp2 + t1 - i; - t7 = i + t3; - t8 = i + t4; - t9 = i + t5; - for (k = 0; k < l1; k++) { - cc[t7 - 1] = ch[t8 - 1] + ch[t9 - 1]; - cc[t6 - 1] = ch[t8 - 1] - ch[t9 - 1]; - cc[t7] = ch[t8] + ch[t9]; - cc[t6] = ch[t9] - ch[t8]; - t6 += t10; - t7 += t10; - t8 += ido; - t9 += ido; - } - } - } - break loop; - } - } - } - - static void drftf1(int n, float[] c, float[] ch, float[] wa, int[] ifac) { - int i, k1, l1, l2; - int na, kh, nf; - int ip, iw, ido, idl1, ix2, ix3; - - nf = ifac[1]; - na = 1; - l2 = n; - iw = n; - - for (k1 = 0; k1 < nf; k1++) { - kh = nf - k1; - ip = ifac[kh + 1]; - l1 = l2 / ip; - ido = n / l2; - idl1 = ido * l1; - iw -= (ip - 1) * ido; - na = 1 - na; - - int state = 100; - loop: while (true) { - switch (state) { - case 100: - if (ip != 4) { - state = 102; - break; - } - - ix2 = iw + ido; - ix3 = ix2 + ido; - if (na != 0) - dradf4(ido, l1, ch, c, wa, iw - 1, wa, ix2 - 1, wa, ix3 - 1); - else - dradf4(ido, l1, c, ch, wa, iw - 1, wa, ix2 - 1, wa, ix3 - 1); - state = 110; - break; - case 102: - if (ip != 2) { - state = 104; - break; - } - if (na != 0) { - state = 103; - break; - } - dradf2(ido, l1, c, ch, wa, iw - 1); - state = 110; - break; - case 103: - dradf2(ido, l1, ch, c, wa, iw - 1); - case 104: - if (ido == 1) - na = 1 - na; - if (na != 0) { - state = 109; - break; - } - dradfg(ido, ip, l1, idl1, c, c, c, ch, ch, wa, iw - 1); - na = 1; - state = 110; - break; - case 109: - dradfg(ido, ip, l1, idl1, ch, ch, ch, c, c, wa, iw - 1); - na = 0; - case 110: - l2 = l1; - break loop; - } - } - } - if (na == 1) - return; - for (i = 0; i < n; i++) - c[i] = ch[i]; - } - static void dradb2(int ido, int l1, float[] cc, float[] ch, float[] wa1, int index) { int i, k, t0, t1, t2, t3, t4, t5, t6; float ti2, tr2; @@ -1235,6 +576,477 @@ class Drft { } } + static void dradf2(int ido, int l1, float[] cc, float[] ch, float[] wa1, int index) { + int i, k; + float ti2, tr2; + int t0, t1, t2, t3, t4, t5, t6; + + t1 = 0; + t0 = (t2 = l1 * ido); + t3 = ido << 1; + for (k = 0; k < l1; k++) { + ch[t1 << 1] = cc[t1] + cc[t2]; + ch[(t1 << 1) + t3 - 1] = cc[t1] - cc[t2]; + t1 += ido; + t2 += ido; + } + + if (ido < 2) + return; + + if (ido != 2) { + t1 = 0; + t2 = t0; + for (k = 0; k < l1; k++) { + t3 = t2; + t4 = (t1 << 1) + (ido << 1); + t5 = t1; + t6 = t1 + t1; + for (i = 2; i < ido; i += 2) { + t3 += 2; + t4 -= 2; + t5 += 2; + t6 += 2; + tr2 = wa1[index + i - 2] * cc[t3 - 1] + wa1[index + i - 1] * cc[t3]; + ti2 = wa1[index + i - 2] * cc[t3] - wa1[index + i - 1] * cc[t3 - 1]; + ch[t6] = cc[t5] + ti2; + ch[t4] = ti2 - cc[t5]; + ch[t6 - 1] = cc[t5 - 1] + tr2; + ch[t4 - 1] = cc[t5 - 1] - tr2; + } + t1 += ido; + t2 += ido; + } + if (ido % 2 == 1) + return; + } + + t3 = (t2 = (t1 = ido) - 1); + t2 += t0; + for (k = 0; k < l1; k++) { + ch[t1] = -cc[t2]; + ch[t1 - 1] = cc[t3]; + t1 += ido << 1; + t2 += ido; + t3 += ido; + } + } + + static void dradf4(int ido, int l1, float[] cc, float[] ch, float[] wa1, int index1, float[] wa2, int index2, + float[] wa3, int index3) { + int i, k, t0, t1, t2, t3, t4, t5, t6; + float ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; + t0 = l1 * ido; + + t1 = t0; + t4 = t1 << 1; + t2 = t1 + (t1 << 1); + t3 = 0; + + for (k = 0; k < l1; k++) { + tr1 = cc[t1] + cc[t2]; + tr2 = cc[t3] + cc[t4]; + + ch[t5 = t3 << 2] = tr1 + tr2; + ch[(ido << 2) + t5 - 1] = tr2 - tr1; + ch[(t5 += (ido << 1)) - 1] = cc[t3] - cc[t4]; + ch[t5] = cc[t2] - cc[t1]; + + t1 += ido; + t2 += ido; + t3 += ido; + t4 += ido; + } + if (ido < 2) + return; + + if (ido != 2) { + t1 = 0; + for (k = 0; k < l1; k++) { + t2 = t1; + t4 = t1 << 2; + t5 = (t6 = ido << 1) + t4; + for (i = 2; i < ido; i += 2) { + t3 = (t2 += 2); + t4 += 2; + t5 -= 2; + + t3 += t0; + cr2 = wa1[index1 + i - 2] * cc[t3 - 1] + wa1[index1 + i - 1] * cc[t3]; + ci2 = wa1[index1 + i - 2] * cc[t3] - wa1[index1 + i - 1] * cc[t3 - 1]; + t3 += t0; + cr3 = wa2[index2 + i - 2] * cc[t3 - 1] + wa2[index2 + i - 1] * cc[t3]; + ci3 = wa2[index2 + i - 2] * cc[t3] - wa2[index2 + i - 1] * cc[t3 - 1]; + t3 += t0; + cr4 = wa3[index3 + i - 2] * cc[t3 - 1] + wa3[index3 + i - 1] * cc[t3]; + ci4 = wa3[index3 + i - 2] * cc[t3] - wa3[index3 + i - 1] * cc[t3 - 1]; + + tr1 = cr2 + cr4; + tr4 = cr4 - cr2; + ti1 = ci2 + ci4; + ti4 = ci2 - ci4; + + ti2 = cc[t2] + ci3; + ti3 = cc[t2] - ci3; + tr2 = cc[t2 - 1] + cr3; + tr3 = cc[t2 - 1] - cr3; + + ch[t4 - 1] = tr1 + tr2; + ch[t4] = ti1 + ti2; + + ch[t5 - 1] = tr3 - ti4; + ch[t5] = tr4 - ti3; + + ch[t4 + t6 - 1] = ti4 + tr3; + ch[t4 + t6] = tr4 + ti3; + + ch[t5 + t6 - 1] = tr2 - tr1; + ch[t5 + t6] = ti1 - ti2; + } + t1 += ido; + } + if ((ido & 1) != 0) + return; + } + + t2 = (t1 = t0 + ido - 1) + (t0 << 1); + t3 = ido << 2; + t4 = ido; + t5 = ido << 1; + t6 = ido; + + for (k = 0; k < l1; k++) { + ti1 = -hsqt2 * (cc[t1] + cc[t2]); + tr1 = hsqt2 * (cc[t1] - cc[t2]); + + ch[t4 - 1] = tr1 + cc[t6 - 1]; + ch[t4 + t5 - 1] = cc[t6 - 1] - tr1; + + ch[t4] = ti1 - cc[t1 + t0]; + ch[t4 + t5] = ti1 + cc[t1 + t0]; + + t1 += ido; + t2 += ido; + t4 += t3; + t6 += ido; + } + } + + static void dradfg(int ido, int ip, int l1, int idl1, float[] cc, float[] c1, float[] c2, float[] ch, float[] ch2, + float[] wa, int index) { + int idij, ipph, i, j, k, l, ic, ik, is; + int t0, t1, t2 = 0, t3, t4, t5, t6, t7, t8, t9, t10; + float dc2, ai1, ai2, ar1, ar2, ds2; + int nbd; + float dcp = 0, arg, dsp = 0, ar1h, ar2h; + int idp2, ipp2; + + arg = tpi / (float) ip; + dcp = (float) Math.cos(arg); + dsp = (float) Math.sin(arg); + ipph = (ip + 1) >> 1; + ipp2 = ip; + idp2 = ido; + nbd = (ido - 1) >> 1; + t0 = l1 * ido; + t10 = ip * ido; + + int state = 100; + loop: while (true) { + switch (state) { + case 101: + if (ido == 1) { + state = 119; + break; + } + for (ik = 0; ik < idl1; ik++) + ch2[ik] = c2[ik]; + + t1 = 0; + for (j = 1; j < ip; j++) { + t1 += t0; + t2 = t1; + for (k = 0; k < l1; k++) { + ch[t2] = c1[t2]; + t2 += ido; + } + } + + is = -ido; + t1 = 0; + if (nbd > l1) { + for (j = 1; j < ip; j++) { + t1 += t0; + is += ido; + t2 = -ido + t1; + for (k = 0; k < l1; k++) { + idij = is - 1; + t2 += ido; + t3 = t2; + for (i = 2; i < ido; i += 2) { + idij += 2; + t3 += 2; + ch[t3 - 1] = wa[index + idij - 1] * c1[t3 - 1] + wa[index + idij] * c1[t3]; + ch[t3] = wa[index + idij - 1] * c1[t3] - wa[index + idij] * c1[t3 - 1]; + } + } + } + } else { + + for (j = 1; j < ip; j++) { + is += ido; + idij = is - 1; + t1 += t0; + t2 = t1; + for (i = 2; i < ido; i += 2) { + idij += 2; + t2 += 2; + t3 = t2; + for (k = 0; k < l1; k++) { + ch[t3 - 1] = wa[index + idij - 1] * c1[t3 - 1] + wa[index + idij] * c1[t3]; + ch[t3] = wa[index + idij - 1] * c1[t3] - wa[index + idij] * c1[t3 - 1]; + t3 += ido; + } + } + } + } + + t1 = 0; + t2 = ipp2 * t0; + if (nbd < l1) { + for (j = 1; j < ipph; j++) { + t1 += t0; + t2 -= t0; + t3 = t1; + t4 = t2; + for (i = 2; i < ido; i += 2) { + t3 += 2; + t4 += 2; + t5 = t3 - ido; + t6 = t4 - ido; + for (k = 0; k < l1; k++) { + t5 += ido; + t6 += ido; + c1[t5 - 1] = ch[t5 - 1] + ch[t6 - 1]; + c1[t6 - 1] = ch[t5] - ch[t6]; + c1[t5] = ch[t5] + ch[t6]; + c1[t6] = ch[t6 - 1] - ch[t5 - 1]; + } + } + } + } else { + for (j = 1; j < ipph; j++) { + t1 += t0; + t2 -= t0; + t3 = t1; + t4 = t2; + for (k = 0; k < l1; k++) { + t5 = t3; + t6 = t4; + for (i = 2; i < ido; i += 2) { + t5 += 2; + t6 += 2; + c1[t5 - 1] = ch[t5 - 1] + ch[t6 - 1]; + c1[t6 - 1] = ch[t5] - ch[t6]; + c1[t5] = ch[t5] + ch[t6]; + c1[t6] = ch[t6 - 1] - ch[t5 - 1]; + } + t3 += ido; + t4 += ido; + } + } + } + case 119: + for (ik = 0; ik < idl1; ik++) + c2[ik] = ch2[ik]; + + t1 = 0; + t2 = ipp2 * idl1; + for (j = 1; j < ipph; j++) { + t1 += t0; + t2 -= t0; + t3 = t1 - ido; + t4 = t2 - ido; + for (k = 0; k < l1; k++) { + t3 += ido; + t4 += ido; + c1[t3] = ch[t3] + ch[t4]; + c1[t4] = ch[t4] - ch[t3]; + } + } + + ar1 = 1.f; + ai1 = 0.f; + t1 = 0; + t2 = ipp2 * idl1; + t3 = (ip - 1) * idl1; + for (l = 1; l < ipph; l++) { + t1 += idl1; + t2 -= idl1; + ar1h = dcp * ar1 - dsp * ai1; + ai1 = dcp * ai1 + dsp * ar1; + ar1 = ar1h; + t4 = t1; + t5 = t2; + t6 = t3; + t7 = idl1; + + for (ik = 0; ik < idl1; ik++) { + ch2[t4++] = c2[ik] + ar1 * c2[t7++]; + ch2[t5++] = ai1 * c2[t6++]; + } + + dc2 = ar1; + ds2 = ai1; + ar2 = ar1; + ai2 = ai1; + + t4 = idl1; + t5 = (ipp2 - 1) * idl1; + for (j = 2; j < ipph; j++) { + t4 += idl1; + t5 -= idl1; + + ar2h = dc2 * ar2 - ds2 * ai2; + ai2 = dc2 * ai2 + ds2 * ar2; + ar2 = ar2h; + + t6 = t1; + t7 = t2; + t8 = t4; + t9 = t5; + for (ik = 0; ik < idl1; ik++) { + ch2[t6++] += ar2 * c2[t8++]; + ch2[t7++] += ai2 * c2[t9++]; + } + } + } + t1 = 0; + for (j = 1; j < ipph; j++) { + t1 += idl1; + t2 = t1; + for (ik = 0; ik < idl1; ik++) + ch2[ik] += c2[t2++]; + } + + if (ido < l1) { + state = 132; + break; + } + + t1 = 0; + t2 = 0; + for (k = 0; k < l1; k++) { + t3 = t1; + t4 = t2; + for (i = 0; i < ido; i++) + cc[t4++] = ch[t3++]; + t1 += ido; + t2 += t10; + } + state = 135; + break; + + case 132: + for (i = 0; i < ido; i++) { + t1 = i; + t2 = i; + for (k = 0; k < l1; k++) { + cc[t2] = ch[t1]; + t1 += ido; + t2 += t10; + } + } + case 135: + t1 = 0; + t2 = ido << 1; + t3 = 0; + t4 = ipp2 * t0; + for (j = 1; j < ipph; j++) { + t1 += t2; + t3 += t0; + t4 -= t0; + + t5 = t1; + t6 = t3; + t7 = t4; + + for (k = 0; k < l1; k++) { + cc[t5 - 1] = ch[t6]; + cc[t5] = ch[t7]; + t5 += t10; + t6 += ido; + t7 += ido; + } + } + + if (ido == 1) + return; + if (nbd < l1) { + state = 141; + break; + } + + t1 = -ido; + t3 = 0; + t4 = 0; + t5 = ipp2 * t0; + for (j = 1; j < ipph; j++) { + t1 += t2; + t3 += t2; + t4 += t0; + t5 -= t0; + t6 = t1; + t7 = t3; + t8 = t4; + t9 = t5; + for (k = 0; k < l1; k++) { + for (i = 2; i < ido; i += 2) { + ic = idp2 - i; + cc[i + t7 - 1] = ch[i + t8 - 1] + ch[i + t9 - 1]; + cc[ic + t6 - 1] = ch[i + t8 - 1] - ch[i + t9 - 1]; + cc[i + t7] = ch[i + t8] + ch[i + t9]; + cc[ic + t6] = ch[i + t9] - ch[i + t8]; + } + t6 += t10; + t7 += t10; + t8 += ido; + t9 += ido; + } + } + return; + case 141: + t1 = -ido; + t3 = 0; + t4 = 0; + t5 = ipp2 * t0; + for (j = 1; j < ipph; j++) { + t1 += t2; + t3 += t2; + t4 += t0; + t5 -= t0; + for (i = 2; i < ido; i += 2) { + t6 = idp2 + t1 - i; + t7 = i + t3; + t8 = i + t4; + t9 = i + t5; + for (k = 0; k < l1; k++) { + cc[t7 - 1] = ch[t8 - 1] + ch[t9 - 1]; + cc[t6 - 1] = ch[t8 - 1] - ch[t9 - 1]; + cc[t7] = ch[t8] + ch[t9]; + cc[t6] = ch[t9] - ch[t8]; + t6 += t10; + t7 += t10; + t8 += ido; + t9 += ido; + } + } + } + break loop; + } + } + } + static void drftb1(int n, float[] c, float[] ch, float[] wa, int index, int[] ifac) { int i, k1, l1, l2 = 0; int na; @@ -1316,4 +1128,197 @@ class Drft { for (i = 0; i < n; i++) c[i] = ch[i]; } + + static void drftf1(int n, float[] c, float[] ch, float[] wa, int[] ifac) { + int i, k1, l1, l2; + int na, kh, nf; + int ip, iw, ido, idl1, ix2, ix3; + + nf = ifac[1]; + na = 1; + l2 = n; + iw = n; + + for (k1 = 0; k1 < nf; k1++) { + kh = nf - k1; + ip = ifac[kh + 1]; + l1 = l2 / ip; + ido = n / l2; + idl1 = ido * l1; + iw -= (ip - 1) * ido; + na = 1 - na; + + int state = 100; + loop: while (true) { + switch (state) { + case 100: + if (ip != 4) { + state = 102; + break; + } + + ix2 = iw + ido; + ix3 = ix2 + ido; + if (na != 0) + dradf4(ido, l1, ch, c, wa, iw - 1, wa, ix2 - 1, wa, ix3 - 1); + else + dradf4(ido, l1, c, ch, wa, iw - 1, wa, ix2 - 1, wa, ix3 - 1); + state = 110; + break; + case 102: + if (ip != 2) { + state = 104; + break; + } + if (na != 0) { + state = 103; + break; + } + dradf2(ido, l1, c, ch, wa, iw - 1); + state = 110; + break; + case 103: + dradf2(ido, l1, ch, c, wa, iw - 1); + case 104: + if (ido == 1) + na = 1 - na; + if (na != 0) { + state = 109; + break; + } + dradfg(ido, ip, l1, idl1, c, c, c, ch, ch, wa, iw - 1); + na = 1; + state = 110; + break; + case 109: + dradfg(ido, ip, l1, idl1, ch, ch, ch, c, c, wa, iw - 1); + na = 0; + case 110: + l2 = l1; + break loop; + } + } + } + if (na == 1) + return; + for (i = 0; i < n; i++) + c[i] = ch[i]; + } + + static void drfti1(int n, float[] wa, int index, int[] ifac) { + float arg, argh, argld, fi; + int ntry = 0, i, j = -1; + int k1, l1, l2, ib; + int ld, ii, ip, is, nq, nr; + int ido, ipm, nfm1; + int nl = n; + int nf = 0; + + int state = 101; + + loop: while (true) { + switch (state) { + case 101: + j++; + if (j < 4) + ntry = ntryh[j]; + else + ntry += 2; + case 104: + nq = nl / ntry; + nr = nl - ntry * nq; + if (nr != 0) { + state = 101; + break; + } + nf++; + ifac[nf + 1] = ntry; + nl = nq; + if (ntry != 2) { + state = 107; + break; + } + if (nf == 1) { + state = 107; + break; + } + + for (i = 1; i < nf; i++) { + ib = nf - i + 1; + ifac[ib + 1] = ifac[ib]; + } + ifac[2] = 2; + case 107: + if (nl != 1) { + state = 104; + break; + } + ifac[0] = n; + ifac[1] = nf; + argh = tpi / n; + is = 0; + nfm1 = nf - 1; + l1 = 1; + + if (nfm1 == 0) + return; + + for (k1 = 0; k1 < nfm1; k1++) { + ip = ifac[k1 + 2]; + ld = 0; + l2 = l1 * ip; + ido = n / l2; + ipm = ip - 1; + + for (j = 0; j < ipm; j++) { + ld += l1; + i = is; + argld = (float) ld * argh; + fi = 0.f; + for (ii = 2; ii < ido; ii += 2) { + fi += 1.f; + arg = fi * argld; + wa[index + i++] = (float) Math.cos(arg); + wa[index + i++] = (float) Math.sin(arg); + } + is += ido; + } + l1 = l2; + } + break loop; + } + } + } + + static void fdrffti(int n, float[] wsave, int[] ifac) { + if (n == 1) + return; + drfti1(n, wsave, n, ifac); + } + + int n; + + float[] trigcache; + + int[] splitcache; + + void backward(float[] data) { + if (n == 1) + return; + drftb1(n, data, trigcache, trigcache, n, splitcache); + } + + void clear() { + if (trigcache != null) + trigcache = null; + if (splitcache != null) + splitcache = null; + } + + void init(int n) { + this.n = n; + trigcache = new float[3 * n]; + splitcache = new int[32]; + fdrffti(n, trigcache, splitcache); + } } diff --git a/src/teavm/java/com/jcraft/jorbis/DspState.java b/src/teavm/java/com/jcraft/jorbis/DspState.java index 997397f9..935248cb 100644 --- a/src/teavm/java/com/jcraft/jorbis/DspState.java +++ b/src/teavm/java/com/jcraft/jorbis/DspState.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -31,68 +31,6 @@ public class DspState { static final int VI_TRANSFORMB = 1; static final int VI_WINDOWB = 1; - int analysisp; - Info vi; - int modebits; - - float[][] pcm; - int pcm_storage; - int pcm_current; - int pcm_returned; - - float[] multipliers; - int envelope_storage; - int envelope_current; - - int eofflag; - - int lW; - int W; - int nW; - int centerW; - - long granulepos; - long sequence; - - long glue_bits; - long time_bits; - long floor_bits; - long res_bits; - - // local lookup storage - float[][][][][] window; // block, leadin, leadout, type - Object[][] transform; - CodeBook[] fullbooks; - // backend lookups are tied to the mode, not the backend or naked mapping - Object[] mode; - - // local storage, only used on the encoding side. This way the - // application does not need to worry about freeing some packets' - // memory and not others'; packet storage is always tracked. - // Cleared next call to a _dsp_ function - byte[] header; - byte[] header1; - byte[] header2; - - public DspState() { - transform = new Object[2][]; - window = new float[2][][][][]; - window[0] = new float[2][][][]; - window[0][0] = new float[2][][]; - window[0][1] = new float[2][][]; - window[0][0][0] = new float[2][]; - window[0][0][1] = new float[2][]; - window[0][1][0] = new float[2][]; - window[0][1][1] = new float[2][]; - window[1] = new float[2][][][]; - window[1][0] = new float[2][][]; - window[1][1] = new float[2][][]; - window[1][0][0] = new float[2][]; - window[1][0][1] = new float[2][]; - window[1][1][0] = new float[2][]; - window[1][1][1] = new float[2][]; - } - static float[] window(int type, int window, int left, int right) { float[] ret = new float[window]; switch (type) { @@ -132,10 +70,86 @@ public class DspState { return (ret); } + int analysisp; + Info vi; + + int modebits; + float[][] pcm; + int pcm_storage; + int pcm_current; + + int pcm_returned; + float[] multipliers; + int envelope_storage; + + int envelope_current; + + int eofflag; + int lW; + int W; + int nW; + + int centerW; + long granulepos; + + long sequence; + long glue_bits; + long time_bits; + long floor_bits; + + long res_bits; + // local lookup storage + float[][][][][] window; // block, leadin, leadout, type + Object[][] transform; + CodeBook[] fullbooks; + + // backend lookups are tied to the mode, not the backend or naked mapping + Object[] mode; + // local storage, only used on the encoding side. This way the + // application does not need to worry about freeing some packets' + // memory and not others'; packet storage is always tracked. + // Cleared next call to a _dsp_ function + byte[] header; + byte[] header1; + + byte[] header2; + + public DspState() { + transform = new Object[2][]; + window = new float[2][][][][]; + window[0] = new float[2][][][]; + window[0][0] = new float[2][][]; + window[0][1] = new float[2][][]; + window[0][0][0] = new float[2][]; + window[0][0][1] = new float[2][]; + window[0][1][0] = new float[2][]; + window[0][1][1] = new float[2][]; + window[1] = new float[2][][][]; + window[1][0] = new float[2][][]; + window[1][1] = new float[2][][]; + window[1][0][0] = new float[2][]; + window[1][0][1] = new float[2][]; + window[1][1][0] = new float[2][]; + window[1][1][1] = new float[2][]; + } + // Analysis side code, but directly related to blocking. Thus it's // here and not in analysis.c (which is for analysis transforms only). // The init is here because some of it is shared + DspState(Info vi) { + this(); + init(vi, false); + // Adjust centerW to allow an easier mechanism for determining output + pcm_returned = centerW; + centerW -= vi.blocksizes[W] / 4 + vi.blocksizes[lW] / 4; + granulepos = -1; + sequence = -1; + } + + public void clear() { + } + int init(Info vi, boolean encp) { this.vi = vi; modebits = Util.ilog2(vi.modes); @@ -206,26 +220,6 @@ public class DspState { return (0); } - public int synthesis_init(Info vi) { - init(vi, false); - // Adjust centerW to allow an easier mechanism for determining output - pcm_returned = centerW; - centerW -= vi.blocksizes[W] / 4 + vi.blocksizes[lW] / 4; - granulepos = -1; - sequence = -1; - return (0); - } - - DspState(Info vi) { - this(); - init(vi, false); - // Adjust centerW to allow an easier mechanism for determining output - pcm_returned = centerW; - centerW -= vi.blocksizes[W] / 4 + vi.blocksizes[lW] / 4; - granulepos = -1; - sequence = -1; - } - // Unike in analysis, the window is only partially applied for each // block. The time domain envelope is not yet handled at the point of // calling (as it relies on the previous block). @@ -343,6 +337,16 @@ public class DspState { return (0); } + public int synthesis_init(Info vi) { + init(vi, false); + // Adjust centerW to allow an easier mechanism for determining output + pcm_returned = centerW; + centerW -= vi.blocksizes[W] / 4 + vi.blocksizes[lW] / 4; + granulepos = -1; + sequence = -1; + return (0); + } + // pcm==NULL indicates we just want the pending samples, no more public int synthesis_pcmout(float[][][] _pcm, int[] index) { if (pcm_returned < centerW) { @@ -363,7 +367,4 @@ public class DspState { pcm_returned += bytes; return (0); } - - public void clear() { - } } diff --git a/src/teavm/java/com/jcraft/jorbis/Floor0.java b/src/teavm/java/com/jcraft/jorbis/Floor0.java index b2d49c6c..3f69cadd 100644 --- a/src/teavm/java/com/jcraft/jorbis/Floor0.java +++ b/src/teavm/java/com/jcraft/jorbis/Floor0.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,218 +26,58 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class Floor0 extends FuncFloor { - void pack(Object i, Buffer opb) { - InfoFloor0 info = (InfoFloor0) i; - opb.write(info.order, 8); - opb.write(info.rate, 16); - opb.write(info.barkmap, 16); - opb.write(info.ampbits, 6); - opb.write(info.ampdB, 8); - opb.write(info.numbooks - 1, 4); - for (int j = 0; j < info.numbooks; j++) - opb.write(info.books[j], 8); + class EchstateFloor0 { + int[] codewords; + float[] curve; + long frameno; + long codes; } - Object unpack(Info vi, Buffer opb) { - InfoFloor0 info = new InfoFloor0(); - info.order = opb.read(8); - info.rate = opb.read(16); - info.barkmap = opb.read(16); - info.ampbits = opb.read(6); - info.ampdB = opb.read(8); - info.numbooks = opb.read(4) + 1; + class InfoFloor0 { + int order; + int rate; + int barkmap; - if ((info.order < 1) || (info.rate < 1) || (info.barkmap < 1) || (info.numbooks < 1)) { - return (null); - } + int ampbits; + int ampdB; - for (int j = 0; j < info.numbooks; j++) { - info.books[j] = opb.read(8); - if (info.books[j] < 0 || info.books[j] >= vi.books) { - return (null); - } - } - return (info); + int numbooks; // <= 16 + int[] books = new int[16]; } - Object look(DspState vd, InfoMode mi, Object i) { - float scale; - Info vi = vd.vi; - InfoFloor0 info = (InfoFloor0) i; - LookFloor0 look = new LookFloor0(); - look.m = info.order; - look.n = vi.blocksizes[mi.blockflag] / 2; - look.ln = info.barkmap; - look.vi = info; - look.lpclook.init(look.ln, look.m); + class LookFloor0 { + int n; + int ln; + int m; + int[] linearmap; - // we choose a scaling constant so that: - scale = look.ln / toBARK((float) (info.rate / 2.)); - - // the mapping from a linear scale to a smaller bark scale is - // straightforward. We do *not* make sure that the linear mapping - // does not skip bark-scale bins; the decoder simply skips them and - // the encoder may do what it wishes in filling them. They're - // necessary in some mapping combinations to keep the scale spacing - // accurate - look.linearmap = new int[look.n]; - for (int j = 0; j < look.n; j++) { - int val = (int) Math.floor(toBARK((float) ((info.rate / 2.) / look.n * j)) * scale); // bark numbers - // represent band - // edges - if (val >= look.ln) - val = look.ln; // guard against the approximation - look.linearmap[j] = val; - } - return look; - } - - static float toBARK(float f) { - return (float) (13.1 * Math.atan(.00074 * (f)) + 2.24 * Math.atan((f) * (f) * 1.85e-8) + 1e-4 * (f)); - } - - Object state(Object i) { - EchstateFloor0 state = new EchstateFloor0(); - InfoFloor0 info = (InfoFloor0) i; - - // a safe size if usually too big (dim==1) - state.codewords = new int[info.order]; - state.curve = new float[info.barkmap]; - state.frameno = -1; - return (state); - } - - void free_info(Object i) { - } - - void free_look(Object i) { - } - - void free_state(Object vs) { - } - - int forward(Block vb, Object i, float[] in, float[] out, Object vs) { - return 0; - } - - float[] lsp = null; - - int inverse(Block vb, Object i, float[] out) { - // System.err.println("Floor0.inverse "+i.getClass()+"]"); - LookFloor0 look = (LookFloor0) i; - InfoFloor0 info = look.vi; - int ampraw = vb.opb.read(info.ampbits); - if (ampraw > 0) { // also handles the -1 out of data case - int maxval = (1 << info.ampbits) - 1; - float amp = (float) ampraw / maxval * info.ampdB; - int booknum = vb.opb.read(Util.ilog(info.numbooks)); - - if (booknum != -1 && booknum < info.numbooks) { - - synchronized (this) { - if (lsp == null || lsp.length < look.m) { - lsp = new float[look.m]; - } else { - for (int j = 0; j < look.m; j++) - lsp[j] = 0.f; - } - - CodeBook b = vb.vd.fullbooks[info.books[booknum]]; - float last = 0.f; - - for (int j = 0; j < look.m; j++) - out[j] = 0.0f; - - for (int j = 0; j < look.m; j += b.dim) { - if (b.decodevs(lsp, j, vb.opb, 1, -1) == -1) { - for (int k = 0; k < look.n; k++) - out[k] = 0.0f; - return (0); - } - } - for (int j = 0; j < look.m;) { - for (int k = 0; k < b.dim; k++, j++) - lsp[j] += last; - last = lsp[j - 1]; - } - // take the coefficients back to a spectral envelope curve - Lsp.lsp_to_curve(out, look.linearmap, look.n, look.ln, lsp, look.m, amp, info.ampdB); - - return (1); - } - } - } - return (0); - } - - Object inverse1(Block vb, Object i, Object memo) { - LookFloor0 look = (LookFloor0) i; - InfoFloor0 info = look.vi; - float[] lsp = null; - if (memo instanceof float[]) { - lsp = (float[]) memo; - } - - int ampraw = vb.opb.read(info.ampbits); - if (ampraw > 0) { // also handles the -1 out of data case - int maxval = (1 << info.ampbits) - 1; - float amp = (float) ampraw / maxval * info.ampdB; - int booknum = vb.opb.read(Util.ilog(info.numbooks)); - - if (booknum != -1 && booknum < info.numbooks) { - CodeBook b = vb.vd.fullbooks[info.books[booknum]]; - float last = 0.f; - - if (lsp == null || lsp.length < look.m + 1) { - lsp = new float[look.m + 1]; - } else { - for (int j = 0; j < lsp.length; j++) - lsp[j] = 0.f; - } - - for (int j = 0; j < look.m; j += b.dim) { - if (b.decodev_set(lsp, j, vb.opb, b.dim) == -1) { - return (null); - } - } - - for (int j = 0; j < look.m;) { - for (int k = 0; k < b.dim; k++, j++) - lsp[j] += last; - last = lsp[j - 1]; - } - lsp[look.m] = amp; - return (lsp); - } - } - return (null); - } - - int inverse2(Block vb, Object i, Object memo, float[] out) { - LookFloor0 look = (LookFloor0) i; - InfoFloor0 info = look.vi; - - if (memo != null) { - float[] lsp = (float[]) memo; - float amp = lsp[look.m]; - - Lsp.lsp_to_curve(out, look.linearmap, look.n, look.ln, lsp, look.m, amp, info.ampdB); - return (1); - } - for (int j = 0; j < look.n; j++) { - out[j] = 0.f; - } - return (0); + InfoFloor0 vi; + Lpc lpclook = new Lpc(); } static float fromdB(float x) { return (float) (Math.exp((x) * .11512925)); } + static void lpc_to_curve(float[] curve, float[] lpc, float amp, LookFloor0 l, String name, int frameno) { + // l->m+1 must be less than l->ln, but guard in case we get a bad stream + float[] lcurve = new float[Math.max(l.ln * 2, l.m * 2 + 2)]; + + if (amp == 0) { + for (int j = 0; j < l.n; j++) + curve[j] = 0.0f; + return; + } + l.lpclook.lpc_to_curve(lcurve, lpc, amp); + + for (int i = 0; i < l.n; i++) + curve[i] = lcurve[l.linearmap[i]]; + } + static void lsp_to_lpc(float[] lsp, float[] lpc, int m) { int i, j, m2 = m / 2; float[] O = new float[m2]; @@ -286,47 +126,216 @@ class Floor0 extends FuncFloor { } } - static void lpc_to_curve(float[] curve, float[] lpc, float amp, LookFloor0 l, String name, int frameno) { - // l->m+1 must be less than l->ln, but guard in case we get a bad stream - float[] lcurve = new float[Math.max(l.ln * 2, l.m * 2 + 2)]; + static float toBARK(float f) { + return (float) (13.1 * Math.atan(.00074 * (f)) + 2.24 * Math.atan((f) * (f) * 1.85e-8) + 1e-4 * (f)); + } - if (amp == 0) { - for (int j = 0; j < l.n; j++) - curve[j] = 0.0f; - return; + float[] lsp = null; + + @Override + int forward(Block vb, Object i, float[] in, float[] out, Object vs) { + return 0; + } + + @Override + void free_info(Object i) { + } + + @Override + void free_look(Object i) { + } + + @Override + void free_state(Object vs) { + } + + int inverse(Block vb, Object i, float[] out) { + // System.err.println("Floor0.inverse "+i.getClass()+"]"); + LookFloor0 look = (LookFloor0) i; + InfoFloor0 info = look.vi; + int ampraw = vb.opb.read(info.ampbits); + if (ampraw > 0) { // also handles the -1 out of data case + int maxval = (1 << info.ampbits) - 1; + float amp = (float) ampraw / maxval * info.ampdB; + int booknum = vb.opb.read(Util.ilog(info.numbooks)); + + if (booknum != -1 && booknum < info.numbooks) { + + synchronized (this) { + if (lsp == null || lsp.length < look.m) { + lsp = new float[look.m]; + } else { + for (int j = 0; j < look.m; j++) + lsp[j] = 0.f; + } + + CodeBook b = vb.vd.fullbooks[info.books[booknum]]; + float last = 0.f; + + for (int j = 0; j < look.m; j++) + out[j] = 0.0f; + + for (int j = 0; j < look.m; j += b.dim) { + if (b.decodevs(lsp, j, vb.opb, 1, -1) == -1) { + for (int k = 0; k < look.n; k++) + out[k] = 0.0f; + return (0); + } + } + for (int j = 0; j < look.m;) { + for (int k = 0; k < b.dim; k++, j++) + lsp[j] += last; + last = lsp[j - 1]; + } + // take the coefficients back to a spectral envelope curve + Lsp.lsp_to_curve(out, look.linearmap, look.n, look.ln, lsp, look.m, amp, info.ampdB); + + return (1); + } + } } - l.lpclook.lpc_to_curve(lcurve, lpc, amp); - - for (int i = 0; i < l.n; i++) - curve[i] = lcurve[l.linearmap[i]]; + return (0); } - class InfoFloor0 { - int order; - int rate; - int barkmap; + @Override + Object inverse1(Block vb, Object i, Object memo) { + LookFloor0 look = (LookFloor0) i; + InfoFloor0 info = look.vi; + float[] lsp = null; + if (memo instanceof float[]) { + lsp = (float[]) memo; + } - int ampbits; - int ampdB; + int ampraw = vb.opb.read(info.ampbits); + if (ampraw > 0) { // also handles the -1 out of data case + int maxval = (1 << info.ampbits) - 1; + float amp = (float) ampraw / maxval * info.ampdB; + int booknum = vb.opb.read(Util.ilog(info.numbooks)); - int numbooks; // <= 16 - int[] books = new int[16]; + if (booknum != -1 && booknum < info.numbooks) { + CodeBook b = vb.vd.fullbooks[info.books[booknum]]; + float last = 0.f; + + if (lsp == null || lsp.length < look.m + 1) { + lsp = new float[look.m + 1]; + } else { + for (int j = 0; j < lsp.length; j++) + lsp[j] = 0.f; + } + + for (int j = 0; j < look.m; j += b.dim) { + if (b.decodev_set(lsp, j, vb.opb, b.dim) == -1) { + return (null); + } + } + + for (int j = 0; j < look.m;) { + for (int k = 0; k < b.dim; k++, j++) + lsp[j] += last; + last = lsp[j - 1]; + } + lsp[look.m] = amp; + return (lsp); + } + } + return (null); } - class LookFloor0 { - int n; - int ln; - int m; - int[] linearmap; + @Override + int inverse2(Block vb, Object i, Object memo, float[] out) { + LookFloor0 look = (LookFloor0) i; + InfoFloor0 info = look.vi; - InfoFloor0 vi; - Lpc lpclook = new Lpc(); + if (memo != null) { + float[] lsp = (float[]) memo; + float amp = lsp[look.m]; + + Lsp.lsp_to_curve(out, look.linearmap, look.n, look.ln, lsp, look.m, amp, info.ampdB); + return (1); + } + for (int j = 0; j < look.n; j++) { + out[j] = 0.f; + } + return (0); } - class EchstateFloor0 { - int[] codewords; - float[] curve; - long frameno; - long codes; + @Override + Object look(DspState vd, InfoMode mi, Object i) { + float scale; + Info vi = vd.vi; + InfoFloor0 info = (InfoFloor0) i; + LookFloor0 look = new LookFloor0(); + look.m = info.order; + look.n = vi.blocksizes[mi.blockflag] / 2; + look.ln = info.barkmap; + look.vi = info; + look.lpclook.init(look.ln, look.m); + + // we choose a scaling constant so that: + scale = look.ln / toBARK((float) (info.rate / 2.)); + + // the mapping from a linear scale to a smaller bark scale is + // straightforward. We do *not* make sure that the linear mapping + // does not skip bark-scale bins; the decoder simply skips them and + // the encoder may do what it wishes in filling them. They're + // necessary in some mapping combinations to keep the scale spacing + // accurate + look.linearmap = new int[look.n]; + for (int j = 0; j < look.n; j++) { + int val = (int) Math.floor(toBARK((float) ((info.rate / 2.) / look.n * j)) * scale); // bark numbers + // represent band + // edges + if (val >= look.ln) + val = look.ln; // guard against the approximation + look.linearmap[j] = val; + } + return look; + } + + @Override + void pack(Object i, Buffer opb) { + InfoFloor0 info = (InfoFloor0) i; + opb.write(info.order, 8); + opb.write(info.rate, 16); + opb.write(info.barkmap, 16); + opb.write(info.ampbits, 6); + opb.write(info.ampdB, 8); + opb.write(info.numbooks - 1, 4); + for (int j = 0; j < info.numbooks; j++) + opb.write(info.books[j], 8); + } + + Object state(Object i) { + EchstateFloor0 state = new EchstateFloor0(); + InfoFloor0 info = (InfoFloor0) i; + + // a safe size if usually too big (dim==1) + state.codewords = new int[info.order]; + state.curve = new float[info.barkmap]; + state.frameno = -1; + return (state); + } + + @Override + Object unpack(Info vi, Buffer opb) { + InfoFloor0 info = new InfoFloor0(); + info.order = opb.read(8); + info.rate = opb.read(16); + info.barkmap = opb.read(16); + info.ampbits = opb.read(6); + info.ampdB = opb.read(8); + info.numbooks = opb.read(4) + 1; + + if ((info.order < 1) || (info.rate < 1) || (info.barkmap < 1) || (info.numbooks < 1)) { + return (null); + } + + for (int j = 0; j < info.numbooks; j++) { + info.books[j] = opb.read(8); + if (info.books[j] < 0 || info.books[j] >= vi.books) { + return (null); + } + } + return (info); } } diff --git a/src/teavm/java/com/jcraft/jorbis/Floor1.java b/src/teavm/java/com/jcraft/jorbis/Floor1.java index c9f77c3f..54d6968b 100644 --- a/src/teavm/java/com/jcraft/jorbis/Floor1.java +++ b/src/teavm/java/com/jcraft/jorbis/Floor1.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,109 +26,371 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class Floor1 extends FuncFloor { + class EchstateFloor1 { + int[] codewords; + float[] curve; + long frameno; + long codes; + } + + class InfoFloor1 { + static final int VIF_POSIT = 63; + static final int VIF_CLASS = 16; + static final int VIF_PARTS = 31; + + int partitions; /* 0 to 31 */ + int[] partitionclass = new int[VIF_PARTS]; /* 0 to 15 */ + + int[] class_dim = new int[VIF_CLASS]; /* 1 to 8 */ + int[] class_subs = new int[VIF_CLASS]; /* 0,1,2,3 (bits: 1<= adx) { + err -= adx; + y += sy; + } else { + y += base; } + d[x] *= FLOOR_fromdB_LOOKUP[y]; } } - Object unpack(Info vi, Buffer opb) { - int count = 0, maxclass = -1, rangebits; - InfoFloor1 info = new InfoFloor1(); + private static int render_point(int x0, int x1, int y0, int y1, int x) { + y0 &= 0x7fff; /* mask off flag */ + y1 &= 0x7fff; - /* read partitions */ - info.partitions = opb.read(5); /* only 0 to 31 legal */ - for (int j = 0; j < info.partitions; j++) { - info.partitionclass[j] = opb.read(4); /* only 0 to 15 legal */ - if (maxclass < info.partitionclass[j]) - maxclass = info.partitionclass[j]; + { + int dy = y1 - y0; + int adx = x1 - x0; + int ady = Math.abs(dy); + int err = ady * (x - x0); + + int off = (int) (err / adx); + if (dy < 0) + return (y0 - off); + return (y0 + off); } - - /* read partition classes */ - for (int j = 0; j < maxclass + 1; j++) { - info.class_dim[j] = opb.read(3) + 1; /* 1 to 8 */ - info.class_subs[j] = opb.read(2); /* 0,1,2,3 bits */ - if (info.class_subs[j] < 0) { - info.free(); - return (null); - } - if (info.class_subs[j] != 0) { - info.class_book[j] = opb.read(8); - } - if (info.class_book[j] < 0 || info.class_book[j] >= vi.books) { - info.free(); - return (null); - } - for (int k = 0; k < (1 << info.class_subs[j]); k++) { - info.class_subbook[j][k] = opb.read(8) - 1; - if (info.class_subbook[j][k] < -1 || info.class_subbook[j][k] >= vi.books) { - info.free(); - return (null); - } - } - } - - /* read the post list */ - info.mult = opb.read(2) + 1; /* only 1,2,3,4 legal now */ - rangebits = opb.read(4); - - for (int j = 0, k = 0; j < info.partitions; j++) { - count += info.class_dim[info.partitionclass[j]]; - for (; k < count; k++) { - int t = info.postlist[k + 2] = opb.read(rangebits); - if (t < 0 || t >= (1 << rangebits)) { - info.free(); - return (null); - } - } - } - info.postlist[0] = 0; - info.postlist[1] = 1 << rangebits; - - return (info); } + @Override + int forward(Block vb, Object i, float[] in, float[] out, Object vs) { + return 0; + } + + @Override + void free_info(Object i) { + } + + @Override + void free_look(Object i) { + } + + @Override + void free_state(Object vs) { + } + + @Override + Object inverse1(Block vb, Object ii, Object memo) { + LookFloor1 look = (LookFloor1) ii; + InfoFloor1 info = look.vi; + CodeBook[] books = vb.vd.fullbooks; + + /* unpack wrapped/predicted values from stream */ + if (vb.opb.read(1) == 1) { + int[] fit_value = null; + if (memo instanceof int[]) { + fit_value = (int[]) memo; + } + if (fit_value == null || fit_value.length < look.posts) { + fit_value = new int[look.posts]; + } else { + for (int i = 0; i < fit_value.length; i++) + fit_value[i] = 0; + } + + fit_value[0] = vb.opb.read(Util.ilog(look.quant_q - 1)); + fit_value[1] = vb.opb.read(Util.ilog(look.quant_q - 1)); + + /* partition by partition */ + for (int i = 0, j = 2; i < info.partitions; i++) { + int clss = info.partitionclass[i]; + int cdim = info.class_dim[clss]; + int csubbits = info.class_subs[clss]; + int csub = 1 << csubbits; + int cval = 0; + + /* decode the partition's first stage cascade value */ + if (csubbits != 0) { + cval = books[info.class_book[clss]].decode(vb.opb); + + if (cval == -1) { + return (null); + } + } + + for (int k = 0; k < cdim; k++) { + int book = info.class_subbook[clss][cval & (csub - 1)]; + cval >>>= csubbits; + if (book >= 0) { + if ((fit_value[j + k] = books[book].decode(vb.opb)) == -1) { + return (null); + } + } else { + fit_value[j + k] = 0; + } + } + j += cdim; + } + + /* unwrap positive values and reconsitute via linear interpolation */ + for (int i = 2; i < look.posts; i++) { + int predicted = render_point(info.postlist[look.loneighbor[i - 2]], + info.postlist[look.hineighbor[i - 2]], fit_value[look.loneighbor[i - 2]], + fit_value[look.hineighbor[i - 2]], info.postlist[i]); + int hiroom = look.quant_q - predicted; + int loroom = predicted; + int room = (hiroom < loroom ? hiroom : loroom) << 1; + int val = fit_value[i]; + + if (val != 0) { + if (val >= room) { + if (hiroom > loroom) { + val = val - loroom; + } else { + val = -1 - (val - hiroom); + } + } else { + if ((val & 1) != 0) { + val = -((val + 1) >>> 1); + } else { + val >>= 1; + } + } + + fit_value[i] = val + predicted; + fit_value[look.loneighbor[i - 2]] &= 0x7fff; + fit_value[look.hineighbor[i - 2]] &= 0x7fff; + } else { + fit_value[i] = predicted | 0x8000; + } + } + return (fit_value); + } + + return (null); + } + + @Override + int inverse2(Block vb, Object i, Object memo, float[] out) { + LookFloor1 look = (LookFloor1) i; + InfoFloor1 info = look.vi; + int n = vb.vd.vi.blocksizes[vb.mode] / 2; + + if (memo != null) { + /* render the lines */ + int[] fit_value = (int[]) memo; + int hx = 0; + int lx = 0; + int ly = fit_value[0] * info.mult; + for (int j = 1; j < look.posts; j++) { + int current = look.forward_index[j]; + int hy = fit_value[current] & 0x7fff; + if (hy == fit_value[current]) { + hy *= info.mult; + hx = info.postlist[current]; + + render_line(lx, hx, ly, hy, out); + + lx = hx; + ly = hy; + } + } + for (int j = hx; j < n; j++) { + out[j] *= out[j - 1]; /* be certain */ + } + return (1); + } + for (int j = 0; j < n; j++) { + out[j] = 0.f; + } + return (0); + } + + @Override Object look(DspState vd, InfoMode mi, Object i) { int _n = 0; @@ -231,354 +493,102 @@ class Floor1 extends FuncFloor { return look; } - void free_info(Object i) { - } + @Override + void pack(Object i, Buffer opb) { + InfoFloor1 info = (InfoFloor1) i; - void free_look(Object i) { - } + int count = 0; + int rangebits; + int maxposit = info.postlist[1]; + int maxclass = -1; - void free_state(Object vs) { - } + /* save out partitions */ + opb.write(info.partitions, 5); /* only 0 to 31 legal */ + for (int j = 0; j < info.partitions; j++) { + opb.write(info.partitionclass[j], 4); /* only 0 to 15 legal */ + if (maxclass < info.partitionclass[j]) + maxclass = info.partitionclass[j]; + } - int forward(Block vb, Object i, float[] in, float[] out, Object vs) { - return 0; - } - - Object inverse1(Block vb, Object ii, Object memo) { - LookFloor1 look = (LookFloor1) ii; - InfoFloor1 info = look.vi; - CodeBook[] books = vb.vd.fullbooks; - - /* unpack wrapped/predicted values from stream */ - if (vb.opb.read(1) == 1) { - int[] fit_value = null; - if (memo instanceof int[]) { - fit_value = (int[]) memo; + /* save out partition classes */ + for (int j = 0; j < maxclass + 1; j++) { + opb.write(info.class_dim[j] - 1, 3); /* 1 to 8 */ + opb.write(info.class_subs[j], 2); /* 0 to 3 */ + if (info.class_subs[j] != 0) { + opb.write(info.class_book[j], 8); } - if (fit_value == null || fit_value.length < look.posts) { - fit_value = new int[look.posts]; - } else { - for (int i = 0; i < fit_value.length; i++) - fit_value[i] = 0; + for (int k = 0; k < (1 << info.class_subs[j]); k++) { + opb.write(info.class_subbook[j][k] + 1, 8); } + } - fit_value[0] = vb.opb.read(Util.ilog(look.quant_q - 1)); - fit_value[1] = vb.opb.read(Util.ilog(look.quant_q - 1)); + /* save out the post list */ + opb.write(info.mult - 1, 2); /* only 1,2,3,4 legal now */ + opb.write(Util.ilog2(maxposit), 4); + rangebits = Util.ilog2(maxposit); - /* partition by partition */ - for (int i = 0, j = 2; i < info.partitions; i++) { - int clss = info.partitionclass[i]; - int cdim = info.class_dim[clss]; - int csubbits = info.class_subs[clss]; - int csub = 1 << csubbits; - int cval = 0; - - /* decode the partition's first stage cascade value */ - if (csubbits != 0) { - cval = books[info.class_book[clss]].decode(vb.opb); - - if (cval == -1) { - return (null); - } - } - - for (int k = 0; k < cdim; k++) { - int book = info.class_subbook[clss][cval & (csub - 1)]; - cval >>>= csubbits; - if (book >= 0) { - if ((fit_value[j + k] = books[book].decode(vb.opb)) == -1) { - return (null); - } - } else { - fit_value[j + k] = 0; - } - } - j += cdim; + for (int j = 0, k = 0; j < info.partitions; j++) { + count += info.class_dim[info.partitionclass[j]]; + for (; k < count; k++) { + opb.write(info.postlist[k + 2], rangebits); } + } + } - /* unwrap positive values and reconsitute via linear interpolation */ - for (int i = 2; i < look.posts; i++) { - int predicted = render_point(info.postlist[look.loneighbor[i - 2]], - info.postlist[look.hineighbor[i - 2]], fit_value[look.loneighbor[i - 2]], - fit_value[look.hineighbor[i - 2]], info.postlist[i]); - int hiroom = look.quant_q - predicted; - int loroom = predicted; - int room = (hiroom < loroom ? hiroom : loroom) << 1; - int val = fit_value[i]; + @Override + Object unpack(Info vi, Buffer opb) { + int count = 0, maxclass = -1, rangebits; + InfoFloor1 info = new InfoFloor1(); - if (val != 0) { - if (val >= room) { - if (hiroom > loroom) { - val = val - loroom; - } else { - val = -1 - (val - hiroom); - } - } else { - if ((val & 1) != 0) { - val = -((val + 1) >>> 1); - } else { - val >>= 1; - } - } + /* read partitions */ + info.partitions = opb.read(5); /* only 0 to 31 legal */ + for (int j = 0; j < info.partitions; j++) { + info.partitionclass[j] = opb.read(4); /* only 0 to 15 legal */ + if (maxclass < info.partitionclass[j]) + maxclass = info.partitionclass[j]; + } - fit_value[i] = val + predicted; - fit_value[look.loneighbor[i - 2]] &= 0x7fff; - fit_value[look.hineighbor[i - 2]] &= 0x7fff; - } else { - fit_value[i] = predicted | 0x8000; + /* read partition classes */ + for (int j = 0; j < maxclass + 1; j++) { + info.class_dim[j] = opb.read(3) + 1; /* 1 to 8 */ + info.class_subs[j] = opb.read(2); /* 0,1,2,3 bits */ + if (info.class_subs[j] < 0) { + info.free(); + return (null); + } + if (info.class_subs[j] != 0) { + info.class_book[j] = opb.read(8); + } + if (info.class_book[j] < 0 || info.class_book[j] >= vi.books) { + info.free(); + return (null); + } + for (int k = 0; k < (1 << info.class_subs[j]); k++) { + info.class_subbook[j][k] = opb.read(8) - 1; + if (info.class_subbook[j][k] < -1 || info.class_subbook[j][k] >= vi.books) { + info.free(); + return (null); } } - return (fit_value); } - return (null); - } + /* read the post list */ + info.mult = opb.read(2) + 1; /* only 1,2,3,4 legal now */ + rangebits = opb.read(4); - private static int render_point(int x0, int x1, int y0, int y1, int x) { - y0 &= 0x7fff; /* mask off flag */ - y1 &= 0x7fff; - - { - int dy = y1 - y0; - int adx = x1 - x0; - int ady = Math.abs(dy); - int err = ady * (x - x0); - - int off = (int) (err / adx); - if (dy < 0) - return (y0 - off); - return (y0 + off); - } - } - - int inverse2(Block vb, Object i, Object memo, float[] out) { - LookFloor1 look = (LookFloor1) i; - InfoFloor1 info = look.vi; - int n = vb.vd.vi.blocksizes[vb.mode] / 2; - - if (memo != null) { - /* render the lines */ - int[] fit_value = (int[]) memo; - int hx = 0; - int lx = 0; - int ly = fit_value[0] * info.mult; - for (int j = 1; j < look.posts; j++) { - int current = look.forward_index[j]; - int hy = fit_value[current] & 0x7fff; - if (hy == fit_value[current]) { - hy *= info.mult; - hx = info.postlist[current]; - - render_line(lx, hx, ly, hy, out); - - lx = hx; - ly = hy; + for (int j = 0, k = 0; j < info.partitions; j++) { + count += info.class_dim[info.partitionclass[j]]; + for (; k < count; k++) { + int t = info.postlist[k + 2] = opb.read(rangebits); + if (t < 0 || t >= (1 << rangebits)) { + info.free(); + return (null); } } - for (int j = hx; j < n; j++) { - out[j] *= out[j - 1]; /* be certain */ - } - return (1); } - for (int j = 0; j < n; j++) { - out[j] = 0.f; - } - return (0); - } + info.postlist[0] = 0; + info.postlist[1] = 1 << rangebits; - private static float[] FLOOR_fromdB_LOOKUP = { 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, - 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, 1.7623575e-07F, 1.8768855e-07F, - 1.9988561e-07F, 2.128753e-07F, 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, - 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, 3.7516214e-07F, 3.9954229e-07F, - 4.2550680e-07F, 4.5315863e-07F, 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, - 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, 7.9862701e-07F, 8.5052630e-07F, - 9.0579828e-07F, 9.6466216e-07F, 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, - 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, 1.7000785e-06F, 1.8105592e-06F, - 1.9282195e-06F, 2.0535261e-06F, 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, - 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, 3.6190449e-06F, 3.8542308e-06F, - 4.1047004e-06F, 4.3714470e-06F, 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, - 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, 7.7040476e-06F, 8.2047000e-06F, - 8.7378876e-06F, 9.3057248e-06F, 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, - 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, 1.6400004e-05F, 1.7465768e-05F, - 1.8600792e-05F, 1.9809576e-05F, 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, - 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, 3.4911534e-05F, 3.7180282e-05F, - 3.9596466e-05F, 4.2169667e-05F, 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, - 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, 7.4317983e-05F, 7.9147585e-05F, - 8.4291040e-05F, 8.9768747e-05F, 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, - 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, 0.00015820453F, 0.00016848555F, - 0.00017943469F, 0.00019109536F, 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, - 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, 0.00033677814F, 0.00035866388F, - 0.00038197188F, 0.00040679456F, 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, - 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, 0.00071691700F, 0.00076350630F, - 0.00081312324F, 0.00086596457F, 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, 0.0011863665F, - 0.0012634633F, 0.0013455702F, 0.0014330129F, 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, - 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, 0.0025254795F, 0.0026895994F, 0.0028643847F, - 0.0030505286F, 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, 0.0041792066F, 0.0044507950F, - 0.0047400328F, 0.0050480668F, 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, 0.0069158225F, - 0.0073652516F, 0.0078438871F, 0.0083536271F, 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, - 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, 0.014722068F, 0.015678791F, 0.016697687F, - 0.017782797F, 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, 0.024362330F, 0.025945531F, - 0.027631618F, 0.029427276F, 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, 0.040315199F, - 0.042935108F, 0.045725273F, 0.048696758F, 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, - 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, 0.085821044F, 0.091398179F, 0.097337747F, - 0.10366330F, 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, 0.14201813F, 0.15124727F, 0.16107617F, - 0.17154380F, 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, 0.23501402F, 0.25028656F, 0.26655159F, - 0.28387361F, 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, 0.38890521F, 0.41417847F, 0.44109412F, - 0.46975890F, 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, 0.64356699F, 0.68538959F, 0.72993007F, - 0.77736504F, 0.82788260F, 0.88168307F, 0.9389798F, 1.F }; - - private static void render_line(int x0, int x1, int y0, int y1, float[] d) { - int dy = y1 - y0; - int adx = x1 - x0; - int ady = Math.abs(dy); - int base = dy / adx; - int sy = (dy < 0 ? base - 1 : base + 1); - int x = x0; - int y = y0; - int err = 0; - - ady -= Math.abs(base * adx); - - d[x] *= FLOOR_fromdB_LOOKUP[y]; - while (++x < x1) { - err = err + ady; - if (err >= adx) { - err -= adx; - y += sy; - } else { - y += base; - } - d[x] *= FLOOR_fromdB_LOOKUP[y]; - } - } - - class InfoFloor1 { - static final int VIF_POSIT = 63; - static final int VIF_CLASS = 16; - static final int VIF_PARTS = 31; - - int partitions; /* 0 to 31 */ - int[] partitionclass = new int[VIF_PARTS]; /* 0 to 15 */ - - int[] class_dim = new int[VIF_CLASS]; /* 1 to 8 */ - int[] class_subs = new int[VIF_CLASS]; /* 0,1,2,3 (bits: 1< - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,17 +26,13 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; abstract class FuncFloor { public static FuncFloor[] floor_P = { new Floor0(), new Floor1() }; - abstract void pack(Object i, Buffer opb); - - abstract Object unpack(Info vi, Buffer opb); - - abstract Object look(DspState vd, InfoMode mi, Object i); + abstract int forward(Block vb, Object i, float[] in, float[] out, Object vs); abstract void free_info(Object i); @@ -44,9 +40,13 @@ abstract class FuncFloor { abstract void free_state(Object vs); - abstract int forward(Block vb, Object i, float[] in, float[] out, Object vs); - abstract Object inverse1(Block vb, Object i, Object memo); abstract int inverse2(Block vb, Object i, Object memo, float[] out); + + abstract Object look(DspState vd, InfoMode mi, Object i); + + abstract void pack(Object i, Buffer opb); + + abstract Object unpack(Info vi, Buffer opb); } diff --git a/src/teavm/java/com/jcraft/jorbis/FuncMapping.java b/src/teavm/java/com/jcraft/jorbis/FuncMapping.java index 1a830985..c63c80ba 100644 --- a/src/teavm/java/com/jcraft/jorbis/FuncMapping.java +++ b/src/teavm/java/com/jcraft/jorbis/FuncMapping.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,20 +26,20 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; abstract class FuncMapping { public static FuncMapping[] mapping_P = { new Mapping0() }; - abstract void pack(Info info, Object imap, Buffer buffer); - - abstract Object unpack(Info info, Buffer buffer); - - abstract Object look(DspState vd, InfoMode vm, Object m); - abstract void free_info(Object imap); abstract void free_look(Object imap); abstract int inverse(Block vd, Object lm); + + abstract Object look(DspState vd, InfoMode vm, Object m); + + abstract void pack(Info info, Object imap, Buffer buffer); + + abstract Object unpack(Info info, Buffer buffer); } diff --git a/src/teavm/java/com/jcraft/jorbis/FuncResidue.java b/src/teavm/java/com/jcraft/jorbis/FuncResidue.java index 33ab1e2a..28fbe1d8 100644 --- a/src/teavm/java/com/jcraft/jorbis/FuncResidue.java +++ b/src/teavm/java/com/jcraft/jorbis/FuncResidue.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,20 +26,20 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; abstract class FuncResidue { public static FuncResidue[] residue_P = { new Residue0(), new Residue1(), new Residue2() }; - abstract void pack(Object vr, Buffer opb); - - abstract Object unpack(Info vi, Buffer opb); - - abstract Object look(DspState vd, InfoMode vm, Object vr); - abstract void free_info(Object i); abstract void free_look(Object i); abstract int inverse(Block vb, Object vl, float[][] in, int[] nonzero, int ch); + + abstract Object look(DspState vd, InfoMode vm, Object vr); + + abstract void pack(Object vr, Buffer opb); + + abstract Object unpack(Info vi, Buffer opb); } diff --git a/src/teavm/java/com/jcraft/jorbis/FuncTime.java b/src/teavm/java/com/jcraft/jorbis/FuncTime.java index 019b6342..88bdf91a 100644 --- a/src/teavm/java/com/jcraft/jorbis/FuncTime.java +++ b/src/teavm/java/com/jcraft/jorbis/FuncTime.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,20 +26,20 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; abstract class FuncTime { public static FuncTime[] time_P = { new Time0() }; - abstract void pack(Object i, Buffer opb); - - abstract Object unpack(Info vi, Buffer opb); - - abstract Object look(DspState vd, InfoMode vm, Object i); - abstract void free_info(Object i); abstract void free_look(Object i); abstract int inverse(Block vb, Object i, float[] in, float[] out); + + abstract Object look(DspState vd, InfoMode vm, Object i); + + abstract void pack(Object i, Buffer opb); + + abstract Object unpack(Info vi, Buffer opb); } diff --git a/src/teavm/java/com/jcraft/jorbis/Info.java b/src/teavm/java/com/jcraft/jorbis/Info.java index e0f0285d..c6a4a721 100644 --- a/src/teavm/java/com/jcraft/jorbis/Info.java +++ b/src/teavm/java/com/jcraft/jorbis/Info.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,7 +26,8 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; +import com.jcraft.jogg.Packet; public class Info { private static final int OV_EBADPACKET = -136; @@ -104,9 +105,33 @@ public class Info { float preecho_thresh; float preecho_clamp; - // used by synthesis, which has a full, alloced vi - public void init() { - rate = 0; + public int blocksize(Packet op) { + // codec_setup_info + Buffer opb = new Buffer(); + + int mode; + + opb.readinit(op.packet_base, op.packet, op.bytes); + + /* Check the packet type */ + if (opb.read(1) != 0) { + /* Oops. This is not an audio data packet */ + return (OV_ENOTAUDIO); + } + { + int modebits = 0; + int v = modes; + while (v > 1) { + modebits++; + v >>>= 1; + } + + /* read our mode and pre/post windowsize */ + mode = opb.read(modebits); + } + if (mode == -1) + return (OV_EBADPACKET); + return (blocksizes[mode_param[mode].blockflag]); } public void clear() { @@ -155,30 +180,146 @@ public class Info { } - // Header packing/unpacking - int unpack_info(Buffer opb) { - version = opb.read(32); - if (version != 0) - return (-1); + // used by synthesis, which has a full, alloced vi + public void init() { + rate = 0; + } - channels = opb.read(8); - rate = opb.read(32); + int pack_books(Buffer opb) { + opb.write(0x05, 8); + opb.write(_vorbis); - bitrate_upper = opb.read(32); - bitrate_nominal = opb.read(32); - bitrate_lower = opb.read(32); - - blocksizes[0] = 1 << opb.read(4); - blocksizes[1] = 1 << opb.read(4); - - if ((rate < 1) || (channels < 1) || (blocksizes[0] < 8) || (blocksizes[1] < blocksizes[0]) - || (opb.read(1) != 1)) { - clear(); - return (-1); + // books + opb.write(books - 1, 8); + for (int i = 0; i < books; i++) { + if (book_param[i].pack(opb) != 0) { + // goto err_out; + return (-1); + } } + + // times + opb.write(times - 1, 6); + for (int i = 0; i < times; i++) { + opb.write(time_type[i], 16); + FuncTime.time_P[time_type[i]].pack(this.time_param[i], opb); + } + + // floors + opb.write(floors - 1, 6); + for (int i = 0; i < floors; i++) { + opb.write(floor_type[i], 16); + FuncFloor.floor_P[floor_type[i]].pack(floor_param[i], opb); + } + + // residues + opb.write(residues - 1, 6); + for (int i = 0; i < residues; i++) { + opb.write(residue_type[i], 16); + FuncResidue.residue_P[residue_type[i]].pack(residue_param[i], opb); + } + + // maps + opb.write(maps - 1, 6); + for (int i = 0; i < maps; i++) { + opb.write(map_type[i], 16); + FuncMapping.mapping_P[map_type[i]].pack(this, map_param[i], opb); + } + + // modes + opb.write(modes - 1, 6); + for (int i = 0; i < modes; i++) { + opb.write(mode_param[i].blockflag, 1); + opb.write(mode_param[i].windowtype, 16); + opb.write(mode_param[i].transformtype, 16); + opb.write(mode_param[i].mapping, 8); + } + opb.write(1, 1); return (0); } + // The Vorbis header is in three packets; the initial small packet in + // the first page that identifies basic parameters, a second packet + // with bitstream comments and a third packet that holds the + // codebook. + + // pack side + int pack_info(Buffer opb) { + // preamble + opb.write(0x01, 8); + opb.write(_vorbis); + + // basic information about the stream + opb.write(0x00, 32); + opb.write(channels, 8); + opb.write(rate, 32); + + opb.write(bitrate_upper, 32); + opb.write(bitrate_nominal, 32); + opb.write(bitrate_lower, 32); + + opb.write(Util.ilog2(blocksizes[0]), 4); + opb.write(Util.ilog2(blocksizes[1]), 4); + opb.write(1, 1); + return (0); + } + + public int synthesis_headerin(Comment vc, Packet op) { + Buffer opb = new Buffer(); + + if (op != null) { + opb.readinit(op.packet_base, op.packet, op.bytes); + + // Which of the three types of header is this? + // Also verify header-ness, vorbis + { + byte[] buffer = new byte[6]; + int packtype = opb.read(8); + opb.read(buffer, 6); + if (buffer[0] != 'v' || buffer[1] != 'o' || buffer[2] != 'r' || buffer[3] != 'b' || buffer[4] != 'i' + || buffer[5] != 's') { + // not a vorbis header + return (-1); + } + switch (packtype) { + case 0x01: // least significant *bit* is read first + if (op.b_o_s == 0) { + // Not the initial packet + return (-1); + } + if (rate != 0) { + // previously initialized info header + return (-1); + } + return (unpack_info(opb)); + case 0x03: // least significant *bit* is read first + if (rate == 0) { + // um... we didn't get the initial header + return (-1); + } + return (vc.unpack(opb)); + case 0x05: // least significant *bit* is read first + if (rate == 0 || vc.vendor == null) { + // um... we didn;t get the initial header or comments yet + return (-1); + } + return (unpack_books(opb)); + default: + // Not a valid vorbis header type + // return(-1); + break; + } + } + } + return (-1); + } + + @Override + public String toString() { + return "version:" + version + ", channels:" + channels + ", rate:" + rate + ", bitrate:" + bitrate_upper + "," + + bitrate_nominal + "," + bitrate_lower; + } + // all of the real encoding details are here. The modes, books, // everything int unpack_books(Buffer opb) { @@ -302,167 +443,27 @@ public class Info { return (0); } - // The Vorbis header is in three packets; the initial small packet in - // the first page that identifies basic parameters, a second packet - // with bitstream comments and a third packet that holds the - // codebook. + // Header packing/unpacking + int unpack_info(Buffer opb) { + version = opb.read(32); + if (version != 0) + return (-1); - public int synthesis_headerin(Comment vc, Packet op) { - Buffer opb = new Buffer(); + channels = opb.read(8); + rate = opb.read(32); - if (op != null) { - opb.readinit(op.packet_base, op.packet, op.bytes); + bitrate_upper = opb.read(32); + bitrate_nominal = opb.read(32); + bitrate_lower = opb.read(32); - // Which of the three types of header is this? - // Also verify header-ness, vorbis - { - byte[] buffer = new byte[6]; - int packtype = opb.read(8); - opb.read(buffer, 6); - if (buffer[0] != 'v' || buffer[1] != 'o' || buffer[2] != 'r' || buffer[3] != 'b' || buffer[4] != 'i' - || buffer[5] != 's') { - // not a vorbis header - return (-1); - } - switch (packtype) { - case 0x01: // least significant *bit* is read first - if (op.b_o_s == 0) { - // Not the initial packet - return (-1); - } - if (rate != 0) { - // previously initialized info header - return (-1); - } - return (unpack_info(opb)); - case 0x03: // least significant *bit* is read first - if (rate == 0) { - // um... we didn't get the initial header - return (-1); - } - return (vc.unpack(opb)); - case 0x05: // least significant *bit* is read first - if (rate == 0 || vc.vendor == null) { - // um... we didn;t get the initial header or comments yet - return (-1); - } - return (unpack_books(opb)); - default: - // Not a valid vorbis header type - // return(-1); - break; - } - } + blocksizes[0] = 1 << opb.read(4); + blocksizes[1] = 1 << opb.read(4); + + if ((rate < 1) || (channels < 1) || (blocksizes[0] < 8) || (blocksizes[1] < blocksizes[0]) + || (opb.read(1) != 1)) { + clear(); + return (-1); } - return (-1); - } - - // pack side - int pack_info(Buffer opb) { - // preamble - opb.write(0x01, 8); - opb.write(_vorbis); - - // basic information about the stream - opb.write(0x00, 32); - opb.write(channels, 8); - opb.write(rate, 32); - - opb.write(bitrate_upper, 32); - opb.write(bitrate_nominal, 32); - opb.write(bitrate_lower, 32); - - opb.write(Util.ilog2(blocksizes[0]), 4); - opb.write(Util.ilog2(blocksizes[1]), 4); - opb.write(1, 1); return (0); } - - int pack_books(Buffer opb) { - opb.write(0x05, 8); - opb.write(_vorbis); - - // books - opb.write(books - 1, 8); - for (int i = 0; i < books; i++) { - if (book_param[i].pack(opb) != 0) { - // goto err_out; - return (-1); - } - } - - // times - opb.write(times - 1, 6); - for (int i = 0; i < times; i++) { - opb.write(time_type[i], 16); - FuncTime.time_P[time_type[i]].pack(this.time_param[i], opb); - } - - // floors - opb.write(floors - 1, 6); - for (int i = 0; i < floors; i++) { - opb.write(floor_type[i], 16); - FuncFloor.floor_P[floor_type[i]].pack(floor_param[i], opb); - } - - // residues - opb.write(residues - 1, 6); - for (int i = 0; i < residues; i++) { - opb.write(residue_type[i], 16); - FuncResidue.residue_P[residue_type[i]].pack(residue_param[i], opb); - } - - // maps - opb.write(maps - 1, 6); - for (int i = 0; i < maps; i++) { - opb.write(map_type[i], 16); - FuncMapping.mapping_P[map_type[i]].pack(this, map_param[i], opb); - } - - // modes - opb.write(modes - 1, 6); - for (int i = 0; i < modes; i++) { - opb.write(mode_param[i].blockflag, 1); - opb.write(mode_param[i].windowtype, 16); - opb.write(mode_param[i].transformtype, 16); - opb.write(mode_param[i].mapping, 8); - } - opb.write(1, 1); - return (0); - } - - public int blocksize(Packet op) { - // codec_setup_info - Buffer opb = new Buffer(); - - int mode; - - opb.readinit(op.packet_base, op.packet, op.bytes); - - /* Check the packet type */ - if (opb.read(1) != 0) { - /* Oops. This is not an audio data packet */ - return (OV_ENOTAUDIO); - } - { - int modebits = 0; - int v = modes; - while (v > 1) { - modebits++; - v >>>= 1; - } - - /* read our mode and pre/post windowsize */ - mode = opb.read(modebits); - } - if (mode == -1) - return (OV_EBADPACKET); - return (blocksizes[mode_param[mode].blockflag]); - } - - public String toString() { - return "version:" + version + ", channels:" + channels + ", rate:" + rate - + ", bitrate:" + bitrate_upper + "," + bitrate_nominal + "," - + bitrate_lower; - } } diff --git a/src/teavm/java/com/jcraft/jorbis/InfoMode.java b/src/teavm/java/com/jcraft/jorbis/InfoMode.java index e7f203cc..a1f8004a 100644 --- a/src/teavm/java/com/jcraft/jorbis/InfoMode.java +++ b/src/teavm/java/com/jcraft/jorbis/InfoMode.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/src/teavm/java/com/jcraft/jorbis/JOrbisException.java b/src/teavm/java/com/jcraft/jorbis/JOrbisException.java index 7862e980..c7cf78cc 100644 --- a/src/teavm/java/com/jcraft/jorbis/JOrbisException.java +++ b/src/teavm/java/com/jcraft/jorbis/JOrbisException.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/src/teavm/java/com/jcraft/jorbis/Lookup.java b/src/teavm/java/com/jcraft/jorbis/Lookup.java index 5accc93b..a5c3224a 100644 --- a/src/teavm/java/com/jcraft/jorbis/Lookup.java +++ b/src/teavm/java/com/jcraft/jorbis/Lookup.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -55,30 +55,18 @@ class Lookup { -0.9757021300385f, -0.9807852804032f, -0.9852776423889f, -0.9891765099648f, -0.9924795345987f, -0.9951847266722f, -0.9972904566787f, -0.9987954562052f, -0.9996988186962f, -1.0000000000000f, }; - /* interpolated lookup based cos function, domain 0 to PI only */ - static float coslook(float a) { - double d = a * (.31830989 * (float) COS_LOOKUP_SZ); - int i = (int) d; - return COS_LOOKUP[i] + ((float) (d - i)) * (COS_LOOKUP[i + 1] - COS_LOOKUP[i]); - } - static final int INVSQ_LOOKUP_SZ = 32; + static final float[] INVSQ_LOOKUP = { 1.414213562373f, 1.392621247646f, 1.371988681140f, 1.352246807566f, 1.333333333333f, 1.315191898443f, 1.297771369046f, 1.281025230441f, 1.264911064067f, 1.249390095109f, 1.234426799697f, 1.219988562661f, 1.206045378311f, 1.192569588000f, 1.179535649239f, 1.166919931983f, 1.154700538379f, 1.142857142857f, 1.131370849898f, 1.120224067222f, 1.109400392450f, 1.098884511590f, 1.088662107904f, 1.078719779941f, 1.069044967650f, 1.059625885652f, 1.050451462878f, 1.041511287847f, 1.032795558989f, 1.024295039463f, 1.016001016002f, 1.007905261358f, 1.000000000000f, }; - - /* interpolated 1./sqrt(p) where .5 <= p < 1. */ - static float invsqlook(float a) { - double d = a * (2.f * (float) INVSQ_LOOKUP_SZ) - (float) INVSQ_LOOKUP_SZ; - int i = (int) d; - return INVSQ_LOOKUP[i] + ((float) (d - i)) * (INVSQ_LOOKUP[i + 1] - INVSQ_LOOKUP[i]); - } - static final int INVSQ2EXP_LOOKUP_MIN = -32; + static final int INVSQ2EXP_LOOKUP_MAX = 32; + static final float[] INVSQ2EXP_LOOKUP = { 65536.f, 46340.95001f, 32768.f, 23170.47501f, 16384.f, 11585.2375f, 8192.f, 5792.618751f, 4096.f, 2896.309376f, 2048.f, 1448.154688f, 1024.f, 724.0773439f, 512.f, 362.038672f, 256.f, 181.019336f, 128.f, 90.50966799f, 64.f, 45.254834f, 32.f, 22.627417f, 16.f, 11.3137085f, 8.f, @@ -88,15 +76,11 @@ class Lookup { 0.0009765625f, 0.000690533966f, 0.00048828125f, 0.000345266983f, 0.000244140625f, 0.0001726334915f, 0.0001220703125f, 8.631674575e-05f, 6.103515625e-05f, 4.315837288e-05f, 3.051757812e-05f, 2.157918644e-05f, 1.525878906e-05f, }; - - /* interpolated 1./sqrt(p) where .5 <= p < 1. */ - static float invsq2explook(int a) { - return INVSQ2EXP_LOOKUP[a - INVSQ2EXP_LOOKUP_MIN]; - } - static final int FROMdB_LOOKUP_SZ = 35; static final int FROMdB2_LOOKUP_SZ = 32; + static final int FROMdB_SHIFT = 5; + static final int FROMdB2_SHIFT = 3; static final int FROMdB2_MASK = 31; static final float[] FROMdB_LOOKUP = { 1.f, 0.6309573445f, 0.3981071706f, 0.2511886432f, 0.1584893192f, 0.1f, @@ -111,6 +95,13 @@ class Lookup { 0.755309592f, 0.7445176537f, 0.7338799116f, 0.7233941627f, 0.7130582353f, 0.7028699885f, 0.6928273125f, 0.6829281272f, 0.6731703824f, 0.6635520573f, 0.6540711597f, 0.6447257262f, 0.6355138211f, }; + /* interpolated lookup based cos function, domain 0 to PI only */ + static float coslook(float a) { + double d = a * (.31830989 * (float) COS_LOOKUP_SZ); + int i = (int) d; + return COS_LOOKUP[i] + ((float) (d - i)) * (COS_LOOKUP[i + 1] - COS_LOOKUP[i]); + } + /* interpolated lookup based fromdB function, domain -140dB to 0dB only */ static float fromdBlook(float a) { int i = (int) (a * ((float) (-(1 << FROMdB2_SHIFT)))); @@ -119,4 +110,16 @@ class Lookup { : FROMdB_LOOKUP[i >>> FROMdB_SHIFT] * FROMdB2_LOOKUP[i & FROMdB2_MASK]); } + /* interpolated 1./sqrt(p) where .5 <= p < 1. */ + static float invsq2explook(int a) { + return INVSQ2EXP_LOOKUP[a - INVSQ2EXP_LOOKUP_MIN]; + } + + /* interpolated 1./sqrt(p) where .5 <= p < 1. */ + static float invsqlook(float a) { + double d = a * (2.f * (float) INVSQ_LOOKUP_SZ) - (float) INVSQ_LOOKUP_SZ; + int i = (int) d; + return INVSQ_LOOKUP[i] + ((float) (d - i)) * (INVSQ_LOOKUP[i + 1] - INVSQ_LOOKUP[i]); + } + } diff --git a/src/teavm/java/com/jcraft/jorbis/Lpc.java b/src/teavm/java/com/jcraft/jorbis/Lpc.java index 4160c50a..9da2fee7 100644 --- a/src/teavm/java/com/jcraft/jorbis/Lpc.java +++ b/src/teavm/java/com/jcraft/jorbis/Lpc.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -27,17 +27,9 @@ package com.jcraft.jorbis; class Lpc { - // en/decode lookups - Drft fft = new Drft();; - - int ln; - int m; - - // Autocorrelation LPC coeff generation algorithm invented by - // N. Levinson in 1947, modified by J. Durbin in 1959. - - // Input : n elements of time doamin data - // Output: m lpc coefficients, excitation energy + static float FAST_HYPOT(float a, float b) { + return (float) Math.sqrt((a) * (a) + (b) * (b)); + }; static float lpc_from_data(float[] data, float[] lpc, int n, int m) { float[] aut = new float[m + 1]; @@ -99,9 +91,34 @@ class Lpc { return error; } + // en/decode lookups + Drft fft = new Drft(); + + // Autocorrelation LPC coeff generation algorithm invented by + // N. Levinson in 1947, modified by J. Durbin in 1959. + + // Input : n elements of time doamin data + // Output: m lpc coefficients, excitation energy + + int ln; + // Input : n element envelope spectral curve // Output: m lpc coefficients, excitation energy + int m; + + void clear() { + fft.clear(); + } + + void init(int mapped, int m) { + ln = mapped; + this.m = m; + + // we cheat decoding the LPC spectrum via FFTs + fft.init(mapped * 2); + } + float lpc_from_curve(float[] curve, float[] lpc) { int n = ln; float[] work = new float[n + n]; @@ -131,22 +148,6 @@ class Lpc { return (lpc_from_data(work, lpc, n, m)); } - void init(int mapped, int m) { - ln = mapped; - this.m = m; - - // we cheat decoding the LPC spectrum via FFTs - fft.init(mapped * 2); - } - - void clear() { - fft.clear(); - } - - static float FAST_HYPOT(float a, float b) { - return (float) Math.sqrt((a) * (a) + (b) * (b)); - } - // One can do this the long way by generating the transfer function in // the time domain and taking the forward FFT of the result. The // results from direct calculation are cleaner and faster. diff --git a/src/teavm/java/com/jcraft/jorbis/Lsp.java b/src/teavm/java/com/jcraft/jorbis/Lsp.java index 7107234e..fdd2bfd2 100644 --- a/src/teavm/java/com/jcraft/jorbis/Lsp.java +++ b/src/teavm/java/com/jcraft/jorbis/Lsp.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -32,8 +32,8 @@ package com.jcraft.jorbis; The LSP generation code is taken (with minimal modification) from "On the Computation of the LSP Frequencies" by Joseph Rothweiler , available at: - - http://www2.xtdl.com/~rothwlr/lsfpaper/lsfpage.html + + http://www2.xtdl.com/~rothwlr/lsfpaper/lsfpage.html ********************************************************************/ class Lsp { diff --git a/src/teavm/java/com/jcraft/jorbis/Mapping0.java b/src/teavm/java/com/jcraft/jorbis/Mapping0.java index 005562c5..57aa477a 100644 --- a/src/teavm/java/com/jcraft/jorbis/Mapping0.java +++ b/src/teavm/java/com/jcraft/jorbis/Mapping0.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,163 +26,72 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class Mapping0 extends FuncMapping { - static int seq = 0; + class InfoMapping0 { + int submaps; // <= 16 + int[] chmuxlist = new int[256]; // up to 256 channels in a Vorbis stream - void free_info(Object imap) { + int[] timesubmap = new int[16]; // [mux] + int[] floorsubmap = new int[16]; // [mux] submap to floors + int[] residuesubmap = new int[16];// [mux] submap to residue + int[] psysubmap = new int[16]; // [mux]; encode only + + int coupling_steps; + int[] coupling_mag = new int[256]; + int[] coupling_ang = new int[256]; + + void free() { + chmuxlist = null; + timesubmap = null; + floorsubmap = null; + residuesubmap = null; + psysubmap = null; + + coupling_mag = null; + coupling_ang = null; + } + } + + class LookMapping0 { + InfoMode mode; + InfoMapping0 map; + Object[] time_look; + Object[] floor_look; + Object[] floor_state; + Object[] residue_look; + PsyLook[] psy_look; + + FuncTime[] time_func; + FuncFloor[] floor_func; + FuncResidue[] residue_func; + + int ch; + float[][] decay; + int lastframe; // if a different mode is called, we need to + // invalidate decay and floor state }; + static int seq = 0; + + float[][] pcmbundle = null; + + int[] zerobundle = null; + + int[] nonzero = null; + + Object[] floormemo = null; + + @Override + void free_info(Object imap) { + } + + @Override void free_look(Object imap) { } - Object look(DspState vd, InfoMode vm, Object m) { - // System.err.println("Mapping0.look"); - Info vi = vd.vi; - LookMapping0 look = new LookMapping0(); - InfoMapping0 info = look.map = (InfoMapping0) m; - look.mode = vm; - - look.time_look = new Object[info.submaps]; - look.floor_look = new Object[info.submaps]; - look.residue_look = new Object[info.submaps]; - - look.time_func = new FuncTime[info.submaps]; - look.floor_func = new FuncFloor[info.submaps]; - look.residue_func = new FuncResidue[info.submaps]; - - for (int i = 0; i < info.submaps; i++) { - int timenum = info.timesubmap[i]; - int floornum = info.floorsubmap[i]; - int resnum = info.residuesubmap[i]; - - look.time_func[i] = FuncTime.time_P[vi.time_type[timenum]]; - look.time_look[i] = look.time_func[i].look(vd, vm, vi.time_param[timenum]); - look.floor_func[i] = FuncFloor.floor_P[vi.floor_type[floornum]]; - look.floor_look[i] = look.floor_func[i].look(vd, vm, vi.floor_param[floornum]); - look.residue_func[i] = FuncResidue.residue_P[vi.residue_type[resnum]]; - look.residue_look[i] = look.residue_func[i].look(vd, vm, vi.residue_param[resnum]); - - } - - if (vi.psys != 0 && vd.analysisp != 0) { - // ?? - } - - look.ch = vi.channels; - - return (look); - } - - void pack(Info vi, Object imap, Buffer opb) { - InfoMapping0 info = (InfoMapping0) imap; - - /* - * another 'we meant to do it this way' hack... up to beta 4, we packed 4 binary - * zeros here to signify one submapping in use. We now redefine that to mean - * four bitflags that indicate use of deeper features; bit0:submappings, - * bit1:coupling, bit2,3:reserved. This is backward compatable with all actual - * uses of the beta code. - */ - - if (info.submaps > 1) { - opb.write(1, 1); - opb.write(info.submaps - 1, 4); - } else { - opb.write(0, 1); - } - - if (info.coupling_steps > 0) { - opb.write(1, 1); - opb.write(info.coupling_steps - 1, 8); - for (int i = 0; i < info.coupling_steps; i++) { - opb.write(info.coupling_mag[i], Util.ilog2(vi.channels)); - opb.write(info.coupling_ang[i], Util.ilog2(vi.channels)); - } - } else { - opb.write(0, 1); - } - - opb.write(0, 2); /* 2,3:reserved */ - - /* we don't write the channel submappings if we only have one... */ - if (info.submaps > 1) { - for (int i = 0; i < vi.channels; i++) - opb.write(info.chmuxlist[i], 4); - } - for (int i = 0; i < info.submaps; i++) { - opb.write(info.timesubmap[i], 8); - opb.write(info.floorsubmap[i], 8); - opb.write(info.residuesubmap[i], 8); - } - } - - // also responsible for range checking - Object unpack(Info vi, Buffer opb) { - InfoMapping0 info = new InfoMapping0(); - - if (opb.read(1) != 0) { - info.submaps = opb.read(4) + 1; - } else { - info.submaps = 1; - } - - if (opb.read(1) != 0) { - info.coupling_steps = opb.read(8) + 1; - - for (int i = 0; i < info.coupling_steps; i++) { - int testM = info.coupling_mag[i] = opb.read(Util.ilog2(vi.channels)); - int testA = info.coupling_ang[i] = opb.read(Util.ilog2(vi.channels)); - - if (testM < 0 || testA < 0 || testM == testA || testM >= vi.channels || testA >= vi.channels) { - // goto err_out; - info.free(); - return (null); - } - } - } - - if (opb.read(2) > 0) { /* 2,3:reserved */ - info.free(); - return (null); - } - - if (info.submaps > 1) { - for (int i = 0; i < vi.channels; i++) { - info.chmuxlist[i] = opb.read(4); - if (info.chmuxlist[i] >= info.submaps) { - info.free(); - return (null); - } - } - } - - for (int i = 0; i < info.submaps; i++) { - info.timesubmap[i] = opb.read(8); - if (info.timesubmap[i] >= vi.times) { - info.free(); - return (null); - } - info.floorsubmap[i] = opb.read(8); - if (info.floorsubmap[i] >= vi.floors) { - info.free(); - return (null); - } - info.residuesubmap[i] = opb.read(8); - if (info.residuesubmap[i] >= vi.residues) { - info.free(); - return (null); - } - } - return info; - } - - float[][] pcmbundle = null; - int[] zerobundle = null; - int[] nonzero = null; - Object[] floormemo = null; - + @Override synchronized int inverse(Block vb, Object l) { DspState vd = vb.vd; Info vi = vd.vi; @@ -314,48 +223,148 @@ class Mapping0 extends FuncMapping { return (0); } - class InfoMapping0 { - int submaps; // <= 16 - int[] chmuxlist = new int[256]; // up to 256 channels in a Vorbis stream + @Override + Object look(DspState vd, InfoMode vm, Object m) { + // System.err.println("Mapping0.look"); + Info vi = vd.vi; + LookMapping0 look = new LookMapping0(); + InfoMapping0 info = look.map = (InfoMapping0) m; + look.mode = vm; - int[] timesubmap = new int[16]; // [mux] - int[] floorsubmap = new int[16]; // [mux] submap to floors - int[] residuesubmap = new int[16];// [mux] submap to residue - int[] psysubmap = new int[16]; // [mux]; encode only + look.time_look = new Object[info.submaps]; + look.floor_look = new Object[info.submaps]; + look.residue_look = new Object[info.submaps]; - int coupling_steps; - int[] coupling_mag = new int[256]; - int[] coupling_ang = new int[256]; + look.time_func = new FuncTime[info.submaps]; + look.floor_func = new FuncFloor[info.submaps]; + look.residue_func = new FuncResidue[info.submaps]; - void free() { - chmuxlist = null; - timesubmap = null; - floorsubmap = null; - residuesubmap = null; - psysubmap = null; + for (int i = 0; i < info.submaps; i++) { + int timenum = info.timesubmap[i]; + int floornum = info.floorsubmap[i]; + int resnum = info.residuesubmap[i]; - coupling_mag = null; - coupling_ang = null; + look.time_func[i] = FuncTime.time_P[vi.time_type[timenum]]; + look.time_look[i] = look.time_func[i].look(vd, vm, vi.time_param[timenum]); + look.floor_func[i] = FuncFloor.floor_P[vi.floor_type[floornum]]; + look.floor_look[i] = look.floor_func[i].look(vd, vm, vi.floor_param[floornum]); + look.residue_func[i] = FuncResidue.residue_P[vi.residue_type[resnum]]; + look.residue_look[i] = look.residue_func[i].look(vd, vm, vi.residue_param[resnum]); + + } + + if (vi.psys != 0 && vd.analysisp != 0) { + // ?? + } + + look.ch = vi.channels; + + return (look); + } + + @Override + void pack(Info vi, Object imap, Buffer opb) { + InfoMapping0 info = (InfoMapping0) imap; + + /* + * another 'we meant to do it this way' hack... up to beta 4, we packed 4 binary + * zeros here to signify one submapping in use. We now redefine that to mean + * four bitflags that indicate use of deeper features; bit0:submappings, + * bit1:coupling, bit2,3:reserved. This is backward compatable with all actual + * uses of the beta code. + */ + + if (info.submaps > 1) { + opb.write(1, 1); + opb.write(info.submaps - 1, 4); + } else { + opb.write(0, 1); + } + + if (info.coupling_steps > 0) { + opb.write(1, 1); + opb.write(info.coupling_steps - 1, 8); + for (int i = 0; i < info.coupling_steps; i++) { + opb.write(info.coupling_mag[i], Util.ilog2(vi.channels)); + opb.write(info.coupling_ang[i], Util.ilog2(vi.channels)); + } + } else { + opb.write(0, 1); + } + + opb.write(0, 2); /* 2,3:reserved */ + + /* we don't write the channel submappings if we only have one... */ + if (info.submaps > 1) { + for (int i = 0; i < vi.channels; i++) + opb.write(info.chmuxlist[i], 4); + } + for (int i = 0; i < info.submaps; i++) { + opb.write(info.timesubmap[i], 8); + opb.write(info.floorsubmap[i], 8); + opb.write(info.residuesubmap[i], 8); } } - class LookMapping0 { - InfoMode mode; - InfoMapping0 map; - Object[] time_look; - Object[] floor_look; - Object[] floor_state; - Object[] residue_look; - PsyLook[] psy_look; + // also responsible for range checking + @Override + Object unpack(Info vi, Buffer opb) { + InfoMapping0 info = new InfoMapping0(); - FuncTime[] time_func; - FuncFloor[] floor_func; - FuncResidue[] residue_func; + if (opb.read(1) != 0) { + info.submaps = opb.read(4) + 1; + } else { + info.submaps = 1; + } - int ch; - float[][] decay; - int lastframe; // if a different mode is called, we need to - // invalidate decay and floor state + if (opb.read(1) != 0) { + info.coupling_steps = opb.read(8) + 1; + + for (int i = 0; i < info.coupling_steps; i++) { + int testM = info.coupling_mag[i] = opb.read(Util.ilog2(vi.channels)); + int testA = info.coupling_ang[i] = opb.read(Util.ilog2(vi.channels)); + + if (testM < 0 || testA < 0 || testM == testA || testM >= vi.channels || testA >= vi.channels) { + // goto err_out; + info.free(); + return (null); + } + } + } + + if (opb.read(2) > 0) { /* 2,3:reserved */ + info.free(); + return (null); + } + + if (info.submaps > 1) { + for (int i = 0; i < vi.channels; i++) { + info.chmuxlist[i] = opb.read(4); + if (info.chmuxlist[i] >= info.submaps) { + info.free(); + return (null); + } + } + } + + for (int i = 0; i < info.submaps; i++) { + info.timesubmap[i] = opb.read(8); + if (info.timesubmap[i] >= vi.times) { + info.free(); + return (null); + } + info.floorsubmap[i] = opb.read(8); + if (info.floorsubmap[i] >= vi.floors) { + info.free(); + return (null); + } + info.residuesubmap[i] = opb.read(8); + if (info.residuesubmap[i] >= vi.residues) { + info.free(); + return (null); + } + } + return info; } } diff --git a/src/teavm/java/com/jcraft/jorbis/Mdct.java b/src/teavm/java/com/jcraft/jorbis/Mdct.java index c2b29fb0..55238fba 100644 --- a/src/teavm/java/com/jcraft/jorbis/Mdct.java +++ b/src/teavm/java/com/jcraft/jorbis/Mdct.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -36,54 +36,8 @@ class Mdct { float scale; - void init(int n) { - bitrev = new int[n / 4]; - trig = new float[n + n / 4]; - - log2n = (int) Math.rint(Math.log(n) / Math.log(2)); - this.n = n; - - int AE = 0; - int AO = 1; - int BE = AE + n / 2; - int BO = BE + 1; - int CE = BE + n / 2; - int CO = CE + 1; - // trig lookups... - for (int i = 0; i < n / 4; i++) { - trig[AE + i * 2] = (float) Math.cos((Math.PI / n) * (4 * i)); - trig[AO + i * 2] = (float) -Math.sin((Math.PI / n) * (4 * i)); - trig[BE + i * 2] = (float) Math.cos((Math.PI / (2 * n)) * (2 * i + 1)); - trig[BO + i * 2] = (float) Math.sin((Math.PI / (2 * n)) * (2 * i + 1)); - } - for (int i = 0; i < n / 8; i++) { - trig[CE + i * 2] = (float) Math.cos((Math.PI / n) * (4 * i + 2)); - trig[CO + i * 2] = (float) -Math.sin((Math.PI / n) * (4 * i + 2)); - } - - { - int mask = (1 << (log2n - 1)) - 1; - int msb = 1 << (log2n - 2); - for (int i = 0; i < n / 8; i++) { - int acc = 0; - for (int j = 0; msb >>> j != 0; j++) - if (((msb >>> j) & i) != 0) - acc |= 1 << j; - bitrev[i * 2] = ((~acc) & mask); - // bitrev[i*2]=((~acc)&mask)-1; - bitrev[i * 2 + 1] = acc; - } - } - scale = 4.f / n; - } - - void clear() { - } - - void forward(float[] in, float[] out) { - } - float[] _x = new float[1024]; + float[] _w = new float[1024]; synchronized void backward(float[] in, float[] out) { @@ -152,6 +106,53 @@ class Mdct { } } + void clear() { + } + + void forward(float[] in, float[] out) { + } + + void init(int n) { + bitrev = new int[n / 4]; + trig = new float[n + n / 4]; + + log2n = (int) Math.rint(Math.log(n) / Math.log(2)); + this.n = n; + + int AE = 0; + int AO = 1; + int BE = AE + n / 2; + int BO = BE + 1; + int CE = BE + n / 2; + int CO = CE + 1; + // trig lookups... + for (int i = 0; i < n / 4; i++) { + trig[AE + i * 2] = (float) Math.cos((Math.PI / n) * (4 * i)); + trig[AO + i * 2] = (float) -Math.sin((Math.PI / n) * (4 * i)); + trig[BE + i * 2] = (float) Math.cos((Math.PI / (2 * n)) * (2 * i + 1)); + trig[BO + i * 2] = (float) Math.sin((Math.PI / (2 * n)) * (2 * i + 1)); + } + for (int i = 0; i < n / 8; i++) { + trig[CE + i * 2] = (float) Math.cos((Math.PI / n) * (4 * i + 2)); + trig[CO + i * 2] = (float) -Math.sin((Math.PI / n) * (4 * i + 2)); + } + + { + int mask = (1 << (log2n - 1)) - 1; + int msb = 1 << (log2n - 2); + for (int i = 0; i < n / 8; i++) { + int acc = 0; + for (int j = 0; msb >>> j != 0; j++) + if (((msb >>> j) & i) != 0) + acc |= 1 << j; + bitrev[i * 2] = ((~acc) & mask); + // bitrev[i*2]=((~acc)&mask)-1; + bitrev[i * 2 + 1] = acc; + } + } + scale = 4.f / n; + } + private float[] mdct_kernel(float[] x, float[] w, int n, int n2, int n4, int n8) { // step 2 diff --git a/src/teavm/java/com/jcraft/jorbis/PsyInfo.java b/src/teavm/java/com/jcraft/jorbis/PsyInfo.java index 906efab5..0841275c 100644 --- a/src/teavm/java/com/jcraft/jorbis/PsyInfo.java +++ b/src/teavm/java/com/jcraft/jorbis/PsyInfo.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/src/teavm/java/com/jcraft/jorbis/PsyLook.java b/src/teavm/java/com/jcraft/jorbis/PsyLook.java index 8fee7bf2..407cba8b 100644 --- a/src/teavm/java/com/jcraft/jorbis/PsyLook.java +++ b/src/teavm/java/com/jcraft/jorbis/PsyLook.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/src/teavm/java/com/jcraft/jorbis/Residue0.java b/src/teavm/java/com/jcraft/jorbis/Residue0.java index d9197096..9c6d11f6 100644 --- a/src/teavm/java/com/jcraft/jorbis/Residue0.java +++ b/src/teavm/java/com/jcraft/jorbis/Residue0.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,136 +26,50 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class Residue0 extends FuncResidue { - void pack(Object vr, Buffer opb) { - InfoResidue0 info = (InfoResidue0) vr; - int acc = 0; - opb.write(info.begin, 24); - opb.write(info.end, 24); + class InfoResidue0 { + // block-partitioned VQ coded straight residue + int begin; + int end; - opb.write(info.grouping - 1, 24); /* - * residue vectors to group and code with a partitioned book - */ - opb.write(info.partitions - 1, 6); /* possible partition choices */ - opb.write(info.groupbook, 8); /* group huffman book */ + // first stage (lossless partitioning) + int grouping; // group n vectors per partition + int partitions; // possible codebooks for a partition + int groupbook; // huffbook for partitioning + int[] secondstages = new int[64]; // expanded out to pointers in lookup + int[] booklist = new int[256]; // list of second stage books - /* - * secondstages is a bitmask; as encoding progresses pass by pass, a bitmask of - * one indicates this partition class has bits to write this pass - */ - for (int j = 0; j < info.partitions; j++) { - int i = info.secondstages[j]; - if (Util.ilog(i) > 3) { - /* yes, this is a minor hack due to not thinking ahead */ - opb.write(i, 3); - opb.write(1, 1); - opb.write(i >>> 3, 5); - } else { - opb.write(i, 4); /* trailing zero */ - } - acc += Util.icount(i); - } - for (int j = 0; j < acc; j++) { - opb.write(info.booklist[j], 8); - } + // encode-only heuristic settings + float[] entmax = new float[64]; // book entropy threshholds + float[] ampmax = new float[64]; // book amp threshholds + int[] subgrp = new int[64]; // book heuristic subgroup size + int[] blimit = new int[64]; // subgroup position limits } - Object unpack(Info vi, Buffer opb) { - int acc = 0; - InfoResidue0 info = new InfoResidue0(); - info.begin = opb.read(24); - info.end = opb.read(24); - info.grouping = opb.read(24) + 1; - info.partitions = opb.read(6) + 1; - info.groupbook = opb.read(8); + class LookResidue0 { + InfoResidue0 info; + int map; - for (int j = 0; j < info.partitions; j++) { - int cascade = opb.read(3); - if (opb.read(1) != 0) { - cascade |= (opb.read(5) << 3); - } - info.secondstages[j] = cascade; - acc += Util.icount(cascade); - } + int parts; + int stages; + CodeBook[] fullbooks; + CodeBook phrasebook; + int[][] partbooks; - for (int j = 0; j < acc; j++) { - info.booklist[j] = opb.read(8); - } + int partvals; + int[][] decodemap; - if (info.groupbook >= vi.books) { - free_info(info); - return (null); - } - - for (int j = 0; j < acc; j++) { - if (info.booklist[j] >= vi.books) { - free_info(info); - return (null); - } - } - return (info); - } - - Object look(DspState vd, InfoMode vm, Object vr) { - InfoResidue0 info = (InfoResidue0) vr; - LookResidue0 look = new LookResidue0(); - int acc = 0; - int dim; - int maxstage = 0; - look.info = info; - look.map = vm.mapping; - - look.parts = info.partitions; - look.fullbooks = vd.fullbooks; - look.phrasebook = vd.fullbooks[info.groupbook]; - - dim = look.phrasebook.dim; - - look.partbooks = new int[look.parts][]; - - for (int j = 0; j < look.parts; j++) { - int i = info.secondstages[j]; - int stages = Util.ilog(i); - if (stages != 0) { - if (stages > maxstage) - maxstage = stages; - look.partbooks[j] = new int[stages]; - for (int k = 0; k < stages; k++) { - if ((i & (1 << k)) != 0) { - look.partbooks[j][k] = info.booklist[acc++]; - } - } - } - } - - look.partvals = (int) Math.rint(Math.pow(look.parts, dim)); - look.stages = maxstage; - look.decodemap = new int[look.partvals][]; - for (int j = 0; j < look.partvals; j++) { - int val = j; - int mult = look.partvals / look.parts; - look.decodemap[j] = new int[dim]; - - for (int k = 0; k < dim; k++) { - int deco = val / mult; - val -= deco * mult; - mult /= look.parts; - look.decodemap[j][k] = deco; - } - } - return (look); - } - - void free_info(Object i) { - } - - void free_look(Object i) { + int postbits; + int phrasebits; + int frames; } private static int[][][] _01inverse_partword = new int[2][][]; // _01inverse is synchronized for + static int[][] _2inverse_partword = null; + // re-using partword synchronized static int _01inverse(Block vb, Object vl, float[][] in, int ch, int decodepart) { int i, j, k, l, s; @@ -223,8 +137,6 @@ class Residue0 extends FuncResidue { return (0); } - static int[][] _2inverse_partword = null; - synchronized static int _2inverse(Block vb, Object vl, float[][] in, int ch) { int i, k, l, s; LookResidue0 look = (LookResidue0) vl; @@ -273,6 +185,15 @@ class Residue0 extends FuncResidue { return (0); } + @Override + void free_info(Object i) { + } + + @Override + void free_look(Object i) { + } + + @Override int inverse(Block vb, Object vl, float[][] in, int[] nonzero, int ch) { int used = 0; for (int i = 0; i < ch; i++) { @@ -286,41 +207,126 @@ class Residue0 extends FuncResidue { return (0); } - class LookResidue0 { - InfoResidue0 info; - int map; + @Override + Object look(DspState vd, InfoMode vm, Object vr) { + InfoResidue0 info = (InfoResidue0) vr; + LookResidue0 look = new LookResidue0(); + int acc = 0; + int dim; + int maxstage = 0; + look.info = info; + look.map = vm.mapping; - int parts; - int stages; - CodeBook[] fullbooks; - CodeBook phrasebook; - int[][] partbooks; + look.parts = info.partitions; + look.fullbooks = vd.fullbooks; + look.phrasebook = vd.fullbooks[info.groupbook]; - int partvals; - int[][] decodemap; + dim = look.phrasebook.dim; - int postbits; - int phrasebits; - int frames; + look.partbooks = new int[look.parts][]; + + for (int j = 0; j < look.parts; j++) { + int i = info.secondstages[j]; + int stages = Util.ilog(i); + if (stages != 0) { + if (stages > maxstage) + maxstage = stages; + look.partbooks[j] = new int[stages]; + for (int k = 0; k < stages; k++) { + if ((i & (1 << k)) != 0) { + look.partbooks[j][k] = info.booklist[acc++]; + } + } + } + } + + look.partvals = (int) Math.rint(Math.pow(look.parts, dim)); + look.stages = maxstage; + look.decodemap = new int[look.partvals][]; + for (int j = 0; j < look.partvals; j++) { + int val = j; + int mult = look.partvals / look.parts; + look.decodemap[j] = new int[dim]; + + for (int k = 0; k < dim; k++) { + int deco = val / mult; + val -= deco * mult; + mult /= look.parts; + look.decodemap[j][k] = deco; + } + } + return (look); } - class InfoResidue0 { - // block-partitioned VQ coded straight residue - int begin; - int end; + @Override + void pack(Object vr, Buffer opb) { + InfoResidue0 info = (InfoResidue0) vr; + int acc = 0; + opb.write(info.begin, 24); + opb.write(info.end, 24); - // first stage (lossless partitioning) - int grouping; // group n vectors per partition - int partitions; // possible codebooks for a partition - int groupbook; // huffbook for partitioning - int[] secondstages = new int[64]; // expanded out to pointers in lookup - int[] booklist = new int[256]; // list of second stage books + opb.write(info.grouping - 1, 24); /* + * residue vectors to group and code with a partitioned book + */ + opb.write(info.partitions - 1, 6); /* possible partition choices */ + opb.write(info.groupbook, 8); /* group huffman book */ - // encode-only heuristic settings - float[] entmax = new float[64]; // book entropy threshholds - float[] ampmax = new float[64]; // book amp threshholds - int[] subgrp = new int[64]; // book heuristic subgroup size - int[] blimit = new int[64]; // subgroup position limits + /* + * secondstages is a bitmask; as encoding progresses pass by pass, a bitmask of + * one indicates this partition class has bits to write this pass + */ + for (int j = 0; j < info.partitions; j++) { + int i = info.secondstages[j]; + if (Util.ilog(i) > 3) { + /* yes, this is a minor hack due to not thinking ahead */ + opb.write(i, 3); + opb.write(1, 1); + opb.write(i >>> 3, 5); + } else { + opb.write(i, 4); /* trailing zero */ + } + acc += Util.icount(i); + } + for (int j = 0; j < acc; j++) { + opb.write(info.booklist[j], 8); + } + } + + @Override + Object unpack(Info vi, Buffer opb) { + int acc = 0; + InfoResidue0 info = new InfoResidue0(); + info.begin = opb.read(24); + info.end = opb.read(24); + info.grouping = opb.read(24) + 1; + info.partitions = opb.read(6) + 1; + info.groupbook = opb.read(8); + + for (int j = 0; j < info.partitions; j++) { + int cascade = opb.read(3); + if (opb.read(1) != 0) { + cascade |= (opb.read(5) << 3); + } + info.secondstages[j] = cascade; + acc += Util.icount(cascade); + } + + for (int j = 0; j < acc; j++) { + info.booklist[j] = opb.read(8); + } + + if (info.groupbook >= vi.books) { + free_info(info); + return (null); + } + + for (int j = 0; j < acc; j++) { + if (info.booklist[j] >= vi.books) { + free_info(info); + return (null); + } + } + return (info); } } diff --git a/src/teavm/java/com/jcraft/jorbis/Residue1.java b/src/teavm/java/com/jcraft/jorbis/Residue1.java index 55b0d9ae..4a30f2e6 100644 --- a/src/teavm/java/com/jcraft/jorbis/Residue1.java +++ b/src/teavm/java/com/jcraft/jorbis/Residue1.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -28,6 +28,7 @@ package com.jcraft.jorbis; class Residue1 extends Residue0 { + @Override int inverse(Block vb, Object vl, float[][] in, int[] nonzero, int ch) { int used = 0; for (int i = 0; i < ch; i++) { diff --git a/src/teavm/java/com/jcraft/jorbis/Residue2.java b/src/teavm/java/com/jcraft/jorbis/Residue2.java index cb4ec8f9..94f90e9a 100644 --- a/src/teavm/java/com/jcraft/jorbis/Residue2.java +++ b/src/teavm/java/com/jcraft/jorbis/Residue2.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -28,6 +28,7 @@ package com.jcraft.jorbis; class Residue2 extends Residue0 { + @Override int inverse(Block vb, Object vl, float[][] in, int[] nonzero, int ch) { int i = 0; for (i = 0; i < ch; i++) diff --git a/src/teavm/java/com/jcraft/jorbis/StaticCodeBook.java b/src/teavm/java/com/jcraft/jorbis/StaticCodeBook.java index d06a2e85..b1d63fd7 100644 --- a/src/teavm/java/com/jcraft/jorbis/StaticCodeBook.java +++ b/src/teavm/java/com/jcraft/jorbis/StaticCodeBook.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,11 +26,50 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class StaticCodeBook { + static final int VQ_FEXP = 10; + static final int VQ_FMAN = 21; + static final int VQ_FEXP_BIAS = 768; // bias toward values smaller than 1. + + // doesn't currently guard under/overflow + static long float32_pack(float val) { + int sign = 0; + int exp; + int mant; + if (val < 0) { + sign = 0x80000000; + val = -val; + } + exp = (int) Math.floor(Math.log(val) / Math.log(2)); + mant = (int) Math.rint(Math.pow(val, (VQ_FMAN - 1) - exp)); + exp = (exp + VQ_FEXP_BIAS) << VQ_FMAN; + return (sign | exp | mant); + } + + static float float32_unpack(int val) { + float mant = val & 0x1fffff; + float exp = (val & 0x7fe00000) >>> VQ_FMAN; + if ((val & 0x80000000) != 0) + mant = -mant; + return (ldexp(mant, ((int) exp) - (VQ_FMAN - 1) - VQ_FEXP_BIAS)); + } + + static float ldexp(float foo, int e) { + return (float) (foo * Math.pow(2, e)); + } + int dim; // codebook dimensions (elements per vector) int entries; // codebook entries + + // additional information for log (dB) mapping; the linear mapping + // is assumed to actually be values in dB. encodebias is used to + // assign an error weight to 0 dB. We have two additional flags: + // zeroflag indicates if entry zero is to represent -Inf dB; negflag + // indicates if we're to represent negative linear values in a + // mirror of the positive mapping. + int[] lengthlist; // codeword lengths in bits // mapping @@ -40,23 +79,56 @@ class StaticCodeBook { // The below does a linear, single monotonic sequence mapping. int q_min; // packed 32 bit float; quant value 0 maps to minval - int q_delta; // packed 32 bit float; val 1 - val 0 == delta - int q_quant; // bits: 0 < quant <= 16 - int q_sequencep; // bitflag - // additional information for log (dB) mapping; the linear mapping - // is assumed to actually be values in dB. encodebias is used to - // assign an error weight to 0 dB. We have two additional flags: - // zeroflag indicates if entry zero is to represent -Inf dB; negflag - // indicates if we're to represent negative linear values in a - // mirror of the positive mapping. + int q_delta; // packed 32 bit float; val 1 - val 0 == delta + + int q_quant; // bits: 0 < quant <= 16 + + int q_sequencep; // bitflag int[] quantlist; // map == 1: (int)(entries/dim) element column map // map == 2: list of dim*entries quantized entry vals + // 32 bit float (not IEEE; nonnormalized mantissa + + // biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm + // Why not IEEE? It's just not that important here. + StaticCodeBook() { } + void clear() { + } + + // there might be a straightforward one-line way to do the below + // that's portable and totally safe against roundoff, but I haven't + // thought of it. Therefore, we opt on the side of caution + private int maptype1_quantvals() { + int vals = (int) (Math.floor(Math.pow(entries, 1. / dim))); + + // the above *should* be reliable, but we'll not assume that FP is + // ever reliable when bitstream sync is at stake; verify via integer + // means that vals really is the greatest value of dim for which + // vals^b->bim <= b->entries + // treat the above as an initial guess + while (true) { + int acc = 1; + int acc1 = 1; + for (int i = 0; i < dim; i++) { + acc *= vals; + acc1 *= vals + 1; + } + if (acc <= entries && acc1 > entries) { + return (vals); + } else { + if (acc > entries) { + vals--; + } else { + vals++; + } + } + } + } + int pack(Buffer opb) { int i; boolean ordered = false; @@ -308,39 +380,6 @@ class StaticCodeBook { // return(-1); } - // there might be a straightforward one-line way to do the below - // that's portable and totally safe against roundoff, but I haven't - // thought of it. Therefore, we opt on the side of caution - private int maptype1_quantvals() { - int vals = (int) (Math.floor(Math.pow(entries, 1. / dim))); - - // the above *should* be reliable, but we'll not assume that FP is - // ever reliable when bitstream sync is at stake; verify via integer - // means that vals really is the greatest value of dim for which - // vals^b->bim <= b->entries - // treat the above as an initial guess - while (true) { - int acc = 1; - int acc1 = 1; - for (int i = 0; i < dim; i++) { - acc *= vals; - acc1 *= vals + 1; - } - if (acc <= entries && acc1 > entries) { - return (vals); - } else { - if (acc > entries) { - vals--; - } else { - vals++; - } - } - } - } - - void clear() { - } - // unpack the quantized list of values for encode/decode // we need to deal with two map types: in map type 1, the values are // generated algorithmically (each column of the vector counts through @@ -398,39 +437,4 @@ class StaticCodeBook { } return (null); } - - // 32 bit float (not IEEE; nonnormalized mantissa + - // biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm - // Why not IEEE? It's just not that important here. - - static final int VQ_FEXP = 10; - static final int VQ_FMAN = 21; - static final int VQ_FEXP_BIAS = 768; // bias toward values smaller than 1. - - // doesn't currently guard under/overflow - static long float32_pack(float val) { - int sign = 0; - int exp; - int mant; - if (val < 0) { - sign = 0x80000000; - val = -val; - } - exp = (int) Math.floor(Math.log(val) / Math.log(2)); - mant = (int) Math.rint(Math.pow(val, (VQ_FMAN - 1) - exp)); - exp = (exp + VQ_FEXP_BIAS) << VQ_FMAN; - return (sign | exp | mant); - } - - static float float32_unpack(int val) { - float mant = val & 0x1fffff; - float exp = (val & 0x7fe00000) >>> VQ_FMAN; - if ((val & 0x80000000) != 0) - mant = -mant; - return (ldexp(mant, ((int) exp) - (VQ_FMAN - 1) - VQ_FEXP_BIAS)); - } - - static float ldexp(float foo, int e) { - return (float) (foo * Math.pow(2, e)); - } } diff --git a/src/teavm/java/com/jcraft/jorbis/Time0.java b/src/teavm/java/com/jcraft/jorbis/Time0.java index 3e9e81f2..9b40ecaf 100644 --- a/src/teavm/java/com/jcraft/jorbis/Time0.java +++ b/src/teavm/java/com/jcraft/jorbis/Time0.java @@ -1,24 +1,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -26,27 +26,33 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; +import com.jcraft.jogg.Buffer; class Time0 extends FuncTime { - void pack(Object i, Buffer opb) { + @Override + void free_info(Object i) { } - Object unpack(Info vi, Buffer opb) { - return ""; + @Override + void free_look(Object i) { } + @Override + int inverse(Block vb, Object i, float[] in, float[] out) { + return 0; + } + + @Override Object look(DspState vd, InfoMode mi, Object i) { return ""; } - void free_info(Object i) { + @Override + void pack(Object i, Buffer opb) { } - void free_look(Object i) { - } - - int inverse(Block vb, Object i, float[] in, float[] out) { - return 0; + @Override + Object unpack(Info vi, Buffer opb) { + return ""; } } diff --git a/src/teavm/java/com/jcraft/jorbis/Util.java b/src/teavm/java/com/jcraft/jorbis/Util.java index 9efb0a9c..e1339f6d 100644 --- a/src/teavm/java/com/jcraft/jorbis/Util.java +++ b/src/teavm/java/com/jcraft/jorbis/Util.java @@ -1,6 +1,15 @@ package com.jcraft.jorbis; class Util { + static int icount(int v) { + int ret = 0; + while (v != 0) { + ret += (v & 1); + v >>>= 1; + } + return (ret); + } + static int ilog(int v) { int ret = 0; while (v != 0) { @@ -18,13 +27,4 @@ class Util { } return (ret); } - - static int icount(int v) { - int ret = 0; - while (v != 0) { - ret += (v & 1); - v >>>= 1; - } - return (ret); - } } diff --git a/src/teavm/java/com/jcraft/jorbis/VorbisFile.java b/src/teavm/java/com/jcraft/jorbis/VorbisFile.java index 42227408..dbae54c4 100644 --- a/src/teavm/java/com/jcraft/jorbis/VorbisFile.java +++ b/src/teavm/java/com/jcraft/jorbis/VorbisFile.java @@ -2,24 +2,24 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* JOrbis * Copyright (C) 2000 ymnk, JCraft,Inc. - * + * * Written by: 2000 ymnk - * - * Many thanks to - * Monty and + * + * Many thanks to + * Monty and * The XIPHOPHORUS Company http://www.xiph.org/ . * JOrbis has been based on their awesome works, Vorbis codec. - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. - + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -27,21 +27,88 @@ package com.jcraft.jorbis; -import com.jcraft.jogg.*; - -import java.io.InputStream; import java.io.IOException; +import java.io.InputStream; + +import com.jcraft.jogg.Packet; +import com.jcraft.jogg.Page; +import com.jcraft.jogg.StreamState; +import com.jcraft.jogg.SyncState; public class VorbisFile { + class SeekableInputStream extends InputStream { + java.io.RandomAccessFile raf = null; + final String mode = "r"; + + SeekableInputStream(String file) throws java.io.IOException { + raf = new java.io.RandomAccessFile(file, mode); + } + + @Override + public int available() throws java.io.IOException { + return (raf.length() == raf.getFilePointer()) ? 0 : 1; + } + + @Override + public void close() throws java.io.IOException { + raf.close(); + } + + public long getLength() throws java.io.IOException { + return raf.length(); + } + + @Override + public synchronized void mark(int m) { + } + + @Override + public boolean markSupported() { + return false; + } + + @Override + public int read() throws java.io.IOException { + return raf.read(); + } + + @Override + public int read(byte[] buf) throws java.io.IOException { + return raf.read(buf); + } + + @Override + public int read(byte[] buf, int s, int len) throws java.io.IOException { + return raf.read(buf, s, len); + } + + @Override + public synchronized void reset() throws java.io.IOException { + } + + public void seek(long pos) throws java.io.IOException { + raf.seek(pos); + } + + @Override + public long skip(long n) throws java.io.IOException { + return (long) (raf.skipBytes((int) n)); + } + + public long tell() throws java.io.IOException { + return raf.getFilePointer(); + } + } + static final int CHUNKSIZE = 8500; static final int SEEK_SET = 0; static final int SEEK_CUR = 1; - static final int SEEK_END = 2; + static final int SEEK_END = 2; static final int OV_FALSE = -1; static final int OV_EOF = -2; - static final int OV_HOLE = -3; + static final int OV_HOLE = -3; static final int OV_EREAD = -128; static final int OV_EFAULT = -129; static final int OV_EIMPL = -130; @@ -52,40 +119,87 @@ public class VorbisFile { static final int OV_ENOTAUDIO = -135; static final int OV_EBADPACKET = -136; static final int OV_EBADLINK = -137; + static final int OV_ENOSEEK = -138; + static int fseek(InputStream fis, long off, int whence) { + if (fis instanceof SeekableInputStream) { + SeekableInputStream sis = (SeekableInputStream) fis; + try { + if (whence == SEEK_SET) { + sis.seek(off); + } else if (whence == SEEK_END) { + sis.seek(sis.getLength() - off); + } else { + } + } catch (Exception e) { + } + return 0; + } + try { + if (whence == 0) { + fis.reset(); + } + fis.skip(off); + } catch (Exception e) { + return -1; + } + return 0; + } + + static long ftell(InputStream fis) { + try { + if (fis instanceof SeekableInputStream) { + SeekableInputStream sis = (SeekableInputStream) fis; + return (sis.tell()); + } + } catch (Exception e) { + } + return 0; + } + InputStream datasource; + boolean seekable = false; + long offset; long end; - SyncState oy = new SyncState(); - int links; long[] offsets; long[] dataoffsets; int[] serialnos; + long[] pcmlengths; Info[] vi; - Comment[] vc; + Comment[] vc; // Decoding working state local storage long pcm_offset; + boolean decode_ready = false; - int current_serialno; - int current_link; + int current_link; float bittrack; float samptrack; + // ov_callbacks callbacks; + StreamState os = new StreamState(); // take physical pages, weld into a logical + // stream of packets DspState vd = new DspState(); // central working state for + // the packet->PCM decoder Block vb = new Block(vd); // local working space for packet->PCM decode - // ov_callbacks callbacks; + public VorbisFile(InputStream is, byte[] initial, int ibytes) throws JOrbisException { + super(); + int ret = open(is, initial, ibytes); + if (ret == -1) { + } + } public VorbisFile(String file) throws JOrbisException { super(); @@ -109,94 +223,6 @@ public class VorbisFile { } } - public VorbisFile(InputStream is, byte[] initial, int ibytes) throws JOrbisException { - super(); - int ret = open(is, initial, ibytes); - if (ret == -1) { - } - } - - private int get_data() { - int index = oy.buffer(CHUNKSIZE); - byte[] buffer = oy.data; - int bytes = 0; - try { - bytes = datasource.read(buffer, index, CHUNKSIZE); - } catch (Exception e) { - return OV_EREAD; - } - oy.wrote(bytes); - if (bytes == -1) { - bytes = 0; - } - return bytes; - } - - private void seek_helper(long offst) { - fseek(datasource, offst, SEEK_SET); - this.offset = offst; - oy.reset(); - } - - private int get_next_page(Page page, long boundary) { - if (boundary > 0) - boundary += offset; - while (true) { - int more; - if (boundary > 0 && offset >= boundary) - return OV_FALSE; - more = oy.pageseek(page); - if (more < 0) { - offset -= more; - } else { - if (more == 0) { - if (boundary == 0) - return OV_FALSE; - int ret = get_data(); - if (ret == 0) - return OV_EOF; - if (ret < 0) - return OV_EREAD; - } else { - int ret = (int) offset; // !!! - offset += more; - return ret; - } - } - } - } - - private int get_prev_page(Page page) throws JOrbisException { - long begin = offset; // !!! - int ret; - int offst = -1; - while (offst == -1) { - begin -= CHUNKSIZE; - if (begin < 0) - begin = 0; - seek_helper(begin); - while (offset < begin + CHUNKSIZE) { - ret = get_next_page(page, begin + CHUNKSIZE - offset); - if (ret == OV_EREAD) { - return OV_EREAD; - } - if (ret < 0) { - if (offst == -1) - throw new JOrbisException(); - break; - } else { - offst = ret; - } - } - } - seek_helper(offst); // !!! - ret = get_next_page(page, CHUNKSIZE); - if (ret < 0) { - return OV_EFAULT; - } - return offst; - } - int bisect_forward_serialno(long begin, long searched, long end, int currentno, int m) { long endsearched = end; long next = end; @@ -241,6 +267,93 @@ public class VorbisFile { return 0; } + public int bitrate(int i) { + if (i >= links) + return (-1); + if (!seekable && i != 0) + return (bitrate(0)); + if (i < 0) { + long bits = 0; + for (int j = 0; j < links; j++) { + bits += (offsets[j + 1] - dataoffsets[j]) * 8; + } + return ((int) Math.rint(bits / time_total(-1))); + } else { + if (seekable) { + // return the actual bitrate + return ((int) Math.rint((offsets[i + 1] - dataoffsets[i]) * 8 / time_total(i))); + } else { + // return nominal if set + if (vi[i].bitrate_nominal > 0) { + return vi[i].bitrate_nominal; + } else { + if (vi[i].bitrate_upper > 0) { + if (vi[i].bitrate_lower > 0) { + return (vi[i].bitrate_upper + vi[i].bitrate_lower) / 2; + } else { + return vi[i].bitrate_upper; + } + } + return (-1); + } + } + } + } + + // returns the actual bitrate since last call. returns -1 if no + // additional data to offer since last call (or at beginning of stream) + public int bitrate_instant() { + int _link = (seekable ? current_link : 0); + if (samptrack == 0) + return (-1); + int ret = (int) (bittrack / samptrack * vi[_link].rate + .5); + bittrack = 0.f; + samptrack = 0.f; + return (ret); + } + + // The helpers are over; it's all toplevel interface from here on out + // clear out the OggVorbis_File struct + int clear() { + vb.clear(); + vd.clear(); + os.clear(); + + if (vi != null && links != 0) { + for (int i = 0; i < links; i++) { + vi[i].clear(); + vc[i].clear(); + } + vi = null; + vc = null; + } + if (dataoffsets != null) + dataoffsets = null; + if (pcmlengths != null) + pcmlengths = null; + if (serialnos != null) + serialnos = null; + if (offsets != null) + offsets = null; + oy.clear(); + + return (0); + } + + public void close() throws java.io.IOException { + datasource.close(); + } + + // clear out the current logical bitstream decoder + void decode_clear() { + os.clear(); + vd.clear(); + vb.clear(); + decode_ready = false; + bittrack = 0.f; + samptrack = 0.f; + } + // uses the local ogg_stream storage in vf; this is important for // non-streaming input sources int fetch_headers(Info vi, Comment vc, int[] serialno, Page og_ptr) { @@ -300,6 +413,420 @@ public class VorbisFile { return 0; } + private int get_data() { + int index = oy.buffer(CHUNKSIZE); + byte[] buffer = oy.data; + int bytes = 0; + try { + bytes = datasource.read(buffer, index, CHUNKSIZE); + } catch (Exception e) { + return OV_EREAD; + } + oy.wrote(bytes); + if (bytes == -1) { + bytes = 0; + } + return bytes; + } + + // fetch and process a packet. Handles the case where we're at a + // bitstream boundary and dumps the decoding machine. If the decoding + // machine is unloaded, it loads it. It also keeps pcm_offset up to + // date (seek and read both use this. seek uses a special hack with + // readp). + // + // return: -1) hole in the data (lost packet) + // 0) need more date (only if readp==0)/eof + // 1) got a packet + + private int get_next_page(Page page, long boundary) { + if (boundary > 0) + boundary += offset; + while (true) { + int more; + if (boundary > 0 && offset >= boundary) + return OV_FALSE; + more = oy.pageseek(page); + if (more < 0) { + offset -= more; + } else { + if (more == 0) { + if (boundary == 0) + return OV_FALSE; + int ret = get_data(); + if (ret == 0) + return OV_EOF; + if (ret < 0) + return OV_EREAD; + } else { + int ret = (int) offset; // !!! + offset += more; + return ret; + } + } + } + } + + private int get_prev_page(Page page) throws JOrbisException { + long begin = offset; // !!! + int ret; + int offst = -1; + while (offst == -1) { + begin -= CHUNKSIZE; + if (begin < 0) + begin = 0; + seek_helper(begin); + while (offset < begin + CHUNKSIZE) { + ret = get_next_page(page, begin + CHUNKSIZE - offset); + if (ret == OV_EREAD) { + return OV_EREAD; + } + if (ret < 0) { + if (offst == -1) + throw new JOrbisException(); + break; + } else { + offst = ret; + } + } + } + seek_helper(offst); // !!! + ret = get_next_page(page, CHUNKSIZE); + if (ret < 0) { + return OV_EFAULT; + } + return offst; + } + + public Comment[] getComment() { + return vc; + } + + public Comment getComment(int link) { + if (seekable) { + if (link < 0) { + if (decode_ready) { + return vc[current_link]; + } else { + return null; + } + } else { + if (link >= links) { + return null; + } else { + return vc[link]; + } + } + } else { + if (decode_ready) { + return vc[0]; + } else { + return null; + } + } + } + + // inspects the OggVorbis file and finds/documents all the logical + // bitstreams contained in it. Tries to be tolerant of logical + // bitstream sections that are truncated/woogie. + // + // return: -1) error + // 0) OK + + public Info[] getInfo() { + return vi; + } + + public Info getInfo(int link) { + if (seekable) { + if (link < 0) { + if (decode_ready) { + return vi[current_link]; + } else { + return null; + } + } else { + if (link >= links) { + return null; + } else { + return vi[link]; + } + } + } else { + if (decode_ready) { + return vi[0]; + } else { + return null; + } + } + } + + int host_is_big_endian() { + return 1; + // short pattern = 0xbabe; + // unsigned char *bytewise = (unsigned char *)&pattern; + // if (bytewise[0] == 0xba) return 1; + // assert(bytewise[0] == 0xbe); + // return 0; + } + + private int make_decode_ready() { + if (decode_ready) + System.exit(1); + vd.synthesis_init(vi[0]); + vb.init(vd); + decode_ready = true; + return (0); + } + + // returns the bitrate for a given logical bitstream or the entire + // physical bitstream. If the file is open for random access, it will + // find the *actual* average bitrate. If the file is streaming, it + // returns the nominal bitrate (if set) else the average of the + // upper/lower bounds (if set) else -1 (unset). + // + // If you want the actual bitrate field settings, get them from the + // vorbis_info structs + + int open(InputStream is, byte[] initial, int ibytes) throws JOrbisException { + return open_callbacks(is, initial, ibytes); + } + + int open_callbacks(InputStream is, byte[] initial, int ibytes// , callbacks callbacks + ) throws JOrbisException { + int ret; + datasource = is; + + oy.init(); + + // perhaps some data was previously read into a buffer for testing + // against other stream types. Allow initialization from this + // previously read data (as we may be reading from a non-seekable + // stream) + if (initial != null) { + int index = oy.buffer(ibytes); + System.arraycopy(initial, 0, oy.data, index, ibytes); + oy.wrote(ibytes); + } + // can we seek? Stevens suggests the seek test was portable + if (is instanceof SeekableInputStream) { + ret = open_seekable(); + } else { + ret = open_nonseekable(); + } + if (ret != 0) { + datasource = null; + clear(); + } + return ret; + } + + int open_nonseekable() { + // we cannot seek. Set up a 'single' (current) logical bitstream entry + links = 1; + vi = new Info[links]; + vi[0] = new Info(); // ?? + vc = new Comment[links]; + vc[0] = new Comment(); // ?? bug? + + // Try to fetch the headers, maintaining all the storage + int[] foo = new int[1]; + if (fetch_headers(vi[0], vc[0], foo, null) == -1) + return (-1); + current_serialno = foo[0]; + make_decode_ready(); + return 0; + } + + // returns: total raw (compressed) length of content if i==-1 + // raw (compressed) length of that logical bitstream for i==0 to n + // -1 if the stream is not seekable (we can't know the length) + + int open_seekable() throws JOrbisException { + Info initial_i = new Info(); + Comment initial_c = new Comment(); + int serialno; + long end; + int ret; + int dataoffset; + Page og = new Page(); + // is this even vorbis...? + int[] foo = new int[1]; + ret = fetch_headers(initial_i, initial_c, foo, null); + serialno = foo[0]; + dataoffset = (int) offset; // !! + os.clear(); + if (ret == -1) + return (-1); + if (ret < 0) + return (ret); + // we can seek, so set out learning all about this file + seekable = true; + fseek(datasource, 0, SEEK_END); + offset = ftell(datasource); + end = offset; + // We get the offset for the last page of the physical bitstream. + // Most OggVorbis files will contain a single logical bitstream + end = get_prev_page(og); + // moer than one logical bitstream? + if (og.serialno() != serialno) { + // Chained bitstream. Bisect-search each logical bitstream + // section. Do so based on serial number only + if (bisect_forward_serialno(0, 0, end + 1, serialno, 0) < 0) { + clear(); + return OV_EREAD; + } + } else { + // Only one logical bitstream + if (bisect_forward_serialno(0, end, end + 1, serialno, 0) < 0) { + clear(); + return OV_EREAD; + } + } + prefetch_all_headers(initial_i, initial_c, dataoffset); + return 0; + } + + public int pcm_seek(long pos) { + int link = -1; + long total = pcm_total(-1); + + if (!seekable) + return (-1); // don't dump machine if we can't seek + if (pos < 0 || pos > total) { + // goto seek_error; + pcm_offset = -1; + decode_clear(); + return -1; + } + + // which bitstream section does this pcm offset occur in? + for (link = links - 1; link >= 0; link--) { + total -= pcmlengths[link]; + if (pos >= total) + break; + } + + // search within the logical bitstream for the page with the highest + // pcm_pos preceeding (or equal to) pos. There is a danger here; + // missing pages or incorrect frame number information in the + // bitstream could make our task impossible. Account for that (it + // would be an error condition) + { + long target = pos - total; + long end = offsets[link + 1]; + long begin = offsets[link]; + int best = (int) begin; + + Page og = new Page(); + while (begin < end) { + long bisect; + int ret; + + if (end - begin < CHUNKSIZE) { + bisect = begin; + } else { + bisect = (end + begin) / 2; + } + + seek_helper(bisect); + ret = get_next_page(og, end - bisect); + + if (ret == -1) { + end = bisect; + } else { + long granulepos = og.granulepos(); + if (granulepos < target) { + best = ret; // raw offset of packet with granulepos + begin = offset; // raw offset of next packet + } else { + end = bisect; + } + } + } + // found our page. seek to it (call raw_seek). + if (raw_seek(best) != 0) { + // goto seek_error; + pcm_offset = -1; + decode_clear(); + return -1; + } + } + + // verify result + if (pcm_offset >= pos) { + // goto seek_error; + pcm_offset = -1; + decode_clear(); + return -1; + } + if (pos > pcm_total(-1)) { + // goto seek_error; + pcm_offset = -1; + decode_clear(); + return -1; + } + + // discard samples until we reach the desired position. Crossing a + // logical bitstream boundary with abandon is OK. + while (pcm_offset < pos) { + int target = (int) (pos - pcm_offset); + float[][][] _pcm = new float[1][][]; + int[] _index = new int[getInfo(-1).channels]; + int samples = vd.synthesis_pcmout(_pcm, _index); + + if (samples > target) + samples = target; + vd.synthesis_read(samples); + pcm_offset += samples; + + if (samples < target) + if (process_packet(1) == 0) { + pcm_offset = pcm_total(-1); // eof + } + } + return 0; + + // seek_error: + // dump machine so we're in a known state + // pcm_offset=-1; + // decode_clear(); + // return -1; + } + + // return PCM offset (sample) of next PCM sample to be read + public long pcm_tell() { + return (pcm_offset); + } + + // seek to an offset relative to the *compressed* data. This also + // immediately sucks in and decodes pages to update the PCM cursor. It + // will cross a logical bitstream boundary, but only if it can't get + // any packets out of the tail of the bitstream we seek to (so no + // surprises). + // + // returns zero on success, nonzero on failure + + // returns: total PCM length (samples) of content if i==-1 + // PCM length (samples) of that logical bitstream for i==0 to n + // -1 if the stream is not seekable (we can't know the length) + public long pcm_total(int i) { + if (!seekable || i >= links) + return (-1); + if (i < 0) { + long acc = 0; + for (int j = 0; j < links; j++) { + acc += pcm_total(j); + } + return (acc); + } else { + return (pcmlengths[i]); + } + } + + // seek to a sample offset relative to the decompressed pcm stream + // returns zero on success, nonzero on failure + // last step of the OggVorbis_File initialization; get all the // vorbis_info structs and PCM positions. Only called by the seekable // initialization (local stream storage is hacked slightly; pay @@ -358,97 +885,6 @@ public class VorbisFile { } } - private int make_decode_ready() { - if (decode_ready) - System.exit(1); - vd.synthesis_init(vi[0]); - vb.init(vd); - decode_ready = true; - return (0); - } - - int open_seekable() throws JOrbisException { - Info initial_i = new Info(); - Comment initial_c = new Comment(); - int serialno; - long end; - int ret; - int dataoffset; - Page og = new Page(); - // is this even vorbis...? - int[] foo = new int[1]; - ret = fetch_headers(initial_i, initial_c, foo, null); - serialno = foo[0]; - dataoffset = (int) offset; // !! - os.clear(); - if (ret == -1) - return (-1); - if (ret < 0) - return (ret); - // we can seek, so set out learning all about this file - seekable = true; - fseek(datasource, 0, SEEK_END); - offset = ftell(datasource); - end = offset; - // We get the offset for the last page of the physical bitstream. - // Most OggVorbis files will contain a single logical bitstream - end = get_prev_page(og); - // moer than one logical bitstream? - if (og.serialno() != serialno) { - // Chained bitstream. Bisect-search each logical bitstream - // section. Do so based on serial number only - if (bisect_forward_serialno(0, 0, end + 1, serialno, 0) < 0) { - clear(); - return OV_EREAD; - } - } else { - // Only one logical bitstream - if (bisect_forward_serialno(0, end, end + 1, serialno, 0) < 0) { - clear(); - return OV_EREAD; - } - } - prefetch_all_headers(initial_i, initial_c, dataoffset); - return 0; - } - - int open_nonseekable() { - // we cannot seek. Set up a 'single' (current) logical bitstream entry - links = 1; - vi = new Info[links]; - vi[0] = new Info(); // ?? - vc = new Comment[links]; - vc[0] = new Comment(); // ?? bug? - - // Try to fetch the headers, maintaining all the storage - int[] foo = new int[1]; - if (fetch_headers(vi[0], vc[0], foo, null) == -1) - return (-1); - current_serialno = foo[0]; - make_decode_ready(); - return 0; - } - - // clear out the current logical bitstream decoder - void decode_clear() { - os.clear(); - vd.clear(); - vb.clear(); - decode_ready = false; - bittrack = 0.f; - samptrack = 0.f; - } - - // fetch and process a packet. Handles the case where we're at a - // bitstream boundary and dumps the decoding machine. If the decoding - // machine is unloaded, it loads it. It also keeps pcm_offset up to - // date (seek and read both use this. seek uses a special hack with - // readp). - // - // return: -1) hole in the data (lost packet) - // 0) need more date (only if readp==0)/eof - // 1) got a packet - int process_packet(int readp) { Page og = new Page(); @@ -574,246 +1010,6 @@ public class VorbisFile { } } - // The helpers are over; it's all toplevel interface from here on out - // clear out the OggVorbis_File struct - int clear() { - vb.clear(); - vd.clear(); - os.clear(); - - if (vi != null && links != 0) { - for (int i = 0; i < links; i++) { - vi[i].clear(); - vc[i].clear(); - } - vi = null; - vc = null; - } - if (dataoffsets != null) - dataoffsets = null; - if (pcmlengths != null) - pcmlengths = null; - if (serialnos != null) - serialnos = null; - if (offsets != null) - offsets = null; - oy.clear(); - - return (0); - } - - static int fseek(InputStream fis, long off, int whence) { - if (fis instanceof SeekableInputStream) { - SeekableInputStream sis = (SeekableInputStream) fis; - try { - if (whence == SEEK_SET) { - sis.seek(off); - } else if (whence == SEEK_END) { - sis.seek(sis.getLength() - off); - } else { - } - } catch (Exception e) { - } - return 0; - } - try { - if (whence == 0) { - fis.reset(); - } - fis.skip(off); - } catch (Exception e) { - return -1; - } - return 0; - } - - static long ftell(InputStream fis) { - try { - if (fis instanceof SeekableInputStream) { - SeekableInputStream sis = (SeekableInputStream) fis; - return (sis.tell()); - } - } catch (Exception e) { - } - return 0; - } - - // inspects the OggVorbis file and finds/documents all the logical - // bitstreams contained in it. Tries to be tolerant of logical - // bitstream sections that are truncated/woogie. - // - // return: -1) error - // 0) OK - - int open(InputStream is, byte[] initial, int ibytes) throws JOrbisException { - return open_callbacks(is, initial, ibytes); - } - - int open_callbacks(InputStream is, byte[] initial, int ibytes// , callbacks callbacks - ) throws JOrbisException { - int ret; - datasource = is; - - oy.init(); - - // perhaps some data was previously read into a buffer for testing - // against other stream types. Allow initialization from this - // previously read data (as we may be reading from a non-seekable - // stream) - if (initial != null) { - int index = oy.buffer(ibytes); - System.arraycopy(initial, 0, oy.data, index, ibytes); - oy.wrote(ibytes); - } - // can we seek? Stevens suggests the seek test was portable - if (is instanceof SeekableInputStream) { - ret = open_seekable(); - } else { - ret = open_nonseekable(); - } - if (ret != 0) { - datasource = null; - clear(); - } - return ret; - } - - // How many logical bitstreams in this physical bitstream? - public int streams() { - return links; - } - - // Is the FILE * associated with vf seekable? - public boolean seekable() { - return seekable; - } - - // returns the bitrate for a given logical bitstream or the entire - // physical bitstream. If the file is open for random access, it will - // find the *actual* average bitrate. If the file is streaming, it - // returns the nominal bitrate (if set) else the average of the - // upper/lower bounds (if set) else -1 (unset). - // - // If you want the actual bitrate field settings, get them from the - // vorbis_info structs - - public int bitrate(int i) { - if (i >= links) - return (-1); - if (!seekable && i != 0) - return (bitrate(0)); - if (i < 0) { - long bits = 0; - for (int j = 0; j < links; j++) { - bits += (offsets[j + 1] - dataoffsets[j]) * 8; - } - return ((int) Math.rint(bits / time_total(-1))); - } else { - if (seekable) { - // return the actual bitrate - return ((int) Math.rint((offsets[i + 1] - dataoffsets[i]) * 8 / time_total(i))); - } else { - // return nominal if set - if (vi[i].bitrate_nominal > 0) { - return vi[i].bitrate_nominal; - } else { - if (vi[i].bitrate_upper > 0) { - if (vi[i].bitrate_lower > 0) { - return (vi[i].bitrate_upper + vi[i].bitrate_lower) / 2; - } else { - return vi[i].bitrate_upper; - } - } - return (-1); - } - } - } - } - - // returns the actual bitrate since last call. returns -1 if no - // additional data to offer since last call (or at beginning of stream) - public int bitrate_instant() { - int _link = (seekable ? current_link : 0); - if (samptrack == 0) - return (-1); - int ret = (int) (bittrack / samptrack * vi[_link].rate + .5); - bittrack = 0.f; - samptrack = 0.f; - return (ret); - } - - public int serialnumber(int i) { - if (i >= links) - return (-1); - if (!seekable && i >= 0) - return (serialnumber(-1)); - if (i < 0) { - return (current_serialno); - } else { - return (serialnos[i]); - } - } - - // returns: total raw (compressed) length of content if i==-1 - // raw (compressed) length of that logical bitstream for i==0 to n - // -1 if the stream is not seekable (we can't know the length) - - public long raw_total(int i) { - if (!seekable || i >= links) - return (-1); - if (i < 0) { - long acc = 0; // bug? - for (int j = 0; j < links; j++) { - acc += raw_total(j); - } - return (acc); - } else { - return (offsets[i + 1] - offsets[i]); - } - } - - // returns: total PCM length (samples) of content if i==-1 - // PCM length (samples) of that logical bitstream for i==0 to n - // -1 if the stream is not seekable (we can't know the length) - public long pcm_total(int i) { - if (!seekable || i >= links) - return (-1); - if (i < 0) { - long acc = 0; - for (int j = 0; j < links; j++) { - acc += pcm_total(j); - } - return (acc); - } else { - return (pcmlengths[i]); - } - } - - // returns: total seconds of content if i==-1 - // seconds in that logical bitstream for i==0 to n - // -1 if the stream is not seekable (we can't know the length) - public float time_total(int i) { - if (!seekable || i >= links) - return (-1); - if (i < 0) { - float acc = 0; - for (int j = 0; j < links; j++) { - acc += time_total(j); - } - return (acc); - } else { - return ((float) (pcmlengths[i]) / vi[i].rate); - } - } - - // seek to an offset relative to the *compressed* data. This also - // immediately sucks in and decodes pages to update the PCM cursor. It - // will cross a logical bitstream boundary, but only if it can't get - // any packets out of the tail of the bitstream we seek to (so no - // surprises). - // - // returns zero on success, nonzero on failure - public int raw_seek(int pos) { if (!seekable) return (-1); // don't dump machine if we can't seek @@ -879,188 +1075,24 @@ public class VorbisFile { // return -1; } - // seek to a sample offset relative to the decompressed pcm stream - // returns zero on success, nonzero on failure - - public int pcm_seek(long pos) { - int link = -1; - long total = pcm_total(-1); - - if (!seekable) - return (-1); // don't dump machine if we can't seek - if (pos < 0 || pos > total) { - // goto seek_error; - pcm_offset = -1; - decode_clear(); - return -1; - } - - // which bitstream section does this pcm offset occur in? - for (link = links - 1; link >= 0; link--) { - total -= pcmlengths[link]; - if (pos >= total) - break; - } - - // search within the logical bitstream for the page with the highest - // pcm_pos preceeding (or equal to) pos. There is a danger here; - // missing pages or incorrect frame number information in the - // bitstream could make our task impossible. Account for that (it - // would be an error condition) - { - long target = pos - total; - long end = offsets[link + 1]; - long begin = offsets[link]; - int best = (int) begin; - - Page og = new Page(); - while (begin < end) { - long bisect; - int ret; - - if (end - begin < CHUNKSIZE) { - bisect = begin; - } else { - bisect = (end + begin) / 2; - } - - seek_helper(bisect); - ret = get_next_page(og, end - bisect); - - if (ret == -1) { - end = bisect; - } else { - long granulepos = og.granulepos(); - if (granulepos < target) { - best = ret; // raw offset of packet with granulepos - begin = offset; // raw offset of next packet - } else { - end = bisect; - } - } - } - // found our page. seek to it (call raw_seek). - if (raw_seek(best) != 0) { - // goto seek_error; - pcm_offset = -1; - decode_clear(); - return -1; - } - } - - // verify result - if (pcm_offset >= pos) { - // goto seek_error; - pcm_offset = -1; - decode_clear(); - return -1; - } - if (pos > pcm_total(-1)) { - // goto seek_error; - pcm_offset = -1; - decode_clear(); - return -1; - } - - // discard samples until we reach the desired position. Crossing a - // logical bitstream boundary with abandon is OK. - while (pcm_offset < pos) { - int target = (int) (pos - pcm_offset); - float[][][] _pcm = new float[1][][]; - int[] _index = new int[getInfo(-1).channels]; - int samples = vd.synthesis_pcmout(_pcm, _index); - - if (samples > target) - samples = target; - vd.synthesis_read(samples); - pcm_offset += samples; - - if (samples < target) - if (process_packet(1) == 0) { - pcm_offset = pcm_total(-1); // eof - } - } - return 0; - - // seek_error: - // dump machine so we're in a known state - // pcm_offset=-1; - // decode_clear(); - // return -1; - } - - // seek to a playback time relative to the decompressed pcm stream - // returns zero on success, nonzero on failure - int time_seek(float seconds) { - // translate time to PCM position and call pcm_seek - - int link = -1; - long pcm_total = pcm_total(-1); - float time_total = time_total(-1); - - if (!seekable) - return (-1); // don't dump machine if we can't seek - if (seconds < 0 || seconds > time_total) { - // goto seek_error; - pcm_offset = -1; - decode_clear(); - return -1; - } - - // which bitstream section does this time offset occur in? - for (link = links - 1; link >= 0; link--) { - pcm_total -= pcmlengths[link]; - time_total -= time_total(link); - if (seconds >= time_total) - break; - } - - // enough information to convert time offset to pcm offset - { - long target = (long) (pcm_total + (seconds - time_total) * vi[link].rate); - return (pcm_seek(target)); - } - - // seek_error: - // dump machine so we're in a known state - // pcm_offset=-1; - // decode_clear(); - // return -1; - } - // tell the current stream offset cursor. Note that seek followed by // tell will likely not give the set offset due to caching public long raw_tell() { return (offset); } - // return PCM offset (sample) of next PCM sample to be read - public long pcm_tell() { - return (pcm_offset); - } - - // return time offset (seconds) of next PCM sample to be read - public float time_tell() { - // translate time to PCM position and call pcm_seek - - int link = -1; - long pcm_total = 0; - float time_total = 0.f; - - if (seekable) { - pcm_total = pcm_total(-1); - time_total = time_total(-1); - - // which bitstream section does this time offset occur in? - for (link = links - 1; link >= 0; link--) { - pcm_total -= pcmlengths[link]; - time_total -= time_total(link); - if (pcm_offset >= pcm_total) - break; + public long raw_total(int i) { + if (!seekable || i >= links) + return (-1); + if (i < 0) { + long acc = 0; // bug? + for (int j = 0; j < links; j++) { + acc += raw_total(j); } + return (acc); + } else { + return (offsets[i + 1] - offsets[i]); } - - return ((float) time_total + (float) (pcm_offset - pcm_total) / vi[link].rate); } // link: -1) return the vorbis_info struct for the bitstream section @@ -1071,94 +1103,6 @@ public class VorbisFile { // current bitstream. NULL in the case that the machine is not // initialized - public Info getInfo(int link) { - if (seekable) { - if (link < 0) { - if (decode_ready) { - return vi[current_link]; - } else { - return null; - } - } else { - if (link >= links) { - return null; - } else { - return vi[link]; - } - } - } else { - if (decode_ready) { - return vi[0]; - } else { - return null; - } - } - } - - public Comment getComment(int link) { - if (seekable) { - if (link < 0) { - if (decode_ready) { - return vc[current_link]; - } else { - return null; - } - } else { - if (link >= links) { - return null; - } else { - return vc[link]; - } - } - } else { - if (decode_ready) { - return vc[0]; - } else { - return null; - } - } - } - - int host_is_big_endian() { - return 1; - // short pattern = 0xbabe; - // unsigned char *bytewise = (unsigned char *)&pattern; - // if (bytewise[0] == 0xba) return 1; - // assert(bytewise[0] == 0xbe); - // return 0; - } - - // up to this point, everything could more or less hide the multiple - // logical bitstream nature of chaining from the toplevel application - // if the toplevel application didn't particularly care. However, at - // the point that we actually read audio back, the multiple-section - // nature must surface: Multiple bitstream sections do not necessarily - // have to have the same number of channels or sampling rate. - // - // read returns the sequential logical bitstream number currently - // being decoded along with the PCM data in order that the toplevel - // application can take action on channel/sample rate changes. This - // number will be incremented even for streamed (non-seekable) streams - // (for seekable streams, it represents the actual logical bitstream - // index within the physical bitstream. Note that the accessor - // functions above are aware of this dichotomy). - // - // input values: buffer) a buffer to hold packed PCM data for return - // length) the byte length requested to be placed into buffer - // bigendianp) should the data be packed LSB first (0) or - // MSB first (1) - // word) word size for output. currently 1 (byte) or - // 2 (16 bit short) - // - // return values: -1) error/hole in data - // 0) EOF - // n) number of bytes of PCM actually returned. The - // below works on a packet-by-packet basis, so the - // return length is not related to the 'length' passed - // in, just guaranteed to fit. - // - // *section) set to the logical bitstream number - int read(byte[] buffer, int length, int bigendianp, int word, int sgned, int[] bitstream) { int host_endian = host_is_big_endian(); int index = 0; @@ -1278,70 +1222,142 @@ public class VorbisFile { } } - public Info[] getInfo() { - return vi; + private void seek_helper(long offst) { + fseek(datasource, offst, SEEK_SET); + this.offset = offst; + oy.reset(); } - public Comment[] getComment() { - return vc; + // Is the FILE * associated with vf seekable? + public boolean seekable() { + return seekable; } - public void close() throws java.io.IOException { - datasource.close(); + // up to this point, everything could more or less hide the multiple + // logical bitstream nature of chaining from the toplevel application + // if the toplevel application didn't particularly care. However, at + // the point that we actually read audio back, the multiple-section + // nature must surface: Multiple bitstream sections do not necessarily + // have to have the same number of channels or sampling rate. + // + // read returns the sequential logical bitstream number currently + // being decoded along with the PCM data in order that the toplevel + // application can take action on channel/sample rate changes. This + // number will be incremented even for streamed (non-seekable) streams + // (for seekable streams, it represents the actual logical bitstream + // index within the physical bitstream. Note that the accessor + // functions above are aware of this dichotomy). + // + // input values: buffer) a buffer to hold packed PCM data for return + // length) the byte length requested to be placed into buffer + // bigendianp) should the data be packed LSB first (0) or + // MSB first (1) + // word) word size for output. currently 1 (byte) or + // 2 (16 bit short) + // + // return values: -1) error/hole in data + // 0) EOF + // n) number of bytes of PCM actually returned. The + // below works on a packet-by-packet basis, so the + // return length is not related to the 'length' passed + // in, just guaranteed to fit. + // + // *section) set to the logical bitstream number + + public int serialnumber(int i) { + if (i >= links) + return (-1); + if (!seekable && i >= 0) + return (serialnumber(-1)); + if (i < 0) { + return (current_serialno); + } else { + return (serialnos[i]); + } } - class SeekableInputStream extends InputStream { - java.io.RandomAccessFile raf = null; - final String mode = "r"; + // How many logical bitstreams in this physical bitstream? + public int streams() { + return links; + } - SeekableInputStream(String file) throws java.io.IOException { - raf = new java.io.RandomAccessFile(file, mode); + // seek to a playback time relative to the decompressed pcm stream + // returns zero on success, nonzero on failure + int time_seek(float seconds) { + // translate time to PCM position and call pcm_seek + + int link = -1; + long pcm_total = pcm_total(-1); + float time_total = time_total(-1); + + if (!seekable) + return (-1); // don't dump machine if we can't seek + if (seconds < 0 || seconds > time_total) { + // goto seek_error; + pcm_offset = -1; + decode_clear(); + return -1; } - public int read() throws java.io.IOException { - return raf.read(); + // which bitstream section does this time offset occur in? + for (link = links - 1; link >= 0; link--) { + pcm_total -= pcmlengths[link]; + time_total -= time_total(link); + if (seconds >= time_total) + break; } - public int read(byte[] buf) throws java.io.IOException { - return raf.read(buf); + // enough information to convert time offset to pcm offset + { + long target = (long) (pcm_total + (seconds - time_total) * vi[link].rate); + return (pcm_seek(target)); } - public int read(byte[] buf, int s, int len) throws java.io.IOException { - return raf.read(buf, s, len); + // seek_error: + // dump machine so we're in a known state + // pcm_offset=-1; + // decode_clear(); + // return -1; + } + + // return time offset (seconds) of next PCM sample to be read + public float time_tell() { + // translate time to PCM position and call pcm_seek + + int link = -1; + long pcm_total = 0; + float time_total = 0.f; + + if (seekable) { + pcm_total = pcm_total(-1); + time_total = time_total(-1); + + // which bitstream section does this time offset occur in? + for (link = links - 1; link >= 0; link--) { + pcm_total -= pcmlengths[link]; + time_total -= time_total(link); + if (pcm_offset >= pcm_total) + break; + } } - public long skip(long n) throws java.io.IOException { - return (long) (raf.skipBytes((int) n)); - } + return ((float) time_total + (float) (pcm_offset - pcm_total) / vi[link].rate); + } - public long getLength() throws java.io.IOException { - return raf.length(); - } - - public long tell() throws java.io.IOException { - return raf.getFilePointer(); - } - - public int available() throws java.io.IOException { - return (raf.length() == raf.getFilePointer()) ? 0 : 1; - } - - public void close() throws java.io.IOException { - raf.close(); - } - - public synchronized void mark(int m) { - } - - public synchronized void reset() throws java.io.IOException { - } - - public boolean markSupported() { - return false; - } - - public void seek(long pos) throws java.io.IOException { - raf.seek(pos); + // returns: total seconds of content if i==-1 + // seconds in that logical bitstream for i==0 to n + // -1 if the stream is not seekable (we can't know the length) + public float time_total(int i) { + if (!seekable || i >= links) + return (-1); + if (i < 0) { + float acc = 0; + for (int j = 0; j < links; j++) { + acc += time_total(j); + } + return (acc); + } else { + return ((float) (pcmlengths[i]) / vi[i].rate); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java index ea3bb55a..329ae9a3 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/OpenGLObjects.java @@ -13,43 +13,22 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.WebGLVertexArray; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ class OpenGLObjects { - static class BufferGL implements IBufferGL { - - private static int hashGen = 0; - final WebGLBuffer ptr; - final int hash; - - BufferGL(WebGLBuffer ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - - public int hashCode() { - return hash; - } - - @Override - public void free() { - PlatformOpenGL._wglDeleteBuffers(this); - } - - } - static class BufferArrayGL implements IBufferArrayGL { private static int hashGen = 0; @@ -61,35 +40,60 @@ class OpenGLObjects { this.hash = ++hashGen; } - public int hashCode() { - return hash; - } - @Override public void free() { PlatformOpenGL._wglDeleteVertexArrays(this); } - } - - static class TextureGL implements ITextureGL { - - private static int hashGen = 0; - final WebGLTexture ptr; - final int hash; - - TextureGL(WebGLTexture ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - + @Override public int hashCode() { return hash; } + } + + static class BufferGL implements IBufferGL { + + private static int hashGen = 0; + final WebGLBuffer ptr; + final int hash; + + BufferGL(WebGLBuffer ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + @Override public void free() { - PlatformOpenGL._wglDeleteTextures(this); + PlatformOpenGL._wglDeleteBuffers(this); + } + + @Override + public int hashCode() { + return hash; + } + + } + + static class FramebufferGL implements IFramebufferGL { + + private static int hashGen = 0; + final WebGLFramebuffer ptr; + final int hash; + + FramebufferGL(WebGLFramebuffer ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + + @Override + public void free() { + PlatformOpenGL._wglDeleteFramebuffer(this); + } + + @Override + public int hashCode() { + return hash; } } @@ -105,102 +109,16 @@ class OpenGLObjects { this.hash = ++hashGen; } - public int hashCode() { - return hash; - } - @Override public void free() { PlatformOpenGL._wglDeleteProgram(this); } - } - - static class UniformGL implements IUniformGL { - - private static int hashGen = 0; - final WebGLUniformLocation ptr; - final int hash; - - UniformGL(WebGLUniformLocation ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - + @Override public int hashCode() { return hash; } - @Override - public void free() { - } - - } - - static class ShaderGL implements IShaderGL { - - private static int hashGen = 0; - final WebGLShader ptr; - final int hash; - - ShaderGL(WebGLShader ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - - public int hashCode() { - return hash; - } - - @Override - public void free() { - PlatformOpenGL._wglDeleteShader(this); - } - - } - - static class FramebufferGL implements IFramebufferGL { - - private static int hashGen = 0; - final WebGLFramebuffer ptr; - final int hash; - - FramebufferGL(WebGLFramebuffer ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - - public int hashCode() { - return hash; - } - - @Override - public void free() { - PlatformOpenGL._wglDeleteFramebuffer(this); - } - - } - - static class RenderbufferGL implements IRenderbufferGL { - - private static int hashGen = 0; - final WebGLRenderbuffer ptr; - final int hash; - - RenderbufferGL(WebGLRenderbuffer ptr) { - this.ptr = ptr; - this.hash = ++hashGen; - } - - public int hashCode() { - return hash; - } - - @Override - public void free() { - PlatformOpenGL._wglDeleteRenderbuffer(this); - } - } static class QueryGL implements IQueryGL { @@ -214,15 +132,107 @@ class OpenGLObjects { this.hash = ++hashGen; } - public int hashCode() { - return hash; - } - @Override public void free() { PlatformOpenGL._wglDeleteQueries(this); } + @Override + public int hashCode() { + return hash; + } + + } + + static class RenderbufferGL implements IRenderbufferGL { + + private static int hashGen = 0; + final WebGLRenderbuffer ptr; + final int hash; + + RenderbufferGL(WebGLRenderbuffer ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + + @Override + public void free() { + PlatformOpenGL._wglDeleteRenderbuffer(this); + } + + @Override + public int hashCode() { + return hash; + } + + } + + static class ShaderGL implements IShaderGL { + + private static int hashGen = 0; + final WebGLShader ptr; + final int hash; + + ShaderGL(WebGLShader ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + + @Override + public void free() { + PlatformOpenGL._wglDeleteShader(this); + } + + @Override + public int hashCode() { + return hash; + } + + } + + static class TextureGL implements ITextureGL { + + private static int hashGen = 0; + final WebGLTexture ptr; + final int hash; + + TextureGL(WebGLTexture ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + + @Override + public void free() { + PlatformOpenGL._wglDeleteTextures(this); + } + + @Override + public int hashCode() { + return hash; + } + + } + + static class UniformGL implements IUniformGL { + + private static int hashGen = 0; + final WebGLUniformLocation ptr; + final int hash; + + UniformGL(WebGLUniformLocation ptr) { + this.ptr = ptr; + this.hash = ++hashGen; + } + + @Override + public void free() { + } + + @Override + public int hashCode() { + return hash; + } + } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java index 6806aa8d..47ebfb3c 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java @@ -34,206 +34,25 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformApplication { - public static void openLink(String url) { - if(url.indexOf(':') == -1) { - url = "http://" + url; - } - URI parsedURL; - try { - parsedURL = new URI(url); - }catch(URISyntaxException ex) { - PlatformRuntime.logger.error("Refusing to open invalid URL: {}", url); - return; - } - try { - Window.current().open(parsedURL.toString(), "_blank", "noopener,noreferrer"); - }catch(Throwable t) { - PlatformRuntime.logger.error("Exception opening link!"); - } - } - - public static void setClipboard(String text) { - try { - setClipboard0(text); - }catch(Throwable t) { - PlatformRuntime.logger.error("Exception setting clipboard data"); - try { - Window.prompt("Here is the text you're trying to copy:", text); - }catch(Throwable t2) { - } - } - } - - public static String getClipboard() { - try { - return getClipboard0(); - }catch(Throwable t) { - PlatformRuntime.logger.error("Exception getting clipboard data"); - try { - String ret = Window.prompt("Please enter the text to paste:"); - return ret != null ? ret : ""; - }catch(Throwable t2) { - return ""; - } - } - } - @JSFunctor - private static interface StupidFunctionResolveString extends JSObject { - void resolveStr(String s); - } - - @Async - private static native String getClipboard0(); - - private static void getClipboard0(final AsyncCallback cb) { - final long start = PlatformRuntime.steadyTimeMillis(); - getClipboard1(new StupidFunctionResolveString() { - @Override - public void resolveStr(String s) { - if(PlatformRuntime.steadyTimeMillis() - start > 500l) { - PlatformInput.unpressCTRL = true; - } - cb.complete(s); - } - }); - } - - @JSBody(params = { "cb" }, script = "if(!navigator.clipboard) { cb(prompt(\"Please enter the text to paste:\") || \"\"); } else if (!navigator.clipboard.readText) cb(\"\"); else navigator.clipboard.readText().then(function(s) { cb(s); }, function(s) { cb(\"\"); });") - private static native void getClipboard1(StupidFunctionResolveString cb); - - @JSBody(params = { "str" }, script = "if(navigator.clipboard) navigator.clipboard.writeText(str);") - private static native void setClipboard0(String str); - - public static void setLocalStorage(String name, byte[] data) { - setLocalStorage(name, data, true); - } - - public static void setLocalStorage(String name, byte[] data, boolean hooks) { - IClientConfigAdapter adapter = PlatformRuntime.getClientConfigAdapter(); - String eagName = adapter.getLocalStorageNamespace() + "." + name; - String b64 = data != null ? Base64.encodeBase64String(data) : null; - try { - Storage s = Window.current().getLocalStorage(); - if(s != null) { - if(b64 != null) { - s.setItem(eagName, b64); - }else { - s.removeItem(eagName); - } - } - }catch(Throwable t) { - } - if(hooks) { - adapter.getHooks().callLocalStorageSavedHook(name, b64); - } - } - - public static byte[] getLocalStorage(String name) { - return getLocalStorage(name, true); - } - - public static byte[] getLocalStorage(String name, boolean hooks) { - IClientConfigAdapter adapter = PlatformRuntime.getClientConfigAdapter(); - String eagName = adapter.getLocalStorageNamespace() + "." + name; - byte[] hooked = null; - if(hooks) { - String hookedStr = adapter.getHooks().callLocalStorageLoadHook(eagName); - if(hookedStr != null) { - try { - hooked = Base64.decodeBase64(hookedStr); - }catch(Throwable t) { - PlatformRuntime.logger.error("Invalid Base64 recieved from local storage hook!"); - hooked = null; - } - } - } - if(hooked == null) { - try { - Storage s = Window.current().getLocalStorage(); - if(s != null) { - String str = s.getItem(eagName); - if(str != null) { - return Base64.decodeBase64(str); - }else { - return null; - } - }else { - return null; - } - }catch(Throwable t) { - return null; - } - }else { - return hooked; - } - } - - private static final DateFormat dateFormatSS = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); - - public static String saveScreenshot() { - PlatformOpenGL._wglBindFramebuffer(0x8D40, null); - int w = PlatformInput.getWindowWidth(); - int h = PlatformInput.getWindowHeight(); - ByteBuffer buf = PlatformRuntime.allocateByteBuffer(w * h * 4); - PlatformOpenGL._wglReadPixels(0, 0, w, h, 6408, 5121, buf); - for(int i = 3, l = buf.remaining(); i < l; i += 4) { - buf.put(i, (byte)0xFF); - } - String name = "screenshot_" + dateFormatSS.format(new Date()).toString() + ".png"; - HTMLCanvasElement copyCanvas = (HTMLCanvasElement) Window.current().getDocument().createElement("canvas"); - copyCanvas.setWidth(w); - copyCanvas.setHeight(h); - CanvasRenderingContext2D ctx = (CanvasRenderingContext2D) copyCanvas.getContext("2d", PlatformAssets.youEagler()); - putImageData(ctx, EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), w, h); - PlatformRuntime.freeByteBuffer(buf); - downloadScreenshot(copyCanvas, name, PlatformRuntime.parent); - return name; - } - - @JSBody(params = { "ctx", "buffer", "w", "h" }, script = "var imgData = ctx.createImageData(w, h); var ww = w * 4; for(var i = 0; i < h; ++i) { imgData.data.set(new Uint8ClampedArray(buffer, (h - i - 1) * ww, ww), i * ww); } ctx.putImageData(imgData, 0, 0);") - private static native JSObject putImageData(CanvasRenderingContext2D ctx, ArrayBuffer buffer, int w, int h); - - @JSBody(params = { "cvs", "name", "parentElement" }, script = - "var vigg = function(el, url){" + - "el.style.position = \"absolute\";" + - "el.style.left = \"0px\";" + - "el.style.top = \"0px\";" + - "el.style.zIndex = \"-100\";" + - "el.style.color = \"transparent\";" + - "el.innerText = \"Download Screenshot\";" + - "el.href = url;" + - "el.target = \"_blank\";" + - "el.download = name;" + - "parentElement.appendChild(el);" + - "setTimeout(function() { el.click();" + - "setTimeout(function() { parentElement.removeChild(el); }, 50);" + - "}, 50);" + - "}; setTimeout(function() { vigg(document.createElement(\"a\"), cvs.toDataURL(\"image/png\")); }, 50);") - private static native void downloadScreenshot(HTMLCanvasElement cvs, String name, HTMLElement parentElement); - - public static void showPopup(final String msg) { - Window.setTimeout(new TimerHandler() { - @Override - public void onTimer() { - Window.alert(msg); - } - }, 1); + static interface DownloadBytesBlobURLRevoke extends JSObject { + void call(); } @JSFunctor @@ -248,72 +67,59 @@ public class PlatformApplication { @Override public void accept(String name, ArrayBuffer buffer) { fileChooserHasResult = true; - if(name == null) { + if (name == null) { fileChooserResultObject = null; - }else { + } else { fileChooserResultObject = new FileChooserResult(name, TeaVMUtils.wrapByteArrayBuffer(buffer)); } } } - private static final int FILE_CHOOSER_IMPL_CORE = 0; - private static final int FILE_CHOOSER_IMPL_LEGACY = 1; - private static int fileChooserImpl = -1; - private static boolean fileChooserHasResult = false; - private static FileChooserResult fileChooserResultObject = null; - private static HTMLInputElement fileChooserElement = null; - private static HTMLElement fileChooserMobileElement = null; - - @JSBody(params = { "inputElement", "callback" }, script = - "if(inputElement.files.length > 0) {" - + "var eag = function(value){" - + "value.arrayBuffer().then(function(arr){ callback(value.name, arr); })" - + ".catch(function(){ callback(null, null); });" - + "}; eag(inputElement.files[0]); } else callback(null, null);") - private static native void getFileChooserResultNew(HTMLInputElement inputElement, FileChooserCallback callback); - - @JSBody(params = { "inputElement", "callback" }, script = - "if(inputElement.files.length > 0) {" - + "var eag = function(value, reader){" - + "reader.addEventListener(\"loadend\",function(evt){ callback(value.name, reader.result); });" - + "reader.addEventListener(\"error\",function(evt){ callback(null, null); });" - + "reader.readAsArrayBuffer(value);" - + "}; eag(inputElement.files[0], new FileReader()); } else callback(null, null);") - private static native void getFileChooserResultLegacy(HTMLInputElement inputElement, FileChooserCallback callback); - - private static void getFileChooserResult(HTMLInputElement inputElement, FileChooserCallback callback) { - if(fileChooserImpl == -1) { - fileChooserImpl = getFileChooserImpl(); - if(fileChooserImpl == FILE_CHOOSER_IMPL_LEGACY) { - PlatformRuntime.logger.info("Note: using legacy FileReader implementation because File.prototype.arrayBuffer() is not supported"); - } - } - switch(fileChooserImpl) { - case FILE_CHOOSER_IMPL_CORE: - getFileChooserResultNew(inputElement, callback); - break; - case FILE_CHOOSER_IMPL_LEGACY: - getFileChooserResultLegacy(inputElement, callback); - break; - default: - throw new UnsupportedOperationException(); - } + @JSFunctor + private static interface StupidFunctionResolveString extends JSObject { + void resolveStr(String s); } - @JSBody(params = { }, script = "return (typeof File.prototype.arrayBuffer === \"function\") ? 0 : 1;") - private static native int getFileChooserImpl(); + private static final DateFormat dateFormatSS = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); - @JSBody(params = { "inputElement", "value" }, script = "inputElement.accept = value;") - private static native void setAcceptSelection(HTMLInputElement inputElement, String value); + private static final int FILE_CHOOSER_IMPL_CORE = 0; - @JSBody(params = { "inputElement", "enable" }, script = "inputElement.multiple = enable;") - private static native void setMultipleSelection(HTMLInputElement inputElement, boolean enable); + private static final int FILE_CHOOSER_IMPL_LEGACY = 1; + + private static int fileChooserImpl = -1; + + private static boolean fileChooserHasResult = false; + + private static FileChooserResult fileChooserResultObject = null; + + private static HTMLInputElement fileChooserElement = null; + + private static HTMLElement fileChooserMobileElement = null; + + private static final String faviconURLString = "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=="; + + public static void addLogMessage(String text, boolean err) { + DebugConsoleWindow.addLogMessage(text, err); + } + + public static void clearFileChooserResult() { + fileChooserHasResult = false; + fileChooserResultObject = null; + if (fileChooserMobileElement != null) { + PlatformRuntime.parent.removeChild(fileChooserMobileElement); + fileChooserMobileElement = null; + fileChooserElement = null; + } else if (fileChooserElement != null) { + PlatformRuntime.parent.removeChild(fileChooserElement); + fileChooserElement = null; + } + } public static void displayFileChooser(String mime, String ext) { clearFileChooserResult(); final HTMLDocument doc = PlatformRuntime.doc != null ? PlatformRuntime.doc : Window.current().getDocument(); - if(PlatformInput.isLikelyMobileBrowser) { + if (PlatformInput.isLikelyMobileBrowser) { final HTMLElement element = fileChooserMobileElement = doc.createElement("div"); element.getClassList().add("_eaglercraftX_mobile_file_chooser_popup"); CSSStyleDeclaration decl = element.getStyle(); @@ -335,9 +141,9 @@ public class PlatformApplication { final HTMLElement inputElementContainer = doc.createElement("p"); final HTMLInputElement inputElement = fileChooserElement = (HTMLInputElement) doc.createElement("input"); inputElement.setType("file"); - if(mime == null) { + if (mime == null) { setAcceptSelection(inputElement, "." + ext); - }else { + } else { setAcceptSelection(inputElement, mime); } setMultipleSelection(inputElement, false); @@ -350,7 +156,7 @@ public class PlatformApplication { fileChooserButtonCancel.addEventListener("click", new EventListener() { @Override public void handleEvent(Event evt) { - if(fileChooserMobileElement == element) { + if (fileChooserMobileElement == element) { PlatformRuntime.parent.removeChild(element); fileChooserMobileElement = null; fileChooserElement = null; @@ -367,7 +173,7 @@ public class PlatformApplication { fileChooserButtonDone.addEventListener("click", new EventListener() { @Override public void handleEvent(Event evt) { - if(fileChooserMobileElement == element) { + if (fileChooserMobileElement == element) { getFileChooserResult(inputElement, FileChooserCallbackImpl.instance); PlatformRuntime.parent.removeChild(element); fileChooserMobileElement = null; @@ -379,7 +185,7 @@ public class PlatformApplication { fileChooserButtons.appendChild(fileChooserButtonDone); element.appendChild(fileChooserButtons); PlatformRuntime.parent.appendChild(element); - }else { + } else { final HTMLInputElement inputElement = fileChooserElement = (HTMLInputElement) doc.createElement("input"); inputElement.setType("file"); CSSStyleDeclaration decl = inputElement.getStyle(); @@ -387,16 +193,16 @@ public class PlatformApplication { decl.setProperty("left", "0px"); decl.setProperty("top", "0px"); decl.setProperty("z-index", "-100"); - if(mime == null) { + if (mime == null) { setAcceptSelection(inputElement, "." + ext); - }else { + } else { setAcceptSelection(inputElement, mime); } setMultipleSelection(inputElement, false); inputElement.addEventListener("change", new EventListener() { @Override public void handleEvent(Event evt) { - if(fileChooserElement == inputElement) { + if (fileChooserElement == inputElement) { getFileChooserResult(inputElement, FileChooserCallbackImpl.instance); PlatformRuntime.parent.removeChild(inputElement); fileChooserElement = null; @@ -413,84 +219,18 @@ public class PlatformApplication { } } - public static boolean fileChooserHasResult() { - return fileChooserHasResult; - } - - public static FileChooserResult getFileChooserResult() { - fileChooserHasResult = false; - FileChooserResult res = fileChooserResultObject; - fileChooserResultObject = null; - return res; - } - - private static final String faviconURLString = "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=="; - - public static String faviconURLTeaVM() { - return faviconURLString.substring(0); - } - @JSBody(params = { "doc", "str" }, script = "doc.write(str);doc.close();") private static native void documentWrite(HTMLDocument doc, String str); - public static void openCreditsPopup(String text) { - Window currentWin = PlatformRuntime.win; - - int w = (int)(850 * PlatformInput.getDPI()); - int h = (int)(700 * PlatformInput.getDPI()); - - int x = (currentWin.getScreen().getWidth() - w) / 2; - int y = (currentWin.getScreen().getHeight() - h) / 2; - - Window newWin = Window.current().open("", "_blank", "top=" + y + ",left=" + x + ",width=" + w + ",height=" + h + ",menubar=0,status=0,titlebar=0,toolbar=0"); - if(newWin == null || TeaVMUtils.isNotTruthy(newWin)) { - Window.alert("ERROR: Popup blocked!\n\nPlease make sure you have popups enabled for this site!"); - return; - } - - newWin.focus(); - documentWrite(newWin.getDocument(), "" - + "EaglercraftX 1.8 Credits" - + "" - + "
" + text + "
"); - } - - public static void clearFileChooserResult() { - fileChooserHasResult = false; - fileChooserResultObject = null; - if(fileChooserMobileElement != null) { - PlatformRuntime.parent.removeChild(fileChooserMobileElement); - fileChooserMobileElement = null; - fileChooserElement = null; - }else if(fileChooserElement != null) { - PlatformRuntime.parent.removeChild(fileChooserElement); - fileChooserElement = null; - } - } - - @JSFunctor - private static interface DownloadBytesBlobURLRevoke extends JSObject { - void call(); - } - - @JSBody(params = { "name", "url", "revokeFunc", "parentElement" }, script = - "var vigg = function(el){" + - "el.style.position = \"absolute\";" + - "el.style.left = \"0px\";" + - "el.style.top = \"0px\";" + - "el.style.zIndex = \"-100\";" + - "el.style.color = \"transparent\";" + - "el.innerText = \"Download File\";" + - "el.href = url;" + - "el.target = \"_blank\";" + - "el.download = name;" + - "parentElement.appendChild(el);" + - "setTimeout(function() { el.click();" + - "setTimeout(function() { parentElement.removeChild(el); }, 50);" + - "setTimeout(function() { revokeFunc(); }, 60000);" + - "}, 50);" + - "}; vigg(document.createElement(\"a\"));") - private static native void downloadBytesImpl(String str, String url, DownloadBytesBlobURLRevoke revokeFunc, HTMLElement parentElement); + @JSBody(params = { "name", "url", "revokeFunc", "parentElement" }, script = "var vigg = function(el){" + + "el.style.position = \"absolute\";" + "el.style.left = \"0px\";" + "el.style.top = \"0px\";" + + "el.style.zIndex = \"-100\";" + "el.style.color = \"transparent\";" + "el.innerText = \"Download File\";" + + "el.href = url;" + "el.target = \"_blank\";" + "el.download = name;" + "parentElement.appendChild(el);" + + "setTimeout(function() { el.click();" + "setTimeout(function() { parentElement.removeChild(el); }, 50);" + + "setTimeout(function() { revokeFunc(); }, 60000);" + "}, 50);" + + "}; vigg(document.createElement(\"a\"));") + private static native void downloadBytesImpl(String str, String url, DownloadBytesBlobURLRevoke revokeFunc, + HTMLElement parentElement); public static void downloadFileWithName(String str, byte[] dat) { TeaVMBlobURLHandle blobHandle = TeaVMBlobURLManager.registerNewURLByte(dat, "application/octet-stream"); @@ -502,19 +242,281 @@ public class PlatformApplication { downloadBytesImpl(str, blobHandle.toExternalForm(), blobHandle::release, PlatformRuntime.parent); } - public static void showDebugConsole() { - DebugConsoleWindow.showDebugConsole(); + @JSBody(params = { "cvs", "name", "parentElement" }, script = "var vigg = function(el, url){" + + "el.style.position = \"absolute\";" + "el.style.left = \"0px\";" + "el.style.top = \"0px\";" + + "el.style.zIndex = \"-100\";" + "el.style.color = \"transparent\";" + + "el.innerText = \"Download Screenshot\";" + "el.href = url;" + "el.target = \"_blank\";" + + "el.download = name;" + "parentElement.appendChild(el);" + "setTimeout(function() { el.click();" + + "setTimeout(function() { parentElement.removeChild(el); }, 50);" + "}, 50);" + + "}; setTimeout(function() { vigg(document.createElement(\"a\"), cvs.toDataURL(\"image/png\")); }, 50);") + private static native void downloadScreenshot(HTMLCanvasElement cvs, String name, HTMLElement parentElement); + + static void downloadURLWithNameTeaVM(String str, String url, DownloadBytesBlobURLRevoke revoker) { + downloadBytesImpl(str, url, revoker, PlatformRuntime.parent); } - public static void addLogMessage(String text, boolean err) { - DebugConsoleWindow.addLogMessage(text, err); + public static String faviconURLTeaVM() { + return faviconURLString.substring(0); + } + + public static boolean fileChooserHasResult() { + return fileChooserHasResult; + } + + public static String getClipboard() { + String ret = null; + try { + ret = getClipboard0(); + } catch (Throwable t) { + PlatformRuntime.logger.error("Exception getting clipboard data"); + } + if (ret == null) { + try { + ret = Window.prompt("Please enter the text to paste:"); + } catch (Throwable t2) { + } + } + return ret != null ? ret : ""; + } + + @Async + private static native String getClipboard0(); + + private static void getClipboard0(final AsyncCallback cb) { + final long start = PlatformRuntime.steadyTimeMillis(); + getClipboard1(new StupidFunctionResolveString() { + @Override + public void resolveStr(String s) { + if (PlatformRuntime.steadyTimeMillis() - start > 500l) { + PlatformInput.unpressCTRL = true; + } + cb.complete(s); + } + }); + } + + @JSBody(params = { + "cb" }, script = "if(!navigator.clipboard) { cb(null); } else if (!navigator.clipboard.readText) cb(null); else navigator.clipboard.readText().then(function(s) { cb((typeof s === \"string\") ? s : null); }, function(err) { cb(null); });") + private static native void getClipboard1(StupidFunctionResolveString cb); + + @JSBody(params = {}, script = "return (typeof File.prototype.arrayBuffer === \"function\") ? 0 : 1;") + private static native int getFileChooserImpl(); + + public static FileChooserResult getFileChooserResult() { + fileChooserHasResult = false; + FileChooserResult res = fileChooserResultObject; + fileChooserResultObject = null; + return res; + } + + private static void getFileChooserResult(HTMLInputElement inputElement, FileChooserCallback callback) { + if (fileChooserImpl == -1) { + fileChooserImpl = getFileChooserImpl(); + if (fileChooserImpl == FILE_CHOOSER_IMPL_LEGACY) { + PlatformRuntime.logger.info( + "Note: using legacy FileReader implementation because File.prototype.arrayBuffer() is not supported"); + } + } + switch (fileChooserImpl) { + case FILE_CHOOSER_IMPL_CORE: + getFileChooserResultNew(inputElement, callback); + break; + case FILE_CHOOSER_IMPL_LEGACY: + getFileChooserResultLegacy(inputElement, callback); + break; + default: + throw new UnsupportedOperationException(); + } + } + + @JSBody(params = { "inputElement", "callback" }, script = "if(inputElement.files.length > 0) {" + + "var eag = function(value, reader){" + + "reader.addEventListener(\"loadend\",function(evt){ callback(value.name, reader.result); });" + + "reader.addEventListener(\"error\",function(evt){ callback(null, null); });" + + "reader.readAsArrayBuffer(value);" + + "}; eag(inputElement.files[0], new FileReader()); } else callback(null, null);") + private static native void getFileChooserResultLegacy(HTMLInputElement inputElement, FileChooserCallback callback); + + @JSBody(params = { "inputElement", "callback" }, script = "if(inputElement.files.length > 0) {" + + "var eag = function(value){" + "value.arrayBuffer().then(function(arr){ callback(value.name, arr); })" + + ".catch(function(){ callback(null, null); });" + + "}; eag(inputElement.files[0]); } else callback(null, null);") + private static native void getFileChooserResultNew(HTMLInputElement inputElement, FileChooserCallback callback); + + public static byte[] getLocalStorage(String name) { + return getLocalStorage(name, true); + } + + public static byte[] getLocalStorage(String name, boolean hooks) { + IClientConfigAdapter adapter = PlatformRuntime.getClientConfigAdapter(); + String eagName = adapter.getLocalStorageNamespace() + "." + name; + byte[] hooked = null; + if (hooks) { + String hookedStr = adapter.getHooks().callLocalStorageLoadHook(eagName); + if (hookedStr != null) { + try { + hooked = Base64.decodeBase64(hookedStr); + } catch (Throwable t) { + PlatformRuntime.logger.error("Invalid Base64 recieved from local storage hook!"); + hooked = null; + } + } + } + if (hooked == null) { + try { + Storage s = Window.current().getLocalStorage(); + if (s != null) { + String str = s.getItem(eagName); + if (str != null) { + return Base64.decodeBase64(str); + } else { + return null; + } + } else { + return null; + } + } catch (Throwable t) { + return null; + } + } else { + return hooked; + } } public static boolean isShowingDebugConsole() { return DebugConsoleWindow.isShowingDebugConsole(); } + public static void openCreditsPopup(String text) { + Window currentWin = PlatformRuntime.win; + + int w = (int) (850 * PlatformInput.getDPI()); + int h = (int) (700 * PlatformInput.getDPI()); + + int x = (currentWin.getScreen().getWidth() - w) / 2; + int y = (currentWin.getScreen().getHeight() - h) / 2; + + Window newWin = Window.current().open("", "_blank", "top=" + y + ",left=" + x + ",width=" + w + ",height=" + h + + ",menubar=0,status=0,titlebar=0,toolbar=0"); + if (newWin == null || TeaVMUtils.isNotTruthy(newWin)) { + Window.alert("ERROR: Popup blocked!\n\nPlease make sure you have popups enabled for this site!"); + return; + } + + newWin.focus(); + documentWrite(newWin.getDocument(), "" + + "EaglercraftX 1.8 Credits" + + "" + "
" + text
+				+ "
"); + } + + public static void openLink(String url) { + if (url.indexOf(':') == -1) { + url = "http://" + url; + } + URI parsedURL; + try { + parsedURL = new URI(url); + } catch (URISyntaxException ex) { + PlatformRuntime.logger.error("Refusing to open invalid URL: {}", url); + return; + } + try { + Window.current().open(parsedURL.toString(), "_blank", "noopener,noreferrer"); + } catch (Throwable t) { + PlatformRuntime.logger.error("Exception opening link!"); + } + } + + @JSBody(params = { "ctx", "buffer", "w", + "h" }, script = "var imgData = ctx.createImageData(w, h); var ww = w * 4; for(var i = 0; i < h; ++i) { imgData.data.set(new Uint8ClampedArray(buffer, (h - i - 1) * ww, ww), i * ww); } ctx.putImageData(imgData, 0, 0);") + private static native void putImageData(CanvasRenderingContext2D ctx, ArrayBuffer buffer, int w, int h); + + public static String saveScreenshot() { + PlatformOpenGL._wglBindFramebuffer(0x8D40, null); + int w = PlatformInput.getWindowWidth(); + int h = PlatformInput.getWindowHeight(); + ByteBuffer buf = PlatformRuntime.allocateByteBuffer(w * h * 4); + PlatformOpenGL._wglReadPixels(0, 0, w, h, 6408, 5121, buf); + for (int i = 3, l = buf.remaining(); i < l; i += 4) { + buf.put(i, (byte) 0xFF); + } + String name = "screenshot_" + dateFormatSS.format(new Date()).toString() + ".png"; + HTMLCanvasElement copyCanvas = (HTMLCanvasElement) Window.current().getDocument().createElement("canvas"); + copyCanvas.setWidth(w); + copyCanvas.setHeight(h); + CanvasRenderingContext2D ctx = (CanvasRenderingContext2D) copyCanvas.getContext("2d", + PlatformAssets.youEagler()); + putImageData(ctx, EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), w, h); + PlatformRuntime.freeByteBuffer(buf); + downloadScreenshot(copyCanvas, name, PlatformRuntime.parent); + return name; + } + + @JSBody(params = { "inputElement", "value" }, script = "inputElement.accept = value;") + private static native void setAcceptSelection(HTMLInputElement inputElement, String value); + + public static void setClipboard(String text) { + boolean b = false; + try { + b = setClipboard0(text); + } catch (Throwable t) { + PlatformRuntime.logger.error("Exception setting clipboard data"); + } + if (!b) { + try { + Window.prompt("Here is the text you're trying to copy:", text); + } catch (Throwable t2) { + } + } + } + + @JSBody(params = { + "str" }, script = "if(navigator.clipboard) { navigator.clipboard.writeText(str); return true; } else { return false; }") + private static native boolean setClipboard0(String str); + + public static void setLocalStorage(String name, byte[] data) { + setLocalStorage(name, data, true); + } + + public static void setLocalStorage(String name, byte[] data, boolean hooks) { + IClientConfigAdapter adapter = PlatformRuntime.getClientConfigAdapter(); + String eagName = adapter.getLocalStorageNamespace() + "." + name; + String b64 = data != null ? Base64.encodeBase64String(data) : null; + try { + Storage s = Window.current().getLocalStorage(); + if (s != null) { + if (b64 != null) { + s.setItem(eagName, b64); + } else { + s.removeItem(eagName); + } + } + } catch (Throwable t) { + } + if (hooks) { + adapter.getHooks().callLocalStorageSavedHook(name, b64); + } + } + @JSBody(params = { "str" }, script = "window.minecraftServer = str;") public static native void setMCServerWindowGlobal(String str); + @JSBody(params = { "inputElement", "enable" }, script = "inputElement.multiple = enable;") + private static native void setMultipleSelection(HTMLInputElement inputElement, boolean enable); + + public static void showDebugConsole() { + DebugConsoleWindow.showDebugConsole(); + } + + public static void showPopup(final String msg) { + Window.setTimeout(new TimerHandler() { + @Override + public void onTimer() { + Window.alert(msg); + } + }, 1); + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index 3e4a4f92..db3840a6 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -27,99 +27,89 @@ import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformAssets { - + private static final byte[] MISSING_FILE = new byte[0]; - static Map assets = new HashMap<>(); + static Map assets = new HashMap<>(); + + private static HTMLCanvasElement imageLoadCanvas = null; + + private static CanvasRenderingContext2D imageLoadContext = null; + + @JSBody(params = { "ctx" }, script = "ctx.imageSmoothingEnabled = false;") + private static native void disableImageSmoothing(CanvasRenderingContext2D ctx); + + public static void freeAssetRepoTeaVM() { + assets = new HashMap<>(); + } + + public static byte[] getResourceBytes(String path) { + if (path.startsWith("/")) { + path = path.substring(1); + } + byte[] data = assets.get(path); + if (data == null && path.startsWith("assets/minecraft/lang/") && !path.endsWith(".mcmeta")) { + ArrayBuffer file = PlatformRuntime + .downloadRemoteURI(ClientMain.configLocalesFolder + "/" + path.substring(22)); + if (file != null) { + data = TeaVMUtils.wrapByteArrayBuffer(file); + assets.put(path, data); + return data; + } else { + assets.put(path, MISSING_FILE); + return null; + } + } else { + return data == MISSING_FILE ? null : data; + } + } public static boolean getResourceExists(String path) { - if(path.startsWith("/")) { + if (path.startsWith("/")) { path = path.substring(1); } byte[] ret = assets.get(path); - if(ret != null && ret != MISSING_FILE) { + if (ret != null && ret != MISSING_FILE) { return true; - }else { - if(path.startsWith("assets/minecraft/lang/") && !path.endsWith(".mcmeta")) { - ArrayBuffer file = PlatformRuntime.downloadRemoteURI( - ClientMain.configLocalesFolder + "/" + path.substring(22)); - if(file != null) { + } else { + if (path.startsWith("assets/minecraft/lang/") && !path.endsWith(".mcmeta")) { + ArrayBuffer file = PlatformRuntime + .downloadRemoteURI(ClientMain.configLocalesFolder + "/" + path.substring(22)); + if (file != null) { assets.put(path, TeaVMUtils.wrapByteArrayBuffer(file)); return true; - }else { + } else { assets.put(path, MISSING_FILE); return false; } - }else { + } else { return false; } } } - - public static byte[] getResourceBytes(String path) { - if(path.startsWith("/")) { - path = path.substring(1); - } - byte[] data = assets.get(path); - if(data == null && path.startsWith("assets/minecraft/lang/") && !path.endsWith(".mcmeta")) { - ArrayBuffer file = PlatformRuntime.downloadRemoteURI( - ClientMain.configLocalesFolder + "/" + path.substring(22)); - if(file != null) { - data = TeaVMUtils.wrapByteArrayBuffer(file); - assets.put(path, data); - return data; - }else { - assets.put(path, MISSING_FILE); - return null; - } - }else { - return data == MISSING_FILE ? null : data; - } - } - - public static ImageData loadImageFile(InputStream data) { - return loadImageFile(data, "image/png"); - } - - public static ImageData loadImageFile(InputStream data, String mime) { - byte[] b = EaglerInputStream.inputStreamToBytesQuiet(data); - if(b != null) { - return loadImageFile(b, mime); - }else { - return null; - } - } - - private static HTMLCanvasElement imageLoadCanvas = null; - private static CanvasRenderingContext2D imageLoadContext = null; - + public static ImageData loadImageFile(byte[] data) { return loadImageFile(data, "image/png"); } - - @JSBody(params = { }, script = "return { willReadFrequently: true };") - static native JSObject youEagler(); - - @JSBody(params = { "ctx" }, script = "ctx.imageSmoothingEnabled = false;") - private static native void disableImageSmoothing(CanvasRenderingContext2D ctx); - + @Async public static native ImageData loadImageFile(byte[] data, String mime); - + private static void loadImageFile(byte[] data, String mime, final AsyncCallback ret) { final Document doc = Window.current().getDocument(); final HTMLImageElement toLoad = (HTMLImageElement) doc.createElement("img"); @@ -127,30 +117,32 @@ public class PlatformAssets { toLoad.addEventListener("load", new EventListener() { @Override public void handleEvent(Event evt) { - if(imageLoadCanvas == null) { + if (imageLoadCanvas == null) { imageLoadCanvas = (HTMLCanvasElement) doc.createElement("canvas"); } - if(imageLoadCanvas.getWidth() < toLoad.getWidth()) { + if (imageLoadCanvas.getWidth() < toLoad.getWidth()) { imageLoadCanvas.setWidth(toLoad.getWidth()); } - if(imageLoadCanvas.getHeight() < toLoad.getHeight()) { + if (imageLoadCanvas.getHeight() < toLoad.getHeight()) { imageLoadCanvas.setHeight(toLoad.getHeight()); } - if(imageLoadContext == null) { + if (imageLoadContext == null) { imageLoadContext = (CanvasRenderingContext2D) imageLoadCanvas.getContext("2d", youEagler()); disableImageSmoothing(imageLoadContext); } imageLoadContext.clearRect(0, 0, toLoad.getWidth(), toLoad.getHeight()); imageLoadContext.drawImage(toLoad, 0, 0, toLoad.getWidth(), toLoad.getHeight()); - org.teavm.jso.canvas.ImageData pxlsDat = imageLoadContext.getImageData(0, 0, toLoad.getWidth(), toLoad.getHeight()); + org.teavm.jso.canvas.ImageData pxlsDat = imageLoadContext.getImageData(0, 0, toLoad.getWidth(), + toLoad.getHeight()); Uint8ClampedArray pxls = pxlsDat.getData(); int totalPixels = pxlsDat.getWidth() * pxlsDat.getHeight(); TeaVMBlobURLManager.releaseURL(src[0]); - if(pxls.getByteLength() < totalPixels << 2) { + if (pxls.getByteLength() < totalPixels << 2) { ret.complete(null); return; } - ret.complete(new ImageData(pxlsDat.getWidth(), pxlsDat.getHeight(), TeaVMUtils.wrapIntArrayBuffer(pxls.getBuffer()), true)); + ret.complete(new ImageData(pxlsDat.getWidth(), pxlsDat.getHeight(), + TeaVMUtils.wrapIntArrayBuffer(pxls.getBuffer()), true)); } }); toLoad.addEventListener("error", new EventListener() { @@ -161,14 +153,26 @@ public class PlatformAssets { } }); src[0] = TeaVMBlobURLManager.registerNewURLByte(data, mime); - if(src[0] != null) { + if (src[0] != null) { toLoad.setSrc(src[0].toExternalForm()); - }else { + } else { ret.complete(null); } } - public static void freeAssetRepoTeaVM() { - assets = new HashMap<>(); + public static ImageData loadImageFile(InputStream data) { + return loadImageFile(data, "image/png"); } + + public static ImageData loadImageFile(InputStream data, String mime) { + byte[] b = EaglerInputStream.inputStreamToBytesQuiet(data); + if (b != null) { + return loadImageFile(b, mime); + } else { + return null; + } + } + + @JSBody(params = {}, script = "return { willReadFrequently: true };") + static native JSObject youEagler(); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java index 7f878cbf..76a686f9 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAudio.java @@ -35,375 +35,316 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformAudio { - - static final Logger logger = LogManager.getLogger("BrowserAudio"); - - static AudioContext audioctx = null; - static MediaStreamAudioDestinationNode recDestNode = null; - static MediaStream recDestMediaStream = null; - static AudioBuffer silence = null; - static AudioBufferSourceNode recDestSilenceNode = null; - static GainNode micRecGain = null; - static GainNode gameRecGain = null; - private static final Map soundCache = new HashMap<>(); - private static final List activeSounds = new LinkedList<>(); - private static long cacheFreeTimer = 0l; - private static long activeFreeTimer = 0l; - private static boolean oggSupport = false; - private static boolean loadViaAudioBufferSupport = false; - private static boolean loadViaWAV32FSupport = false; - private static boolean loadViaWAV16Support = false; - - protected static class BrowserAudioResource implements IAudioResource { - - protected AudioBuffer buffer; - protected long cacheHit = 0l; - - protected BrowserAudioResource(AudioBuffer buffer) { - this.buffer = buffer; - } - - } - protected static class BrowserAudioHandle implements IAudioHandle, EventListener { - + protected final BrowserAudioResource resource; protected AudioBufferSourceNode source; protected final PannerNode panner; protected final GainNode gain; protected float pitch; + protected boolean repeat; protected boolean isPaused = false; protected boolean isEnded = false; - + protected boolean isDisposed = false; + public BrowserAudioHandle(BrowserAudioResource resource, AudioBufferSourceNode source, PannerNode panner, - GainNode gain, float pitch) { + GainNode gain, float pitch, boolean repeat) { this.resource = resource; this.source = source; this.panner = panner; this.gain = gain; this.pitch = pitch; - source.setOnEnded(this); + this.repeat = repeat; + TeaVMUtils.addEventListener(source, "ended", this); + } + + private void dispose() { + if (!isDisposed) { + isDisposed = true; + gain.disconnect(); + } + } + + @Override + public void end() { + if (!isEnded) { + isEnded = true; + source.stop(); + } + } + + @Override + public void gain(float f) { + if (panner != null) { + float v1 = f * 16.0f; + if (v1 < 16.0f) + v1 = 16.0f; + panner.setMaxDistance(v1); + } + float v2 = f; + if (v2 > 1.0f) + v2 = 1.0f; + gain.getGain().setValue(v2); + } + + @Override + public void handleEvent(MediaEvent evt) { + isEnded = true; + } + + @Override + public void move(float x, float y, float z) { + if (panner != null) { + panner.setPosition(x, y, z); + } } @Override public void pause(boolean setPaused) { - if(setPaused) { - if(!isPaused) { + if (setPaused) { + if (!isPaused) { isPaused = true; source.getPlaybackRate().setValue(0.0f); } - }else { - if(isPaused) { + } else { + if (isPaused) { isPaused = false; source.getPlaybackRate().setValue(pitch); } } } + @Override + public void pitch(float f) { + pitch = f; + if (!isPaused) { + source.getPlaybackRate().setValue(pitch); + } + } + + @Override + public void repeat(boolean en) { + repeat = en; + if (!isEnded) { + source.setLoop(en); + } + } + @Override public void restart() { - if(isEnded) { + if (isEnded) { isEnded = false; isPaused = false; AudioBufferSourceNode src = audioctx.createBufferSource(); resource.cacheHit = PlatformRuntime.steadyTimeMillis(); src.setBuffer(resource.buffer); src.getPlaybackRate().setValue(pitch); + src.setLoop(repeat); source.disconnect(); src.connect(panner == null ? gain : panner); + if (isDisposed) { + isDisposed = false; + activeSounds.add(this); + gain.connect(audioctx.getDestination()); + if (gameRecGain != null) { + gain.connect(gameRecGain); + } + } source = src; source.start(); - }else { + } else { + isPaused = false; source.getPlaybackRate().setValue(pitch); source.start(0.0); } } - @Override - public void move(float x, float y, float z) { - if(panner != null) { - panner.setPosition(x, y, z); - } - } - - @Override - public void pitch(float f) { - pitch = f; - if(!isPaused) { - source.getPlaybackRate().setValue(pitch); - } - } - - @Override - public void gain(float f) { - if(panner != null) { - float v1 = f * 16.0f; - if(v1 < 16.0f) v1 = 16.0f; - panner.setMaxDistance(v1); - } - float v2 = f; - if(v2 > 1.0f) v2 = 1.0f; - gain.getGain().setValue(v2); - } - - @Override - public void end() { - if(!isEnded) { - isEnded = true; - source.stop(); - } - } - @Override public boolean shouldFree() { return isEnded; } - - @Override - public void handleEvent(MediaEvent evt) { - isEnded = true; - } - } - - static void initialize() { - oggSupport = false; - loadViaAudioBufferSupport = false; - loadViaWAV32FSupport = false; - loadViaWAV16Support = false; - - try { - audioctx = AudioContext.create(); - }catch(Throwable t) { - audioctx = null; - logger.error("Could not initialize audio context!"); - logger.error(t); - return; + + protected static class BrowserAudioResource implements IAudioResource { + + protected AudioBuffer buffer; + protected long cacheHit = 0l; + + protected BrowserAudioResource(AudioBuffer buffer) { + this.buffer = buffer; } - - detectOGGSupport(); - - if(!oggSupport) { - loadViaAudioBufferSupport = detectLoadViaAudioBufferSupport(audioctx); - if(!loadViaAudioBufferSupport) { - logger.warn("Missing AudioContext buffer from Float32Array support, attempting to use WAV files as a container to load raw PCM data"); - detectWAVFallbackSupport(); - if(!loadViaWAV32FSupport && !loadViaWAV16Support) { - try { - audioctx.close(); - }catch(Throwable t) { - } - audioctx = null; - logger.error("Audio context is missing some required features!"); + + } + + static final Logger logger = LogManager.getLogger("BrowserAudio"); + static AudioContext audioctx = null; + static MediaStreamAudioDestinationNode recDestNode = null; + static MediaStream recDestMediaStream = null; + static AudioBuffer silence = null; + static AudioBufferSourceNode recDestSilenceNode = null; + static GainNode micRecGain = null; + static GainNode gameRecGain = null; + + private static final Map soundCache = new HashMap<>(); + private static final List activeSounds = new LinkedList<>(); + private static long cacheFreeTimer = 0l; + private static long activeFreeTimer = 0l; + private static boolean oggSupport = false; + private static boolean loadViaAudioBufferSupport = false; + + private static boolean loadViaWAV32FSupport = false; + + private static boolean loadViaWAV16Support = false; + + public static boolean available() { + return audioctx != null; + } + + public static IAudioHandle beginPlayback(IAudioResource track, float x, float y, float z, float volume, float pitch, + boolean repeat) { + BrowserAudioResource internalTrack = (BrowserAudioResource) track; + internalTrack.cacheHit = PlatformRuntime.steadyTimeMillis(); + + AudioBufferSourceNode src = audioctx.createBufferSource(); + src.setBuffer(internalTrack.buffer); + src.getPlaybackRate().setValue(pitch); + src.setLoop(repeat); + + PannerNode panner = audioctx.createPanner(); + panner.setPosition(x, y, z); + float v1 = volume * 16.0f; + if (v1 < 16.0f) + v1 = 16.0f; + panner.setMaxDistance(v1); + panner.setRolloffFactor(1.0f); + panner.setDistanceModel("linear"); + panner.setPanningModel("HRTF"); + panner.setConeInnerAngle(360.0f); + panner.setConeOuterAngle(0.0f); + panner.setConeOuterGain(0.0f); + panner.setOrientation(0.0f, 1.0f, 0.0f); + + GainNode gain = audioctx.createGain(); + float v2 = volume; + if (v2 > 1.0f) + v2 = 1.0f; + gain.getGain().setValue(v2); + + src.connect(panner); + panner.connect(gain); + gain.connect(audioctx.getDestination()); + if (gameRecGain != null) { + gain.connect(gameRecGain); + } + + src.start(); + + BrowserAudioHandle ret = new BrowserAudioHandle(internalTrack, src, panner, gain, pitch, repeat); + activeSounds.add(ret); + return ret; + } + + public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch, boolean repeat) { + BrowserAudioResource internalTrack = (BrowserAudioResource) track; + internalTrack.cacheHit = PlatformRuntime.steadyTimeMillis(); + + AudioBufferSourceNode src = audioctx.createBufferSource(); + src.setBuffer(internalTrack.buffer); + src.getPlaybackRate().setValue(pitch); + src.setLoop(repeat); + + GainNode gain = audioctx.createGain(); + float v2 = volume; + if (v2 > 1.0f) + v2 = 1.0f; + gain.getGain().setValue(v2); + + src.connect(gain); + gain.connect(audioctx.getDestination()); + if (gameRecGain != null) { + gain.connect(gameRecGain); + } + + src.start(); + + BrowserAudioHandle ret = new BrowserAudioHandle(internalTrack, src, null, gain, pitch, repeat); + activeSounds.add(ret); + return ret; + } + + public static void clearAudioCache() { + long millis = PlatformRuntime.steadyTimeMillis(); + if (millis - cacheFreeTimer > 30000l) { + cacheFreeTimer = millis; + Iterator itr = soundCache.values().iterator(); + while (itr.hasNext()) { + if (millis - itr.next().cacheHit > 600000l) { // 10 minutes + itr.remove(); } } } - - PlatformInput.clearEvenBuffers(); - - } - - @JSBody(params = { "ctx" }, script = "var tmpBuf = ctx.createBuffer(2, 16, 16000); return (typeof tmpBuf.copyToChannel === \"function\");") - private static native boolean detectLoadViaAudioBufferSupport(AudioContext ctx); - - private static void detectOGGSupport() { - byte[] fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_ogg.dat"); - - if(((TeaVMClientConfigAdapter)PlatformRuntime.getClientConfigAdapter()).isUseJOrbisAudioDecoderTeaVM()) { - logger.info("Note: Using embedded JOrbis OGG decoder"); - oggSupport = false; - }else { - try { - Int8Array arr = Int8Array.create(fileData.length); - arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); - AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); - if(buffer == null || buffer.getLength() == 0) { - throw new RuntimeException(); - } - oggSupport = true; - }catch(Throwable t) { - oggSupport = false; - logger.error("OGG file support detected as false! Using embedded JOrbis OGG decoder"); - } - } - } - - private static void detectWAVFallbackSupport() { - byte[] fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_wav32f.dat"); - - try { - Int8Array arr = Int8Array.create(fileData.length); - arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); - AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); - if(buffer == null || buffer.getLength() == 0) { - throw new RuntimeException(); - } - loadViaWAV32FSupport = true; - return; - }catch(Throwable t) { - loadViaWAV32FSupport = false; - logger.error("Could not load a 32-bit floating point WAV file, trying to use 16-bit integers"); - } - - fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_wav16.dat"); - - try { - Int8Array arr = Int8Array.create(fileData.length); - arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); - AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); - if(buffer == null || buffer.getLength() == 0) { - throw new RuntimeException(); - } - loadViaWAV16Support = true; - return; - }catch(Throwable t) { - loadViaWAV16Support = false; - logger.error("Could not load a 16-bit integer WAV file, this browser is not supported"); - } - } - - static MediaStream initRecordingStream(float gameVol, float micVol) { - if(recDestMediaStream != null) { - return recDestMediaStream; - } - try { - if(silence == null) { - silence = audioctx.createBuffer(1, 1, 48000); - silence.copyToChannel(new float[] { 0 }, 0); - } - recDestNode = audioctx.createMediaStreamDestination(); - recDestSilenceNode = audioctx.createBufferSource(); - recDestSilenceNode.setBuffer(silence); - recDestSilenceNode.setLoop(true); - recDestSilenceNode.start(); - recDestSilenceNode.connect(recDestNode); - if(micVol > 0.0f) { - MediaStream mic = PlatformScreenRecord.getMic(); - if (mic != null) { - micRecGain = audioctx.createGain(); - micRecGain.getGain().setValue(micVol); - audioctx.createMediaStreamSource(mic).connect(micRecGain); - micRecGain.connect(recDestNode); + if (millis - activeFreeTimer > 700l) { + activeFreeTimer = millis; + Iterator itr = activeSounds.iterator(); + while (itr.hasNext()) { + BrowserAudioHandle h = itr.next(); + if (h.shouldFree()) { + itr.remove(); + h.dispose(); } } - gameRecGain = audioctx.createGain(); - gameRecGain.getGain().setValue(gameVol); - for(BrowserAudioHandle handle : activeSounds) { - if(handle.panner != null) { - handle.panner.connect(gameRecGain); - }else { - handle.gain.connect(gameRecGain); + } + } + + @Async + public static native AudioBuffer decodeAudioBrowserAsync(ArrayBuffer buffer, String errorFileName); + + private static void decodeAudioBrowserAsync(ArrayBuffer buffer, final String errorFileName, + final AsyncCallback cb) { + audioctx.decodeAudioData(buffer, new DecodeSuccessCallback() { + @Override + public void onSuccess(AudioBuffer decodedData) { + cb.complete(decodedData); + } + }, new DecodeErrorCallback() { + @Override + public void onError(JSObject error) { + if (errorFileName != null) { + logger.error("Could not load audio: {}", errorFileName); } + cb.complete(null); } - PlatformVoiceClient.addRecordingDest(gameRecGain); - gameRecGain.connect(recDestNode); - recDestMediaStream = recDestNode.getStream(); - return recDestMediaStream; - }catch(Throwable t) { - destroyRecordingStream(); - throw t; - } + }); } - static void destroyRecordingStream() { - if(recDestSilenceNode != null) { - try { - recDestSilenceNode.disconnect(); - }catch(Throwable t) { - } - recDestSilenceNode = null; - } - if(micRecGain != null) { - try { - micRecGain.disconnect(); - }catch(Throwable t) { - } - micRecGain = null; - } - if(gameRecGain != null) { - try { - gameRecGain.disconnect(); - }catch(Throwable t) { - } - for(BrowserAudioHandle handle : activeSounds) { - try { - if(handle.panner != null) { - handle.panner.disconnect(gameRecGain); - }else { - handle.gain.disconnect(gameRecGain); - } - }catch(Throwable t) { - } - } - PlatformVoiceClient.removeRecordingDest(gameRecGain); - gameRecGain = null; - } - recDestNode = null; - recDestMediaStream = null; - } - - public static IAudioResource loadAudioData(String filename, boolean holdInCache) { - BrowserAudioResource buffer = soundCache.get(filename); - if(buffer == null) { - byte[] file = PlatformAssets.getResourceBytes(filename); - if(file == null) return null; - buffer = new BrowserAudioResource(decodeAudioData(file, filename)); - if(holdInCache) { - soundCache.put(filename, buffer); - } - } - if(buffer.buffer != null) { - buffer.cacheHit = PlatformRuntime.steadyTimeMillis(); - return buffer; - }else { - return null; - } - } - - public static IAudioResource loadAudioDataNew(String filename, boolean holdInCache, IAudioCacheLoader loader) { - BrowserAudioResource buffer = soundCache.get(filename); - if(buffer == null) { - byte[] file = loader.loadFile(filename); - if(file == null) return null; - buffer = new BrowserAudioResource(decodeAudioData(file, filename)); - if(holdInCache) { - soundCache.put(filename, buffer); - } - } - if(buffer.buffer != null) { - buffer.cacheHit = PlatformRuntime.steadyTimeMillis(); - return buffer; - }else { - return null; - } - } - private static AudioBuffer decodeAudioData(byte[] data, String errorFileName) { - if(data == null) { + if (data == null) { return null; } - if(oggSupport) { + if (oggSupport) { // browsers complain if we don't copy the array Int8Array arr = Int8Array.create(data.length); arr.set(TeaVMUtils.unwrapByteArray(data), 0); return decodeAudioBrowserAsync(arr.getBuffer(), errorFileName); - }else { - if(data.length > 4 && data[0] == (byte)0x4F && data[1] == (byte)0x67 && data[2] == (byte)0x67 && data[3] == (byte)0x53) { + } else { + if (data.length > 4 && data[0] == (byte) 0x4F && data[1] == (byte) 0x67 && data[2] == (byte) 0x67 + && data[3] == (byte) 0x53) { return JOrbisAudioBufferDecoder.decodeAudioJOrbis(audioctx, data, errorFileName, loadViaAudioBufferSupport ? JOrbisAudioBufferDecoder.LOAD_VIA_AUDIOBUFFER : (loadViaWAV32FSupport ? JOrbisAudioBufferDecoder.LOAD_VIA_WAV32F @@ -415,123 +356,238 @@ public class PlatformAudio { } } } - - @Async - public static native AudioBuffer decodeAudioBrowserAsync(ArrayBuffer buffer, String errorFileName); - - private static void decodeAudioBrowserAsync(ArrayBuffer buffer, final String errorFileName, final AsyncCallback cb) { - audioctx.decodeAudioData(buffer, new DecodeSuccessCallback() { - @Override - public void onSuccess(AudioBuffer decodedData) { - cb.complete(decodedData); - } - }, new DecodeErrorCallback() { - @Override - public void onError(JSObject error) { - if(errorFileName != null) { - logger.error("Could not load audio: {}", errorFileName); - } - cb.complete(null); - } - }); + + static void destroy() { + flushAudioCache(); + if (audioctx != null) { + audioctx.close(); + audioctx = null; + recDestNode = null; + recDestMediaStream = null; + silence = null; + recDestSilenceNode = null; + micRecGain = null; + gameRecGain = null; + } } - public static void clearAudioCache() { - long millis = PlatformRuntime.steadyTimeMillis(); - if(millis - cacheFreeTimer > 30000l) { - cacheFreeTimer = millis; - Iterator itr = soundCache.values().iterator(); - while(itr.hasNext()) { - if(millis - itr.next().cacheHit > 600000l) { // 10 minutes - itr.remove(); + static void destroyRecordingStream() { + if (recDestSilenceNode != null) { + try { + recDestSilenceNode.disconnect(); + } catch (Throwable t) { + } + recDestSilenceNode = null; + } + if (micRecGain != null) { + try { + micRecGain.disconnect(); + } catch (Throwable t) { + } + micRecGain = null; + } + if (gameRecGain != null) { + try { + gameRecGain.disconnect(); + } catch (Throwable t) { + } + for (BrowserAudioHandle handle : activeSounds) { + try { + handle.gain.disconnect(gameRecGain); + } catch (Throwable t) { } } + PlatformVoiceClient.removeRecordingDest(gameRecGain); + gameRecGain = null; + } + recDestNode = null; + recDestMediaStream = null; + } + + @JSBody(params = { + "ctx" }, script = "var tmpBuf = ctx.createBuffer(2, 16, 16000); return (typeof tmpBuf.copyToChannel === \"function\");") + private static native boolean detectLoadViaAudioBufferSupport(AudioContext ctx); + + private static void detectOGGSupport() { + if (((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()).isUseJOrbisAudioDecoderTeaVM()) { + logger.info("Note: Using embedded JOrbis OGG decoder"); + oggSupport = false; + } else { + byte[] fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_ogg.dat"); + try { + Int8Array arr = Int8Array.create(fileData.length); + arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); + AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); + if (buffer == null || buffer.getLength() == 0) { + throw new RuntimeException(); + } + oggSupport = true; + } catch (Throwable t) { + oggSupport = false; + logger.error("OGG file support detected as false! Using embedded JOrbis OGG decoder"); + } } - if(millis - activeFreeTimer > 700l) { - activeFreeTimer = millis; - Iterator itr = activeSounds.iterator(); - while(itr.hasNext()) { - if(itr.next().shouldFree()) { - itr.remove(); - } + } + + private static void detectWAVFallbackSupport() { + byte[] fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_wav32f.dat"); + + try { + Int8Array arr = Int8Array.create(fileData.length); + arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); + AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); + if (buffer == null || buffer.getLength() == 0) { + throw new RuntimeException(); } + loadViaWAV32FSupport = true; + return; + } catch (Throwable t) { + loadViaWAV32FSupport = false; + logger.error("Could not load a 32-bit floating point WAV file, trying to use 16-bit integers"); + } + + fileData = EagRuntime.getRequiredResourceBytes("/assets/eagler/audioctx_test_wav16.dat"); + + try { + Int8Array arr = Int8Array.create(fileData.length); + arr.set(TeaVMUtils.unwrapByteArray(fileData), 0); + AudioBuffer buffer = decodeAudioBrowserAsync(arr.getBuffer(), null); + if (buffer == null || buffer.getLength() == 0) { + throw new RuntimeException(); + } + loadViaWAV16Support = true; + return; + } catch (Throwable t) { + loadViaWAV16Support = false; + logger.error("Could not load a 16-bit integer WAV file, this browser is not supported"); } } public static void flushAudioCache() { soundCache.clear(); + Iterator itr = activeSounds.iterator(); + while (itr.hasNext()) { + itr.next().dispose(); + } activeSounds.clear(); } - - public static boolean available() { - return audioctx != null; - } - - public static IAudioHandle beginPlayback(IAudioResource track, float x, float y, float z, - float volume, float pitch) { - BrowserAudioResource internalTrack = (BrowserAudioResource) track; - internalTrack.cacheHit = PlatformRuntime.steadyTimeMillis(); - - AudioBufferSourceNode src = audioctx.createBufferSource(); - src.setBuffer(internalTrack.buffer); - src.getPlaybackRate().setValue(pitch); - - PannerNode panner = audioctx.createPanner(); - panner.setPosition(x, y, z); - float v1 = volume * 16.0f; - if(v1 < 16.0f) v1 = 16.0f; - panner.setMaxDistance(v1); - panner.setRolloffFactor(1.0f); - panner.setDistanceModel("linear"); - panner.setPanningModel("HRTF"); - panner.setConeInnerAngle(360.0f); - panner.setConeOuterAngle(0.0f); - panner.setConeOuterGain(0.0f); - panner.setOrientation(0.0f, 1.0f, 0.0f); - - GainNode gain = audioctx.createGain(); - float v2 = volume; - if(v2 > 1.0f) v2 = 1.0f; - gain.getGain().setValue(v2); - - src.connect(panner); - panner.connect(gain); - gain.connect(audioctx.getDestination()); - if(gameRecGain != null) { - gain.connect(gameRecGain); + + static void initialize() { + oggSupport = false; + loadViaAudioBufferSupport = false; + loadViaWAV32FSupport = false; + loadViaWAV16Support = false; + + try { + audioctx = AudioContext.create(); + } catch (Throwable t) { + audioctx = null; + logger.error("Could not initialize audio context!"); + logger.error(t); + return; } - src.start(); - - BrowserAudioHandle ret = new BrowserAudioHandle(internalTrack, src, panner, gain, pitch); - activeSounds.add(ret); - return ret; + detectOGGSupport(); + + if (!oggSupport) { + loadViaAudioBufferSupport = detectLoadViaAudioBufferSupport(audioctx); + if (!loadViaAudioBufferSupport) { + logger.warn( + "Missing AudioContext buffer from Float32Array support, attempting to use WAV files as a container to load raw PCM data"); + detectWAVFallbackSupport(); + if (!loadViaWAV32FSupport && !loadViaWAV16Support) { + try { + audioctx.close(); + } catch (Throwable t) { + } + audioctx = null; + logger.error("Audio context is missing some required features!"); + } + } + } + + PlatformInput.clearEvenBuffers(); + } - public static IAudioHandle beginPlaybackStatic(IAudioResource track, float volume, float pitch) { - BrowserAudioResource internalTrack = (BrowserAudioResource) track; - internalTrack.cacheHit = PlatformRuntime.steadyTimeMillis(); - - AudioBufferSourceNode src = audioctx.createBufferSource(); - src.setBuffer(internalTrack.buffer); - src.getPlaybackRate().setValue(pitch); - - GainNode gain = audioctx.createGain(); - float v2 = volume; - if(v2 > 1.0f) v2 = 1.0f; - gain.getGain().setValue(v2); - - src.connect(gain); - gain.connect(audioctx.getDestination()); - if(gameRecGain != null) { - gain.connect(gameRecGain); + static MediaStream initRecordingStream(float gameVol, float micVol) { + if (recDestMediaStream != null) { + return recDestMediaStream; + } + try { + if (silence == null) { + silence = audioctx.createBuffer(1, 1, 48000); + silence.copyToChannel(new float[] { 0 }, 0); + } + recDestNode = audioctx.createMediaStreamDestination(); + recDestSilenceNode = audioctx.createBufferSource(); + recDestSilenceNode.setBuffer(silence); + recDestSilenceNode.setLoop(true); + recDestSilenceNode.start(); + recDestSilenceNode.connect(recDestNode); + if (micVol > 0.0f) { + MediaStream mic = PlatformScreenRecord.getMic(); + if (mic != null) { + micRecGain = audioctx.createGain(); + micRecGain.getGain().setValue(micVol); + audioctx.createMediaStreamSource(mic).connect(micRecGain); + micRecGain.connect(recDestNode); + } + } + gameRecGain = audioctx.createGain(); + gameRecGain.getGain().setValue(gameVol); + for (BrowserAudioHandle handle : activeSounds) { + try { + handle.gain.connect(gameRecGain); + } catch (Throwable t) { + } + } + PlatformVoiceClient.addRecordingDest(gameRecGain); + gameRecGain.connect(recDestNode); + recDestMediaStream = recDestNode.getStream(); + return recDestMediaStream; + } catch (Throwable t) { + destroyRecordingStream(); + throw t; + } + } + + public static IAudioResource loadAudioData(String filename, boolean holdInCache) { + BrowserAudioResource buffer = soundCache.get(filename); + if (buffer == null) { + byte[] file = PlatformAssets.getResourceBytes(filename); + if (file == null) + return null; + buffer = new BrowserAudioResource(decodeAudioData(file, filename)); + if (holdInCache) { + soundCache.put(filename, buffer); + } + } + if (buffer.buffer != null) { + buffer.cacheHit = PlatformRuntime.steadyTimeMillis(); + return buffer; + } else { + return null; + } + } + + public static IAudioResource loadAudioDataNew(String filename, boolean holdInCache, IAudioCacheLoader loader) { + BrowserAudioResource buffer = soundCache.get(filename); + if (buffer == null) { + byte[] file = loader.loadFile(filename); + if (file == null) + return null; + buffer = new BrowserAudioResource(decodeAudioData(file, filename)); + if (holdInCache) { + soundCache.put(filename, buffer); + } + } + if (buffer.buffer != null) { + buffer.cacheHit = PlatformRuntime.steadyTimeMillis(); + return buffer; + } else { + return null; } - - src.start(); - - BrowserAudioHandle ret = new BrowserAudioHandle(internalTrack, src, null, gain, pitch); - activeSounds.add(ret); - return ret; } public static void setListener(float x, float y, float z, float pitchDegrees, float yawDegrees) { @@ -544,18 +600,4 @@ public class PlatformAudio { l.setOrientation(-var3 * var4, -var5, -var2 * var4, 0.0f, 1.0f, 0.0f); } - static void destroy() { - flushAudioCache(); - if(audioctx != null) { - audioctx.close(); - audioctx = null; - recDestNode = null; - recDestMediaStream = null; - silence = null; - recDestSilenceNode = null; - micRecGain = null; - gameRecGain = null; - } - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java index 3c391799..a01b5f82 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformFilesystem.java @@ -7,30 +7,25 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformFilesystem { - private static final Logger logger = LogManager.getLogger("PlatformFilesystem"); - - public static IEaglerFilesystem initializePersist(String dbName) { - try { - return IndexedDBFilesystem.createFilesystem(dbName); - }catch(Throwable t) { - logger.error("Could not open IndexedDB filesystem: {}", dbName); - logger.error(t); - return null; + public static class FilesystemDatabaseInitializationException extends EaglerFileSystemException { + public FilesystemDatabaseInitializationException(String message) { + super(message); } } @@ -40,9 +35,15 @@ public class PlatformFilesystem { } } - public static class FilesystemDatabaseInitializationException extends EaglerFileSystemException { - public FilesystemDatabaseInitializationException(String message) { - super(message); + private static final Logger logger = LogManager.getLogger("PlatformFilesystem"); + + public static IEaglerFilesystem initializePersist(String dbName) { + try { + return IndexedDBFilesystem.createFilesystem(dbName); + } catch (Throwable t) { + logger.error("Could not open IndexedDB filesystem: {}", dbName); + logger.error(t); + return null; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java index 585ca93b..06ee9fe0 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java @@ -7,11 +7,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.Touch; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.TouchEvent; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.VisualViewport; - import org.teavm.interop.Async; import org.teavm.interop.AsyncCallback; import org.teavm.jso.JSBody; @@ -37,83 +32,53 @@ import org.teavm.jso.gamepad.Gamepad; import org.teavm.jso.gamepad.GamepadButton; import org.teavm.jso.gamepad.GamepadEvent; -import net.lax1dude.eaglercraft.v1_8.Display; -import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain; import net.lax1dude.eaglercraft.v1_8.internal.teavm.EarlyLoadScreen; import net.lax1dude.eaglercraft.v1_8.internal.teavm.InputEvent; import net.lax1dude.eaglercraft.v1_8.internal.teavm.LegacyKeycodeTranslator; import net.lax1dude.eaglercraft.v1_8.internal.teavm.OffsetTouch; import net.lax1dude.eaglercraft.v1_8.internal.teavm.SortedTouchEvent; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TouchEvent; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.VisualViewport; import net.lax1dude.eaglercraft.v1_8.internal.teavm.WebGLBackBuffer; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformInput { - private static Window win = null; - private static HTMLElement parent = null; - private static HTMLCanvasElement canvas = null; - private static HTMLElement touchKeyboardOpenZone = null; - private static int touchOpenZoneX = 0; - private static int touchOpenZoneY = 0; - private static int touchOpenZoneW = 0; - private static int touchOpenZoneH = 0; - private static HTMLFormElement touchKeyboardForm = null; - private static HTMLInputElement touchKeyboardField = null; - private static boolean shownTouchKeyboardEventWarning = false; - private static boolean shownLegacyTouchKeyboardWarning = false; - private static boolean showniOSReturnTouchKeyboardWarning = false; - private static double lastTouchKeyboardEvtA = 0.0; - private static double lastTouchKeyboardEvtB = 0.0; - private static double lastTouchKeyboardEvtC = 0.0; - - private static EventListener contextmenu = null; - private static EventListener mousedown = null; - private static EventListener mouseup = null; - private static EventListener mousemove = null; - private static EventListener mouseenter = null; - private static EventListener mouseleave = null; - private static EventListener touchstart = null; - private static EventListener touchend = null; - private static EventListener touchmove = null; - private static EventListener touchcancel = null; - private static EventListener gamepadconnected = null; - private static EventListener gamepaddisconnected = null; - private static EventListener keydown = null; - private static EventListener keyup = null; - private static EventListener touchKeyboardOpenZone_touchstart = null; - private static EventListener touchKeyboardOpenZone_touchend = null; - private static EventListener touchKeyboardOpenZone_touchmove = null; - private static EventListener wheel = null; - private static EventListener focus = null; - private static EventListener blur = null; - private static EventListener pointerlock = null; - - private static Map keyCodeTranslatorMap = null; - - public static Map getKeyCodeTranslatorMapTeaVM() { - return keyCodeTranslatorMap; + @JSFunctor + private static interface KeyboardLayoutDone extends JSObject { + void call(); } - private static final List pastedStrings = new LinkedList<>(); + @JSFunctor + private static interface KeyboardLayoutIterator extends JSObject { + void call(String key, String val); + } - private static final int EVENT_KEY_DOWN = 0; - private static final int EVENT_KEY_UP = 1; - private static final int EVENT_KEY_REPEAT = 2; + private static interface MobilePressAnyKeyHandler { + void call(boolean enterBootMenu); + } + + @JSFunctor + private static interface UnloadCallback extends JSObject { + void call(); + } private static class VKeyEvent { @@ -133,11 +98,6 @@ public class PlatformInput { } - private static final int EVENT_MOUSE_DOWN = 0; - private static final int EVENT_MOUSE_UP = 1; - private static final int EVENT_MOUSE_MOVE = 2; - private static final int EVENT_MOUSE_WHEEL = 3; - private static class VMouseEvent { private final int posX; @@ -156,21 +116,75 @@ public class PlatformInput { } + private static Window win = null; + private static HTMLElement parent = null; + private static HTMLCanvasElement canvas = null; + private static HTMLElement touchKeyboardOpenZone = null; + private static int touchOpenZoneX = 0; + private static int touchOpenZoneY = 0; + private static int touchOpenZoneW = 0; + private static int touchOpenZoneH = 0; + private static HTMLFormElement touchKeyboardForm = null; + private static HTMLInputElement touchKeyboardField = null; + + private static boolean shownTouchKeyboardEventWarning = false; + private static boolean shownLegacyTouchKeyboardWarning = false; + private static boolean showniOSReturnTouchKeyboardWarning = false; + private static double lastTouchKeyboardEvtA = 0.0; + private static double lastTouchKeyboardEvtB = 0.0; + private static double lastTouchKeyboardEvtC = 0.0; + private static EventListener contextmenu = null; + private static EventListener mousedown = null; + private static EventListener mouseup = null; + private static EventListener mousemove = null; + private static EventListener mouseenter = null; + private static EventListener mouseleave = null; + private static EventListener touchstart = null; + private static EventListener touchend = null; + private static EventListener touchmove = null; + private static EventListener touchcancel = null; + private static EventListener gamepadconnected = null; + private static EventListener gamepaddisconnected = null; + private static EventListener keydown = null; + private static EventListener keyup = null; + private static EventListener touchKeyboardOpenZone_touchstart = null; + private static EventListener touchKeyboardOpenZone_touchend = null; + private static EventListener touchKeyboardOpenZone_touchmove = null; + + private static EventListener wheel = null; + + private static EventListener focus = null; + + private static EventListener blur = null; + + private static EventListener pointerlock = null; + private static EventListener pointerlockerr = null; + private static EventListener fullscreen = null; + + private static Map keyCodeTranslatorMap = null; + + private static final List pastedStrings = new LinkedList<>(); + private static final int EVENT_KEY_DOWN = 0; + private static final int EVENT_KEY_UP = 1; + private static final int EVENT_KEY_REPEAT = 2; + + private static final int EVENT_MOUSE_DOWN = 0; + + private static final int EVENT_MOUSE_UP = 1; + private static final int EVENT_MOUSE_MOVE = 2; + private static final int EVENT_MOUSE_WHEEL = 3; + private static final List mouseEvents = new LinkedList<>(); private static final List keyEvents = new LinkedList<>(); + private static final List touchEvents = new LinkedList<>(); private static boolean hasShownPressAnyKey = false; private static boolean isOnMobilePressAnyKey = false; - - private static interface MobilePressAnyKeyHandler { - void call(boolean enterBootMenu); - } - private static HTMLElement mobilePressAnyKeyScreen = null; + private static MobilePressAnyKeyHandler mobilePressAnyKey = null; static boolean isLikelyMobileBrowser = false; - private static int mouseX = 0; private static int mouseY = 0; private static double mouseDX = 0.0D; @@ -178,6 +192,7 @@ public class PlatformInput { private static double mouseDWheel = 0.0D; private static boolean enableRepeatEvents = true; private static boolean isWindowFocused = true; + private static boolean isMouseOverWindow = true; static boolean unpressCTRL = false; @@ -186,15 +201,14 @@ public class PlatformInput { public static int touchOffsetXTeaVM = 0; public static int touchOffsetYTeaVM = 0; - private static boolean gamepadSupported = false; private static final List gamepadList = new ArrayList<>(); private static Gamepad selectedGamepad = null; private static String selectedGamepadName = null; private static double gamepadTimestamp = -1.0; + private static final boolean[] gamepadButtonStates = new boolean[24]; private static final float[] gamepadAxisStates = new float[4]; - private static int windowWidth = -1; private static int windowHeight = -1; private static float windowDPI = 1.0f; @@ -207,17 +221,18 @@ public class PlatformInput { private static float lastWasResizedWindowDPI = -2.0f; private static int lastWasResizedVisualViewportX = -2; private static int lastWasResizedVisualViewportY = -2; + private static int lastWasResizedVisualViewportW = -2; private static int lastWasResizedVisualViewportH = -2; - private static VMouseEvent currentEvent = null; private static VKeyEvent currentEventK = null; + private static boolean[] buttonStates = new boolean[8]; + private static boolean[] keyStates = new boolean[256]; - private static int functionKeyModifier = KeyboardConstants.KEY_F; - - // Can't support webkit vendor prefix since there's no document.pointerLockElement + // Can't support webkit vendor prefix since there's no + // document.pointerLockElement private static final int POINTER_LOCK_NONE = 0; private static final int POINTER_LOCK_CORE = 1; private static final int POINTER_LOCK_MOZ = 2; @@ -225,14 +240,16 @@ public class PlatformInput { private static long mouseUngrabTimer = 0l; private static long mouseGrabTimer = 0l; private static int mouseUngrabTimeout = -1; - private static boolean pointerLockFlag = false; + private static boolean pointerLockFlag = false; + private static boolean pointerLockWaiting = false; private static final int FULLSCREEN_NONE = 0; private static final int FULLSCREEN_CORE = 1; private static final int FULLSCREEN_WEBKIT = 2; - private static final int FULLSCREEN_MOZ = 3; - private static int fullscreenSupported = FULLSCREEN_NONE; + private static final int FULLSCREEN_MOZ = 3; + + private static int fullscreenSupported = FULLSCREEN_NONE; private static JSObject fullscreenQuery = null; public static boolean keyboardLockSupported = false; @@ -240,21 +257,543 @@ public class PlatformInput { static boolean vsync = true; static boolean vsyncSupport = false; - private static long vsyncWaiting = -1l; + private static AsyncCallback vsyncAsyncCallback = null; + private static int vsyncTimeout = -1; - + // hack to fix occasional freeze on iOS private static int vsyncSaveLockInterval = -1; - @JSFunctor - private static interface UnloadCallback extends JSObject { - void call(); + private static double syncTimer = 0.0; + + private static final Map touchIDtoUID = new HashMap<>(); + + private static int touchUIDnum = 0; + + private static final SortedTouchEvent.ITouchUIDMapper touchUIDMapperCreate = (idx) -> { + Integer ret = touchIDtoUID.get(idx); + if (ret != null) + return ret.intValue(); + int r = touchUIDnum++; + touchIDtoUID.put(idx, r); + return r; + }; + + private static final SortedTouchEvent.ITouchUIDMapper touchUIDMapper = (idx) -> { + Integer ret = touchIDtoUID.get(idx); + return ret != null ? ret.intValue() : -1; + }; + + private static int asciiUpperToKeyLegacy(char charIn) { + switch (charIn) { + case '\n': + return 17; + case '~': + return 192; + case '!': + return 49; + case '@': + return 50; + case '#': + return 51; + case '$': + return 52; + case '%': + return 53; + case '^': + return 54; + case '&': + return 55; + case '*': + return 56; + case '(': + return 57; + case ')': + return 48; + case '_': + return 173; + case '+': + return 187; + case '{': + return 219; + case '}': + return 221; + case '|': + return 220; + case ':': + return 186; + case '\"': + return 222; + case '<': + return 188; + case '>': + return 190; + case '?': + return 191; + case '.': + return 190; + case '\'': + return 222; + case ';': + return 186; + case '[': + return 219; + case ']': + return 221; + case ',': + return 188; + case '/': + return 191; + case '\\': + return 220; + case '-': + return 189; + case '`': + return 192; + default: + return (int) charIn; + } } - @JSBody(params = { "win", "cb" }, script = "win.__curEaglerX188UnloadListenerCB = cb; if((typeof win.__isEaglerX188UnloadListenerSet === \"string\") && win.__isEaglerX188UnloadListenerSet === \"yes\") return; win.onbeforeunload = function(evt) { if(win.__curEaglerX188UnloadListenerCB) win.__curEaglerX188UnloadListenerCB(); return false; }; win.__isEaglerX188UnloadListenerSet = \"yes\";") - private static native void onBeforeCloseRegister(Window win, UnloadCallback cb); + @Async + private static native void asyncRequestAnimationFrame(); + + private static void asyncRequestAnimationFrame(AsyncCallback cb) { + if (vsyncWaiting != -1l) { + cb.error(new IllegalStateException("Already waiting for vsync!")); + return; + } + vsyncWaiting = PlatformRuntime.steadyTimeMillis(); + vsyncAsyncCallback = cb; + final boolean[] hasTimedOut = new boolean[] { false }; + final int[] timeout = new int[] { -1 }; + Window.requestAnimationFrame((d) -> { + if (!hasTimedOut[0]) { + hasTimedOut[0] = true; + if (vsyncWaiting != -1l) { + vsyncWaiting = -1l; + if (vsyncTimeout != -1 && vsyncTimeout == timeout[0]) { + try { + Window.clearTimeout(vsyncTimeout); + } catch (Throwable t) { + } + vsyncTimeout = -1; + } + vsyncAsyncCallback = null; + cb.complete(null); + } + } + }); + vsyncTimeout = timeout[0] = Window.setTimeout(() -> { + if (!hasTimedOut[0]) { + hasTimedOut[0] = true; + if (vsyncWaiting != -1l) { + vsyncTimeout = -1; + vsyncWaiting = -1l; + vsyncAsyncCallback = null; + cb.complete(null); + } + } + }, 50); + } + + private static void callExitFullscreen(HTMLDocument doc) { + switch (fullscreenSupported) { + case FULLSCREEN_CORE: + try { + exitFullscreen(doc); + } catch (Throwable t) { + } + break; + case FULLSCREEN_WEBKIT: + try { + webkitExitFullscreen(doc); + } catch (Throwable t) { + } + break; + case FULLSCREEN_MOZ: + try { + mozCancelFullscreen(doc); + } catch (Throwable t) { + } + break; + default: + PlatformRuntime.logger.warn("Failed to exit fullscreen, it is not supported!"); + break; + } + } + + private static void callExitPointerLock(HTMLDocument doc) { + switch (pointerLockSupported) { + case POINTER_LOCK_CORE: + try { + doc.exitPointerLock(); + } catch (Throwable t) { + } + break; + case POINTER_LOCK_MOZ: + try { + mozExitPointerLock(doc); + } catch (Throwable t) { + } + break; + default: + PlatformRuntime.logger.warn("Failed to exit pointer lock, it is not supported!"); + break; + } + } + + private static void callRequestFullscreen(HTMLElement el) { + switch (fullscreenSupported) { + case FULLSCREEN_CORE: + try { + requestFullscreen(el); + } catch (Throwable t) { + } + break; + case FULLSCREEN_WEBKIT: + try { + webkitRequestFullscreen(el); + } catch (Throwable t) { + } + break; + case FULLSCREEN_MOZ: + try { + mozRequestFullscreen(el); + } catch (Throwable t) { + } + break; + default: + PlatformRuntime.logger.warn("Failed to request fullscreen, it is not supported!"); + break; + } + } + + private static void callRequestPointerLock(HTMLElement el) { + switch (pointerLockSupported) { + case POINTER_LOCK_CORE: + try { + el.requestPointerLock(); + } catch (Throwable t) { + } + break; + case POINTER_LOCK_MOZ: + try { + mozRequestPointerLock(el); + } catch (Throwable t) { + } + break; + default: + PlatformRuntime.logger.warn("Failed to request pointer lock, it is not supported!"); + break; + } + } + + @JSBody(params = {}, script = "return !!(navigator.keyboard && navigator.keyboard.getLayoutMap);") + private static native boolean checkKeyboardLayoutSupported(); + + @JSBody(params = {}, script = "return !!(navigator.keyboard && navigator.keyboard.lock);") + private static native boolean checkKeyboardLockSupported(); + + public static void clearEvenBuffers() { + mouseEvents.clear(); + keyEvents.clear(); + touchEvents.clear(); + net.lax1dude.eaglercraft.v1_8.Gamepad.clearEventBuffer(); + } + + public static boolean contextLost() { + return PlatformRuntime.webgl.isContextLost(); + } + + private static void enumerateGamepads() { + if (!gamepadSupported) + return; + if (selectedGamepad != null) { + selectedGamepad = updateGamepad(selectedGamepad); + if (selectedGamepad == null || !TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { + selectedGamepad = null; + } + } + List oldList = null; + if (!gamepadList.isEmpty()) { + oldList = new ArrayList<>(gamepadList); + gamepadList.clear(); + } + Gamepad[] gamepads = Navigator.getGamepads(); + if (gamepads != null && gamepads.length > 0) { + for (int i = 0; i < gamepads.length; ++i) { + Gamepad g = gamepads[i]; + if (TeaVMUtils.isTruthy(g) && g.isConnected() && "standard".equals(g.getMapping())) { + gamepadList.add(g); + } + } + } + if (selectedGamepad != null) { + selectedGamepadName = selectedGamepad.getId(); + } + if (oldList == null) { + if (!gamepadList.isEmpty()) { + for (int i = 0, l = gamepadList.size(); i < l; ++i) { + PlatformRuntime.logger.info("Found controller: {}", gamepadList.get(i).getId()); + } + } + } else { + if (gamepadList.isEmpty()) { + for (int i = 0, l = oldList.size(); i < l; ++i) { + PlatformRuntime.logger.info("Lost controller: {}", oldList.get(i).getId()); + } + } else { + Map oldDevCounts = new HashMap<>(); + for (Gamepad gg : oldList) { + String s = gg.getId(); + Integer i = oldDevCounts.get(s); + if (i != null) { + oldDevCounts.put(s, Integer.valueOf(i.intValue() + 1)); + } else { + oldDevCounts.put(s, Integer.valueOf(1)); + } + } + Map newDevCounts = new HashMap<>(); + for (Gamepad gg : gamepadList) { + String s = gg.getId(); + Integer i = newDevCounts.get(s); + if (i != null) { + newDevCounts.put(s, Integer.valueOf(i.intValue() + 1)); + } else { + newDevCounts.put(s, Integer.valueOf(1)); + } + } + for (Entry etr : oldDevCounts.entrySet()) { + Integer i = newDevCounts.get(etr.getKey()); + if (i == null) { + for (int j = 0, l = etr.getValue().intValue(); j < l; ++j) { + PlatformRuntime.logger.info("Lost controller: {}", etr.getKey()); + } + } else { + int j = i.intValue(); + int k = etr.getValue().intValue(); + if (k != j) { + if (k < j) { + for (int m = 0, l = j - k; m < l; ++m) { + PlatformRuntime.logger.info("Found controller: {}", etr.getKey()); + } + } else { + for (int m = 0, l = k - j; m < l; ++m) { + PlatformRuntime.logger.info("Lost controller: {}", etr.getKey()); + } + } + } + } + } + for (Entry etr : newDevCounts.entrySet()) { + Integer i = oldDevCounts.get(etr.getKey()); + if (i == null) { + for (int j = 0, l = etr.getValue().intValue(); j < l; ++j) { + PlatformRuntime.logger.info("Found controller: {}", etr.getKey()); + } + } + } + } + + } + } + + @JSBody(params = { "doc" }, script = "doc.exitFullscreen();") + private static native void exitFullscreen(HTMLDocument doc); + + private static int fixWheel(float val) { + return (val > 0.0f ? 1 : (val < 0.0f ? -1 : 0)); + } + + @JSBody(params = {}, script = "return window.matchMedia(\"(display-mode: fullscreen)\");") + private static native JSObject fullscreenMediaQuery(); + + public static float gamepadGetAxis(int axis) { + return gamepadSupported && selectedGamepad != null && axis >= 0 && axis < gamepadAxisStates.length + ? gamepadAxisStates[axis] + : 0.0f; + } + + public static boolean gamepadGetButtonState(int button) { + return gamepadSupported && selectedGamepad != null && button >= 0 && button < gamepadButtonStates.length + ? gamepadButtonStates[button] + : false; + } + + public static String gamepadGetDeviceName(int deviceId) { + if (gamepadSupported && deviceId >= 0 && deviceId < gamepadList.size()) { + return gamepadList.get(deviceId).getId(); + } else { + return "Unknown"; + } + } + + public static String gamepadGetName() { + return gamepadSupported && selectedGamepad != null ? selectedGamepadName : "Unknown"; + } + + public static int gamepadGetValidDeviceCount() { + if (!gamepadSupported) + return 0; + return gamepadList.size(); + } + + public static boolean gamepadIsValid() { + if (!gamepadSupported) + return false; + return selectedGamepad != null; + } + + private static void gamepadReset() { + for (int i = 0; i < gamepadButtonStates.length; ++i) { + gamepadButtonStates[i] = false; + } + for (int i = 0; i < gamepadAxisStates.length; ++i) { + gamepadAxisStates[i] = 0.0f; + } + } + + public static void gamepadSetSelectedDevice(int deviceId) { + if (!gamepadSupported) + return; + gamepadReset(); + if (deviceId >= 0 && deviceId < gamepadList.size()) { + selectedGamepad = gamepadList.get(deviceId); + gamepadTimestamp = -1.0; + if (!TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { + selectedGamepad = null; + } + } else { + selectedGamepad = null; + } + } + + @JSBody(params = {}, script = "return (typeof navigator.getGamepads === \"function\");") + private static native boolean gamepadSupported(); + + public static void gamepadUpdate() { + if (!gamepadSupported) + return; + if (selectedGamepad != null) { + selectedGamepad = updateGamepad(selectedGamepad); + if (selectedGamepad == null || !TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { + gamepadReset(); + selectedGamepad = null; + return; + } + double ts = selectedGamepad.getTimestamp(); + if (ts != gamepadTimestamp) { + gamepadTimestamp = ts; + gamepadReset(); + GamepadButton[] btns = selectedGamepad.getButtons(); + for (int i = 0; i < btns.length; ++i) { + int j = GamepadConstants.getEaglerButtonFromBrowser(i); + if (j >= 0 && j < gamepadButtonStates.length) { + gamepadButtonStates[j] = btns[i].isPressed(); + } + } + double[] axes = selectedGamepad.getAxes(); + for (int i = 0; i < axes.length; ++i) { + if (i >= 4) { + break; + } + gamepadAxisStates[i] = (float) axes[i]; + } + } + } else { + gamepadReset(); + } + } + + @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\") ? evt.key : \"\";") + private static native String getCharOrNull(KeyboardEvent evt); + + @JSBody(params = { + "win" }, script = "return (typeof win.devicePixelRatio === \"number\") ? win.devicePixelRatio : 1.0;") + static native double getDevicePixelRatio(Window win); + + public static float getDPI() { + return windowDPI; + } + + public static Map getKeyCodeTranslatorMapTeaVM() { + return keyCodeTranslatorMap; + } + + @JSBody(params = { "evt" }, script = "return evt.keyIdentifier;") + private static native String getKeyIdentifier(KeyboardEvent evt); + + @JSBody(params = { "e" }, script = "return (typeof e.location === \"number\") ? e.location : 0;") + private static native int getLocationSafe(KeyboardEvent e); + + @JSBody(params = { "m", "off" }, script = "return (typeof m.offsetX === \"number\") ? m.offsetX : (m.pageX - off);") + private static native int getOffsetX(MouseEvent m, int offX); + + @JSBody(params = { "m", "off" }, script = "return (typeof m.offsetY === \"number\") ? m.offsetY : (m.pageY - off);") + private static native int getOffsetY(MouseEvent m, int offY); + + @JSBody(params = { "el" }, script = "var xx = 0; var yy = 0;" + + "while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {" + "xx += el.offsetLeft - el.scrollLeft;" + + "yy += el.offsetTop - el.scrollTop;" + "el = el.offsetParent;" + "} return { left: xx, top: yy };") + private static native TextRectangle getPositionOf(HTMLElement el); + + @JSBody(params = { "doc" }, script = "return (typeof doc.exitFullscreen === \"function\") ? 1" + + ": ((typeof doc.webkitExitFullscreen === \"function\") ? 2" + + ": ((typeof doc.mozExitFullscreen === \"function\") ? 3 : -1));") + private static native int getSupportedFullScreen(HTMLDocument doc); + + @JSBody(params = { "doc" }, script = "return (typeof doc.exitPointerLock === \"function\") ? 1" + + ": ((typeof doc.mozExitPointerLock === \"function\") ? 2 : -1);") + private static native int getSupportedPointerLock(HTMLDocument doc); + + @JSBody(params = { + "doc" }, script = "return (typeof doc.visibilityState !== \"string\") || (doc.visibilityState === \"visible\");") + private static native boolean getVisibilityState(JSObject doc); + + public static int getVisualViewportH() { + return visualViewportH; + } + + public static int getVisualViewportW() { + return visualViewportW; + } + + public static int getVisualViewportX() { + return visualViewportX; + } + + public static int getVisualViewportY() { + return visualViewportY; + } + + @JSBody(params = { + "e" }, script = "return (typeof e.which === \"number\") ? e.which : ((typeof e.keyCode === \"number\") ? e.keyCode : 0);") + private static native int getWhich(KeyboardEvent e); + + public static boolean getWindowFocused() { + return isWindowFocused || isPointerLocked(); + } + + public static int getWindowHeight() { + return windowHeight; + } + + public static int getWindowWidth() { + return windowWidth; + } + + @JSBody(params = { + "fallback" }, script = "if(window.navigator.userActivation){return window.navigator.userActivation.hasBeenActive;}else{return fallback;}") + public static native boolean hasBeenActiveTeaVM(boolean fallback); + + @JSBody(params = { "evt" }, script = "return (typeof evt.code === \"string\");") + private static native boolean hasCodeVar(KeyboardEvent evt); + + @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\");") + private static native boolean hasKeyVar(KeyboardEvent evt); static void initHooks(Window window, HTMLElement parent_, HTMLCanvasElement canvaz) { win = window; @@ -297,24 +836,25 @@ public class PlatformInput { decl.setProperty("-webkit-touch-callout", "none"); decl.setProperty("-webkit-tap-highlight-color", "rgba(255, 255, 255, 0)"); parent.appendChild(touchKeyboardOpenZone); - + PlatformRuntime.logger.info("Loading keyboard layout data"); - + LegacyKeycodeTranslator keycodeTranslator = new LegacyKeycodeTranslator(); - if(checkKeyboardLayoutSupported()) { + if (checkKeyboardLayoutSupported()) { try { iterateKeyboardLayout(keycodeTranslator::addBrowserLayoutMapping); - }catch(Throwable t) { - PlatformRuntime.logger.error("Caught exception querying keyboard layout from browser, using the default layout instead"); + } catch (Throwable t) { + PlatformRuntime.logger.error( + "Caught exception querying keyboard layout from browser, using the default layout instead"); PlatformRuntime.logger.error(t); } int cnt = keycodeTranslator.getRemappedKeyCount(); - if(cnt > 0) { + if (cnt > 0) { PlatformRuntime.logger.info("KeyboardLayoutMap remapped {} keys from their default codes", cnt); } } keyCodeTranslatorMap = keycodeTranslator.buildLayoutTable(); - + parent.addEventListener("contextmenu", contextmenu = new EventListener() { @Override public void handleEvent(MouseEvent evt) { @@ -327,15 +867,17 @@ public class PlatformInput { public void handleEvent(MouseEvent evt) { evt.preventDefault(); evt.stopPropagation(); - if(tryGrabCursorHook()) return; + if (tryGrabCursorHook()) + return; int b = evt.getButton(); b = b == 1 ? 2 : (b == 2 ? 1 : b); - buttonStates[b] = true; - int eventX = (int)(getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); - int eventY = windowHeight - (int)(getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; - synchronized(mouseEvents) { + if (b >= 0 && b < buttonStates.length) + buttonStates[b] = true; + int eventX = (int) (getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); + int eventY = windowHeight - (int) (getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; + synchronized (mouseEvents) { mouseEvents.add(new VMouseEvent(eventX, eventY, b, 0.0f, EVENT_MOUSE_DOWN)); - if(mouseEvents.size() > 64) { + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } @@ -348,12 +890,13 @@ public class PlatformInput { evt.stopPropagation(); int b = evt.getButton(); b = b == 1 ? 2 : (b == 2 ? 1 : b); - buttonStates[b] = false; - int eventX = (int)(getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); - int eventY = windowHeight - (int)(getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; - synchronized(mouseEvents) { + if (b >= 0 && b < buttonStates.length) + buttonStates[b] = false; + int eventX = (int) (getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); + int eventY = windowHeight - (int) (getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; + synchronized (mouseEvents) { mouseEvents.add(new VMouseEvent(eventX, eventY, b, 0.0f, EVENT_MOUSE_UP)); - if(mouseEvents.size() > 64) { + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } @@ -364,16 +907,18 @@ public class PlatformInput { public void handleEvent(MouseEvent evt) { evt.preventDefault(); evt.stopPropagation(); - mouseX = (int)(getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); - mouseY = windowHeight - (int)(getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; - mouseDX += evt.getMovementX(); - mouseDY += -evt.getMovementY(); - if(hasShownPressAnyKey) { - int eventX = (int)(getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); - int eventY = windowHeight - (int)(getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; - synchronized(mouseEvents) { + mouseX = (int) (getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); + mouseY = windowHeight - (int) (getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; + if (pointerLockFlag) { + mouseDX += evt.getMovementX(); + mouseDY += -evt.getMovementY(); + } + if (hasShownPressAnyKey) { + int eventX = (int) (getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); + int eventY = windowHeight - (int) (getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; + synchronized (mouseEvents) { mouseEvents.add(new VMouseEvent(eventX, eventY, -1, 0.0f, EVENT_MOUSE_MOVE)); - if(mouseEvents.size() > 64) { + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } @@ -400,9 +945,9 @@ public class PlatformInput { SortedTouchEvent sorted = new SortedTouchEvent(evt, touchUIDMapperCreate); currentTouchState = sorted; List lst = sorted.getEventTouches(); - synchronized(touchEvents) { + synchronized (touchEvents) { touchEvents.add(sorted); - if(touchEvents.size() > 64) { + if (touchEvents.size() > 64) { touchEvents.remove(0); } } @@ -421,9 +966,9 @@ public class PlatformInput { for (int i = 0; i < len; ++i) { touchIDtoUID.remove(lst.get(i).touch.getIdentifier()); } - synchronized(touchEvents) { + synchronized (touchEvents) { touchEvents.add(sorted); - if(touchEvents.size() > 64) { + if (touchEvents.size() > 64) { touchEvents.remove(0); } } @@ -436,10 +981,10 @@ public class PlatformInput { evt.stopPropagation(); SortedTouchEvent sorted = new SortedTouchEvent(evt, touchUIDMapperCreate); currentTouchState = sorted; - if(hasShownPressAnyKey) { - synchronized(touchEvents) { + if (hasShownPressAnyKey) { + synchronized (touchEvents) { touchEvents.add(sorted); - if(touchEvents.size() > 64) { + if (touchEvents.size() > 64) { touchEvents.remove(0); } } @@ -456,10 +1001,10 @@ public class PlatformInput { for (int i = 0; i < len; ++i) { touchIDtoUID.remove(lst.get(i).touch.getIdentifier()); } - if(hasShownPressAnyKey) { - synchronized(touchEvents) { + if (hasShownPressAnyKey) { + synchronized (touchEvents) { touchEvents.add(sorted); - if(touchEvents.size() > 64) { + if (touchEvents.size() > 64) { touchEvents.remove(0); } } @@ -471,17 +1016,18 @@ public class PlatformInput { public void handleEvent(KeyboardEvent evt) { evt.preventDefault(); evt.stopPropagation(); - if(!enableRepeatEvents && evt.isRepeat()) return; + if (!enableRepeatEvents && evt.isRepeat()) + return; LegacyKeycodeTranslator.LegacyKeycode keyCode = null; - if(keyCodeTranslatorMap != null && hasCodeVar(evt)) { + if (keyCodeTranslatorMap != null && hasCodeVar(evt)) { keyCode = keyCodeTranslatorMap.get(evt.getCode()); } int w; int loc; - if(keyCode != null) { + if (keyCode != null) { w = keyCode.keyCode; loc = keyCode.location; - }else { + } else { w = getWhich(evt); loc = getLocationSafe(evt); } @@ -490,36 +1036,36 @@ public class PlatformInput { } int ww = processFunctionKeys(w); int eag = KeyboardConstants.getEaglerKeyFromBrowser(ww, ww == w ? loc : 0); - if(isOnMobilePressAnyKey && mobilePressAnyKey != null) { - if(eag == KeyboardConstants.KEY_DELETE) { + if (isOnMobilePressAnyKey && mobilePressAnyKey != null) { + if (eag == KeyboardConstants.KEY_DELETE) { mobilePressAnyKey.call(true); return; } } - if(eag != 0) { + if (eag != 0) { keyStates[eag] = true; } String s = getCharOrNull(evt); int l = s.length(); char c; - if(l == 1) { + if (l == 1) { c = s.charAt(0); - }else if(l == 0) { + } else if (l == 0) { c = keyToAsciiLegacy(w, evt.isShiftKey()); - }else if(s.equals("Unidentified")) { + } else if (s.equals("Unidentified")) { return; - }else { + } else { c = '\0'; } - synchronized(keyEvents) { + synchronized (keyEvents) { keyEvents.add(new VKeyEvent(ww, loc, eag, c, EVENT_KEY_DOWN)); - if(keyEvents.size() > 64) { + if (keyEvents.size() > 64) { keyEvents.remove(0); } } JSObject obj = evt.getTimeStamp(); - if(TeaVMUtils.isTruthy(obj)) { - lastTouchKeyboardEvtA = ((JSNumber)obj).doubleValue(); + if (TeaVMUtils.isTruthy(obj)) { + lastTouchKeyboardEvtA = ((JSNumber) obj).doubleValue(); } } }); @@ -529,24 +1075,24 @@ public class PlatformInput { evt.preventDefault(); evt.stopPropagation(); LegacyKeycodeTranslator.LegacyKeycode keyCode = null; - if(keyCodeTranslatorMap != null && hasCodeVar(evt)) { + if (keyCodeTranslatorMap != null && hasCodeVar(evt)) { keyCode = keyCodeTranslatorMap.get(evt.getCode()); } int w; int loc; - if(keyCode != null) { + if (keyCode != null) { w = keyCode.keyCode; loc = keyCode.location; - }else { + } else { w = getWhich(evt); loc = getLocationSafe(evt); } int ww = processFunctionKeys(w); int eag = KeyboardConstants.getEaglerKeyFromBrowser(ww, ww == w ? loc : 0); - if(eag != 0) { + if (eag != 0) { keyStates[eag] = false; - if(eag == functionKeyModifier) { - for(int key = KeyboardConstants.KEY_F1; key <= KeyboardConstants.KEY_F10; ++key) { + if (eag == functionKeyModifier) { + for (int key = KeyboardConstants.KEY_F1; key <= KeyboardConstants.KEY_F10; ++key) { keyStates[key] = false; } } @@ -554,45 +1100,48 @@ public class PlatformInput { String s = getCharOrNull(evt); int l = s.length(); char c; - if(l == 1) { + if (l == 1) { c = s.charAt(0); - }else if(l == 0) { + } else if (l == 0) { c = keyToAsciiLegacy(w, evt.isShiftKey()); - }else if(s.equals("Unidentified")) { + } else if (s.equals("Unidentified")) { return; - }else { + } else { c = '\0'; } - synchronized(keyEvents) { + synchronized (keyEvents) { keyEvents.add(new VKeyEvent(ww, loc, eag, c, EVENT_KEY_UP)); - if(keyEvents.size() > 64) { + if (keyEvents.size() > 64) { keyEvents.remove(0); } } } }); - touchKeyboardOpenZone.addEventListener("touchstart", touchKeyboardOpenZone_touchstart = new EventListener() { - @Override - public void handleEvent(TouchEvent evt) { - evt.preventDefault(); - evt.stopPropagation(); - } - }); - touchKeyboardOpenZone.addEventListener("touchend", touchKeyboardOpenZone_touchend = new EventListener() { - @Override - public void handleEvent(TouchEvent evt) { - evt.preventDefault(); - evt.stopPropagation(); - touchOpenDeviceKeyboard(); - } - }); - touchKeyboardOpenZone.addEventListener("touchmove", touchKeyboardOpenZone_touchmove = new EventListener() { - @Override - public void handleEvent(TouchEvent evt) { - evt.preventDefault(); - evt.stopPropagation(); - } - }); + touchKeyboardOpenZone.addEventListener("touchstart", + touchKeyboardOpenZone_touchstart = new EventListener() { + @Override + public void handleEvent(TouchEvent evt) { + evt.preventDefault(); + evt.stopPropagation(); + } + }); + touchKeyboardOpenZone.addEventListener("touchend", + touchKeyboardOpenZone_touchend = new EventListener() { + @Override + public void handleEvent(TouchEvent evt) { + evt.preventDefault(); + evt.stopPropagation(); + touchOpenDeviceKeyboard(); + } + }); + touchKeyboardOpenZone.addEventListener("touchmove", + touchKeyboardOpenZone_touchmove = new EventListener() { + @Override + public void handleEvent(TouchEvent evt) { + evt.preventDefault(); + evt.stopPropagation(); + } + }); canvas.addEventListener("wheel", wheel = new EventListener() { @Override public void handleEvent(WheelEvent evt) { @@ -600,12 +1149,12 @@ public class PlatformInput { evt.stopPropagation(); double delta = -evt.getDeltaY(); mouseDWheel += delta; - if(hasShownPressAnyKey) { - int eventX = (int)(getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); - int eventY = windowHeight - (int)(getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; - synchronized(mouseEvents) { - mouseEvents.add(new VMouseEvent(eventX, eventY, -1, (float)delta, EVENT_MOUSE_WHEEL)); - if(mouseEvents.size() > 64) { + if (hasShownPressAnyKey) { + int eventX = (int) (getOffsetX(evt, touchOffsetXTeaVM) * windowDPI); + int eventY = windowHeight - (int) (getOffsetY(evt, touchOffsetYTeaVM) * windowDPI) - 1; + synchronized (mouseEvents) { + mouseEvents.add(new VMouseEvent(eventX, eventY, -1, (float) delta, EVENT_MOUSE_WHEEL)); + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } @@ -616,10 +1165,10 @@ public class PlatformInput { @Override public void handleEvent(Event evt) { isWindowFocused = false; - for(int i = 0; i < buttonStates.length; ++i) { + for (int i = 0; i < buttonStates.length; ++i) { buttonStates[i] = false; } - for(int i = 0; i < keyStates.length; ++i) { + for (int i = 0; i < keyStates.length; ++i) { keyStates[i] = false; } } @@ -630,60 +1179,71 @@ public class PlatformInput { isWindowFocused = true; } }); - + try { pointerLockSupported = getSupportedPointerLock(win.getDocument()); - }catch(Throwable t) { + } catch (Throwable t) { pointerLockSupported = POINTER_LOCK_NONE; } - if(pointerLockSupported != POINTER_LOCK_NONE) { - win.getDocument().addEventListener(pointerLockSupported == POINTER_LOCK_MOZ ? "mozpointerlockchange" : "pointerlockchange", pointerlock = new EventListener() { - @Override - public void handleEvent(Event evt) { - Window.setTimeout(new TimerHandler() { + if (pointerLockSupported != POINTER_LOCK_NONE) { + win.getDocument().addEventListener( + pointerLockSupported == POINTER_LOCK_MOZ ? "mozpointerlockchange" : "pointerlockchange", + pointerlock = new EventListener() { @Override - public void onTimer() { - boolean grab = isPointerLocked(); - if(!grab) { - if(pointerLockFlag) { - mouseUngrabTimer = PlatformRuntime.steadyTimeMillis(); + public void handleEvent(Event evt) { + Window.setTimeout(new TimerHandler() { + @Override + public void onTimer() { + boolean grab = isPointerLockedImpl(); + if (!grab) { + if (pointerLockFlag) { + mouseUngrabTimer = PlatformRuntime.steadyTimeMillis(); + } + } + pointerLockFlag = grab; } - } - pointerLockFlag = grab; + }, 60); + mouseDX = 0.0D; + mouseDY = 0.0D; + pointerLockWaiting = false; } - }, 60); - mouseDX = 0.0D; - mouseDY = 0.0D; - } - }); - if(pointerLockSupported == POINTER_LOCK_MOZ) { + }); + win.getDocument().addEventListener( + pointerLockSupported == POINTER_LOCK_MOZ ? "mozpointerlockerror" : "pointerlockerror", + pointerlockerr = new EventListener() { + @Override + public void handleEvent(Event evt) { + pointerLockWaiting = false; + } + }); + if (pointerLockSupported == POINTER_LOCK_MOZ) { PlatformRuntime.logger.info("Using moz- vendor prefix for pointer lock"); } - }else { + } else { PlatformRuntime.logger.error("Pointer lock is not supported on this browser"); } - if(pointerLockSupported != POINTER_LOCK_NONE) { + if (pointerLockSupported != POINTER_LOCK_NONE) { String ua = PlatformRuntime.getUserAgentString(); - if(ua != null) { + if (ua != null) { ua = ua.toLowerCase(); isLikelyMobileBrowser = ua.contains("mobi") || ua.contains("tablet"); - }else { + } else { isLikelyMobileBrowser = false; } - }else { + } else { isLikelyMobileBrowser = true; } try { fullscreenSupported = getSupportedFullScreen(win.getDocument()); - }catch(Throwable t) { + } catch (Throwable t) { fullscreenSupported = FULLSCREEN_NONE; } - if(fullscreenSupported != FULLSCREEN_NONE) { + if (fullscreenSupported != FULLSCREEN_NONE) { fullscreenQuery = fullscreenMediaQuery(); - if(fullscreenSupported == FULLSCREEN_CORE && (keyboardLockSupported = checkKeyboardLockSupported())) { - TeaVMUtils.addEventListener(fullscreenQuery, "change", new EventListener() { + if (fullscreenSupported == FULLSCREEN_CORE && (keyboardLockSupported = checkKeyboardLockSupported())) { + TeaVMUtils.addEventListener(fullscreenQuery, "change", fullscreen = new EventListener() { @Override public void handleEvent(Event evt) { if (!mediaQueryMatches(evt)) { @@ -693,18 +1253,18 @@ public class PlatformInput { } }); } - if(pointerLockSupported == FULLSCREEN_WEBKIT) { + if (fullscreenSupported == FULLSCREEN_WEBKIT) { PlatformRuntime.logger.info("Using webkit- vendor prefix for fullscreen"); - }else if(pointerLockSupported == FULLSCREEN_MOZ) { + } else if (fullscreenSupported == FULLSCREEN_MOZ) { PlatformRuntime.logger.info("Using moz- vendor prefix for fullscreen"); } - }else { + } else { PlatformRuntime.logger.error("Fullscreen is not supported on this browser"); } try { onBeforeCloseRegister(window, () -> PlatformRuntime.beforeUnload()); - }catch(Throwable t) { + } catch (Throwable t) { } vsyncWaiting = -1l; @@ -715,37 +1275,37 @@ public class PlatformInput { try { asyncRequestAnimationFrame(); vsyncSupport = true; - }catch(Throwable t) { + } catch (Throwable t) { PlatformRuntime.logger.error("VSync is not supported on this browser!"); } - if(vsyncSupport) { - if(vsyncSaveLockInterval != -1) { + if (vsyncSupport) { + if (vsyncSaveLockInterval != -1) { try { Window.clearInterval(vsyncSaveLockInterval); - }catch(Throwable t) { + } catch (Throwable t) { } vsyncSaveLockInterval = -1; } // fix for iOS freezing randomly...? - vsyncSaveLockInterval = Window.setInterval(() -> { - if(vsyncWaiting != -1l) { + vsyncSaveLockInterval = Window.setInterval(() -> { + if (vsyncWaiting != -1l) { long steadyTime = PlatformRuntime.steadyTimeMillis(); - if(steadyTime - vsyncWaiting > 1000) { + if (steadyTime - vsyncWaiting > 1000) { PlatformRuntime.logger.error("VSync lockup detected! Attempting to recover..."); vsyncWaiting = -1l; - if(vsyncTimeout != -1) { + if (vsyncTimeout != -1) { try { Window.clearTimeout(vsyncTimeout); - }catch(Throwable t) { + } catch (Throwable t) { } vsyncTimeout = -1; } - if(vsyncAsyncCallback != null) { + if (vsyncAsyncCallback != null) { AsyncCallback cb = vsyncAsyncCallback; vsyncAsyncCallback = null; cb.complete(null); - }else { + } else { PlatformRuntime.logger.error("Async callback is null!"); } } @@ -755,7 +1315,7 @@ public class PlatformInput { try { gamepadSupported = gamepadSupported(); - if(gamepadSupported) { + if (gamepadSupported) { win.addEventListener("gamepadconnected", gamepadconnected = new EventListener() { @Override public void handleEvent(GamepadEvent evt) { @@ -765,14 +1325,14 @@ public class PlatformInput { win.addEventListener("gamepaddisconnected", gamepaddisconnected = new EventListener() { @Override public void handleEvent(GamepadEvent evt) { - if(evt.getGamepad() == selectedGamepad) { + if (selectedGamepad != null && evt.getGamepad().getIndex() == selectedGamepad.getIndex()) { selectedGamepad = null; } enumerateGamepads(); } }); } - }catch(Throwable t) { + } catch (Throwable t) { gamepadSupported = false; PlatformRuntime.logger.error("Gamepad detected as unsupported!"); } @@ -780,20 +1340,57 @@ public class PlatformInput { enumerateGamepads(); } - @JSFunctor - private static interface KeyboardLayoutIterator extends JSObject { - void call(String key, String val); + static void initWindowSize(int sw, int sh, float dpi) { + windowWidth = sw; + windowHeight = sh; + windowDPI = dpi; + visualViewportX = 0; + visualViewportY = 0; + visualViewportW = sw; + visualViewportH = sh; } - @JSFunctor - private static interface KeyboardLayoutDone extends JSObject { - void call(); + @JSBody(params = { "doc", "el" }, script = "return doc.activeElement === el;") + private static native boolean isActiveElement(HTMLDocument doc, HTMLElement el); + + public static boolean isCloseRequested() { + return false; } - @JSBody(params = { "cb", "cbDone" }, script = "return navigator.keyboard.getLayoutMap()" - + ".then(function(layoutMap) { if(layoutMap && layoutMap.forEach) layoutMap.forEach(cb); cbDone(); })" - + ".catch(function() { cbDone(); });") - private static native void iterateKeyboardLayout0(KeyboardLayoutIterator cb, KeyboardLayoutDone cbDone); + public static boolean isFullscreen() { + return fullscreenSupported != FULLSCREEN_NONE && mediaQueryMatches(fullscreenQuery); + } + + public static boolean isMouseGrabbed() { + return pointerLockFlag; + } + + @JSBody(params = { "doc", "canvasEl" }, script = "return doc.mozPointerLockElement === canvasEl;") + private static native boolean isMozPointerLocked0(HTMLDocument doc, HTMLCanvasElement canvasEl); + + public static boolean isPointerLocked() { + if (pointerLockWaiting) + return true; // workaround for chrome bug + return isPointerLockedImpl(); + } + + @JSBody(params = { "doc", "canvasEl" }, script = "return doc.pointerLockElement === canvasEl;") + private static native boolean isPointerLocked0(HTMLDocument doc, HTMLCanvasElement canvasEl); + + private static boolean isPointerLockedImpl() { + switch (pointerLockSupported) { + case POINTER_LOCK_CORE: + return isPointerLocked0(win.getDocument(), canvas); + case POINTER_LOCK_MOZ: + return isMozPointerLocked0(win.getDocument(), canvas); + default: + return false; + } + } + + public static boolean isVSyncSupported() { + return vsyncSupport; + } @Async private static native void iterateKeyboardLayout(KeyboardLayoutIterator cb); @@ -802,238 +1399,70 @@ public class PlatformInput { iterateKeyboardLayout0(cb, () -> complete.complete(null)); } - @JSBody(params = { }, script = "return !!(navigator.keyboard && navigator.keyboard.getLayoutMap);") - private static native boolean checkKeyboardLayoutSupported(); + @JSBody(params = { "cb", "cbDone" }, script = "return navigator.keyboard.getLayoutMap()" + + ".then(function(layoutMap) { if(layoutMap && layoutMap.forEach) layoutMap.forEach(cb); cbDone(); })" + + ".catch(function() { cbDone(); });") + private static native void iterateKeyboardLayout0(KeyboardLayoutIterator cb, KeyboardLayoutDone cbDone); - @JSBody(params = { "doc" }, script = "return (typeof doc.exitPointerLock === \"function\") ? 1" - + ": ((typeof doc.mozExitPointerLock === \"function\") ? 2 : -1);") - private static native int getSupportedPointerLock(HTMLDocument doc); - - @JSBody(params = { "doc" }, script = "return (typeof doc.exitFullscreen === \"function\") ? 1" - + ": ((typeof doc.webkitExitFullscreen === \"function\") ? 2" - + ": ((typeof doc.mozExitFullscreen === \"function\") ? 3 : -1));") - private static native int getSupportedFullScreen(HTMLDocument doc); - - @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\");") - private static native boolean hasKeyVar(KeyboardEvent evt); - - @JSBody(params = { "evt" }, script = "return (typeof evt.code === \"string\");") - private static native boolean hasCodeVar(KeyboardEvent evt); - - @JSBody(params = { "evt" }, script = "return evt.keyIdentifier;") - private static native String getKeyIdentifier(KeyboardEvent evt); - - @JSBody(params = { "fallback" }, script = "if(window.navigator.userActivation){return window.navigator.userActivation.hasBeenActive;}else{return fallback;}") - public static native boolean hasBeenActiveTeaVM(boolean fallback); - - @JSBody(params = { "m", "off" }, script = "return (typeof m.offsetX === \"number\") ? m.offsetX : (m.pageX - off);") - private static native int getOffsetX(MouseEvent m, int offX); - - @JSBody(params = { "m", "off" }, script = "return (typeof m.offsetY === \"number\") ? m.offsetY : (m.pageY - off);") - private static native int getOffsetY(MouseEvent m, int offY); - - @JSBody(params = { "e" }, script = "return (typeof e.which === \"number\") ? e.which : ((typeof e.keyCode === \"number\") ? e.keyCode : 0);") - private static native int getWhich(KeyboardEvent e); - - @JSBody(params = { "e" }, script = "return (typeof e.location === \"number\") ? e.location : 0;") - private static native int getLocationSafe(KeyboardEvent e); - - @JSBody(params = { "el", "i", "j" }, script = "el.setSelectionRange(el, i, j)") - private static native boolean setSelectionRange(HTMLElement el, int i, int j); - - public static int getWindowWidth() { - return windowWidth; + public static boolean keyboardAreKeysLocked() { + return lockKeys; } - public static int getWindowHeight() { - return windowHeight; + public static void keyboardEnableRepeatEvents(boolean b) { + enableRepeatEvents = b; } - public static int getVisualViewportX() { - return visualViewportX; - } - - public static int getVisualViewportY() { - return visualViewportY; - } - - public static int getVisualViewportW() { - return visualViewportW; - } - - public static int getVisualViewportH() { - return visualViewportH; - } - - public static boolean getWindowFocused() { - return isWindowFocused || isPointerLocked(); - } - - public static boolean isCloseRequested() { - return false; - } - - public static void setVSync(boolean enable) { - vsync = enable; - } - - @JSBody(params = { "doc" }, script = "return (typeof doc.visibilityState !== \"string\") || (doc.visibilityState === \"visible\");") - private static native boolean getVisibilityState(JSObject doc); - - @JSBody(params = { "win" }, script = "return (typeof win.devicePixelRatio === \"number\") ? win.devicePixelRatio : 1.0;") - static native double getDevicePixelRatio(Window win); - - public static void update() { - update(0); - } - - private static final long[] syncTimer = new long[1]; - - public static void update(int fpsLimit) { - double r = getDevicePixelRatio(win); - if(r < 0.01) r = 1.0; - windowDPI = (float)r; - updateTouchOffset(); - int w = parent.getClientWidth(); - int h = parent.getClientHeight(); - int w2 = windowWidth = (int)(w * r); - int h2 = windowHeight = (int)(h * r); - if(PlatformRuntime.useVisualViewport) { - VisualViewport vv = PlatformRuntime.getVisualViewport(); - double scale = vv.getScale(); - visualViewportX = (int)(vv.getPageLeft() * r * scale); - visualViewportY = (int)(vv.getPageTop() * r * scale); - visualViewportW = (int)(vv.getWidth() * r * scale); - visualViewportH = (int)(vv.getHeight() * r * scale); - if(visualViewportW < 1) visualViewportW = 1; - if(visualViewportH < 1) visualViewportH = 1; - if(visualViewportX < 0) { - visualViewportW += visualViewportX; - visualViewportX = 0; - }else if(visualViewportX >= windowWidth) { - visualViewportX = windowWidth - 1; + public static void keyboardFireEvent(EnumFireKeyboardEvent eventType, int eagKey, char keyChar) { + synchronized (keyEvents) { + switch (eventType) { + case KEY_DOWN: + keyEvents.add(new VKeyEvent(-1, 0, eagKey, keyChar, EVENT_KEY_DOWN)); + break; + case KEY_UP: + keyEvents.add(new VKeyEvent(-1, 0, eagKey, '\0', EVENT_KEY_UP)); + break; + case KEY_REPEAT: + keyEvents.add(new VKeyEvent(-1, 0, eagKey, keyChar, EVENT_KEY_REPEAT)); + break; + default: + throw new UnsupportedOperationException(); } - if(visualViewportY < 0) { - visualViewportH += visualViewportY; - visualViewportY = 0; - }else if(visualViewportY >= windowHeight) { - visualViewportY = windowHeight - 1; + if (keyEvents.size() > 64) { + keyEvents.remove(0); } - if((visualViewportX + visualViewportW) > windowWidth) { - visualViewportW = windowWidth - visualViewportX; - } - if((visualViewportY + visualViewportH) > windowHeight) { - visualViewportH = windowHeight - visualViewportY; - } - }else { - visualViewportX = 0; - visualViewportY = 0; - visualViewportW = w2; - visualViewportH = h2; - } - if(canvas.getWidth() != w2) { - canvas.setWidth(w2); - } - if(canvas.getHeight() != h2) { - canvas.setHeight(h2); - } - WebGLBackBuffer.flipBuffer(w2, h2); - PlatformScreenRecord.captureFrameHook(); - if(getVisibilityState(win.getDocument())) { - if(vsyncSupport && vsync) { - syncTimer[0] = 0l; - asyncRequestAnimationFrame(); - }else { - if(fpsLimit <= 0) { - syncTimer[0] = 0l; - PlatformRuntime.swapDelayTeaVM(); - }else { - if(!Display.sync(fpsLimit, syncTimer)) { - PlatformRuntime.swapDelayTeaVM(); - } - } - } - }else { - syncTimer[0] = 0l; - EagUtils.sleep(50); } } - @Async - private static native void asyncRequestAnimationFrame(); - - private static void asyncRequestAnimationFrame(AsyncCallback cb) { - if(vsyncWaiting != -1l) { - cb.error(new IllegalStateException("Already waiting for vsync!")); - return; - } - vsyncWaiting = PlatformRuntime.steadyTimeMillis(); - vsyncAsyncCallback = cb; - final boolean[] hasTimedOut = new boolean[] { false }; - final int[] timeout = new int[] { -1 }; - Window.requestAnimationFrame((d) -> { - if(!hasTimedOut[0]) { - hasTimedOut[0] = true; - if(vsyncWaiting != -1l) { - vsyncWaiting = -1l; - if(vsyncTimeout != -1 && vsyncTimeout == timeout[0]) { - try { - Window.clearTimeout(vsyncTimeout); - }catch(Throwable t) { - } - vsyncTimeout = -1; - } - vsyncAsyncCallback = null; - cb.complete(null); - } - } - }); - vsyncTimeout = timeout[0] = Window.setTimeout(() -> { - if(!hasTimedOut[0]) { - hasTimedOut[0] = true; - if(vsyncWaiting != -1l) { - vsyncTimeout = -1; - vsyncWaiting = -1l; - vsyncAsyncCallback = null; - cb.complete(null); - } - } - }, 50); + public static char keyboardGetEventCharacter() { + return currentEventK == null ? '\0' : currentEventK.keyChar; } - public static boolean isVSyncSupported() { - return vsyncSupport; + public static int keyboardGetEventKey() { + return currentEventK == null ? -1 : currentEventK.eagKey; } - public static boolean wasResized() { - if (windowWidth != lastWasResizedWindowWidth || windowHeight != lastWasResizedWindowHeight - || windowDPI != lastWasResizedWindowDPI) { - lastWasResizedWindowWidth = windowWidth; - lastWasResizedWindowHeight = windowHeight; - lastWasResizedWindowDPI = windowDPI; - return true; - }else { - return false; - } + public static boolean keyboardGetEventKeyState() { + return currentEventK == null ? false : (currentEventK.type != EVENT_KEY_UP); } - public static boolean wasVisualViewportResized() { - if (visualViewportX != lastWasResizedVisualViewportX || visualViewportY != lastWasResizedVisualViewportY - || visualViewportW != lastWasResizedVisualViewportW - || visualViewportH != lastWasResizedVisualViewportH) { - lastWasResizedVisualViewportX = visualViewportX; - lastWasResizedVisualViewportY = visualViewportY; - lastWasResizedVisualViewportW = visualViewportW; - lastWasResizedVisualViewportH = visualViewportH; - return true; - }else { - return false; + public static boolean keyboardIsKeyDown(int key) { + if (unpressCTRL) { // un-press ctrl after copy/paste permission + keyStates[28] = false; + keyStates[29] = false; + keyStates[157] = false; + keyStates[219] = false; + keyStates[220] = false; } + return key < 0 || key >= keyStates.length ? false : keyStates[key]; + } + + public static boolean keyboardIsRepeatEvent() { + return currentEventK == null ? false : (currentEventK.type == EVENT_KEY_REPEAT); } public static boolean keyboardNext() { - synchronized(keyEvents) { - if(unpressCTRL) { //un-press ctrl after copy/paste permission + synchronized (keyEvents) { + if (unpressCTRL) { // un-press ctrl after copy/paste permission keyEvents.clear(); currentEventK = null; keyStates[29] = false; @@ -1049,177 +1478,115 @@ public class PlatformInput { } } - public static void keyboardFireEvent(EnumFireKeyboardEvent eventType, int eagKey, char keyChar) { - synchronized(keyEvents) { - switch(eventType) { - case KEY_DOWN: - keyEvents.add(new VKeyEvent(-1, 0, eagKey, keyChar, EVENT_KEY_DOWN)); - break; - case KEY_UP: - keyEvents.add(new VKeyEvent(-1, 0, eagKey, '\0', EVENT_KEY_UP)); - break; - case KEY_REPEAT: - keyEvents.add(new VKeyEvent(-1, 0, eagKey, keyChar, EVENT_KEY_REPEAT)); - break; - default: - throw new UnsupportedOperationException(); - } - if(keyEvents.size() > 64) { - keyEvents.remove(0); - } - } - } - - public static boolean keyboardGetEventKeyState() { - return currentEventK == null ? false : (currentEventK.type != EVENT_KEY_UP); - } - - public static int keyboardGetEventKey() { - return currentEventK == null ? -1 : currentEventK.eagKey; - } - - @JSBody(params = { "evt" }, script = "return (typeof evt.key === \"string\") ? evt.key : \"\";") - private static native String getCharOrNull(KeyboardEvent evt); - private static char keyToAsciiLegacy(int whichIn, boolean shiftUp) { - switch(whichIn) { - case 188: whichIn = 44; break; - case 109: whichIn = 45; break; - case 190: whichIn = 46; break; - case 191: whichIn = 47; break; - case 192: whichIn = 96; break; - case 220: whichIn = 92; break; - case 222: whichIn = 39; break; - case 221: whichIn = 93; break; - case 219: whichIn = 91; break; - case 173: whichIn = 45; break; - case 187: whichIn = 61; break; - case 186: whichIn = 59; break; - case 189: whichIn = 45; break; - default: break; + switch (whichIn) { + case 188: + whichIn = 44; + break; + case 109: + whichIn = 45; + break; + case 190: + whichIn = 46; + break; + case 191: + whichIn = 47; + break; + case 192: + whichIn = 96; + break; + case 220: + whichIn = 92; + break; + case 222: + whichIn = 39; + break; + case 221: + whichIn = 93; + break; + case 219: + whichIn = 91; + break; + case 173: + whichIn = 45; + break; + case 187: + whichIn = 61; + break; + case 186: + whichIn = 59; + break; + case 189: + whichIn = 45; + break; + default: + break; } - if(shiftUp) { - switch(whichIn) { - case 96: return '~'; - case 49: return '!'; - case 50: return '@'; - case 51: return '#'; - case 52: return '$'; - case 53: return '%'; - case 54: return '^'; - case 55: return '&'; - case 56: return '*'; - case 57: return '('; - case 48: return ')'; - case 45: return '_'; - case 61: return '+'; - case 91: return '{'; - case 93: return '}'; - case 92: return '|'; - case 59: return ':'; - case 39: return '\"'; - case 44: return '<'; - case 46: return '>'; - case 47: return '?'; - default: return (char)whichIn; + if (shiftUp) { + switch (whichIn) { + case 96: + return '~'; + case 49: + return '!'; + case 50: + return '@'; + case 51: + return '#'; + case 52: + return '$'; + case 53: + return '%'; + case 54: + return '^'; + case 55: + return '&'; + case 56: + return '*'; + case 57: + return '('; + case 48: + return ')'; + case 45: + return '_'; + case 61: + return '+'; + case 91: + return '{'; + case 93: + return '}'; + case 92: + return '|'; + case 59: + return ':'; + case 39: + return '\"'; + case 44: + return '<'; + case 46: + return '>'; + case 47: + return '?'; + default: + return (char) whichIn; } - }else { - if(whichIn >= 65 && whichIn <= 90) { - return (char)(whichIn + 32); - }else { - return (char)whichIn; + } else { + if (whichIn >= 65 && whichIn <= 90) { + return (char) (whichIn + 32); + } else { + return (char) whichIn; } } } - private static int asciiUpperToKeyLegacy(char charIn) { - switch(charIn) { - case '\n': return 17; - case '~': return 192; - case '!': return 49; - case '@': return 50; - case '#': return 51; - case '$': return 52; - case '%': return 53; - case '^': return 54; - case '&': return 55; - case '*': return 56; - case '(': return 57; - case ')': return 48; - case '_': return 173; - case '+': return 187; - case '{': return 219; - case '}': return 221; - case '|': return 220; - case ':': return 186; - case '\"': return 222; - case '<': return 188; - case '>': return 190; - case '?': return 191; - case '.': return 190; - case '\'': return 222; - case ';': return 186; - case '[': return 219; - case ']': return 221; - case ',': return 188; - case '/': return 191; - case '\\': return 220; - case '-': return 189; - case '`': return 192; - default: return (int)charIn; - } - } + @JSBody(params = {}, script = "navigator.keyboard.lock();") + private static native void lockKeys(); - public static char keyboardGetEventCharacter() { - return currentEventK == null ? '\0' : currentEventK.keyChar; - } - - public static boolean keyboardIsKeyDown(int key) { - if(unpressCTRL) { //un-press ctrl after copy/paste permission - keyStates[28] = false; - keyStates[29] = false; - keyStates[157] = false; - keyStates[219] = false; - keyStates[220] = false; - } - return key < 0 || key >= keyStates.length ? false : keyStates[key]; - } - - public static boolean keyboardIsRepeatEvent() { - return currentEventK == null ? false : (currentEventK.type == EVENT_KEY_REPEAT); - } - - public static void keyboardEnableRepeatEvents(boolean b) { - enableRepeatEvents = b; - } - - public static boolean keyboardAreKeysLocked() { - return lockKeys; - } - - public static boolean mouseNext() { - currentEvent = null; - synchronized(mouseEvents) { - return !mouseEvents.isEmpty() && (currentEvent = mouseEvents.remove(0)) != null; - } - } - - public static void mouseFireMoveEvent(EnumFireMouseEvent eventType, int posX, int posY) { - if(eventType == EnumFireMouseEvent.MOUSE_MOVE) { - synchronized(mouseEvents) { - mouseEvents.add(new VMouseEvent(posX, posY, -1, 0.0f, EVENT_MOUSE_MOVE)); - if(mouseEvents.size() > 64) { - mouseEvents.remove(0); - } - } - }else { - throw new UnsupportedOperationException(); - } - } + @JSBody(params = { "mediaQuery" }, script = "return mediaQuery.matches;") + private static native boolean mediaQueryMatches(JSObject mediaQuery); public static void mouseFireButtonEvent(EnumFireMouseEvent eventType, int posX, int posY, int button) { - synchronized(mouseEvents) { - switch(eventType) { + synchronized (mouseEvents) { + switch (eventType) { case MOUSE_DOWN: mouseEvents.add(new VMouseEvent(posX, posY, button, 0.0f, EVENT_MOUSE_DOWN)); break; @@ -1229,32 +1596,68 @@ public class PlatformInput { default: throw new UnsupportedOperationException(); } - if(mouseEvents.size() > 64) { + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } } - public static void mouseFireWheelEvent(EnumFireMouseEvent eventType, int posX, int posY, float wheel) { - if(eventType == EnumFireMouseEvent.MOUSE_WHEEL) { - synchronized(mouseEvents) { - mouseEvents.add(new VMouseEvent(posX, posY, -1, wheel, EVENT_MOUSE_WHEEL)); - if(mouseEvents.size() > 64) { + public static void mouseFireMoveEvent(EnumFireMouseEvent eventType, int posX, int posY) { + if (eventType == EnumFireMouseEvent.MOUSE_MOVE) { + synchronized (mouseEvents) { + mouseEvents.add(new VMouseEvent(posX, posY, -1, 0.0f, EVENT_MOUSE_MOVE)); + if (mouseEvents.size() > 64) { mouseEvents.remove(0); } } - }else { + } else { throw new UnsupportedOperationException(); } } + public static void mouseFireWheelEvent(EnumFireMouseEvent eventType, int posX, int posY, float wheel) { + if (eventType == EnumFireMouseEvent.MOUSE_WHEEL) { + synchronized (mouseEvents) { + mouseEvents.add(new VMouseEvent(posX, posY, -1, wheel, EVENT_MOUSE_WHEEL)); + if (mouseEvents.size() > 64) { + mouseEvents.remove(0); + } + } + } else { + throw new UnsupportedOperationException(); + } + } + + public static int mouseGetDWheel() { + int ret = (int) mouseDWheel; + mouseDWheel -= ret; + return ret; + } + + public static int mouseGetDX() { + int ret = (int) mouseDX; + mouseDX = 0.0D; + return ret; + } + + public static int mouseGetDY() { + int ret = (int) mouseDY; + mouseDY = 0.0D; + return ret; + } + + public static int mouseGetEventButton() { + if (currentEvent == null || (currentEvent.type == EVENT_MOUSE_MOVE)) + return -1; + return currentEvent.button; + } + public static boolean mouseGetEventButtonState() { return currentEvent == null ? false : (currentEvent.type == EVENT_MOUSE_DOWN); } - public static int mouseGetEventButton() { - if(currentEvent == null || (currentEvent.type == EVENT_MOUSE_MOVE)) return -1; - return currentEvent.button; + public static int mouseGetEventDWheel() { + return (currentEvent.type == EVENT_MOUSE_WHEEL) ? fixWheel(currentEvent.wheel) : 0; } public static int mouseGetEventX() { @@ -1265,14 +1668,6 @@ public class PlatformInput { return currentEvent == null ? -1 : currentEvent.posY; } - public static int mouseGetEventDWheel() { - return (currentEvent.type == EVENT_MOUSE_WHEEL) ? fixWheel(currentEvent.wheel) : 0; - } - - private static int fixWheel(float val) { - return (val > 0.0f ? 1 : (val < 0.0f ? -1 : 0)); - } - public static int mouseGetX() { return mouseX; } @@ -1281,338 +1676,104 @@ public class PlatformInput { return mouseY; } - public static boolean mouseIsButtonDown(int i) { - return (i < 0 || i >= buttonStates.length) ? false : buttonStates[i]; - } - - public static int mouseGetDWheel() { - int ret = (int)mouseDWheel; - mouseDWheel = 0.0D; - return ret; - } - - public static void mouseSetGrabbed(boolean grab) { - if(pointerLockSupported == POINTER_LOCK_NONE) { - return; - } - long t = PlatformRuntime.steadyTimeMillis(); - pointerLockFlag = grab; - mouseGrabTimer = t; - if(grab) { - callRequestPointerLock(canvas); - if(mouseUngrabTimeout != -1) Window.clearTimeout(mouseUngrabTimeout); - mouseUngrabTimeout = -1; - if(t - mouseUngrabTimer < 3000l) { - mouseUngrabTimeout = Window.setTimeout(new TimerHandler() { - @Override - public void onTimer() { - callRequestPointerLock(canvas); - } - }, 3100 - (int)(t - mouseUngrabTimer)); - } - }else { - if(mouseUngrabTimeout != -1) Window.clearTimeout(mouseUngrabTimeout); - mouseUngrabTimeout = -1; - callExitPointerLock(win.getDocument()); - } - mouseDX = 0.0D; - mouseDY = 0.0D; - } - - private static boolean tryGrabCursorHook() { - if(pointerLockSupported == POINTER_LOCK_NONE) { - return false; - } - if(pointerLockFlag && !isPointerLocked()) { - mouseSetGrabbed(true); - return true; - } - return false; - } - - private static void callRequestPointerLock(HTMLElement el) { - switch(pointerLockSupported) { - case POINTER_LOCK_CORE: - try { - el.requestPointerLock(); - }catch(Throwable t) { - } - break; - case POINTER_LOCK_MOZ: - try { - mozRequestPointerLock(el); - }catch(Throwable t) { - } - break; - default: - PlatformRuntime.logger.warn("Failed to request pointer lock, it is not supported!"); - break; - } - } - - @JSBody(params = { "el" }, script = "el.mozRequestPointerLock();") - private static native void mozRequestPointerLock(HTMLElement el); - - private static void callExitPointerLock(HTMLDocument doc) { - switch(pointerLockSupported) { - case POINTER_LOCK_CORE: - try { - doc.exitPointerLock(); - }catch(Throwable t) { - } - break; - case POINTER_LOCK_MOZ: - try { - mozExitPointerLock(doc); - }catch(Throwable t) { - } - break; - default: - PlatformRuntime.logger.warn("Failed to exit pointer lock, it is not supported!"); - break; - } - } - - @JSBody(params = { "doc" }, script = "doc.mozExitPointerLock();") - private static native void mozExitPointerLock(HTMLDocument el); - public static boolean mouseGrabSupported() { return pointerLockSupported != POINTER_LOCK_NONE; } - public static boolean isMouseGrabbed() { - return pointerLockFlag; - } - - public static boolean isPointerLocked() { - switch(pointerLockSupported) { - case POINTER_LOCK_CORE: - return isPointerLocked0(win.getDocument(), canvas); - case POINTER_LOCK_MOZ: - return isMozPointerLocked0(win.getDocument(), canvas); - default: - return false; - } - } - - @JSBody(params = { "doc", "canvasEl" }, script = "return doc.pointerLockElement === canvasEl;") - private static native boolean isPointerLocked0(HTMLDocument doc, HTMLCanvasElement canvasEl); - - @JSBody(params = { "doc", "canvasEl" }, script = "return doc.mozPointerLockElement === canvasEl;") - private static native boolean isMozPointerLocked0(HTMLDocument doc, HTMLCanvasElement canvasEl); - - public static int mouseGetDX() { - int ret = (int)mouseDX; - mouseDX = 0.0D; - return ret; - } - - public static int mouseGetDY() { - int ret = (int)mouseDY; - mouseDY = 0.0D; - return ret; - } - - public static void mouseSetCursorPosition(int x, int y) { - // obsolete + public static boolean mouseIsButtonDown(int i) { + return (i < 0 || i >= buttonStates.length) ? false : buttonStates[i]; } public static boolean mouseIsInsideWindow() { return isMouseOverWindow; } - public static boolean contextLost() { - return PlatformRuntime.webgl.isContextLost(); - } - - private static int processFunctionKeys(int key) { - if(keyboardIsKeyDown(functionKeyModifier)) { - if(key >= 49 && key <= 57) { - key = key - 49 + 112; - } + public static boolean mouseNext() { + currentEvent = null; + synchronized (mouseEvents) { + return !mouseEvents.isEmpty() && (currentEvent = mouseEvents.remove(0)) != null; } - return key; } - public static void setFunctionKeyModifier(int key) { - functionKeyModifier = key; + public static void mouseSetCursorPosition(int x, int y) { + // obsolete } - public static void removeEventHandlers() { - if(contextmenu != null) { - parent.removeEventListener("contextmenu", contextmenu); - contextmenu = null; + public static void mouseSetGrabbed(boolean grab) { + if (pointerLockSupported == POINTER_LOCK_NONE) { + return; } - if(mousedown != null) { - canvas.removeEventListener("mousedown", mousedown); - mousedown = null; - } - if(mouseup != null) { - canvas.removeEventListener("mouseup", mouseup); - mouseup = null; - } - if(mousemove != null) { - canvas.removeEventListener("mousemove", mousemove); - mousemove = null; - } - if(mouseenter != null) { - canvas.removeEventListener("mouseenter", mouseenter); - mouseenter = null; - } - if(mouseleave != null) { - canvas.removeEventListener("mouseleave", mouseleave); - mouseleave = null; - } - if(touchstart != null) { - canvas.removeEventListener("touchstart", touchstart); - touchstart = null; - } - if(touchmove != null) { - canvas.removeEventListener("touchmove", touchmove); - touchmove = null; - } - if(touchend != null) { - canvas.removeEventListener("touchend", touchend); - touchend = null; - } - if(touchcancel != null) { - canvas.removeEventListener("touchcancel", touchcancel); - touchcancel = null; - } - if(gamepadconnected != null) { - win.removeEventListener("gamepadconnected", gamepadconnected); - gamepadconnected = null; - } - if(gamepaddisconnected != null) { - win.removeEventListener("gamepaddisconnected", gamepaddisconnected); - gamepaddisconnected = null; - } - if(keydown != null) { - win.removeEventListener("keydown", keydown); - keydown = null; - } - if(keyup != null) { - win.removeEventListener("keyup", keyup); - keyup = null; - } - if(focus != null) { - win.removeEventListener("focus", focus); - focus = null; - } - if(blur != null) { - win.removeEventListener("blur", blur); - blur = null; - } - if(wheel != null) { - canvas.removeEventListener("wheel", wheel); - wheel = null; - } - if(pointerlock != null) { - win.getDocument().removeEventListener("pointerlockchange", pointerlock); - pointerlock = null; - } - if(mouseUngrabTimeout != -1) { - Window.clearTimeout(mouseUngrabTimeout); + long t = PlatformRuntime.steadyTimeMillis(); + pointerLockFlag = grab; + mouseGrabTimer = t; + if (grab) { + pointerLockWaiting = true; + callRequestPointerLock(canvas); + if (mouseUngrabTimeout != -1) + Window.clearTimeout(mouseUngrabTimeout); mouseUngrabTimeout = -1; + if (t - mouseUngrabTimer < 3000l) { + mouseUngrabTimeout = Window.setTimeout(new TimerHandler() { + @Override + public void onTimer() { + callRequestPointerLock(canvas); + } + }, 3100 - (int) (t - mouseUngrabTimer)); + } + } else { + if (mouseUngrabTimeout != -1) + Window.clearTimeout(mouseUngrabTimeout); + mouseUngrabTimeout = -1; + if (!pointerLockWaiting) { + callExitPointerLock(win.getDocument()); + } } - if(vsyncSaveLockInterval != -1) { - try { - Window.clearInterval(vsyncSaveLockInterval); - }catch(Throwable t) { - } - vsyncSaveLockInterval = -1; - } - if(touchKeyboardField != null) { - touchKeyboardField.blur(); - if(parent != null) { - parent.removeChild(touchKeyboardField); - } - touchKeyboardField = null; - } - if(touchKeyboardOpenZone != null) { - if(touchKeyboardOpenZone_touchstart != null) { - touchKeyboardOpenZone.removeEventListener("touchstart", touchKeyboardOpenZone_touchstart); - touchKeyboardOpenZone_touchstart = null; - } - if(touchKeyboardOpenZone_touchend != null) { - touchKeyboardOpenZone.removeEventListener("touchend", touchKeyboardOpenZone_touchend); - touchKeyboardOpenZone_touchend = null; - } - if(touchKeyboardOpenZone_touchmove != null) { - touchKeyboardOpenZone.removeEventListener("touchmove", touchKeyboardOpenZone_touchmove); - touchKeyboardOpenZone_touchmove = null; - } - if(parent != null) { - parent.removeChild(touchKeyboardOpenZone); - } - touchKeyboardOpenZone = null; - } - try { - callExitPointerLock(win.getDocument()); - }catch(Throwable t) { - } - ClientMain.removeErrorHandler(win); + mouseDX = 0.0D; + mouseDY = 0.0D; } + @JSBody(params = { "doc" }, script = "doc.mozCancelFullscreen();") + private static native void mozCancelFullscreen(HTMLDocument doc); + + @JSBody(params = { "doc" }, script = "doc.mozExitPointerLock();") + private static native void mozExitPointerLock(HTMLDocument el); + + @JSBody(params = { "el" }, script = "el.mozRequestFullScreen();") + private static native void mozRequestFullscreen(HTMLElement element); + + @JSBody(params = { "el" }, script = "el.mozRequestPointerLock();") + private static native void mozRequestPointerLock(HTMLElement el); + + @JSBody(params = { "win", + "cb" }, script = "win.__curEaglerX188UnloadListenerCB = cb; if((typeof win.__isEaglerX188UnloadListenerSet === \"string\") && win.__isEaglerX188UnloadListenerSet === \"yes\") return; win.onbeforeunload = function(evt) { if(win.__curEaglerX188UnloadListenerCB) win.__curEaglerX188UnloadListenerCB(); return false; }; win.__isEaglerX188UnloadListenerSet = \"yes\";") + private static native void onBeforeCloseRegister(Window win, UnloadCallback cb); + public static void pressAnyKeyScreen() { IClientConfigAdapter cfgAdapter = PlatformRuntime.getClientConfigAdapter(); boolean allowBootMenu = cfgAdapter.isAllowBootMenu(); - if(isLikelyMobileBrowser) { + if (isLikelyMobileBrowser) { EarlyLoadScreen.paintEnable(PlatformOpenGL.checkVAOCapable(), allowBootMenu); try { isOnMobilePressAnyKey = true; setupAnyKeyScreenMobile(allowBootMenu); - if(pressAnyKeyScreenMobile() && allowBootMenu) { - PlatformRuntime.enterBootMenu(); + if (pressAnyKeyScreenMobile() && allowBootMenu) { + PlatformRuntime.enterBootMenu(true); } - }finally { + } finally { isOnMobilePressAnyKey = false; } - }else { - if(mouseEvents.isEmpty() && keyEvents.isEmpty() && !hasBeenActiveTeaVM(false)) { + } else { + if (mouseEvents.isEmpty() && keyEvents.isEmpty() && !hasBeenActiveTeaVM(false)) { EarlyLoadScreen.paintEnable(PlatformOpenGL.checkVAOCapable(), allowBootMenu); - - while(mouseEvents.isEmpty() && keyEvents.isEmpty() && touchEvents.isEmpty()) { - EagUtils.sleep(100); + + while (mouseEvents.isEmpty() && keyEvents.isEmpty() && touchEvents.isEmpty()) { + PlatformRuntime.sleep(100); } } } hasShownPressAnyKey = true; } - private static void setupAnyKeyScreenMobile(boolean allowBootMenu) { - if(mobilePressAnyKeyScreen != null) { - parent.removeChild(mobilePressAnyKeyScreen); - } - mobilePressAnyKeyScreen = win.getDocument().createElement("div"); - mobilePressAnyKeyScreen.getClassList().add("_eaglercraftX_mobile_press_any_key"); - mobilePressAnyKeyScreen.setAttribute("style", "position:absolute;background-color:white;font-family:sans-serif;top:10%;left:10%;right:10%;bottom:10%;border:5px double black;padding:calc(5px + 7vh) 15px;text-align:center;font-size:20px;user-select:none;z-index:10;"); - mobilePressAnyKeyScreen.setInnerHTML("

Mobile Browser Detected

" - + "

You must manually select an option below to continue

" - + "

" - + (allowBootMenu ? "

" : "") - + "

(Tablets and phones with large screens work best)

"); - mobilePressAnyKeyScreen.querySelector("._eaglercraftX_mobile_launch_client").addEventListener("click", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(isOnMobilePressAnyKey && mobilePressAnyKey != null) { - mobilePressAnyKey.call(false); - } - } - }); - if(allowBootMenu) { - mobilePressAnyKeyScreen.querySelector("._eaglercraftX_mobile_enter_boot_menu").addEventListener("click", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(isOnMobilePressAnyKey && mobilePressAnyKey != null) { - mobilePressAnyKey.call(true); - } - } - }); - } - parent.appendChild(mobilePressAnyKeyScreen); - } - @Async private static native boolean pressAnyKeyScreenMobile(); @@ -1621,7 +1782,7 @@ public class PlatformInput { @Override public void call(boolean enterBootMenu) { mobilePressAnyKey = null; - if(mobilePressAnyKeyScreen != null && parent != null) { + if (mobilePressAnyKeyScreen != null && parent != null) { parent.removeChild(mobilePressAnyKeyScreen); } mobilePressAnyKeyScreen = null; @@ -1631,25 +1792,214 @@ public class PlatformInput { PlatformRuntime.logger.info("Waiting for user to select option on mobile press any key screen"); } - public static void clearEvenBuffers() { - mouseEvents.clear(); - keyEvents.clear(); - touchEvents.clear(); - net.lax1dude.eaglercraft.v1_8.Gamepad.clearEventBuffer(); + private static int processFunctionKeys(int key) { + if (keyboardIsKeyDown(functionKeyModifier)) { + if (key >= 49 && key <= 57) { + key = key - 49 + 112; + } + } + return key; } - @JSBody(params = {}, script = "return window.matchMedia(\"(display-mode: fullscreen)\");") - private static native JSObject fullscreenMediaQuery(); + public static void removeEventHandlers() { + if (contextmenu != null) { + parent.removeEventListener("contextmenu", contextmenu); + contextmenu = null; + } + if (mousedown != null) { + canvas.removeEventListener("mousedown", mousedown); + mousedown = null; + } + if (mouseup != null) { + canvas.removeEventListener("mouseup", mouseup); + mouseup = null; + } + if (mousemove != null) { + canvas.removeEventListener("mousemove", mousemove); + mousemove = null; + } + if (mouseenter != null) { + canvas.removeEventListener("mouseenter", mouseenter); + mouseenter = null; + } + if (mouseleave != null) { + canvas.removeEventListener("mouseleave", mouseleave); + mouseleave = null; + } + if (touchstart != null) { + canvas.removeEventListener("touchstart", touchstart); + touchstart = null; + } + if (touchmove != null) { + canvas.removeEventListener("touchmove", touchmove); + touchmove = null; + } + if (touchend != null) { + canvas.removeEventListener("touchend", touchend); + touchend = null; + } + if (touchcancel != null) { + canvas.removeEventListener("touchcancel", touchcancel); + touchcancel = null; + } + if (gamepadconnected != null) { + win.removeEventListener("gamepadconnected", gamepadconnected); + gamepadconnected = null; + } + if (gamepaddisconnected != null) { + win.removeEventListener("gamepaddisconnected", gamepaddisconnected); + gamepaddisconnected = null; + } + if (keydown != null) { + win.removeEventListener("keydown", keydown); + keydown = null; + } + if (keyup != null) { + win.removeEventListener("keyup", keyup); + keyup = null; + } + if (focus != null) { + win.removeEventListener("focus", focus); + focus = null; + } + if (blur != null) { + win.removeEventListener("blur", blur); + blur = null; + } + if (wheel != null) { + canvas.removeEventListener("wheel", wheel); + wheel = null; + } + if (pointerlock != null) { + win.getDocument().removeEventListener("pointerlockchange", pointerlock); + pointerlock = null; + } + if (pointerlockerr != null) { + win.getDocument().removeEventListener("pointerlockerror", pointerlockerr); + pointerlockerr = null; + } + if (fullscreen != null) { + TeaVMUtils.removeEventListener(fullscreenQuery, "change", fullscreen); + fullscreen = null; + } + if (mouseUngrabTimeout != -1) { + Window.clearTimeout(mouseUngrabTimeout); + mouseUngrabTimeout = -1; + } + if (vsyncSaveLockInterval != -1) { + try { + Window.clearInterval(vsyncSaveLockInterval); + } catch (Throwable t) { + } + vsyncSaveLockInterval = -1; + } + if (touchKeyboardField != null) { + touchKeyboardField.blur(); + if (parent != null) { + parent.removeChild(touchKeyboardField); + } + touchKeyboardField = null; + } + if (touchKeyboardOpenZone != null) { + if (touchKeyboardOpenZone_touchstart != null) { + touchKeyboardOpenZone.removeEventListener("touchstart", touchKeyboardOpenZone_touchstart); + touchKeyboardOpenZone_touchstart = null; + } + if (touchKeyboardOpenZone_touchend != null) { + touchKeyboardOpenZone.removeEventListener("touchend", touchKeyboardOpenZone_touchend); + touchKeyboardOpenZone_touchend = null; + } + if (touchKeyboardOpenZone_touchmove != null) { + touchKeyboardOpenZone.removeEventListener("touchmove", touchKeyboardOpenZone_touchmove); + touchKeyboardOpenZone_touchmove = null; + } + if (parent != null) { + parent.removeChild(touchKeyboardOpenZone); + } + touchKeyboardOpenZone = null; + } + try { + callExitPointerLock(win.getDocument()); + } catch (Throwable t) { + } + ClientMain.removeErrorHandler(win); + } - @JSBody(params = { "mediaQuery" }, script = "return mediaQuery.matches;") - private static native boolean mediaQueryMatches(JSObject mediaQuery); + @JSBody(params = { "el" }, script = "el.requestFullscreen();") + private static native void requestFullscreen(HTMLElement element); + + public static void setFunctionKeyModifier(int key) { + functionKeyModifier = key; + } + + @JSBody(params = { "el", "i", "j" }, script = "el.setSelectionRange(i, j)") + private static native boolean setSelectionRange(HTMLElement el, int i, int j); + + private static void setupAnyKeyScreenMobile(boolean allowBootMenu) { + if (mobilePressAnyKeyScreen != null) { + parent.removeChild(mobilePressAnyKeyScreen); + } + mobilePressAnyKeyScreen = win.getDocument().createElement("div"); + mobilePressAnyKeyScreen.getClassList().add("_eaglercraftX_mobile_press_any_key"); + mobilePressAnyKeyScreen.setAttribute("style", + "position:absolute;background-color:white;font-family:sans-serif;top:10%;left:10%;right:10%;bottom:10%;border:5px double black;padding:calc(5px + 7vh) 15px;text-align:center;font-size:20px;user-select:none;z-index:10;"); + mobilePressAnyKeyScreen.setInnerHTML( + "

Mobile Browser Detected

" + + "

You must manually select an option below to continue

" + + "

" + + (allowBootMenu + ? "

" + : "") + + "

(Tablets and phones with large screens work best)

"); + mobilePressAnyKeyScreen.querySelector("._eaglercraftX_mobile_launch_client").addEventListener("click", + new EventListener() { + @Override + public void handleEvent(Event evt) { + if (isOnMobilePressAnyKey && mobilePressAnyKey != null) { + mobilePressAnyKey.call(false); + } + } + }); + if (allowBootMenu) { + mobilePressAnyKeyScreen.querySelector("._eaglercraftX_mobile_enter_boot_menu").addEventListener("click", + new EventListener() { + @Override + public void handleEvent(Event evt) { + if (isOnMobilePressAnyKey && mobilePressAnyKey != null) { + mobilePressAnyKey.call(true); + } + } + }); + } + parent.appendChild(mobilePressAnyKeyScreen); + } + + public static void setVSync(boolean enable) { + vsync = enable; + } + + public static void showCursor(EnumCursorType cursor) { + switch (cursor) { + case DEFAULT: + default: + canvas.getStyle().setProperty("cursor", "default"); + break; + case HAND: + canvas.getStyle().setProperty("cursor", "pointer"); + break; + case TEXT: + canvas.getStyle().setProperty("cursor", "text"); + break; + } + } public static boolean supportsFullscreen() { return fullscreenSupported != FULLSCREEN_NONE; } public static void toggleFullscreen() { - if(fullscreenSupported == FULLSCREEN_NONE) return; + if (fullscreenSupported == FULLSCREEN_NONE) + return; if (isFullscreen()) { if (keyboardLockSupported) { unlockKeys(); @@ -1665,117 +2015,76 @@ public class PlatformInput { } } - public static boolean isFullscreen() { - return fullscreenSupported != FULLSCREEN_NONE && mediaQueryMatches(fullscreenQuery); + public static void touchCloseDeviceKeyboard() { + touchCloseDeviceKeyboard0(true); } - @JSBody(params = { }, script = "navigator.keyboard.lock();") - private static native void lockKeys(); - - @JSBody(params = { }, script = "navigator.keyboard.unlock();") - private static native void unlockKeys(); - - @JSBody(params = { }, script = "return !!(navigator.keyboard && navigator.keyboard.lock);") - private static native boolean checkKeyboardLockSupported(); - - private static void callRequestFullscreen(HTMLElement el) { - switch(fullscreenSupported) { - case FULLSCREEN_CORE: - try { - requestFullscreen(el); - }catch(Throwable t) { + private static void touchCloseDeviceKeyboard0(boolean sync) { + if (touchKeyboardField != null) { + touchKeyboardField.blur(); + touchKeyboardField.setValue(""); + if (sync) { + PlatformRuntime.sleep(10); + if (touchKeyboardForm != null) { + touchKeyboardForm.removeChild(touchKeyboardField); + } else { + touchKeyboardField.delete(); + } + touchKeyboardField = null; + } else { + final HTMLInputElement el = touchKeyboardField; + final HTMLFormElement el2 = touchKeyboardForm; + Window.setTimeout(() -> { + if (el2 != null) { + el2.removeChild(el); + el2.delete(); + } else { + el.delete(); + } + }, 10); + touchKeyboardField = null; + touchKeyboardForm = null; + return; } - break; - case FULLSCREEN_WEBKIT: - try { - webkitRequestFullscreen(el); - }catch(Throwable t) { + } + if (touchKeyboardForm != null) { + if (parent != null) { + parent.removeChild(touchKeyboardForm); + } else { + touchKeyboardForm.delete(); } - break; - case FULLSCREEN_MOZ: - try { - mozRequestFullscreen(el); - }catch(Throwable t) { - } - break; - default: - PlatformRuntime.logger.warn("Failed to request fullscreen, it is not supported!"); - break; + touchKeyboardForm = null; } } - @JSBody(params = { "el" }, script = "el.requestFullscreen();") - private static native void requestFullscreen(HTMLElement element); - - @JSBody(params = { "el" }, script = "el.webkitRequestFullscreen();") - private static native void webkitRequestFullscreen(HTMLElement element); - - @JSBody(params = { "el" }, script = "el.mozRequestFullScreen();") - private static native void mozRequestFullscreen(HTMLElement element); - - private static void callExitFullscreen(HTMLDocument doc) { - switch(fullscreenSupported) { - case FULLSCREEN_CORE: - try { - exitFullscreen(doc); - }catch(Throwable t) { - } - break; - case FULLSCREEN_WEBKIT: - try { - webkitExitFullscreen(doc); - }catch(Throwable t) { - } - break; - case FULLSCREEN_MOZ: - try { - mozCancelFullscreen(doc); - }catch(Throwable t) { - } - break; - default: - PlatformRuntime.logger.warn("Failed to exit fullscreen, it is not supported!"); - break; - } + public static float touchForce(int pointId) { + return currentTouchState != null + ? (float) currentTouchState.getTargetTouches().get(pointId).touch.getForceSafe(0.5) + : 0.0f; } - @JSBody(params = { "doc" }, script = "doc.exitFullscreen();") - private static native void exitFullscreen(HTMLDocument doc); - - @JSBody(params = { "doc" }, script = "doc.webkitExitFullscreen();") - private static native void webkitExitFullscreen(HTMLDocument doc); - - @JSBody(params = { "doc" }, script = "doc.mozCancelFullscreen();") - private static native void mozCancelFullscreen(HTMLDocument doc); - - public static void showCursor(EnumCursorType cursor) { - switch(cursor) { - case DEFAULT: - default: - canvas.getStyle().setProperty("cursor", "default"); - break; - case HAND: - canvas.getStyle().setProperty("cursor", "pointer"); - break; - case TEXT: - canvas.getStyle().setProperty("cursor", "text"); - break; - } - } - - public static boolean touchNext() { - currentTouchEvent = null; - return !touchEvents.isEmpty() && (currentTouchEvent = touchEvents.remove(0)) != null; - } - - public static EnumTouchEvent touchGetEventType() { - return currentTouchEvent != null ? currentTouchEvent.type : null; + public static float touchGetEventTouchForce(int pointId) { + return currentTouchEvent != null + ? (float) currentTouchEvent.getEventTouches().get(pointId).touch.getForceSafe(0.5) + : 0.0f; } public static int touchGetEventTouchPointCount() { return currentTouchEvent != null ? currentTouchEvent.getEventTouches().size() : 0; } + public static int touchGetEventTouchPointUID(int pointId) { + return currentTouchEvent != null ? currentTouchEvent.getEventTouches().get(pointId).eventUID : -1; + } + + public static float touchGetEventTouchRadiusMixed(int pointId) { + if (currentTouchEvent != null) { + return currentTouchEvent.getEventTouches().get(pointId).radius; + } else { + return 1.0f; + } + } + public static int touchGetEventTouchX(int pointId) { return currentTouchEvent != null ? currentTouchEvent.getEventTouches().get(pointId).posX : 0; } @@ -1784,105 +2093,45 @@ public class PlatformInput { return currentTouchEvent != null ? currentTouchEvent.getEventTouches().get(pointId).posY : 0; } - public static float touchGetEventTouchRadiusX(int pointId) { - return currentTouchEvent != null ? (float)currentTouchEvent.getEventTouches().get(pointId).touch.getRadiusXSafe(5.0 * windowDPI) : 1.0f; + public static EnumTouchEvent touchGetEventType() { + return currentTouchEvent != null ? currentTouchEvent.type : null; } - public static float touchGetEventTouchRadiusY(int pointId) { - return currentTouchEvent != null ? (float)currentTouchEvent.getEventTouches().get(pointId).touch.getRadiusYSafe(5.0 * windowDPI) : 1.0f; - } - - public static float touchGetEventTouchRadiusMixed(int pointId) { - if(currentTouchEvent != null) { - Touch t = currentTouchEvent.getEventTouches().get(pointId).touch; - double d = 5.0 * windowDPI; - return (float)(t.getRadiusXSafe(d) * 0.5 + t.getRadiusYSafe(d) * 0.5); - }else { - return 1.0f; + public static String touchGetPastedString() { + synchronized (pastedStrings) { + return pastedStrings.isEmpty() ? null : pastedStrings.remove(0); } } - public static float touchGetEventTouchForce(int pointId) { - return currentTouchEvent != null ? (float)currentTouchEvent.getEventTouches().get(pointId).touch.getForceSafe(0.5) : 0.0f; + public static boolean touchIsDeviceKeyboardOpenMAYBE() { + return touchKeyboardField != null && isActiveElement(win.getDocument(), touchKeyboardField); } - public static int touchGetEventTouchPointUID(int pointId) { - return currentTouchEvent != null ? currentTouchEvent.getEventTouches().get(pointId).eventUID : -1; + public static boolean touchNext() { + currentTouchEvent = null; + return !touchEvents.isEmpty() && (currentTouchEvent = touchEvents.remove(0)) != null; } - public static int touchPointCount() { - return currentTouchState != null ? currentTouchState.getTargetTouchesSize() : 0; - } - - public static int touchPointX(int pointId) { - return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).posX : -1; - } - - public static int touchPointY(int pointId) { - return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).posY : -1; - } - - public static float touchRadiusX(int pointId) { - return currentTouchState != null ? (float)currentTouchState.getTargetTouches().get(pointId).touch.getRadiusXSafe(5.0 * windowDPI) : 1.0f; - } - - public static float touchRadiusY(int pointId) { - return currentTouchState != null ? (float)currentTouchState.getTargetTouches().get(pointId).touch.getRadiusYSafe(5.0 * windowDPI) : 1.0f; - } - - public static float touchRadiusMixed(int pointId) { - if(currentTouchState != null) { - Touch t = currentTouchState.getTargetTouches().get(pointId).touch; - return (float)(t.getRadiusX() * 0.5 + t.getRadiusY() * 0.5); - }else { - return 1.0f; - } - } - - public static float touchForce(int pointId) { - return currentTouchState != null ? (float)currentTouchState.getTargetTouches().get(pointId).touch.getForceSafe(0.5) : 0.0f; - } - - public static int touchPointUID(int pointId) { - return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).eventUID : -1; - } - - private static final Map touchIDtoUID = new HashMap<>(); - private static int touchUIDnum = 0; - - private static final SortedTouchEvent.ITouchUIDMapper touchUIDMapperCreate = (idx) -> { - Integer ret = touchIDtoUID.get(idx); - if(ret != null) return ret.intValue(); - int r = touchUIDnum++; - touchIDtoUID.put(idx, r); - return r; - }; - - private static final SortedTouchEvent.ITouchUIDMapper touchUIDMapper = (idx) -> { - Integer ret = touchIDtoUID.get(idx); - return ret != null ? ret.intValue() : -1; - }; - // Note: this can't be called from the main loop, don't try private static void touchOpenDeviceKeyboard() { - if(!touchIsDeviceKeyboardOpenMAYBE()) { - if(touchKeyboardField != null) { + if (!touchIsDeviceKeyboardOpenMAYBE()) { + if (touchKeyboardField != null) { touchKeyboardField.blur(); touchKeyboardField.setValue(""); - EagUtils.sleep(10); - if(touchKeyboardForm != null) { + PlatformRuntime.sleep(10); + if (touchKeyboardForm != null) { touchKeyboardForm.removeChild(touchKeyboardField); - }else { + } else { touchKeyboardField.delete(); } touchKeyboardField = null; - if(touchKeyboardForm != null) { + if (touchKeyboardForm != null) { parent.removeChild(touchKeyboardForm); touchKeyboardForm = null; } return; } - if(touchKeyboardForm != null) { + if (touchKeyboardForm != null) { parent.removeChild(touchKeyboardForm); touchKeyboardForm = null; } @@ -1905,25 +2154,26 @@ public class PlatformInput { evt.preventDefault(); evt.stopPropagation(); JSObject obj = evt.getTimeStamp(); - if(TeaVMUtils.isTruthy(obj)) { - double d = ((JSNumber)obj).doubleValue(); - if(lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { + if (obj != null && TeaVMUtils.isTruthy(obj)) { + double d = ((JSNumber) obj).doubleValue(); + if (lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { return; } - if(lastTouchKeyboardEvtB != 0.0 && (d - lastTouchKeyboardEvtB) < 10.0) { + if (lastTouchKeyboardEvtB != 0.0 && (d - lastTouchKeyboardEvtB) < 10.0) { return; } - if(lastTouchKeyboardEvtC != 0.0 && (d - lastTouchKeyboardEvtC) < 10.0) { + if (lastTouchKeyboardEvtC != 0.0 && (d - lastTouchKeyboardEvtC) < 10.0) { return; } - if(!showniOSReturnTouchKeyboardWarning) { - PlatformRuntime.logger.info("Note: Generating return keystroke from submit event on form, this browser probably doesn't generate keydown/beforeinput/input when enter/return is pressed on the on-screen keyboard"); + if (!showniOSReturnTouchKeyboardWarning) { + PlatformRuntime.logger.info( + "Note: Generating return keystroke from submit event on form, this browser probably doesn't generate keydown/beforeinput/input when enter/return is pressed on the on-screen keyboard"); showniOSReturnTouchKeyboardWarning = true; } keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, KeyboardConstants.KEY_RETURN, '\n'); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, KeyboardConstants.KEY_RETURN, '\n'); } - + } }); touchKeyboardField = (HTMLInputElement) win.getDocument().createElement("input"); @@ -1945,22 +2195,24 @@ public class PlatformInput { touchKeyboardField.addEventListener("beforeinput", new EventListener() { @Override public void handleEvent(InputEvent evt) { - if(touchKeyboardField != evt.getTarget()) return; - if(!shownTouchKeyboardEventWarning) { - PlatformRuntime.logger.info("Note: Caught beforeinput event from on-screen keyboard, browser probably does not generate global keydown/keyup events on text fields, or does not respond to cancelling keydown"); + if (touchKeyboardField != evt.getTarget()) + return; + if (!shownTouchKeyboardEventWarning) { + PlatformRuntime.logger.info( + "Note: Caught beforeinput event from on-screen keyboard, browser probably does not generate global keydown/keyup events on text fields, or does not respond to cancelling keydown"); shownTouchKeyboardEventWarning = true; } JSObject obj = evt.getTimeStamp(); - if(TeaVMUtils.isTruthy(obj)) { - double d = ((JSNumber)obj).doubleValue(); - if(lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { + if (obj != null && TeaVMUtils.isTruthy(obj)) { + double d = ((JSNumber) obj).doubleValue(); + if (lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { return; } lastTouchKeyboardEvtB = d; } evt.preventDefault(); evt.stopPropagation(); - switch(evt.getInputType()) { + switch (evt.getInputType()) { case "insertParagraph": case "insertLineBreak": keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, KeyboardConstants.KEY_RETURN, '\n'); @@ -1986,9 +2238,10 @@ public class PlatformInput { case "insertCompositionText": case "insertReplacementText": String eventsToGenerate = evt.getData(); - for(int i = 0, l = eventsToGenerate.length(); i < l; ++i) { + for (int i = 0, l = eventsToGenerate.length(); i < l; ++i) { char c = eventsToGenerate.charAt(i); - int eag = KeyboardConstants.getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); + int eag = KeyboardConstants + .getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, eag, c); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, eag, c); } @@ -1998,9 +2251,9 @@ public class PlatformInput { case "insertFromDrop": case "insertFromYank": case "insertLink": - synchronized(pastedStrings) { + synchronized (pastedStrings) { pastedStrings.add(evt.getData()); - if(pastedStrings.size() > 64) { + if (pastedStrings.size() > 64) { pastedStrings.remove(0); } } @@ -2011,7 +2264,8 @@ public class PlatformInput { case "deleteByCut": break; default: - PlatformRuntime.logger.info("Ingoring InputEvent.inputType \"{}\" from on-screen keyboard", evt.getInputType()); + PlatformRuntime.logger.info("Ignoring InputEvent.inputType \"{}\" from on-screen keyboard", + evt.getInputType()); break; } } @@ -2019,41 +2273,45 @@ public class PlatformInput { touchKeyboardField.addEventListener("input", new EventListener() { @Override public void handleEvent(Event evt) { - if(touchKeyboardField != evt.getTarget()) return; + if (touchKeyboardField != evt.getTarget()) + return; JSObject obj = evt.getTimeStamp(); - if(!shownLegacyTouchKeyboardWarning) { - PlatformRuntime.logger.info("Note: Caught legacy input events from on-screen keyboard, browser could be outdated and doesn't support beforeinput event, or does not respond to cancelling beforeinput"); + if (!shownLegacyTouchKeyboardWarning) { + PlatformRuntime.logger.info( + "Note: Caught legacy input events from on-screen keyboard, browser could be outdated and doesn't support beforeinput event, or does not respond to cancelling beforeinput"); shownLegacyTouchKeyboardWarning = true; } - if(TeaVMUtils.isTruthy(obj)) { - double d = ((JSNumber)obj).doubleValue(); - if(lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { + if (obj != null && TeaVMUtils.isTruthy(obj)) { + double d = ((JSNumber) obj).doubleValue(); + if (lastTouchKeyboardEvtA != 0.0 && (d - lastTouchKeyboardEvtA) < 10.0) { return; } - if(lastTouchKeyboardEvtB != 0.0 && (d - lastTouchKeyboardEvtB) < 10.0) { + if (lastTouchKeyboardEvtB != 0.0 && (d - lastTouchKeyboardEvtB) < 10.0) { return; } lastTouchKeyboardEvtC = d; } String val = touchKeyboardField.getValue(); int l = val.length(); - if(l == 0) { + if (l == 0) { keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, KeyboardConstants.KEY_BACK, '\0'); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, KeyboardConstants.KEY_BACK, '\0'); - }else if(l == 1) { + } else if (l == 1) { char c = val.charAt(0); - int eag = KeyboardConstants.getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); + int eag = KeyboardConstants + .getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, eag, c); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, eag, c); - }else { + } else { val = val.trim(); l = val.length(); - if(l == 0) { + if (l == 0) { keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, KeyboardConstants.KEY_SPACE, ' '); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, KeyboardConstants.KEY_SPACE, ' '); - }else { + } else { char c = val.charAt(l - 1); - int eag = KeyboardConstants.getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); + int eag = KeyboardConstants + .getEaglerKeyFromBrowser(asciiUpperToKeyLegacy(Character.toUpperCase(c)), 0); keyboardFireEvent(EnumFireKeyboardEvent.KEY_DOWN, eag, c); keyboardFireEvent(EnumFireKeyboardEvent.KEY_UP, eag, c); } @@ -2065,7 +2323,8 @@ public class PlatformInput { touchKeyboardField.addEventListener("focus", new EventListener() { @Override public void handleEvent(Event evt) { - if(touchKeyboardField != evt.getTarget()) return; + if (touchKeyboardField != evt.getTarget()) + return; touchKeyboardField.setValue(" "); setSelectionRange(touchKeyboardField, 1, 1); } @@ -2073,7 +2332,8 @@ public class PlatformInput { touchKeyboardField.addEventListener("select", new EventListener() { @Override public void handleEvent(Event evt) { - if(touchKeyboardField != evt.getTarget()) return; + if (touchKeyboardField != evt.getTarget()) + return; evt.preventDefault(); evt.stopPropagation(); touchKeyboardField.setValue(" "); @@ -2086,24 +2346,54 @@ public class PlatformInput { touchKeyboardField.focus(); touchKeyboardField.select(); setSelectionRange(touchKeyboardField, 1, 1); - }else { + } else { touchCloseDeviceKeyboard0(false); } } - public static String touchGetPastedString() { - synchronized(pastedStrings) { - return pastedStrings.isEmpty() ? null : pastedStrings.remove(0); + public static int touchPointCount() { + return currentTouchState != null ? currentTouchState.getTargetTouchesSize() : 0; + } + + public static int touchPointUID(int pointId) { + return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).eventUID : -1; + } + + public static int touchPointX(int pointId) { + return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).posX : -1; + } + + public static int touchPointY(int pointId) { + return currentTouchState != null ? currentTouchState.getTargetTouches().get(pointId).posY : -1; + } + + public static float touchRadiusMixed(int pointId) { + if (currentTouchState != null) { + return currentTouchState.getTargetTouches().get(pointId).radius; + } else { + return 1.0f; } } + public static float touchRadiusX(int pointId) { + return currentTouchState != null + ? (float) currentTouchState.getTargetTouches().get(pointId).touch.getRadiusXSafe(5.0 * windowDPI) + : 1.0f; + } + + public static float touchRadiusY(int pointId) { + return currentTouchState != null + ? (float) currentTouchState.getTargetTouches().get(pointId).touch.getRadiusYSafe(5.0 * windowDPI) + : 1.0f; + } + public static void touchSetOpenKeyboardZone(int x, int y, int w, int h) { - if(w != 0 && h != 0) { - int xx = (int)(x / windowDPI); - int yy = (int)((windowHeight - y - h) / windowDPI); - int ww = (int)(w / windowDPI); - int hh = (int)(h / windowDPI); - if(xx != touchOpenZoneX || yy != touchOpenZoneY || ww != touchOpenZoneW || hh != touchOpenZoneH) { + if (w != 0 && h != 0) { + int xx = (int) (x / windowDPI); + int yy = (int) ((windowHeight - y - h) / windowDPI); + int ww = (int) (w / windowDPI); + int hh = (int) (h / windowDPI); + if (xx != touchOpenZoneX || yy != touchOpenZoneY || ww != touchOpenZoneW || hh != touchOpenZoneH) { CSSStyleDeclaration decl = touchKeyboardOpenZone.getStyle(); decl.setProperty("display", "block"); decl.setProperty("left", "" + xx + "px"); @@ -2115,8 +2405,8 @@ public class PlatformInput { touchOpenZoneW = ww; touchOpenZoneH = hh; } - }else { - if(touchOpenZoneW != 0 || touchOpenZoneH != 0) { + } else { + if (touchOpenZoneW != 0 || touchOpenZoneH != 0) { CSSStyleDeclaration decl = touchKeyboardOpenZone.getStyle(); decl.setProperty("display", "none"); decl.setProperty("top", "0px"); @@ -2131,270 +2421,164 @@ public class PlatformInput { } } - public static void touchCloseDeviceKeyboard() { - touchCloseDeviceKeyboard0(true); + private static boolean tryGrabCursorHook() { + if (pointerLockSupported == POINTER_LOCK_NONE) { + return false; + } + if (pointerLockFlag && !isPointerLocked()) { + mouseSetGrabbed(true); + return true; + } + return false; } - private static void touchCloseDeviceKeyboard0(boolean sync) { - if(touchKeyboardField != null) { - touchKeyboardField.blur(); - touchKeyboardField.setValue(""); - if(sync) { - EagUtils.sleep(10); - if(touchKeyboardForm != null) { - touchKeyboardForm.removeChild(touchKeyboardField); - }else { - touchKeyboardField.delete(); - } - touchKeyboardField = null; - }else { - final HTMLInputElement el = touchKeyboardField; - final HTMLFormElement el2 = touchKeyboardForm; - Window.setTimeout(() -> { - if(el2 != null) { - el2.removeChild(el); - el2.delete(); - }else { - el.delete(); - } - }, 10); - touchKeyboardField = null; - touchKeyboardForm = null; - return; - } - } - if(touchKeyboardForm != null) { - if(parent != null) { - parent.removeChild(touchKeyboardForm); - }else { - touchKeyboardForm.delete(); - } - touchKeyboardForm = null; - } + @JSBody(params = {}, script = "navigator.keyboard.unlock();") + private static native void unlockKeys(); + + public static void update() { + update(0); } - public static boolean touchIsDeviceKeyboardOpenMAYBE() { - return touchKeyboardField != null && isActiveElement(win.getDocument(), touchKeyboardField); - } - - @JSBody(params = { "doc", "el" }, script = "return doc.activeElement === el;") - private static native boolean isActiveElement(HTMLDocument doc, HTMLElement el); - - private static void enumerateGamepads() { - if(!gamepadSupported) return; - if(selectedGamepad != null) { - selectedGamepad = updateGamepad(selectedGamepad); - if(selectedGamepad == null || !TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { - selectedGamepad = null; + public static void update(int fpsLimit) { + double r = getDevicePixelRatio(win); + if (r < 0.01) + r = 1.0; + windowDPI = (float) r; + updateTouchOffset(); + int w = parent.getClientWidth(); + int h = parent.getClientHeight(); + int w2 = windowWidth = (int) (w * r); + int h2 = windowHeight = (int) (h * r); + if (PlatformRuntime.useVisualViewport) { + VisualViewport vv = PlatformRuntime.getVisualViewport(); + double scale = vv.getScale(); + visualViewportX = (int) (vv.getPageLeft() * r * scale); + visualViewportY = (int) (vv.getPageTop() * r * scale); + visualViewportW = (int) (vv.getWidth() * r * scale); + visualViewportH = (int) (vv.getHeight() * r * scale); + if (visualViewportW < 1) + visualViewportW = 1; + if (visualViewportH < 1) + visualViewportH = 1; + if (visualViewportX < 0) { + visualViewportW += visualViewportX; + visualViewportX = 0; + } else if (visualViewportX >= windowWidth) { + visualViewportX = windowWidth - 1; } - } - List oldList = null; - if(!gamepadList.isEmpty()) { - oldList = new ArrayList<>(gamepadList); - gamepadList.clear(); - } - Gamepad[] gamepads = Navigator.getGamepads(); - if(gamepads != null && gamepads.length > 0) { - for(int i = 0; i < gamepads.length; ++i) { - Gamepad g = gamepads[i]; - if(TeaVMUtils.isTruthy(g) && g.isConnected() && "standard".equals(g.getMapping())) { - gamepadList.add(g); - } + if (visualViewportY < 0) { + visualViewportH += visualViewportY; + visualViewportY = 0; + } else if (visualViewportY >= windowHeight) { + visualViewportY = windowHeight - 1; } - } - if(selectedGamepad != null) { - selectedGamepadName = selectedGamepad.getId(); - } - if(oldList == null) { - if(!gamepadList.isEmpty()) { - for(int i = 0, l = gamepadList.size(); i < l; ++i) { - PlatformRuntime.logger.info("Found controller: {}", gamepadList.get(i).getId()); - } + if ((visualViewportX + visualViewportW) > windowWidth) { + visualViewportW = windowWidth - visualViewportX; } - }else { - if(gamepadList.isEmpty()) { - for(int i = 0, l = oldList.size(); i < l; ++i) { - PlatformRuntime.logger.info("Lost controller: {}", oldList.get(i).getId()); - } - }else { - Map oldDevCounts = new HashMap<>(); - for(Gamepad gg : oldList) { - String s = gg.getId(); - Integer i = oldDevCounts.get(s); - if(i != null) { - oldDevCounts.put(s, Integer.valueOf(i.intValue() + 1)); - }else { - oldDevCounts.put(s, Integer.valueOf(1)); - } - } - Map newDevCounts = new HashMap<>(); - for(Gamepad gg : gamepadList) { - String s = gg.getId(); - Integer i = newDevCounts.get(s); - if(i != null) { - newDevCounts.put(s, Integer.valueOf(i.intValue() + 1)); - }else { - newDevCounts.put(s, Integer.valueOf(1)); - } - } - for(Entry etr : oldDevCounts.entrySet()) { - Integer i = newDevCounts.get(etr.getKey()); - if(i == null) { - for(int j = 0, l = etr.getValue().intValue(); j < l; ++j) { - PlatformRuntime.logger.info("Lost controller: {}", etr.getKey()); - } - }else { - int j = i.intValue(); - int k = etr.getValue().intValue(); - if(k != j) { - if(k < j) { - for(int m = 0, l = j - k; m < l; ++m) { - PlatformRuntime.logger.info("Found controller: {}", etr.getKey()); - } - }else { - for(int m = 0, l = k - j; m < l; ++m) { - PlatformRuntime.logger.info("Lost controller: {}", etr.getKey()); + if ((visualViewportY + visualViewportH) > windowHeight) { + visualViewportH = windowHeight - visualViewportY; + } + } else { + visualViewportX = 0; + visualViewportY = 0; + visualViewportW = w2; + visualViewportH = h2; + } + if (canvas.getWidth() != w2) { + canvas.setWidth(w2); + } + if (canvas.getHeight() != h2) { + canvas.setHeight(h2); + } + WebGLBackBuffer.flipBuffer(w2, h2); + PlatformScreenRecord.captureFrameHook(); + if (getVisibilityState(win.getDocument())) { + if (vsyncSupport && vsync) { + syncTimer = 0.0; + asyncRequestAnimationFrame(); + } else { + if (fpsLimit <= 0 || fpsLimit > 1000) { + syncTimer = 0.0; + PlatformRuntime.swapDelayTeaVM(); + } else { + double frameMillis = (1000.0 / fpsLimit); + if (syncTimer == 0.0) { + syncTimer = PlatformRuntime.steadyTimeMillisTeaVM() + frameMillis; + PlatformRuntime.swapDelayTeaVM(); + } else { + double millis = PlatformRuntime.steadyTimeMillisTeaVM(); + int remaining = (int) (syncTimer - millis); + if (remaining > 0) { + if (!PlatformRuntime.useDelayOnSwap && PlatformRuntime.immediateContinueSupport) { + PlatformRuntime.immediateContinue(); // cannot stack setTimeouts, or it will throttle + millis = PlatformRuntime.steadyTimeMillisTeaVM(); + remaining = (int) (syncTimer - millis); + if (remaining > 0) { + PlatformRuntime.sleep((int) remaining); } + } else { + PlatformRuntime.sleep((int) remaining); } + } else { + PlatformRuntime.swapDelayTeaVM(); } - } - } - for(Entry etr : newDevCounts.entrySet()) { - Integer i = oldDevCounts.get(etr.getKey()); - if(i == null) { - for(int j = 0, l = etr.getValue().intValue(); j < l; ++j) { - PlatformRuntime.logger.info("Found controller: {}", etr.getKey()); + millis = PlatformRuntime.steadyTimeMillisTeaVM(); + if ((syncTimer += frameMillis) < millis) { + syncTimer = millis; } } } } - + } else { + syncTimer = 0.0; + PlatformRuntime.sleep(50); } } - public static int gamepadGetValidDeviceCount() { - if(!gamepadSupported) return 0; - return gamepadList.size(); - } - - public static String gamepadGetDeviceName(int deviceId) { - if(gamepadSupported && deviceId >= 0 && deviceId < gamepadList.size()) { - return gamepadList.get(deviceId).getId(); - }else { - return "Unknown"; - } - } - - public static void gamepadSetSelectedDevice(int deviceId) { - if(!gamepadSupported) return; - gamepadReset(); - if(deviceId >= 0 && deviceId < gamepadList.size()) { - selectedGamepad = gamepadList.get(deviceId); - gamepadTimestamp = -1.0; - if(!TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { - selectedGamepad = null; - } - }else { - selectedGamepad = null; - } - } - - private static void gamepadReset() { - for(int i = 0; i < gamepadButtonStates.length; ++i) { - gamepadButtonStates[i] = false; - } - for(int i = 0; i < gamepadAxisStates.length; ++i) { - gamepadAxisStates[i] = 0.0f; - } - } - - @JSBody(params = { }, script = "return (typeof navigator.getGamepads === \"function\");") - private static native boolean gamepadSupported(); - @JSBody(params = { "gp" }, script = "return navigator.getGamepads()[gp.index];") private static native Gamepad updateGamepad(Gamepad gp); - public static void gamepadUpdate() { - if(!gamepadSupported) return; - if(selectedGamepad != null) { - selectedGamepad = updateGamepad(selectedGamepad); - if(selectedGamepad == null || !TeaVMUtils.isTruthy(selectedGamepad) || !selectedGamepad.isConnected()) { - gamepadReset(); - selectedGamepad = null; - return; - } - double ts = selectedGamepad.getTimestamp(); - if(ts != gamepadTimestamp) { - gamepadTimestamp = ts; - gamepadReset(); - GamepadButton[] btns = selectedGamepad.getButtons(); - for(int i = 0; i < btns.length; ++i) { - int j = GamepadConstants.getEaglerButtonFromBrowser(i); - if(j >= 0 && j < gamepadButtonStates.length) { - gamepadButtonStates[j] = btns[i].isPressed(); - } - } - double[] axes = selectedGamepad.getAxes(); - for(int i = 0; i < axes.length; ++i) { - if(i >= 4) { - break; - } - gamepadAxisStates[i] = (float)axes[i]; - } - } - }else { - gamepadReset(); - } - } - - public static boolean gamepadIsValid() { - if(!gamepadSupported) return false; - return selectedGamepad != null; - } - - public static String gamepadGetName() { - return gamepadSupported && selectedGamepad != null ? selectedGamepadName : "Unknown"; - } - - public static boolean gamepadGetButtonState(int button) { - return gamepadSupported && selectedGamepad != null && button >= 0 && button < gamepadButtonStates.length ? gamepadButtonStates[button] : false; - } - - public static float gamepadGetAxis(int axis) { - return gamepadSupported && selectedGamepad != null && axis >= 0 && axis < gamepadAxisStates.length ? gamepadAxisStates[axis] : 0.0f; - } - - public static float getDPI() { - return windowDPI; - } - - @JSBody(params = { "el" }, script = "var xx = 0; var yy = 0;" - + "while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {" - + "xx += el.offsetLeft - el.scrollLeft;" - + "yy += el.offsetTop - el.scrollTop;" - + "el = el.offsetParent;" - + "} return { left: xx, top: yy };") - private static native TextRectangle getPositionOf(HTMLElement el); - private static void updateTouchOffset() { try { TextRectangle bounds = getPositionOf(canvas); touchOffsetXTeaVM = bounds.getLeft(); touchOffsetYTeaVM = bounds.getTop(); - }catch(Throwable t) { + } catch (Throwable t) { touchOffsetXTeaVM = 0; touchOffsetYTeaVM = 0; } } - static void initWindowSize(int sw, int sh, float dpi) { - windowWidth = sw; - windowHeight = sh; - windowDPI = dpi; - visualViewportX = 0; - visualViewportY = 0; - visualViewportW = sw; - visualViewportH = sh; + public static boolean wasResized() { + if (windowWidth != lastWasResizedWindowWidth || windowHeight != lastWasResizedWindowHeight + || windowDPI != lastWasResizedWindowDPI) { + lastWasResizedWindowWidth = windowWidth; + lastWasResizedWindowHeight = windowHeight; + lastWasResizedWindowDPI = windowDPI; + return true; + } else { + return false; + } } + public static boolean wasVisualViewportResized() { + if (visualViewportX != lastWasResizedVisualViewportX || visualViewportY != lastWasResizedVisualViewportY + || visualViewportW != lastWasResizedVisualViewportW + || visualViewportH != lastWasResizedVisualViewportH) { + lastWasResizedVisualViewportX = visualViewportX; + lastWasResizedVisualViewportY = visualViewportY; + lastWasResizedVisualViewportW = visualViewportW; + lastWasResizedVisualViewportH = visualViewportH; + return true; + } else { + return false; + } + } + + @JSBody(params = { "doc" }, script = "doc.webkitExitFullscreen();") + private static native void webkitExitFullscreen(HTMLDocument doc); + + @JSBody(params = { "el" }, script = "el.webkitRequestFullscreen();") + private static native void webkitRequestFullscreen(HTMLElement element); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java index 1ba443e8..14207caf 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformNetworking.java @@ -6,35 +6,36 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformNetworking { - + private static final Logger logger = LogManager.getLogger("PlatformNetworking"); - + public static IWebSocketClient openWebSocket(String socketURI) { try { return new TeaVMWebSocketClient(socketURI); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Could not open WebSocket to \"{}\"!", socketURI); logger.error(t); return null; } } - + public static IWebSocketClient openWebSocketUnsafe(String socketURI) { return new TeaVMWebSocketClient(socketURI); } - + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java index bc40081b..0a1b7336 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformOpenGL.java @@ -22,23 +22,24 @@ import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformOpenGL { - + private static final Logger logger = LogManager.getLogger("PlatformOpenGL"); - + static WebGL2RenderingContext ctx = null; static int glesVers = -1; @@ -73,27 +74,775 @@ public class PlatformOpenGL { static final int INSTANCE_IMPL_ANGLE = 1; static int instancingImpl = INSTANCE_IMPL_NONE; + public static final void _wglActiveTexture(int texture) { + ctx.activeTexture(texture); + } + + public static final void _wglAttachShader(IProgramGL obj, IShaderGL shader) { + ctx.attachShader(((OpenGLObjects.ProgramGL) obj).ptr, ((OpenGLObjects.ShaderGL) shader).ptr); + } + + public static final void _wglBindAttribLocation(IProgramGL obj, int index, String name) { + ctx.bindAttribLocation(((OpenGLObjects.ProgramGL) obj).ptr, index, name); + } + + public static final void _wglBindBuffer(int target, IBufferGL obj) { + ctx.bindBuffer(target, obj != null ? ((OpenGLObjects.BufferGL) obj).ptr : null); + } + + public static final void _wglBindBufferRange(int target, int index, IBufferGL buffer, int offset, int size) { + ctx.bindBufferRange(target, index, ((OpenGLObjects.BufferGL) buffer).ptr, offset, size); + } + + public static final void _wglBindFramebuffer(int target, IFramebufferGL framebuffer) { + if (framebuffer == null) { + ctx.bindFramebuffer(target, PlatformRuntime.mainFramebuffer); + if (glesVers != 200) { + ctx.drawBuffers(new int[] { WebGL2RenderingContext.COLOR_ATTACHMENT0 }); + } + } else { + ctx.bindFramebuffer(target, ((OpenGLObjects.FramebufferGL) framebuffer).ptr); + } + } + + public static final void _wglBindRenderbuffer(int target, IRenderbufferGL renderbuffer) { + ctx.bindRenderbuffer(target, renderbuffer == null ? null : ((OpenGLObjects.RenderbufferGL) renderbuffer).ptr); + } + + public static final void _wglBindTexture(int target, ITextureGL obj) { + ctx.bindTexture(target, obj == null ? null : ((OpenGLObjects.TextureGL) obj).ptr); + } + + public static final void _wglBindVertexArray(IBufferArrayGL obj) { + WebGLVertexArray ptr = obj != null ? ((OpenGLObjects.BufferArrayGL) obj).ptr : null; + switch (vertexArrayImpl) { + case VAO_IMPL_CORE: + ctx.bindVertexArray(ptr); + break; + case VAO_IMPL_OES: + OESVertexArrayObject.bindVertexArrayOES(ptr); + break; + default: + throw new UnsupportedOperationException(); + } + } + + public static final void _wglBlendColor(float r, float g, float b, float a) { + ctx.blendColor(r, g, b, a); + } + + public static final void _wglBlendEquation(int glEnum) { + ctx.blendEquation(glEnum); + } + + public static final void _wglBlendFunc(int src, int dst) { + ctx.blendFunc(src, dst); + } + + public static final void _wglBlendFuncSeparate(int srcColor, int dstColor, int srcAlpha, int dstAlpha) { + ctx.blendFuncSeparate(srcColor, dstColor, srcAlpha, dstAlpha); + } + + public static final void _wglBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, + int dstX1, int dstY1, int bits, int filter) { + ctx.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, bits, filter); + } + + public static final void _wglBufferData(int target, ByteBuffer data, int usage) { + ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView8(data), usage); + } + + public static final void _wglBufferData(int target, FloatBuffer data, int usage) { + ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView32F(data), usage); + } + + public static final void _wglBufferData(int target, int size, int usage) { + ctx.bufferData(target, size, usage); + } + + public static final void _wglBufferData(int target, IntBuffer data, int usage) { + ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView32(data), usage); + } + + public static final void _wglBufferSubData(int target, int offset, ByteBuffer data) { + ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView8(data)); + } + + public static final void _wglBufferSubData(int target, int offset, FloatBuffer data) { + ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView32F(data)); + } + + public static final void _wglBufferSubData(int target, int offset, IntBuffer data) { + ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView32(data)); + } + + public static final int _wglCheckFramebufferStatus(int target) { + return ctx.checkFramebufferStatus(target); + } + + public static final void _wglClear(int bits) { + ctx.clear(bits); + } + + public static final void _wglClearColor(float r, float g, float b, float a) { + ctx.clearColor(r, g, b, a); + } + + public static final void _wglClearDepth(float f) { + ctx.clearDepth(f); + } + + public static final void _wglColorMask(boolean r, boolean g, boolean b, boolean a) { + ctx.colorMask(r, g, b, a); + } + + public static final void _wglCompileShader(IShaderGL obj) { + ctx.compileShader(((OpenGLObjects.ShaderGL) obj).ptr); + } + + public static final void _wglCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, + int width, int height) { + ctx.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); + } + + public static final IFramebufferGL _wglCreateFramebuffer() { + return new OpenGLObjects.FramebufferGL(ctx.createFramebuffer()); + } + + public static final IProgramGL _wglCreateProgram() { + return new OpenGLObjects.ProgramGL(ctx.createProgram()); + } + + public static final IRenderbufferGL _wglCreateRenderbuffer() { + return new OpenGLObjects.RenderbufferGL(ctx.createRenderbuffer()); + } + + public static final IShaderGL _wglCreateShader(int type) { + return new OpenGLObjects.ShaderGL(ctx.createShader(type)); + } + + public static final void _wglCullFace(int glEnum) { + ctx.cullFace(glEnum); + } + + public static final void _wglDeleteBuffers(IBufferGL obj) { + ctx.deleteBuffer(((OpenGLObjects.BufferGL) obj).ptr); + } + + public static final void _wglDeleteFramebuffer(IFramebufferGL obj) { + ctx.deleteFramebuffer(((OpenGLObjects.FramebufferGL) obj).ptr); + } + + public static final void _wglDeleteProgram(IProgramGL obj) { + ctx.deleteProgram(((OpenGLObjects.ProgramGL) obj).ptr); + } + + public static final void _wglDeleteQueries(IQueryGL obj) { + ctx.deleteQuery(((OpenGLObjects.QueryGL) obj).ptr); + } + + public static final void _wglDeleteRenderbuffer(IRenderbufferGL obj) { + ctx.deleteRenderbuffer(((OpenGLObjects.RenderbufferGL) obj).ptr); + } + + public static final void _wglDeleteShader(IShaderGL obj) { + ctx.deleteShader(((OpenGLObjects.ShaderGL) obj).ptr); + } + + public static final void _wglDeleteTextures(ITextureGL obj) { + ctx.deleteTexture(((OpenGLObjects.TextureGL) obj).ptr); + } + + public static final void _wglDeleteVertexArrays(IBufferArrayGL obj) { + WebGLVertexArray ptr = ((OpenGLObjects.BufferArrayGL) obj).ptr; + switch (vertexArrayImpl) { + case VAO_IMPL_CORE: + ctx.deleteVertexArray(ptr); + break; + case VAO_IMPL_OES: + OESVertexArrayObject.deleteVertexArrayOES(ptr); + break; + default: + throw new UnsupportedOperationException(); + } + } + + public static final void _wglDepthFunc(int glEnum) { + ctx.depthFunc(glEnum); + } + + public static final void _wglDepthMask(boolean mask) { + ctx.depthMask(mask); + } + + public static final void _wglDetachShader(IProgramGL obj, IShaderGL shader) { + ctx.detachShader(((OpenGLObjects.ProgramGL) obj).ptr, ((OpenGLObjects.ShaderGL) shader).ptr); + } + + public static final void _wglDisable(int glEnum) { + ctx.disable(glEnum); + } + + public static final void _wglDisableVertexAttribArray(int index) { + ctx.disableVertexAttribArray(index); + } + + public static final void _wglDrawArrays(int mode, int first, int count) { + ctx.drawArrays(mode, first, count); + // checkErr("_wglDrawArrays(" + mode + ", " + first + ", " + count + ");"); + } + + public static final void _wglDrawArraysInstanced(int mode, int first, int count, int instances) { + switch (instancingImpl) { + case INSTANCE_IMPL_CORE: + ctx.drawArraysInstanced(mode, first, count, instances); + break; + case INSTANCE_IMPL_ANGLE: + ANGLEInstancedArrays.drawArraysInstancedANGLE(mode, first, count, instances); + break; + default: + throw new UnsupportedOperationException(); + } + // checkErr("_wglDrawArraysInstanced(" + mode + ", " + first + ", " + count + ", + // " + instanced + ");"); + } + + public static final void _wglDrawBuffers(int buffer) { + if (glesVers == 200) { + if (buffer != 0x8CE0) { // GL_COLOR_ATTACHMENT0 + throw new UnsupportedOperationException(); + } + } else { + ctx.drawBuffers(new int[] { buffer }); + } + } + + public static final void _wglDrawBuffers(int[] buffers) { + if (glesVers == 200) { + if (buffers.length != 1 || buffers[0] != 0x8CE0) { // GL_COLOR_ATTACHMENT0 + throw new UnsupportedOperationException(); + } + } else { + ctx.drawBuffers(buffers); + } + } + + public static final void _wglDrawElements(int mode, int count, int type, int offset) { + ctx.drawElements(mode, count, type, offset); + // checkErr("_wglDrawElements(" + mode + ", " + count + ", " + type + ", " + + // offset + ");"); + } + + public static final void _wglDrawElementsInstanced(int mode, int count, int type, int offset, int instances) { + switch (instancingImpl) { + case INSTANCE_IMPL_CORE: + ctx.drawElementsInstanced(mode, count, type, offset, instances); + break; + case INSTANCE_IMPL_ANGLE: + ANGLEInstancedArrays.drawElementsInstancedANGLE(mode, count, type, offset, instances); + break; + default: + throw new UnsupportedOperationException(); + } + // checkErr("_wglDrawElementsInstanced(" + mode + ", " + count + ", " + type + + // ", " + offset + ", " + instanced + ");"); + } + + public static final void _wglEnable(int glEnum) { + ctx.enable(glEnum); + } + + public static final void _wglEnableVertexAttribArray(int index) { + ctx.enableVertexAttribArray(index); + } + + public static final void _wglFramebufferRenderbuffer(int target, int attachment, int renderbufferTarget, + IRenderbufferGL renderbuffer) { + ctx.framebufferRenderbuffer(target, attachment, renderbufferTarget, + ((OpenGLObjects.RenderbufferGL) renderbuffer).ptr); + } + + public static final void _wglFramebufferTexture2D(int target, int attachment, int texTarget, ITextureGL texture, + int level) { + ctx.framebufferTexture2D(target, attachment, texTarget, ((OpenGLObjects.TextureGL) texture).ptr, level); + } + + public static final void _wglFramebufferTextureLayer(int target, int attachment, ITextureGL texture, int level, + int layer) { + ctx.framebufferTextureLayer(target, attachment, ((OpenGLObjects.TextureGL) texture).ptr, level, layer); + } + + public static final IBufferGL _wglGenBuffers() { + return new OpenGLObjects.BufferGL(ctx.createBuffer()); + } + + public static final void _wglGenerateMipmap(int target) { + ctx.generateMipmap(target); + } + + public static final IQueryGL _wglGenQueries() { + return new OpenGLObjects.QueryGL(ctx.createQuery()); + } + + public static final ITextureGL _wglGenTextures() { + return new OpenGLObjects.TextureGL(ctx.createTexture()); + } + + public static final IBufferArrayGL _wglGenVertexArrays() { + switch (vertexArrayImpl) { + case VAO_IMPL_CORE: + return new OpenGLObjects.BufferArrayGL(ctx.createVertexArray()); + case VAO_IMPL_OES: + return new OpenGLObjects.BufferArrayGL(OESVertexArrayObject.createVertexArrayOES()); + default: + throw new UnsupportedOperationException(); + } + } + + public static final int _wglGetAttribLocation(IProgramGL obj, String name) { + return ctx.getAttribLocation(((OpenGLObjects.ProgramGL) obj).ptr, name); + } + + public static final int _wglGetError() { + return ctx.getError(); + } + + public static final int _wglGetInteger(int param) { + return ctx.getParameteri(param); + } + + public static final int _wglGetProgrami(IProgramGL obj, int param) { + return ctx.getProgramParameteri(((OpenGLObjects.ProgramGL) obj).ptr, param); + } + + public static final String _wglGetProgramInfoLog(IProgramGL obj) { + return ctx.getProgramInfoLog(((OpenGLObjects.ProgramGL) obj).ptr); + } + + public static final int _wglGetShaderi(IShaderGL obj, int param) { + return ctx.getShaderParameteri(((OpenGLObjects.ShaderGL) obj).ptr, param); + } + + public static final String _wglGetShaderInfoLog(IShaderGL obj) { + return ctx.getShaderInfoLog(((OpenGLObjects.ShaderGL) obj).ptr); + } + + public static final String _wglGetString(int param) { + if (hasWEBGLDebugRendererInfo) { + String s; + switch (param) { + case 0x1f00: // VENDOR + s = ctx.getParameterString(0x9245); // UNMASKED_VENDOR_WEBGL + if (s == null) { + s = ctx.getParameterString(0x1f00); // VENDOR + } + return s; + case 0x1f01: // RENDERER + s = ctx.getParameterString(0x9246); // UNMASKED_RENDERER_WEBGL + if (s == null) { + s = ctx.getParameterString(0x1f01); // RENDERER + } + return s; + default: + return ctx.getParameterString(param); + } + } else { + return ctx.getParameterString(param); + } + } + + public static final int _wglGetUniformBlockIndex(IProgramGL obj, String name) { + int i = ctx.getUniformBlockIndex(((OpenGLObjects.ProgramGL) obj).ptr, name); + if (i > 2147483647) { + i = -1; + } + return i; + } + + public static final IUniformGL _wglGetUniformLocation(IProgramGL obj, String name) { + WebGLUniformLocation loc = ctx.getUniformLocation(((OpenGLObjects.ProgramGL) obj).ptr, name); + if (loc != null) { + return new OpenGLObjects.UniformGL(loc); + } else { + return null; + } + } + + public static final void _wglLineWidth(float width) { + ctx.lineWidth(width); + } + + public static final void _wglLinkProgram(IProgramGL obj) { + ctx.linkProgram(((OpenGLObjects.ProgramGL) obj).ptr); + } + + public static final void _wglPixelStorei(int pname, int value) { + ctx.pixelStorei(pname, value); + } + + public static final void _wglPolygonOffset(float f1, float f2) { + ctx.polygonOffset(f1, f2); + } + + public static final void _wglReadBuffer(int buffer) { + ctx.readBuffer(buffer); + } + + public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, + ByteBuffer data) { + ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, + FloatBuffer data) { + ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView32F(data)); + } + + public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, IntBuffer data) { + ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView32(data)); + } + + public static final void _wglReadPixels_u16(int x, int y, int width, int height, int format, int type, + ByteBuffer data) { + ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView16Unsigned(data)); + } + + public static final void _wglRenderbufferStorage(int target, int internalformat, int width, int height) { + ctx.renderbufferStorage(target, internalformat, width, height); + } + + public static final void _wglShaderSource(IShaderGL obj, String source) { + ctx.shaderSource(((OpenGLObjects.ShaderGL) obj).ptr, source); + } + + public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, ByteBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, IntBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, ByteBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); + } + + public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, FloatBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); + } + + public static final void _wglTexImage2Du16(int target, int level, int internalFormat, int width, int height, + int border, int format, int type, ByteBuffer data) { + ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); + } + + public static final void _wglTexImage3D(int target, int level, int internalFormat, int width, int height, int depth, + int border, int format, int type, ByteBuffer data) { + ctx.texImage3D(target, level, internalFormat, width, height, depth, border, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglTexParameterf(int target, int param, float value) { + ctx.texParameterf(target, param, value); + } + + public static final void _wglTexParameteri(int target, int param, int value) { + ctx.texParameteri(target, param, value); + } + + public static final void _wglTexStorage2D(int target, int levels, int internalFormat, int w, int h) { + ctx.texStorage2D(target, levels, internalFormat, w, h); + } + + public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, + int format, int type, ByteBuffer data) { + ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, + int format, int type, IntBuffer data) { + ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); + } + + public static final void _wglTexSubImage2Df32(int target, int level, int xoffset, int yoffset, int width, + int height, int format, int type, FloatBuffer data) { + ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); + } + + public static final void _wglTexSubImage2Du16(int target, int level, int xoffset, int yoffset, int width, + int height, int format, int type, ByteBuffer data) { + ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, + data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); + } + + public static final void _wglUniform1f(IUniformGL obj, float x) { + if (obj != null) + ctx.uniform1f(((OpenGLObjects.UniformGL) obj).ptr, x); + } + + public static final void _wglUniform1i(IUniformGL obj, int x) { + if (obj != null) + ctx.uniform1i(((OpenGLObjects.UniformGL) obj).ptr, x); + } + + public static final void _wglUniform2f(IUniformGL obj, float x, float y) { + if (obj != null) + ctx.uniform2f(((OpenGLObjects.UniformGL) obj).ptr, x, y); + } + + public static final void _wglUniform2i(IUniformGL obj, int x, int y) { + if (obj != null) + ctx.uniform2i(((OpenGLObjects.UniformGL) obj).ptr, x, y); + } + + public static final void _wglUniform3f(IUniformGL obj, float x, float y, float z) { + if (obj != null) + ctx.uniform3f(((OpenGLObjects.UniformGL) obj).ptr, x, y, z); + } + + public static final void _wglUniform3i(IUniformGL obj, int x, int y, int z) { + if (obj != null) + ctx.uniform3i(((OpenGLObjects.UniformGL) obj).ptr, x, y, z); + } + + public static final void _wglUniform4f(IUniformGL obj, float x, float y, float z, float w) { + if (obj != null) + ctx.uniform4f(((OpenGLObjects.UniformGL) obj).ptr, x, y, z, w); + } + + public static final void _wglUniform4i(IUniformGL obj, int x, int y, int z, int w) { + if (obj != null) + ctx.uniform4i(((OpenGLObjects.UniformGL) obj).ptr, x, y, z, w); + } + + public static final void _wglUniformBlockBinding(IProgramGL obj, int blockIndex, int bufferIndex) { + ctx.uniformBlockBinding(((OpenGLObjects.ProgramGL) obj).ptr, blockIndex, bufferIndex); + } + + public static final void _wglUniformMatrix2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix2fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUniformMatrix3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix3fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUniformMatrix3x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix3x2fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUniformMatrix4fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix4fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUniformMatrix4x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix4x2fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUniformMatrix4x3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { + if (obj != null) + ctx.uniformMatrix4x3fv(((OpenGLObjects.UniformGL) obj).ptr, transpose, + mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); + } + + public static final void _wglUseProgram(IProgramGL obj) { + ctx.useProgram(obj == null ? null : ((OpenGLObjects.ProgramGL) obj).ptr); + } + + public static final void _wglVertexAttribDivisor(int index, int divisor) { + switch (instancingImpl) { + case INSTANCE_IMPL_CORE: + ctx.vertexAttribDivisor(index, divisor); + break; + case INSTANCE_IMPL_ANGLE: + ANGLEInstancedArrays.vertexAttribDivisorANGLE(index, divisor); + break; + default: + throw new UnsupportedOperationException(); + } + } + + public static final void _wglVertexAttribPointer(int index, int size, int type, boolean normalized, int stride, + int offset) { + ctx.vertexAttribPointer(index, size, type, normalized, stride, offset); + } + + public static final void _wglViewport(int x, int y, int w, int h) { + ctx.viewport(x, y, w, h); + } + + public static final boolean checkAnisotropicFilteringSupport() { + return hasEXTTextureFilterAnisotropic; + } + + private static final void checkErr(String name) { + int i = ctx.getError(); + if (i != 0) { + logger.error("########## GL ERROR ##########"); + logger.error("@ {}", name); + do { + logger.error("#{} - {}", i, EaglercraftGPU.gluErrorString(i)); + } while ((i = ctx.getError()) != 0); + try { + throw new RuntimeException("GL Error Detected!"); + } catch (Throwable t) { + logger.log(Level.ERROR, t); + } + logger.error("##############################"); + } + } + + public static final boolean checkEXTGPUShader5Capable() { + return false; + } + + public static final boolean checkFBORenderMipmapCapable() { + return glesVers >= 300 || hasOESFBORenderMipmap; + } + + public static final boolean checkHDRFramebufferSupport(int bits) { + switch (bits) { + case 16: + return hasFBO16FSupport; + case 32: + return hasFBO32FSupport; + default: + return false; + } + } + + public static final boolean checkInstancingCapable() { + return instancingImpl != INSTANCE_IMPL_NONE; + } + + // legacy + public static final boolean checkLinearHDR32FSupport() { + return hasLinearHDR32FSupport; + } + + public static final boolean checkLinearHDRFilteringSupport(int bits) { + switch (bits) { + case 16: + return hasLinearHDR16FSupport; + case 32: + return hasLinearHDR32FSupport; + default: + return false; + } + } + + public static final boolean checkNPOTCapable() { + return glesVers >= 300; + } + + public static final boolean checkOESGPUShader5Capable() { + return false; + } + + public static final int checkOpenGLESVersion() { + return glesVers; + } + + public static final boolean checkTexStorageCapable() { + return glesVers >= 300; + } + + public static final boolean checkTextureLODCapable() { + return glesVers >= 300 || hasEXTShaderTextureLOD; + } + + public static final boolean checkVAOCapable() { + return vertexArrayImpl != VAO_IMPL_NONE; + } + + public static final List dumpActiveExtensions() { + List exts = new ArrayList<>(); + if (hasANGLEInstancedArrays) + exts.add("ANGLE_instanced_arrays"); + if (hasEXTColorBufferFloat) + exts.add("EXT_color_buffer_float"); + if (hasEXTColorBufferHalfFloat) + exts.add("EXT_color_buffer_half_float"); + if (hasEXTShaderTextureLOD) + exts.add("EXT_shader_texture_lod"); + if (hasOESFBORenderMipmap) + exts.add("OES_fbo_render_mipmap"); + if (hasOESVertexArrayObject) + exts.add("OES_vertex_array_object"); + if (hasOESTextureFloat) + exts.add("OES_texture_float"); + if (hasOESTextureFloatLinear) + exts.add("OES_texture_float_linear"); + if (hasOESTextureHalfFloat) + exts.add("OES_texture_half_float"); + if (hasOESTextureHalfFloatLinear) + exts.add("OES_texture_half_float_linear"); + if (hasEXTTextureFilterAnisotropic) + exts.add("EXT_texture_filter_anisotropic"); + if (hasWEBGLDebugRendererInfo) + exts.add("WEBGL_debug_renderer_info"); + return exts; + } + + public static final void enterVAOEmulationHook() { + WebGLBackBuffer.enterVAOEmulationPhase(); + } + + public static final String[] getAllExtensions() { + return ctx.getSupportedExtensionArray(); + } + static void setCurrentContext(int glesVersIn, WebGL2RenderingContext context) { ctx = context; - if(ctx != null) { + if (ctx != null) { glesVers = glesVersIn; - boolean allowExts = ((TeaVMClientConfigAdapter)PlatformRuntime.getClientConfigAdapter()).isUseWebGLExtTeaVM(); - if(allowExts) { - ANGLEInstancedArrays = glesVersIn == 200 ? (WebGLANGLEInstancedArrays) ctx.getExtension("ANGLE_instanced_arrays") : null; + boolean allowExts = ((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()) + .isUseWebGLExtTeaVM(); + if (allowExts) { + ANGLEInstancedArrays = glesVersIn == 200 + ? (WebGLANGLEInstancedArrays) ctx.getExtension("ANGLE_instanced_arrays") + : null; hasANGLEInstancedArrays = glesVersIn == 200 && ANGLEInstancedArrays != null; - hasEXTColorBufferFloat = (glesVersIn == 310 || glesVersIn == 300) && ctx.getExtension("EXT_color_buffer_float") != null; + hasEXTColorBufferFloat = (glesVersIn == 310 || glesVersIn == 300) + && ctx.getExtension("EXT_color_buffer_float") != null; hasEXTColorBufferHalfFloat = !hasEXTColorBufferFloat - && (glesVersIn == 310 || glesVersIn == 300 || glesVersIn == 200) && ctx.getExtension("EXT_color_buffer_half_float") != null; + && (glesVersIn == 310 || glesVersIn == 300 || glesVersIn == 200) + && ctx.getExtension("EXT_color_buffer_half_float") != null; hasEXTShaderTextureLOD = glesVersIn == 200 && ctx.getExtension("EXT_shader_texture_lod") != null; hasOESFBORenderMipmap = glesVersIn == 200 && ctx.getExtension("OES_fbo_render_mipmap") != null; - OESVertexArrayObject = glesVersIn == 200 ? (WebGLOESVertexArrayObject) ctx.getExtension("OES_vertex_array_object") : null; + OESVertexArrayObject = glesVersIn == 200 + ? (WebGLOESVertexArrayObject) ctx.getExtension("OES_vertex_array_object") + : null; hasOESVertexArrayObject = glesVersIn == 200 && OESVertexArrayObject != null; hasOESTextureFloat = glesVersIn == 200 && ctx.getExtension("OES_texture_float") != null; hasOESTextureFloatLinear = glesVersIn >= 300 && ctx.getExtension("OES_texture_float_linear") != null; hasOESTextureHalfFloat = glesVersIn == 200 && ctx.getExtension("OES_texture_half_float") != null; - hasOESTextureHalfFloatLinear = glesVersIn == 200 && ctx.getExtension("OES_texture_half_float_linear") != null; + hasOESTextureHalfFloatLinear = glesVersIn == 200 + && ctx.getExtension("OES_texture_half_float_linear") != null; hasEXTTextureFilterAnisotropic = ctx.getExtension("EXT_texture_filter_anisotropic") != null; - }else { + } else { hasANGLEInstancedArrays = false; hasEXTColorBufferFloat = false; hasEXTColorBufferHalfFloat = false; @@ -107,25 +856,27 @@ public class PlatformOpenGL { hasEXTTextureFilterAnisotropic = false; } hasWEBGLDebugRendererInfo = ctx.getExtension("WEBGL_debug_renderer_info") != null; - - hasFBO16FSupport = glesVersIn >= 320 || ((glesVersIn >= 300 || hasOESTextureFloat) && (hasEXTColorBufferFloat || hasEXTColorBufferHalfFloat)); - hasFBO32FSupport = glesVersIn >= 320 || ((glesVersIn >= 300 || hasOESTextureHalfFloat) && hasEXTColorBufferFloat); + + hasFBO16FSupport = glesVersIn >= 320 || ((glesVersIn >= 300 || hasOESTextureFloat) + && (hasEXTColorBufferFloat || hasEXTColorBufferHalfFloat)); + hasFBO32FSupport = glesVersIn >= 320 + || ((glesVersIn >= 300 || hasOESTextureHalfFloat) && hasEXTColorBufferFloat); hasLinearHDR16FSupport = glesVersIn >= 300 || hasOESTextureHalfFloatLinear; hasLinearHDR32FSupport = glesVersIn >= 300 && hasOESTextureFloatLinear; - - if(glesVersIn >= 300) { + + if (glesVersIn >= 300) { vertexArrayImpl = VAO_IMPL_CORE; instancingImpl = INSTANCE_IMPL_CORE; - }else if(glesVersIn == 200) { + } else if (glesVersIn == 200) { vertexArrayImpl = hasOESVertexArrayObject ? VAO_IMPL_OES : VAO_IMPL_NONE; instancingImpl = hasANGLEInstancedArrays ? INSTANCE_IMPL_ANGLE : INSTANCE_IMPL_NONE; - }else { + } else { vertexArrayImpl = VAO_IMPL_NONE; instancingImpl = INSTANCE_IMPL_NONE; } - + _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); - }else { + } else { glesVers = -1; hasANGLEInstancedArrays = false; hasEXTColorBufferFloat = false; @@ -148,714 +899,4 @@ public class PlatformOpenGL { } } - public static final List dumpActiveExtensions() { - List exts = new ArrayList<>(); - if(hasANGLEInstancedArrays) exts.add("ANGLE_instanced_arrays"); - if(hasEXTColorBufferFloat) exts.add("EXT_color_buffer_float"); - if(hasEXTColorBufferHalfFloat) exts.add("EXT_color_buffer_half_float"); - if(hasEXTShaderTextureLOD) exts.add("EXT_shader_texture_lod"); - if(hasOESFBORenderMipmap) exts.add("OES_fbo_render_mipmap"); - if(hasOESVertexArrayObject) exts.add("OES_vertex_array_object"); - if(hasOESTextureFloat) exts.add("OES_texture_float"); - if(hasOESTextureFloatLinear) exts.add("OES_texture_float_linear"); - if(hasOESTextureHalfFloat) exts.add("OES_texture_half_float"); - if(hasOESTextureHalfFloatLinear) exts.add("OES_texture_half_float_linear"); - if(hasEXTTextureFilterAnisotropic) exts.add("EXT_texture_filter_anisotropic"); - if(hasWEBGLDebugRendererInfo) exts.add("WEBGL_debug_renderer_info"); - return exts; - } - - public static final void _wglEnable(int glEnum) { - ctx.enable(glEnum); - } - - public static final void _wglDisable(int glEnum) { - ctx.disable(glEnum); - } - - public static final void _wglClearColor(float r, float g, float b, float a) { - ctx.clearColor(r, g, b, a); - } - - public static final void _wglClearDepth(float f) { - ctx.clearDepth(f); - } - - public static final void _wglClear(int bits) { - ctx.clear(bits); - } - - public static final void _wglDepthFunc(int glEnum) { - ctx.depthFunc(glEnum); - } - - public static final void _wglDepthMask(boolean mask) { - ctx.depthMask(mask); - } - - public static final void _wglCullFace(int glEnum) { - ctx.cullFace(glEnum); - } - - public static final void _wglViewport(int x, int y, int w, int h) { - ctx.viewport(x, y, w, h); - } - - public static final void _wglBlendFunc(int src, int dst) { - ctx.blendFunc(src, dst); - } - - public static final void _wglBlendFuncSeparate(int srcColor, int dstColor, - int srcAlpha, int dstAlpha) { - ctx.blendFuncSeparate(srcColor, dstColor, srcAlpha, dstAlpha); - } - - public static final void _wglBlendEquation(int glEnum) { - ctx.blendEquation(glEnum); - } - - public static final void _wglBlendColor(float r, float g, float b, float a) { - ctx.blendColor(r, g, b, a); - } - - public static final void _wglColorMask(boolean r, boolean g, boolean b, boolean a) { - ctx.colorMask(r, g, b, a); - } - - public static final void _wglDrawBuffers(int buffer) { - if(glesVers == 200) { - if(buffer != 0x8CE0) { // GL_COLOR_ATTACHMENT0 - throw new UnsupportedOperationException(); - } - }else { - ctx.drawBuffers(new int[] { buffer }); - } - } - - public static final void _wglDrawBuffers(int[] buffers) { - if(glesVers == 200) { - if(buffers.length != 1 || buffers[0] != 0x8CE0) { // GL_COLOR_ATTACHMENT0 - throw new UnsupportedOperationException(); - } - }else { - ctx.drawBuffers(buffers); - } - } - - public static final void _wglReadBuffer(int buffer) { - ctx.readBuffer(buffer); - } - - public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, ByteBuffer data) { - ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglReadPixels_u16(int x, int y, int width, int height, int format, int type, ByteBuffer data) { - ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView16Unsigned(data)); - } - - public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, IntBuffer data) { - ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView32(data)); - } - - public static final void _wglReadPixels(int x, int y, int width, int height, int format, int type, FloatBuffer data) { - ctx.readPixels(x, y, width, height, format, type, EaglerArrayBufferAllocator.getDataView32F(data)); - } - - public static final void _wglPolygonOffset(float f1, float f2) { - ctx.polygonOffset(f1, f2); - } - - public static final void _wglLineWidth(float width) { - ctx.lineWidth(width); - } - - public static final IBufferGL _wglGenBuffers() { - return new OpenGLObjects.BufferGL(ctx.createBuffer()); - } - - public static final ITextureGL _wglGenTextures() { - return new OpenGLObjects.TextureGL(ctx.createTexture()); - } - - public static final IBufferArrayGL _wglGenVertexArrays() { - switch(vertexArrayImpl) { - case VAO_IMPL_CORE: - return new OpenGLObjects.BufferArrayGL(ctx.createVertexArray()); - case VAO_IMPL_OES: - return new OpenGLObjects.BufferArrayGL(OESVertexArrayObject.createVertexArrayOES()); - default: - throw new UnsupportedOperationException(); - } - } - - public static final IProgramGL _wglCreateProgram() { - return new OpenGLObjects.ProgramGL(ctx.createProgram()); - } - - public static final IShaderGL _wglCreateShader(int type) { - return new OpenGLObjects.ShaderGL(ctx.createShader(type)); - } - - public static final IFramebufferGL _wglCreateFramebuffer() { - return new OpenGLObjects.FramebufferGL(ctx.createFramebuffer()); - } - - public static final IRenderbufferGL _wglCreateRenderbuffer() { - return new OpenGLObjects.RenderbufferGL(ctx.createRenderbuffer()); - } - - public static final IQueryGL _wglGenQueries() { - return new OpenGLObjects.QueryGL(ctx.createQuery()); - } - - public static final void _wglDeleteBuffers(IBufferGL obj) { - ctx.deleteBuffer(((OpenGLObjects.BufferGL)obj).ptr); - } - - public static final void _wglDeleteTextures(ITextureGL obj) { - ctx.deleteTexture(((OpenGLObjects.TextureGL)obj).ptr); - } - - public static final void _wglDeleteVertexArrays(IBufferArrayGL obj) { - WebGLVertexArray ptr = ((OpenGLObjects.BufferArrayGL)obj).ptr; - switch(vertexArrayImpl) { - case VAO_IMPL_CORE: - ctx.deleteVertexArray(ptr); - break; - case VAO_IMPL_OES: - OESVertexArrayObject.deleteVertexArrayOES(ptr); - break; - default: - throw new UnsupportedOperationException(); - } - } - - public static final void _wglDeleteProgram(IProgramGL obj) { - ctx.deleteProgram(((OpenGLObjects.ProgramGL)obj).ptr); - } - - public static final void _wglDeleteShader(IShaderGL obj) { - ctx.deleteShader(((OpenGLObjects.ShaderGL)obj).ptr); - } - - public static final void _wglDeleteFramebuffer(IFramebufferGL obj) { - ctx.deleteFramebuffer(((OpenGLObjects.FramebufferGL)obj).ptr); - } - - public static final void _wglDeleteRenderbuffer(IRenderbufferGL obj) { - ctx.deleteRenderbuffer(((OpenGLObjects.RenderbufferGL)obj).ptr); - } - - public static final void _wglDeleteQueries(IQueryGL obj) { - ctx.deleteQuery(((OpenGLObjects.QueryGL)obj).ptr); - } - - public static final void _wglBindBuffer(int target, IBufferGL obj) { - ctx.bindBuffer(target, obj != null ? ((OpenGLObjects.BufferGL)obj).ptr : null); - } - - public static final void _wglBufferData(int target, ByteBuffer data, int usage) { - ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView8(data), usage); - } - - public static final void _wglBufferData(int target, IntBuffer data, int usage) { - ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView32(data), usage); - } - - public static final void _wglBufferData(int target, FloatBuffer data, int usage) { - ctx.bufferData(target, EaglerArrayBufferAllocator.getDataView32F(data), usage); - } - - public static final void _wglBufferData(int target, int size, int usage) { - ctx.bufferData(target, size, usage); - } - - public static final void _wglBufferSubData(int target, int offset, ByteBuffer data) { - ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView8(data)); - } - - public static final void _wglBufferSubData(int target, int offset, IntBuffer data) { - ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView32(data)); - } - - public static final void _wglBufferSubData(int target, int offset, FloatBuffer data) { - ctx.bufferSubData(target, offset, EaglerArrayBufferAllocator.getDataView32F(data)); - } - - public static final void _wglBindVertexArray(IBufferArrayGL obj) { - WebGLVertexArray ptr = obj != null ? ((OpenGLObjects.BufferArrayGL)obj).ptr : null; - switch(vertexArrayImpl) { - case VAO_IMPL_CORE: - ctx.bindVertexArray(ptr); - break; - case VAO_IMPL_OES: - OESVertexArrayObject.bindVertexArrayOES(ptr); - break; - default: - throw new UnsupportedOperationException(); - } - } - - public static final void _wglEnableVertexAttribArray(int index) { - ctx.enableVertexAttribArray(index); - } - - public static final void _wglDisableVertexAttribArray(int index) { - ctx.disableVertexAttribArray(index); - } - - public static final void _wglVertexAttribPointer(int index, int size, int type, - boolean normalized, int stride, int offset) { - ctx.vertexAttribPointer(index, size, type, normalized, stride, offset); - } - - public static final void _wglVertexAttribDivisor(int index, int divisor) { - switch(instancingImpl) { - case INSTANCE_IMPL_CORE: - ctx.vertexAttribDivisor(index, divisor); - break; - case INSTANCE_IMPL_ANGLE: - ANGLEInstancedArrays.vertexAttribDivisorANGLE(index, divisor); - break; - default: - throw new UnsupportedOperationException(); - } - } - - public static final void _wglActiveTexture(int texture) { - ctx.activeTexture(texture); - } - - public static final void _wglBindTexture(int target, ITextureGL obj) { - ctx.bindTexture(target, obj == null ? null : ((OpenGLObjects.TextureGL)obj).ptr); - } - - public static final void _wglTexParameterf(int target, int param, float value) { - ctx.texParameterf(target, param, value); - } - - public static final void _wglTexParameteri(int target, int param, int value) { - ctx.texParameteri(target, param, value); - } - - public static final void _wglTexImage3D(int target, int level, int internalFormat, int width, int height, int depth, - int border, int format, int type, ByteBuffer data) { - ctx.texImage3D(target, level, internalFormat, width, height, depth, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, - int height, int border, int format, int type, ByteBuffer data) { - ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglTexImage2Du16(int target, int level, int internalFormat, int width, - int height, int border, int format, int type, ByteBuffer data) { - ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); - } - - public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, - int height, int border, int format, int type, ByteBuffer data) { - ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); - } - - public static final void _wglTexImage2D(int target, int level, int internalFormat, int width, - int height, int border, int format, int type, IntBuffer data) { - ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglTexImage2Df32(int target, int level, int internalFormat, int width, - int height, int border, int format, int type, FloatBuffer data) { - ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); - } - - public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, - int width, int height, int format, int type, ByteBuffer data) { - ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglTexSubImage2Du16(int target, int level, int xoffset, int yoffset, - int width, int height, int format, int type, ByteBuffer data) { - ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView16Unsigned(data)); - } - - public static final void _wglTexSubImage2D(int target, int level, int xoffset, int yoffset, - int width, int height, int format, int type, IntBuffer data) { - ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView8Unsigned(data)); - } - - public static final void _wglTexSubImage2Df32(int target, int level, int xoffset, int yoffset, - int width, int height, int format, int type, FloatBuffer data) { - ctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - data == null ? null : EaglerArrayBufferAllocator.getDataView32F(data)); - } - - public static final void _wglCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, - int x, int y, int width, int height) { - ctx.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); - } - - public static final void _wglTexStorage2D(int target, int levels, int internalFormat, int w, int h) { - ctx.texStorage2D(target, levels, internalFormat, w, h); - } - - public static final void _wglPixelStorei(int pname, int value) { - ctx.pixelStorei(pname, value); - } - - public static final void _wglGenerateMipmap(int target) { - ctx.generateMipmap(target); - } - - public static final void _wglShaderSource(IShaderGL obj, String source) { - ctx.shaderSource(((OpenGLObjects.ShaderGL)obj).ptr, source); - } - - public static final void _wglCompileShader(IShaderGL obj) { - ctx.compileShader(((OpenGLObjects.ShaderGL)obj).ptr); - } - - public static final int _wglGetShaderi(IShaderGL obj, int param) { - return ctx.getShaderParameteri(((OpenGLObjects.ShaderGL)obj).ptr, param); - } - - public static final String _wglGetShaderInfoLog(IShaderGL obj) { - return ctx.getShaderInfoLog(((OpenGLObjects.ShaderGL)obj).ptr); - } - - public static final void _wglUseProgram(IProgramGL obj) { - ctx.useProgram(obj == null ? null : ((OpenGLObjects.ProgramGL)obj).ptr); - } - - public static final void _wglAttachShader(IProgramGL obj, IShaderGL shader) { - ctx.attachShader(((OpenGLObjects.ProgramGL)obj).ptr, ((OpenGLObjects.ShaderGL)shader).ptr); - } - - public static final void _wglDetachShader(IProgramGL obj, IShaderGL shader) { - ctx.detachShader(((OpenGLObjects.ProgramGL)obj).ptr, ((OpenGLObjects.ShaderGL)shader).ptr); - } - - public static final void _wglLinkProgram(IProgramGL obj) { - ctx.linkProgram(((OpenGLObjects.ProgramGL)obj).ptr); - } - - public static final int _wglGetProgrami(IProgramGL obj, int param) { - return ctx.getProgramParameteri(((OpenGLObjects.ProgramGL)obj).ptr, param); - } - - public static final String _wglGetProgramInfoLog(IProgramGL obj) { - return ctx.getProgramInfoLog(((OpenGLObjects.ProgramGL)obj).ptr); - } - - public static final void _wglBindAttribLocation(IProgramGL obj, int index, String name) { - ctx.bindAttribLocation(((OpenGLObjects.ProgramGL)obj).ptr, index, name); - } - - public static final int _wglGetAttribLocation(IProgramGL obj, String name) { - return ctx.getAttribLocation(((OpenGLObjects.ProgramGL)obj).ptr, name); - } - - public static final void _wglDrawArrays(int mode, int first, int count) { - ctx.drawArrays(mode, first, count); - //checkErr("_wglDrawArrays(" + mode + ", " + first + ", " + count + ");"); - } - - public static final void _wglDrawArraysInstanced(int mode, int first, int count, int instances) { - switch(instancingImpl) { - case INSTANCE_IMPL_CORE: - ctx.drawArraysInstanced(mode, first, count, instances); - break; - case INSTANCE_IMPL_ANGLE: - ANGLEInstancedArrays.drawArraysInstancedANGLE(mode, first, count, instances); - break; - default: - throw new UnsupportedOperationException(); - } - //checkErr("_wglDrawArraysInstanced(" + mode + ", " + first + ", " + count + ", " + instanced + ");"); - } - - public static final void _wglDrawElements(int mode, int count, int type, int offset) { - ctx.drawElements(mode, count, type, offset); - //checkErr("_wglDrawElements(" + mode + ", " + count + ", " + type + ", " + offset + ");"); - } - - public static final void _wglDrawElementsInstanced(int mode, int count, int type, int offset, int instances) { - switch(instancingImpl) { - case INSTANCE_IMPL_CORE: - ctx.drawElementsInstanced(mode, count, type, offset, instances); - break; - case INSTANCE_IMPL_ANGLE: - ANGLEInstancedArrays.drawElementsInstancedANGLE(mode, count, type, offset, instances); - break; - default: - throw new UnsupportedOperationException(); - } - //checkErr("_wglDrawElementsInstanced(" + mode + ", " + count + ", " + type + ", " + offset + ", " + instanced + ");"); - } - - public static final IUniformGL _wglGetUniformLocation(IProgramGL obj, String name) { - WebGLUniformLocation loc = ctx.getUniformLocation(((OpenGLObjects.ProgramGL)obj).ptr, name); - if(loc != null) { - return new OpenGLObjects.UniformGL(loc); - }else { - return null; - } - } - - public static final int _wglGetUniformBlockIndex(IProgramGL obj, String name) { - int i = ctx.getUniformBlockIndex(((OpenGLObjects.ProgramGL)obj).ptr, name); - if(i > 2147483647) { - i = -1; - } - return i; - } - - public static final void _wglBindBufferRange(int target, int index, IBufferGL buffer, int offset, int size) { - ctx.bindBufferRange(target, index, ((OpenGLObjects.BufferGL)buffer).ptr, offset, size); - } - - public static final void _wglUniformBlockBinding(IProgramGL obj, int blockIndex, int bufferIndex) { - ctx.uniformBlockBinding(((OpenGLObjects.ProgramGL)obj).ptr, blockIndex, bufferIndex); - } - - public static final void _wglUniform1f(IUniformGL obj, float x) { - if(obj != null) ctx.uniform1f(((OpenGLObjects.UniformGL)obj).ptr, x); - } - - public static final void _wglUniform2f(IUniformGL obj, float x, float y) { - if(obj != null) ctx.uniform2f(((OpenGLObjects.UniformGL)obj).ptr, x, y); - } - - public static final void _wglUniform3f(IUniformGL obj, float x, float y, float z) { - if(obj != null) ctx.uniform3f(((OpenGLObjects.UniformGL)obj).ptr, x, y, z); - } - - public static final void _wglUniform4f(IUniformGL obj, float x, float y, float z, float w) { - if(obj != null) ctx.uniform4f(((OpenGLObjects.UniformGL)obj).ptr, x, y, z, w); - } - - public static final void _wglUniform1i(IUniformGL obj, int x) { - if(obj != null) ctx.uniform1i(((OpenGLObjects.UniformGL)obj).ptr, x); - } - - public static final void _wglUniform2i(IUniformGL obj, int x, int y) { - if(obj != null) ctx.uniform2i(((OpenGLObjects.UniformGL)obj).ptr, x, y); - } - - public static final void _wglUniform3i(IUniformGL obj, int x, int y, int z) { - if(obj != null) ctx.uniform3i(((OpenGLObjects.UniformGL)obj).ptr, x, y, z); - } - - public static final void _wglUniform4i(IUniformGL obj, int x, int y, int z, int w) { - if(obj != null) ctx.uniform4i(((OpenGLObjects.UniformGL)obj).ptr, x, y, z, w); - } - - public static final void _wglUniformMatrix2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglUniformMatrix3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix3fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglUniformMatrix3x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix3x2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglUniformMatrix4fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix4fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglUniformMatrix4x2fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix4x2fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglUniformMatrix4x3fv(IUniformGL obj, boolean transpose, FloatBuffer mat) { - if(obj != null) ctx.uniformMatrix4x3fv(((OpenGLObjects.UniformGL)obj).ptr, transpose, - mat == null ? null : EaglerArrayBufferAllocator.getDataView32F(mat)); - } - - public static final void _wglBindFramebuffer(int target, IFramebufferGL framebuffer) { - if(framebuffer == null) { - ctx.bindFramebuffer(target, PlatformRuntime.mainFramebuffer); - if(glesVers != 200) { - ctx.drawBuffers(new int[] { WebGL2RenderingContext.COLOR_ATTACHMENT0 }); - } - }else { - ctx.bindFramebuffer(target, ((OpenGLObjects.FramebufferGL) framebuffer).ptr); - } - } - - public static final int _wglCheckFramebufferStatus(int target) { - return ctx.checkFramebufferStatus(target); - } - - public static final void _wglFramebufferTexture2D(int target, int attachment, int texTarget, - ITextureGL texture, int level) { - ctx.framebufferTexture2D(target, attachment, texTarget, ((OpenGLObjects.TextureGL)texture).ptr, level); - } - - public static final void _wglFramebufferTextureLayer(int target, int attachment, ITextureGL texture, int level, int layer) { - ctx.framebufferTextureLayer(target, attachment, ((OpenGLObjects.TextureGL) texture).ptr, level, layer); - } - - public static final void _wglBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, - int dstX0, int dstY0, int dstX1, int dstY1, int bits, int filter) { - ctx.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, bits, filter); - } - - public static final void _wglBindRenderbuffer(int target, IRenderbufferGL renderbuffer) { - ctx.bindRenderbuffer(target, - renderbuffer == null ? null : ((OpenGLObjects.RenderbufferGL)renderbuffer).ptr); - } - - public static final void _wglRenderbufferStorage(int target, int internalformat, - int width, int height) { - ctx.renderbufferStorage(target, internalformat, width, height); - } - - public static final void _wglFramebufferRenderbuffer(int target, int attachment, - int renderbufferTarget, IRenderbufferGL renderbuffer) { - ctx.framebufferRenderbuffer(target, attachment, renderbufferTarget, - ((OpenGLObjects.RenderbufferGL)renderbuffer).ptr); - } - - public static final String _wglGetString(int param) { - if(hasWEBGLDebugRendererInfo) { - String s; - switch(param) { - case 0x1f00: // VENDOR - s = ctx.getParameterString(0x9245); // UNMASKED_VENDOR_WEBGL - if(s == null) { - s = ctx.getParameterString(0x1f00); // VENDOR - } - return s; - case 0x1f01: // RENDERER - s = ctx.getParameterString(0x9246); // UNMASKED_RENDERER_WEBGL - if(s == null) { - s = ctx.getParameterString(0x1f01); // RENDERER - } - return s; - default: - return ctx.getParameterString(param); - } - }else { - return ctx.getParameterString(param); - } - } - - public static final int _wglGetInteger(int param) { - return ctx.getParameteri(param); - } - - public static final int _wglGetError() { - return ctx.getError(); - } - - public static final int checkOpenGLESVersion() { - return glesVers; - } - - public static final boolean checkEXTGPUShader5Capable() { - return false; - } - - public static final boolean checkOESGPUShader5Capable() { - return false; - } - - public static final boolean checkFBORenderMipmapCapable() { - return glesVers >= 300 || hasOESFBORenderMipmap; - } - - public static final boolean checkVAOCapable() { - return vertexArrayImpl != VAO_IMPL_NONE; - } - - public static final boolean checkInstancingCapable() { - return instancingImpl != INSTANCE_IMPL_NONE; - } - - public static final boolean checkTexStorageCapable() { - return glesVers >= 300; - } - - public static final boolean checkTextureLODCapable() { - return glesVers >= 300 || hasEXTShaderTextureLOD; - } - - public static final boolean checkHDRFramebufferSupport(int bits) { - switch(bits) { - case 16: - return hasFBO16FSupport; - case 32: - return hasFBO32FSupport; - default: - return false; - } - } - - public static final boolean checkLinearHDRFilteringSupport(int bits) { - switch(bits) { - case 16: - return hasLinearHDR16FSupport; - case 32: - return hasLinearHDR32FSupport; - default: - return false; - } - } - - // legacy - public static final boolean checkLinearHDR32FSupport() { - return hasLinearHDR32FSupport; - } - - public static final boolean checkAnisotropicFilteringSupport() { - return hasEXTTextureFilterAnisotropic; - } - - public static final boolean checkNPOTCapable() { - return glesVers >= 300; - } - - private static final void checkErr(String name) { - int i = ctx.getError(); - if(i != 0) { - logger.error("########## GL ERROR ##########"); - logger.error("@ {}", name); - do { - logger.error("#{} - {}", i, EaglercraftGPU.gluErrorString(i)); - }while((i = ctx.getError()) != 0); - try { - throw new RuntimeException("GL Error Detected!"); - }catch(Throwable t) { - logger.log(Level.ERROR, t); - } - logger.error("##############################"); - } - } - - public static final String[] getAllExtensions() { - return ctx.getSupportedExtensionArray(); - } - - public static final void enterVAOEmulationHook() { - WebGLBackBuffer.enterVAOEmulationPhase(); - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index 5c85123e..7c04b395 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -11,11 +11,6 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; -import net.lax1dude.eaglercraft.v1_8.EagRuntime; -import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; -import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; -import net.lax1dude.eaglercraft.v1_8.Filesystem; -import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.BootMenuEntryPoint; import org.teavm.interop.Async; import org.teavm.interop.AsyncCallback; import org.teavm.jso.JSBody; @@ -47,10 +42,18 @@ import com.jcraft.jzlib.GZIPInputStream; import com.jcraft.jzlib.GZIPOutputStream; import com.jcraft.jzlib.InflaterInputStream; +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; +import net.lax1dude.eaglercraft.v1_8.Filesystem; +import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.BootMenuEntryPoint; import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; import net.lax1dude.eaglercraft.v1_8.internal.buffer.EaglerArrayBufferAllocator; import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.DebugConsoleWindow; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.EPKDownloadHelper; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ES6ShimStatus; import net.lax1dude.eaglercraft.v1_8.internal.teavm.EarlyLoadScreen; import net.lax1dude.eaglercraft.v1_8.internal.teavm.EnumES6ShimStatus; @@ -59,9 +62,6 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.FixWebMDurationJS; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ImmediateContinue; import net.lax1dude.eaglercraft.v1_8.internal.teavm.MessageChannel; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMBlobURLManager; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.DebugConsoleWindow; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.EPKDownloadHelper; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMClientConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMDataURLManager; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMEnterBootMenuException; @@ -81,44 +81,64 @@ import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformRuntime { - - static final Logger logger = LogManager.getLogger("BrowserRuntime"); + private static class DumbSleepHandler implements PlatformRunnable { + private final AsyncCallback callback; + + private DumbSleepHandler(AsyncCallback callback) { + this.callback = callback; + } + + @Override + public void run() { + callback.complete(null); + } + } + + private static interface WebGLContextEvent extends Event { + @JSProperty + String getStatusMessage(); + } + + static final Logger logger = LogManager.getLogger("BrowserRuntime"); public static Window win = null; public static HTMLDocument doc = null; public static HTMLElement root = null; public static HTMLElement parent = null; public static HTMLCanvasElement canvas = null; + public static WebGL2RenderingContext webgl = null; public static boolean webglExperimental = false; - - private static String windowMessagePostOrigin = null; - private static EventListener windowMessageListener = null; - - static WebGLFramebuffer mainFramebuffer = null; + private static String windowMessagePostOrigin = null; + + private static EventListener windowMessageListener = null; + static WebGLFramebuffer mainFramebuffer = null; static boolean useDelayOnSwap = false; static boolean immediateContinueSupport = false; static MessageChannel immediateContinueChannel = null; static Runnable currentMsgChannelContinueHack = null; + static ImmediateContinue currentLegacyContinueHack = null; private static final Object immediateContLock = new Object(); static boolean hasFetchSupport = false; + static boolean hasDataURLSupport = false; static boolean useVisualViewport = false; @@ -127,26 +147,219 @@ public class PlatformRuntime { private static final JSObject steadyTimeFunc = getSteadyTimeFunc(); - @JSBody(params = { }, script = "return ((typeof performance !== \"undefined\") && (typeof performance.now === \"function\"))" - + "? performance.now.bind(performance)" - + ": (function(epochStart){ return function() { return Date.now() - epochStart; }; })(Date.now());") - private static native JSObject getSteadyTimeFunc(); + private static final JSString emptyJSString = JSString.valueOf(""); - private static interface WebGLContextEvent extends Event { - @JSProperty - String getStatusMessage(); + private static final int IMMEDIATE_CONT_SUPPORTED = 0; + + private static final int IMMEDIATE_CONT_FAILED_NOT_ASYNC = 1; + + private static final int IMMEDIATE_CONT_FAILED_NOT_CONT = 2; + + private static final int IMMEDIATE_CONT_FAILED_EXCEPTIONS = 3; + + private static String currentThreadName = "main"; + + public static ByteBuffer allocateByteBuffer(int length) { + return EaglerArrayBufferAllocator.allocateByteBuffer(length); } + public static FloatBuffer allocateFloatBuffer(int length) { + return EaglerArrayBufferAllocator.allocateFloatBuffer(length); + } + + public static IntBuffer allocateIntBuffer(int length) { + return EaglerArrayBufferAllocator.allocateIntBuffer(length); + } + + static void beforeUnload() { + if (SingleplayerServerController.isWorldRunning()) { + SingleplayerServerController.autoSave(); + } + } + + public static byte[] castNativeByteBuffer(ByteBuffer buffer) { + return TeaVMUtils.wrapUnsignedByteArray(EaglerArrayBufferAllocator.getDataView8Unsigned(buffer)); + } + + public static float[] castNativeFloatBuffer(FloatBuffer buffer) { + return TeaVMUtils.wrapFloatArray(EaglerArrayBufferAllocator.getDataView32F(buffer)); + } + + public static int[] castNativeIntBuffer(IntBuffer buffer) { + return TeaVMUtils.wrapIntArray(EaglerArrayBufferAllocator.getDataView32(buffer)); + } + + public static ByteBuffer castPrimitiveByteArray(byte[] array) { + return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(TeaVMUtils.unwrapByteArray(array)); + } + + public static FloatBuffer castPrimitiveFloatArray(float[] array) { + return EaglerArrayBufferAllocator.wrapFloatBufferTeaVM(TeaVMUtils.unwrapFloatArray(array)); + } + + public static IntBuffer castPrimitiveIntArray(int[] array) { + return EaglerArrayBufferAllocator.wrapIntBufferTeaVM(TeaVMUtils.unwrapIntArray(array)); + } + + static void checkBootMenu() { + while (PlatformInput.keyboardNext()) { + if (PlatformInput.keyboardGetEventKeyState()) { + int key = PlatformInput.keyboardGetEventKey(); + if (key == KeyboardConstants.KEY_DELETE || key == KeyboardConstants.KEY_BACK) { + enterBootMenu(true); + } + } + } + } + + private static void checkImmediateContinueSupport() { + immediateContinueSupport = false; + windowMessagePostOrigin = getOriginForPost(win); + + int stat = checkImmediateContinueSupport0(); + if (stat == IMMEDIATE_CONT_SUPPORTED) { + immediateContinueSupport = true; + return; + } else if (stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { + logger.error( + "MessageChannel fast immediate continue hack is incompatible with this browser due to actually continuing immediately!"); + } else if (stat == IMMEDIATE_CONT_FAILED_NOT_CONT) { + logger.error( + "MessageChannel fast immediate continue hack is incompatible with this browser due to startup check failing!"); + } else if (stat == IMMEDIATE_CONT_FAILED_EXCEPTIONS) { + logger.error( + "MessageChannel fast immediate continue hack is incompatible with this browser due to exceptions!"); + } + logger.info("Note: Using legacy fast immediate continue based on window.postMessage instead"); + stat = checkLegacyImmediateContinueSupport0(); + if (stat == IMMEDIATE_CONT_SUPPORTED) { + immediateContinueSupport = true; + return; + } else if (stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { + logger.error("Legacy fast immediate continue hack will be disable due actually continuing immediately!"); + return; + } + logger.warn( + "Legacy fast immediate continue hack failed for target \"{}\", attempting to use target \"*\" instead", + windowMessagePostOrigin); + windowMessagePostOrigin = "*"; + stat = checkLegacyImmediateContinueSupport0(); + if (stat == IMMEDIATE_CONT_SUPPORTED) { + immediateContinueSupport = true; + } else if (stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { + logger.error("Legacy fast immediate continue hack will be disable due actually continuing immediately!"); + } else if (stat == IMMEDIATE_CONT_FAILED_NOT_CONT) { + logger.error("Legacy fast immediate continue hack will be disable due to startup check failing!"); + } else if (stat == IMMEDIATE_CONT_FAILED_EXCEPTIONS) { + logger.error("Legacy fast immediate continue hack will be disable due to exceptions!"); + } + } + + private static int checkImmediateContinueSupport0() { + try { + if (!MessageChannel.supported()) { + return IMMEDIATE_CONT_SUPPORTED; + } + immediateContinueChannel = MessageChannel.create(); + immediateContinueChannel.getPort1().addEventListener("message", new EventListener() { + @Override + public void handleEvent(MessageEvent evt) { + Runnable toRun; + synchronized (immediateContLock) { + toRun = currentMsgChannelContinueHack; + currentMsgChannelContinueHack = null; + } + if (toRun != null) { + toRun.run(); + } + } + }); + immediateContinueChannel.getPort1().start(); + immediateContinueChannel.getPort2().start(); + final boolean[] checkMe = new boolean[1]; + checkMe[0] = false; + currentMsgChannelContinueHack = () -> { + checkMe[0] = true; + }; + immediateContinueChannel.getPort2().postMessage(emptyJSString); + if (checkMe[0]) { + currentMsgChannelContinueHack = null; + if (immediateContinueChannel != null) { + safeShutdownChannel(immediateContinueChannel); + } + immediateContinueChannel = null; + return IMMEDIATE_CONT_FAILED_NOT_ASYNC; + } + sleep(10); + currentMsgChannelContinueHack = null; + if (!checkMe[0]) { + if (immediateContinueChannel != null) { + safeShutdownChannel(immediateContinueChannel); + } + immediateContinueChannel = null; + return IMMEDIATE_CONT_FAILED_NOT_CONT; + } else { + return IMMEDIATE_CONT_SUPPORTED; + } + } catch (Throwable t) { + currentMsgChannelContinueHack = null; + if (immediateContinueChannel != null) { + safeShutdownChannel(immediateContinueChannel); + } + immediateContinueChannel = null; + return IMMEDIATE_CONT_FAILED_EXCEPTIONS; + } + } + + private static int checkLegacyImmediateContinueSupport0() { + try { + final JSString token = JSString.valueOf(EaglercraftUUID.randomUUID().toString()); + final boolean[] checkMe = new boolean[1]; + checkMe[0] = false; + currentLegacyContinueHack = new ImmediateContinue() { + + @Override + public void execute() { + checkMe[0] = true; + } + + @Override + public boolean isValidToken(JSObject someObject) { + return token == someObject; + } + + }; + win.postMessage(token, windowMessagePostOrigin); + if (checkMe[0]) { + currentLegacyContinueHack = null; + return IMMEDIATE_CONT_FAILED_NOT_ASYNC; + } + sleep(10); + currentLegacyContinueHack = null; + if (!checkMe[0]) { + return IMMEDIATE_CONT_FAILED_NOT_CONT; + } else { + return IMMEDIATE_CONT_SUPPORTED; + } + } catch (Throwable t) { + currentLegacyContinueHack = null; + return IMMEDIATE_CONT_FAILED_EXCEPTIONS; + } + } + + @JSBody(params = {}, script = "delete __isEaglerX188Running;") + private static native void clearRunningFlag(); + public static void create() { win = Window.current(); doc = win.getDocument(); DebugConsoleWindow.initialize(win); PlatformApplication.setMCServerWindowGlobal(null); - + ES6ShimStatus shimStatus = ES6ShimStatus.getRuntimeStatus(); - if(shimStatus != null) { + if (shimStatus != null) { EnumES6ShimStatus stat = shimStatus.getStatus(); - switch(stat) { + switch (stat) { case STATUS_ERROR: case STATUS_DISABLED_ERRORS: logger.error("ES6 Shim Status: {}", stat.statusDesc); @@ -167,26 +380,26 @@ public class PlatformRuntime { break; } } - + TeaVMBlobURLManager.initialize(); - + logger.info("Creating main game canvas"); - + root = doc.getElementById(ClientMain.configRootElementId); - if(root == null) { - throw new RuntimeInitializationFailureException("Root element \"" + ClientMain.configRootElementId + "\" was not found in this document!"); + if (root == null) { + throw new RuntimeInitializationFailureException( + "Root element \"" + ClientMain.configRootElementId + "\" was not found in this document!"); } root.getClassList().add("_eaglercraftX_root_element"); Node nodeler; - while((nodeler = root.getLastChild()) != null && TeaVMUtils.isTruthy(nodeler)) { + while ((nodeler = root.getLastChild()) != null && TeaVMUtils.isTruthy(nodeler)) { root.removeChild(nodeler); } CSSStyleDeclaration style = root.getStyle(); - style.setProperty("overflowX", "hidden"); - style.setProperty("overflowY", "hidden"); + style.setProperty("overflow", "hidden"); TeaVMClientConfigAdapter teavmCfg = (TeaVMClientConfigAdapter) getClientConfigAdapter(); boolean allowBootMenu = teavmCfg.isAllowBootMenu(); @@ -194,15 +407,15 @@ public class PlatformRuntime { if (teavmCfg.isAutoFixLegacyStyleAttrTeaVM() && isEmbeddedInBody) { String originalW = style.getPropertyValue("width"); String originalH = style.getPropertyValue("height"); - if("100vw".equals(originalW) && "100vh".equals(originalH)) { + if ("100vw".equals(originalW) && "100vh".equals(originalH)) { logger.info("Note: Retroactively patching style attributes on "); NodeList nl = doc.getElementsByTagName("html"); - if(nl.getLength() > 0) { - CSSStyleDeclaration htmlDecl = ((HTMLElement)nl.get(0)).getStyle(); + if (nl.getLength() > 0) { + CSSStyleDeclaration htmlDecl = ((HTMLElement) nl.get(0)).getStyle(); htmlDecl.setProperty("width", "100%"); htmlDecl.setProperty("height", "100%"); htmlDecl.setProperty("background-color", "black"); - }else { + } else { logger.warn("Could not find tag!"); } style.setProperty("width", "100%"); @@ -210,12 +423,13 @@ public class PlatformRuntime { style.setProperty("background-color", "black"); } HTMLElement viewportTag = doc.querySelector("meta[name=viewport]"); - if(viewportTag != null) { + if (viewportTag != null) { String cont = viewportTag.getAttribute("content"); - if(cont != null) { - Set oldTokens = Sets.newHashSet(Iterators.transform(Iterators.forArray(cont.split(",")), String::trim)); + if (cont != null) { + Set oldTokens = Sets + .newHashSet(Iterators.transform(Iterators.forArray(cont.split(",")), String::trim)); Set tokens = new HashSet<>(); - for(String str : oldTokens) { + for (String str : oldTokens) { if (!(str.startsWith("width=") || str.startsWith("initial-scale=") || str.startsWith("minimum-scale=") || str.startsWith("maximum-scale="))) { tokens.add(str); @@ -225,7 +439,7 @@ public class PlatformRuntime { tokens.add("initial-scale=1.0"); tokens.add("minimum-scale=1.0"); tokens.add("maximum-scale=1.0"); - if(!tokens.equals(oldTokens)) { + if (!tokens.equals(oldTokens)) { logger.info("Note: Retroactively patching viewport tag"); viewportTag.setAttribute("content", String.join(", ", tokens)); } @@ -241,8 +455,7 @@ public class PlatformRuntime { style.setProperty("position", "relative"); style.setProperty("width", "100%"); style.setProperty("height", "100%"); - style.setProperty("overflowX", "hidden"); - style.setProperty("overflowY", "hidden"); + style.setProperty("overflow", "hidden"); root.appendChild(parent); ClientMain.configRootElement = parent; // hack @@ -252,45 +465,50 @@ public class PlatformRuntime { } useVisualViewport = false; - if(isVisualViewportSupported(System.currentTimeMillis())) { - if(isEmbeddedInBody) { - useVisualViewport = true; - }else { - HTMLElement bodyTag = doc.getBody(); - if (Math.abs(bodyTag.getClientWidth() - parent.getClientWidth()) <= 10 - && Math.abs(bodyTag.getClientHeight() - parent.getClientHeight()) <= 10) { + if (teavmCfg.isUseVisualViewportTeaVM()) { + if (isVisualViewportSupported()) { + if (isEmbeddedInBody) { useVisualViewport = true; + } else { + HTMLElement bodyTag = doc.getBody(); + if (Math.abs(bodyTag.getClientWidth() - parent.getClientWidth()) <= 10 + && Math.abs(bodyTag.getClientHeight() - parent.getClientHeight()) <= 10) { + useVisualViewport = true; + } } } + if (useVisualViewport) { + logger.info( + "Note: Detected game is embedded in body, some screens may be resized to window.visualViewport instead for a better mobile experience"); + } } - if(useVisualViewport) { - logger.info("Note: Detected game is embedded in body, some screens may be resized to window.visualViewport instead for a better mobile experience"); - } - + ByteBuffer endiannessTestBytes = allocateByteBuffer(4); try { endiannessTestBytes.asIntBuffer().put(0x6969420); if (((endiannessTestBytes.get(0) & 0xFF) | ((endiannessTestBytes.get(1) & 0xFF) << 8) - | ((endiannessTestBytes.get(2) & 0xFF) << 16) | ((endiannessTestBytes.get(3) & 0xFF) << 24)) != 0x6969420) { + | ((endiannessTestBytes.get(2) & 0xFF) << 16) + | ((endiannessTestBytes.get(3) & 0xFF) << 24)) != 0x6969420) { throw new PlatformIncompatibleException("Big endian CPU detected! (somehow)"); - }else { + } else { logger.info("Endianness: this CPU is little endian"); } - }finally { + } finally { freeByteBuffer(endiannessTestBytes); } - + double r = PlatformInput.getDevicePixelRatio(win); - if(r < 0.01) r = 1.0; + if (r < 0.01) + r = 1.0; int iw = parent.getClientWidth(); int ih = parent.getClientHeight(); - int sw = (int)(r * iw); - int sh = (int)(r * ih); + int sw = (int) (r * iw); + int sh = (int) (r * ih); int canvasW = sw; int canvasH = sh; - + canvas = (HTMLCanvasElement) doc.createElement("canvas"); - + style = canvas.getStyle(); canvas.getClassList().add("_eaglercraftX_canvas_element"); style.setProperty("width", "100%"); @@ -303,9 +521,9 @@ public class PlatformRuntime { canvas.setWidth(canvasW); canvas.setHeight(canvasH); - + parent.appendChild(canvas); - + try { win.addEventListener("message", windowMessageListener = new EventListener() { @Override @@ -313,30 +531,31 @@ public class PlatformRuntime { handleWindowMessage(evt); } }); - }catch(Throwable t) { - throw new RuntimeInitializationFailureException("Exception while registering window message event handlers", t); + } catch (Throwable t) { + throw new RuntimeInitializationFailureException("Exception while registering window message event handlers", + t); } - + checkImmediateContinueSupport(); - + try { PlatformInput.initHooks(win, parent, canvas); - }catch(Throwable t) { + } catch (Throwable t) { throw new RuntimeInitializationFailureException("Exception while registering window event handlers", t); } - if(teavmCfg.isUseXHRFetchTeaVM()) { + if (teavmCfg.isUseXHRFetchTeaVM()) { hasFetchSupport = false; logger.info("Note: Fetch has been disabled via eaglercraftXOpts, using XHR instead"); - }else { + } else { hasFetchSupport = TeaVMFetchJS.checkFetchSupport(); - if(!hasFetchSupport) { + if (!hasFetchSupport) { logger.error("Detected fetch as unsupported, using XHR instead!"); } } hasDataURLSupport = TeaVMDataURLManager.checkDataURLSupport(hasFetchSupport); - if(!hasDataURLSupport) { + if (!hasDataURLSupport) { logger.error("Detected loading a data URL via fetch/XHR as unsupported!"); } @@ -349,7 +568,7 @@ public class PlatformRuntime { public void handleEvent(WebGLContextEvent evt) { try { logger.error("[WebGL Error]: {}", evt.getStatusMessage()); - }catch(Throwable t) { + } catch (Throwable t) { } } }); @@ -357,79 +576,80 @@ public class PlatformRuntime { int glesVer; boolean experimental = false; JSObject webgl_; - if(teavmCfg.isForceWebGL2TeaVM()) { + if (teavmCfg.isForceWebGL2TeaVM()) { logger.info("Note: Forcing WebGL 2.0 context"); glesVer = 300; webgl_ = canvas.getContext("webgl2", youEagler()); - if(webgl_ == null) { + if (webgl_ == null) { throw new PlatformIncompatibleException("WebGL 2.0 is not supported on this device!"); } - }else { - if(teavmCfg.isForceWebGL1TeaVM()) { + } else { + if (teavmCfg.isForceWebGL1TeaVM()) { glesVer = 200; logger.info("Note: Forcing WebGL 1.0 context"); webgl_ = canvas.getContext("webgl", youEagler()); - if(webgl_ == null) { - if(teavmCfg.isAllowExperimentalWebGL1TeaVM()) { + if (webgl_ == null) { + if (teavmCfg.isAllowExperimentalWebGL1TeaVM()) { experimental = true; webgl_ = canvas.getContext("experimental-webgl", youEagler()); - if(webgl_ == null) { + if (webgl_ == null) { throw new PlatformIncompatibleException("WebGL is not supported on this device!"); - }else { + } else { experimentalWebGLAlert(win); } - }else { + } else { throw new PlatformIncompatibleException("WebGL is not supported on this device!"); } } - }else { + } else { glesVer = 300; webgl_ = canvas.getContext("webgl2", youEagler()); - if(webgl_ == null) { + if (webgl_ == null) { glesVer = 200; webgl_ = canvas.getContext("webgl", youEagler()); - if(webgl_ == null) { - if(teavmCfg.isAllowExperimentalWebGL1TeaVM()) { + if (webgl_ == null) { + if (teavmCfg.isAllowExperimentalWebGL1TeaVM()) { experimental = true; webgl_ = canvas.getContext("experimental-webgl", youEagler()); - if(webgl_ == null) { + if (webgl_ == null) { throw new PlatformIncompatibleException("WebGL is not supported on this device!"); - }else { + } else { experimentalWebGLAlert(win); } - }else { + } else { throw new PlatformIncompatibleException("WebGL is not supported on this device!"); } } } } } - + webgl = (WebGL2RenderingContext) webgl_; webglExperimental = experimental; PlatformOpenGL.setCurrentContext(glesVer, webgl); - + logger.info("OpenGL Version: {}", PlatformOpenGL._wglGetString(0x1F02)); logger.info("OpenGL Renderer: {}", PlatformOpenGL._wglGetString(0x1F01)); - + List exts = PlatformOpenGL.dumpActiveExtensions(); - if(exts.isEmpty()) { + if (exts.isEmpty()) { logger.info("Unlocked the following OpenGL ES extensions: (NONE)"); - }else { + } else { Collections.sort(exts); logger.info("Unlocked the following OpenGL ES extensions:"); - for(int i = 0, l = exts.size(); i < l; ++i) { - logger.info(" - " + exts.get(i)); + for (int i = 0, l = exts.size(); i < l; ++i) { + logger.info(" - {}", exts.get(i)); } } - + mainFramebuffer = webgl.createFramebuffer(); - WebGLBackBuffer.initBackBuffer(webgl, mainFramebuffer, new OpenGLObjects.FramebufferGL(mainFramebuffer), sw, sh); - PlatformInput.initWindowSize(sw, sh, (float)r); - + WebGLBackBuffer.initBackBuffer(webgl, mainFramebuffer, new OpenGLObjects.FramebufferGL(mainFramebuffer), sw, + sh); + PlatformInput.initWindowSize(sw, sh, (float) r); + EarlyLoadScreen.paintScreen(glesVer, PlatformOpenGL.checkVAOCapable(), allowBootMenu); - - if(PlatformAssets.assets == null || !PlatformAssets.assets.isEmpty()) { + + if (PlatformAssets.assets == null || !PlatformAssets.assets.isEmpty()) { PlatformAssets.assets = new HashMap<>(); } @@ -439,33 +659,34 @@ public class PlatformRuntime { logger.info("Loaded {} resources from EPKs", PlatformAssets.assets.size()); - if(allowBootMenu && BootMenuEntryPoint.checkShouldLaunchFlag(win)) { + if (allowBootMenu && BootMenuEntryPoint.checkShouldLaunchFlag(win)) { logger.info("Boot menu enable flag is set, entering boot menu..."); - enterBootMenu(); + enterBootMenu(BootMenuEntryPoint.wasManuallyInvoked); } byte[] finalLoadScreen = PlatformAssets.getResourceBytes("/assets/eagler/eagtek.png"); - if(finalLoadScreen != null) { + if (finalLoadScreen != null) { EarlyLoadScreen.loadFinal(finalLoadScreen); EarlyLoadScreen.paintFinal(PlatformOpenGL.checkVAOCapable(), false, allowBootMenu); - }else { + } else { PlatformOpenGL._wglClearColor(1.0f, 0.0f, 1.0f, 1.0f); PlatformOpenGL._wglClear(RealOpenGLEnums.GL_COLOR_BUFFER_BIT); PlatformInput.update(); } - if(allowBootMenu) { + if (allowBootMenu) { checkBootMenu(); } logger.info("Initializing filesystem..."); - IEaglerFilesystem resourcePackFilesystem = Filesystem.getHandleFor(getClientConfigAdapter().getResourcePacksDB()); + IEaglerFilesystem resourcePackFilesystem = Filesystem + .getHandleFor(getClientConfigAdapter().getResourcePacksDB()); VFile2.setPrimaryFilesystem(resourcePackFilesystem); EaglerFolderResourcePack.setSupported(true); - if(!EaglerFolderResourcePack.isSupported()) { + if (!EaglerFolderResourcePack.isSupported()) { logger.error("Resource packs will be disabled for this session"); } @@ -473,15 +694,15 @@ public class PlatformRuntime { PlatformInput.pressAnyKeyScreen(); - if(allowBootMenu) { + if (allowBootMenu) { checkBootMenu(); } PlatformAudio.initialize(); - if(finalLoadScreen != null) { + if (finalLoadScreen != null) { EarlyLoadScreen.paintFinal(PlatformOpenGL.checkVAOCapable(), false, allowBootMenu); - }else { + } else { PlatformOpenGL._wglClearColor(1.0f, 0.0f, 1.0f, 1.0f); PlatformOpenGL._wglClear(RealOpenGLEnums.GL_COLOR_BUFFER_BIT); PlatformInput.update(); @@ -494,146 +715,98 @@ public class PlatformRuntime { FixWebMDurationJS.checkOldScriptStillLoaded(); } - @JSBody(params = { "win" }, script = "win.alert(\"WARNING: Detected \\\"experimental\\\" WebGL 1.0 support, certain graphics API features may be missing, and therefore EaglercraftX may malfunction and crash!\");") - private static native void experimentalWebGLAlert(Window win); - - private static void dumpShims(Set shims) { - if(!shims.isEmpty()) { - logger.info("(Enabled {} shims: {})", shims.size(), String.join(", ", Collections2.transform(shims, (shim) -> shim.shimDesc))); - } + public static String currentThreadName() { + return currentThreadName; } - @JSBody(params = { }, script = "return {antialias: false, depth: false, powerPreference: \"high-performance\", desynchronized: true, preserveDrawingBuffer: false, premultipliedAlpha: false, alpha: false};") - public static native JSObject youEagler(); - public static void destroy() { logger.fatal("Game tried to destroy the context! Browser runtime can't do that"); } - public static EnumPlatformType getPlatformType() { - return EnumPlatformType.JAVASCRIPT; + public static ArrayBuffer downloadRemoteURI(String assetPackageURI) { + if (hasFetchSupport) { + return downloadRemoteURIFetch(assetPackageURI, true); + } else { + return downloadRemoteURIXHR(assetPackageURI); + } } - public static EnumPlatformAgent getPlatformAgent() { - return EnumPlatformAgent.getFromUA(getUserAgentString()); + public static ArrayBuffer downloadRemoteURI(final String assetPackageURI, final boolean forceCache) { + if (hasFetchSupport) { + return downloadRemoteURIFetch(assetPackageURI, forceCache); + } else { + return downloadRemoteURIXHR(assetPackageURI); + } } - @JSBody(params = { }, script = "return navigator.userAgent||null;") - public static native String getUserAgentString(); + public static void downloadRemoteURI(String assetPackageURI, boolean useCache, final Consumer cb) { + if (hasFetchSupport) { + downloadRemoteURIFetch(assetPackageURI, useCache, new AsyncCallback() { + @Override + public void complete(ArrayBuffer result) { + cb.accept(result); + } - public static EnumPlatformOS getPlatformOS() { - return EnumPlatformOS.getFromUA(getUserAgentString()); - } + @Override + public void error(Throwable e) { + EagRuntime.debugPrintStackTrace(e); + cb.accept(null); + } + }); + } else { + downloadRemoteURIXHR(assetPackageURI, new AsyncCallback() { + @Override + public void complete(ArrayBuffer result) { + cb.accept(result); + } - @JSBody(params = { "ts" }, script = "if(ts > 1728322572561 && window[decodeURIComponent(\"%6C%6F%63%61%74%69%6F%6E\")][decodeURIComponent(\"%68%6F%73%74%6E%61%6D%65\")] === decodeURIComponent(\"%65%61%67%6C%65%72%63%72%61%66%74%2E%64%65%76\")) setTimeout(function() { var i = 1; while(i > 0) { ++i; } }, 353000); return (typeof visualViewport !== \"undefined\");") - private static native boolean isVisualViewportSupported(double ts); - - @JSBody(params = { }, script = "return visualViewport;") - static native VisualViewport getVisualViewport(); - - public static void requestANGLE(EnumPlatformANGLE plaf) { - } - - public static EnumPlatformANGLE getPlatformANGLE() { - return EnumPlatformANGLE.fromGLRendererString(getGLRenderer()); - } - - public static String getGLVersion() { - return PlatformOpenGL._wglGetString(RealOpenGLEnums.GL_VERSION); - } - - public static String getGLRenderer() { - return PlatformOpenGL._wglGetString(RealOpenGLEnums.GL_RENDERER); - } - - public static ByteBuffer allocateByteBuffer(int length) { - return EaglerArrayBufferAllocator.allocateByteBuffer(length); - } - - public static IntBuffer allocateIntBuffer(int length) { - return EaglerArrayBufferAllocator.allocateIntBuffer(length); - } - - public static FloatBuffer allocateFloatBuffer(int length) { - return EaglerArrayBufferAllocator.allocateFloatBuffer(length); - } - - public static ByteBuffer castPrimitiveByteArray(byte[] array) { - return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(TeaVMUtils.unwrapByteArray(array)); - } - - public static IntBuffer castPrimitiveIntArray(int[] array) { - return EaglerArrayBufferAllocator.wrapIntBufferTeaVM(TeaVMUtils.unwrapIntArray(array)); - } - - public static FloatBuffer castPrimitiveFloatArray(float[] array) { - return EaglerArrayBufferAllocator.wrapFloatBufferTeaVM(TeaVMUtils.unwrapFloatArray(array)); - } - - public static byte[] castNativeByteBuffer(ByteBuffer buffer) { - return TeaVMUtils.wrapUnsignedByteArray(EaglerArrayBufferAllocator.getDataView8Unsigned(buffer)); - } - - public static int[] castNativeIntBuffer(IntBuffer buffer) { - return TeaVMUtils.wrapIntArray(EaglerArrayBufferAllocator.getDataView32(buffer)); - } - - public static float[] castNativeFloatBuffer(FloatBuffer buffer) { - return TeaVMUtils.wrapFloatArray(EaglerArrayBufferAllocator.getDataView32F(buffer)); - } - - public static void freeByteBuffer(ByteBuffer byteBuffer) { - - } - - public static void freeIntBuffer(IntBuffer intBuffer) { - - } - - public static void freeFloatBuffer(FloatBuffer floatBuffer) { - - } - - public static boolean hasFetchSupportTeaVM() { - return hasFetchSupport; - } - - public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer cb) { - downloadRemoteURI(assetPackageURI, arr -> cb.accept(TeaVMUtils.wrapByteArrayBuffer(arr))); + @Override + public void error(Throwable e) { + EagRuntime.debugPrintStackTrace(e); + cb.accept(null); + } + }); + } } public static void downloadRemoteURI(String assetPackageURI, final Consumer cb) { downloadRemoteURI(assetPackageURI, false, cb); } - public static void downloadRemoteURI(String assetPackageURI, boolean useCache, final Consumer cb) { - if(hasFetchSupport) { - downloadRemoteURIFetch(assetPackageURI, useCache, new AsyncCallback() { - @Override - public void complete(ArrayBuffer result) { - cb.accept(result); - } - - @Override - public void error(Throwable e) { - EagRuntime.debugPrintStackTrace(e); - cb.accept(null); - } - }); - }else { - downloadRemoteURIXHR(assetPackageURI, new AsyncCallback() { - @Override - public void complete(ArrayBuffer result) { - cb.accept(result); - } - - @Override - public void error(Throwable e) { - EagRuntime.debugPrintStackTrace(e); - cb.accept(null); - } - }); + public static void downloadRemoteURIByteArray(String assetPackageURI, boolean useCache, final Consumer cb) { + downloadRemoteURI(assetPackageURI, useCache, arr -> cb.accept(TeaVMUtils.wrapByteArrayBuffer(arr))); + } + + public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer cb) { + downloadRemoteURIByteArray(assetPackageURI, false, cb); + } + + @Async + private static native ArrayBuffer downloadRemoteURIFetch(final String assetPackageURI, final boolean forceCache); + + private static void downloadRemoteURIFetch(final String assetPackageURI, final boolean useCache, + final AsyncCallback cb) { + final boolean isDat = isDataURL(assetPackageURI); + if (isDat && !hasDataURLSupport) { + cb.complete(TeaVMUtils.unwrapArrayBuffer(TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI))); + return; } + TeaVMFetchJS.doFetchDownload(assetPackageURI, useCache ? "force-cache" : "no-store", isDat ? (data) -> { + if (data != null) { + cb.complete(data); + } else { + logger.error("Caught an error decoding data URL via fetch, doing it the slow way instead..."); + byte[] b = null; + try { + b = TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI); + } catch (Throwable t) { + logger.error("Failed to manually decode data URL!", t); + cb.complete(null); + return; + } + cb.complete(b == null ? null : TeaVMUtils.unwrapArrayBuffer(b)); + } + } : cb::complete); } @Async @@ -641,135 +814,226 @@ public class PlatformRuntime { private static void downloadRemoteURIXHR(final String assetPackageURI, final AsyncCallback cb) { final boolean isDat = isDataURL(assetPackageURI); - if(isDat && !hasDataURLSupport) { + if (isDat && !hasDataURLSupport) { cb.complete(TeaVMUtils.unwrapArrayBuffer(TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI))); return; } TeaVMFetchJS.doXHRDownload(assetPackageURI, isDat ? (data) -> { - if(data != null) { - cb.complete(data); - }else { - logger.error("Caught an error decoding data URL via XHR, doing it the slow way instead..."); - byte[] b = null; - try { - b = TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI); - }catch(Throwable t) { - logger.error("Failed to manually decode data URL!", t); - cb.complete(null); - return; + if (data != null) { + cb.complete(data); + } else { + logger.error("Caught an error decoding data URL via XHR, doing it the slow way instead..."); + byte[] b = null; + try { + b = TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI); + } catch (Throwable t) { + logger.error("Failed to manually decode data URL!", t); + cb.complete(null); + return; + } + cb.complete(b == null ? null : TeaVMUtils.unwrapArrayBuffer(b)); + } + } : cb::complete); + } + + private static void dumpShims(Set shims) { + if (!shims.isEmpty()) { + logger.info("(Enabled {} shims: {})", shims.size(), + String.join(", ", Collections2.transform(shims, (shim) -> shim.shimDesc))); + } + } + + static void enterBootMenu(boolean manual) { + if (!getClientConfigAdapter().isAllowBootMenu()) { + throw new IllegalStateException("Boot menu is disabled"); + } + logger.info("Attempting to destroy context and enter boot menu..."); + EaglercraftGPU.destroyCache(); + Filesystem.closeAllHandles(); + PlatformAudio.destroy(); + PlatformScreenRecord.destroy(); + removeEventHandlers(); + if (webgl != null) { + EarlyLoadScreen.destroy(); + PlatformInput.clearEvenBuffers(); + WebGLBackBuffer.destroy(); + } + if (canvas != null) { + canvas.delete(); + canvas = null; + } + PlatformOpenGL.setCurrentContext(-1, null); + webgl = null; + if (immediateContinueChannel != null) { + safeShutdownChannel(immediateContinueChannel); + } + immediateContinueChannel = null; + clearRunningFlag(); + logger.info("Firing boot menu escape signal..."); + throw new TeaVMEnterBootMenuException(manual); + } + + public static void exit() { + logger.fatal("Game is attempting to exit!"); + } + + @JSBody(params = { + "win" }, script = "win.alert(\"WARNING: Detected \\\"experimental\\\" WebGL 1.0 support, certain graphics API features may be missing, and therefore EaglercraftX may malfunction and crash!\");") + private static native void experimentalWebGLAlert(Window win); + + public static void freeByteBuffer(ByteBuffer byteBuffer) { + + } + + public static void freeFloatBuffer(FloatBuffer floatBuffer) { + + } + + public static void freeIntBuffer(IntBuffer intBuffer) { + + } + + public static long freeMemory() { + return 1073741824l; + } + + public static String getCallingClass(int backTrace) { + return null; + } + + public static IClientConfigAdapter getClientConfigAdapter() { + return TeaVMClientConfigAdapter.instance; + } + + private static void getFallbackStackTrace(Throwable t, Consumer ret) { + StackTraceElement[] el = t.getStackTrace(); + if (el.length > 0) { + for (int i = 0; i < el.length; ++i) { + ret.accept(el[i].toString()); + } + } else { + ret.accept("[no stack trace]"); + } + } + + public static String getGLRenderer() { + return PlatformOpenGL._wglGetString(RealOpenGLEnums.GL_RENDERER); + } + + public static String getGLVersion() { + return PlatformOpenGL._wglGetString(RealOpenGLEnums.GL_VERSION); + } + + @JSBody(params = { "win" }, script = "if((typeof location.origin === \"string\") && location.origin.length > 0) {" + + "var orig = location.origin; if(orig.indexOf(\"file:\") === 0) orig = \"null\"; return orig; }" + + "else return \"*\";") + private static native String getOriginForPost(Window win); + + public static EnumPlatformAgent getPlatformAgent() { + return EnumPlatformAgent.getFromUA(getUserAgentString()); + } + + public static EnumPlatformANGLE getPlatformANGLE() { + return EnumPlatformANGLE.fromGLRendererString(getGLRenderer()); + } + + public static EnumPlatformOS getPlatformOS() { + return EnumPlatformOS.getFromUA(getUserAgentString()); + } + + public static EnumPlatformType getPlatformType() { + return EnumPlatformType.JAVASCRIPT; + } + + public static void getStackTrace(Throwable t, Consumer ret) { + JSObject o = JSExceptions.getJSException(t); + if (o != null && TeaVMUtils.isTruthy(o)) { + try { + String stack = TeaVMUtils.getStackSafe(o); + if (stack != null) { + String[] stackElements = stack.split("[\\r\\n]+"); + if (stackElements.length > 0) { + if (isDeobfStackTraces) { + TeaVMRuntimeDeobfuscator.initialize(); + TeaVMRuntimeDeobfuscator.deobfExceptionStack(Arrays.asList(stackElements)); } - cb.complete(b == null ? null : TeaVMUtils.unwrapArrayBuffer(b)); - } - } : cb::complete); - } - - @Async - private static native ArrayBuffer downloadRemoteURIFetch(final String assetPackageURI, final boolean forceCache); - - private static void downloadRemoteURIFetch(final String assetPackageURI, final boolean useCache, final AsyncCallback cb) { - final boolean isDat = isDataURL(assetPackageURI); - if(isDat && !hasDataURLSupport) { - cb.complete(TeaVMUtils.unwrapArrayBuffer(TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI))); - return; - } - TeaVMFetchJS.doFetchDownload(assetPackageURI, useCache ? "force-cache" : "no-store", - isDat ? (data) -> { - if(data != null) { - cb.complete(data); - }else { - logger.error("Caught an error decoding data URL via fetch, doing it the slow way instead..."); - byte[] b = null; - try { - b = TeaVMDataURLManager.decodeDataURLFallback(assetPackageURI); - }catch(Throwable t) { - logger.error("Failed to manually decode data URL!", t); - cb.complete(null); - return; + for (int i = 0; i < stackElements.length; ++i) { + String str = stackElements[i].trim(); + if (str.startsWith("at ")) { + str = str.substring(3).trim(); + } + ret.accept(str); } - cb.complete(b == null ? null : TeaVMUtils.unwrapArrayBuffer(b)); + return; } - } : cb::complete); - } - - public static ArrayBuffer downloadRemoteURI(String assetPackageURI) { - if(hasFetchSupport) { - return downloadRemoteURIFetch(assetPackageURI, true); - }else { - return downloadRemoteURIXHR(assetPackageURI); + } + } catch (Throwable tt) { + ret.accept("[ error: " + tt.toString() + " ]"); + } } + getFallbackStackTrace(t, ret); } - public static ArrayBuffer downloadRemoteURI(final String assetPackageURI, final boolean forceCache) { - if(hasFetchSupport) { - return downloadRemoteURIFetch(assetPackageURI, forceCache); - }else { - return downloadRemoteURIXHR(assetPackageURI); - } - } - - private static boolean isDataURL(String url) { - return url.length() > 5 && url.substring(0, 5).equalsIgnoreCase("data:"); - } - - public static boolean isDebugRuntime() { - return false; - } - - public static void writeCrashReport(String crashDump) { - ClientMain.showCrashScreen(crashDump); - } + @JSBody(params = {}, script = "return ((typeof performance !== \"undefined\") && (typeof performance.now === \"function\"))" + + "? performance.now.bind(performance)" + + ": (function(epochStart){ return function() { return Date.now() - epochStart; }; })(Date.now());") + private static native JSObject getSteadyTimeFunc(); + + @JSBody(params = {}, script = "return navigator.userAgent||null;") + public static native String getUserAgentString(); + + @JSBody(params = {}, script = "return visualViewport;") + static native VisualViewport getVisualViewport(); - @JSBody(params = { "evt", "mainWin" }, script = "return evt.source === mainWin;") - private static native boolean sourceEquals(MessageEvent evt, Window mainWin); - protected static void handleWindowMessage(MessageEvent evt) { - if(sourceEquals(evt, win)) { + if (sourceEquals(evt, win)) { boolean b = false; ImmediateContinue cont; - synchronized(immediateContLock) { + synchronized (immediateContLock) { cont = currentLegacyContinueHack; - if(cont != null) { + if (cont != null) { try { b = cont.isValidToken(evt.getData()); - }catch(Throwable t) { + } catch (Throwable t) { } - if(b) { + if (b) { currentLegacyContinueHack = null; } } } - if(b) { + if (b) { cont.execute(); } - }else { + } else { PlatformWebView.onWindowMessageRecieved(evt); } } - public static void swapDelayTeaVM() { - if(!useDelayOnSwap && immediateContinueSupport) { + public static boolean hasFetchSupportTeaVM() { + return hasFetchSupport; + } + + public static void immediateContinue() { + if (immediateContinueSupport) { immediateContinueTeaVM0(); - }else { + } else { sleep(0); } } - public static void immediateContinue() { - if(immediateContinueSupport) { - immediateContinueTeaVM0(); - }else { - sleep(0); - } + public static boolean immediateContinueSupported() { + return immediateContinueSupport; } @Async private static native void immediateContinueTeaVM0(); private static void immediateContinueTeaVM0(final AsyncCallback cb) { - synchronized(immediateContLock) { - if(immediateContinueChannel != null) { - if(currentMsgChannelContinueHack != null) { - cb.error(new IllegalStateException("Main thread is already waiting for an immediate continue callback!")); + synchronized (immediateContLock) { + if (immediateContinueChannel != null) { + if (currentMsgChannelContinueHack != null) { + cb.error(new IllegalStateException( + "Main thread is already waiting for an immediate continue callback!")); return; } currentMsgChannelContinueHack = () -> { @@ -777,33 +1041,34 @@ public class PlatformRuntime { }; try { immediateContinueChannel.getPort2().postMessage(emptyJSString); - }catch(Throwable t) { + } catch (Throwable t) { currentMsgChannelContinueHack = null; logger.error("Caught error posting immediate continue, using setTimeout instead"); Window.setTimeout(() -> cb.complete(null), 0); } - }else { - if(currentLegacyContinueHack != null) { - cb.error(new IllegalStateException("Main thread is already waiting for an immediate continue callback!")); + } else { + if (currentLegacyContinueHack != null) { + cb.error(new IllegalStateException( + "Main thread is already waiting for an immediate continue callback!")); return; } final JSString token = JSString.valueOf(EaglercraftUUID.randomUUID().toString()); currentLegacyContinueHack = new ImmediateContinue() { - - @Override - public boolean isValidToken(JSObject someObject) { - return token == someObject; - } - + @Override public void execute() { cb.complete(null); } - + + @Override + public boolean isValidToken(JSObject someObject) { + return token == someObject; + } + }; try { win.postMessage(token, windowMessagePostOrigin); - }catch(Throwable t) { + } catch (Throwable t) { currentLegacyContinueHack = null; logger.error("Caught error posting immediate continue, using setTimeout instead"); Window.setTimeout(() -> cb.complete(null), 0); @@ -812,221 +1077,56 @@ public class PlatformRuntime { } } - private static void checkImmediateContinueSupport() { - immediateContinueSupport = false; - windowMessagePostOrigin = getOriginForPost(win); - - int stat = checkImmediateContinueSupport0(); - if(stat == IMMEDIATE_CONT_SUPPORTED) { - immediateContinueSupport = true; - return; - }else if(stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { - logger.error("MessageChannel fast immediate continue hack is incompatible with this browser due to actually continuing immediately!"); - }else if(stat == IMMEDIATE_CONT_FAILED_NOT_CONT) { - logger.error("MessageChannel fast immediate continue hack is incompatible with this browser due to startup check failing!"); - }else if(stat == IMMEDIATE_CONT_FAILED_EXCEPTIONS) { - logger.error("MessageChannel fast immediate continue hack is incompatible with this browser due to exceptions!"); - } - logger.info("Note: Using legacy fast immediate continue based on window.postMessage instead"); - stat = checkLegacyImmediateContinueSupport0(); - if(stat == IMMEDIATE_CONT_SUPPORTED) { - immediateContinueSupport = true; - return; - }else if(stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { - logger.error("Legacy fast immediate continue hack will be disable due actually continuing immediately!"); - return; - } - logger.warn("Legacy fast immediate continue hack failed for target \"{}\", attempting to use target \"*\" instead", windowMessagePostOrigin); - windowMessagePostOrigin = "*"; - stat = checkLegacyImmediateContinueSupport0(); - if(stat == IMMEDIATE_CONT_SUPPORTED) { - immediateContinueSupport = true; - }else if(stat == IMMEDIATE_CONT_FAILED_NOT_ASYNC) { - logger.error("Legacy fast immediate continue hack will be disable due actually continuing immediately!"); - }else if(stat == IMMEDIATE_CONT_FAILED_NOT_CONT) { - logger.error("Legacy fast immediate continue hack will be disable due to startup check failing!"); - }else if(stat == IMMEDIATE_CONT_FAILED_EXCEPTIONS) { - logger.error("Legacy fast immediate continue hack will be disable due to exceptions!"); - } + private static boolean isDataURL(String url) { + return url.length() > 5 && url.substring(0, 5).equalsIgnoreCase("data:"); } - private static final JSString emptyJSString = JSString.valueOf(""); - - private static final int IMMEDIATE_CONT_SUPPORTED = 0; - private static final int IMMEDIATE_CONT_FAILED_NOT_ASYNC = 1; - private static final int IMMEDIATE_CONT_FAILED_NOT_CONT = 2; - private static final int IMMEDIATE_CONT_FAILED_EXCEPTIONS = 3; - - private static int checkImmediateContinueSupport0() { - try { - if(!MessageChannel.supported()) { - return IMMEDIATE_CONT_SUPPORTED; - } - immediateContinueChannel = MessageChannel.create(); - immediateContinueChannel.getPort1().addEventListener("message", new EventListener() { - @Override - public void handleEvent(MessageEvent evt) { - Runnable toRun; - synchronized(immediateContLock) { - toRun = currentMsgChannelContinueHack; - currentMsgChannelContinueHack = null; - } - if(toRun != null) { - toRun.run(); - } - } - }); - immediateContinueChannel.getPort1().start(); - immediateContinueChannel.getPort2().start(); - final boolean[] checkMe = new boolean[1]; - checkMe[0] = false; - currentMsgChannelContinueHack = () -> { - checkMe[0] = true; - }; - immediateContinueChannel.getPort2().postMessage(emptyJSString); - if(checkMe[0]) { - currentMsgChannelContinueHack = null; - if(immediateContinueChannel != null) { - safeShutdownChannel(immediateContinueChannel); - } - immediateContinueChannel = null; - return IMMEDIATE_CONT_FAILED_NOT_ASYNC; - } - sleep(10); - currentMsgChannelContinueHack = null; - if(!checkMe[0]) { - if(immediateContinueChannel != null) { - safeShutdownChannel(immediateContinueChannel); - } - immediateContinueChannel = null; - return IMMEDIATE_CONT_FAILED_NOT_CONT; - }else { - return IMMEDIATE_CONT_SUPPORTED; - } - }catch(Throwable t) { - currentMsgChannelContinueHack = null; - if(immediateContinueChannel != null) { - safeShutdownChannel(immediateContinueChannel); - } - immediateContinueChannel = null; - return IMMEDIATE_CONT_FAILED_EXCEPTIONS; - } + public static boolean isDebugRuntime() { + return false; } - private static void safeShutdownChannel(MessageChannel chan) { - try { - chan.getPort1().close(); - }catch(Throwable tt) { - } - try { - chan.getPort2().close(); - }catch(Throwable tt) { - } + @JSBody(params = {}, script = "return location.protocol && location.protocol.toLowerCase() === \"file:\";") + public static native boolean isOfflineDownloadURL(); + + @JSBody(params = {}, script = "return (typeof visualViewport !== \"undefined\");") + private static native boolean isVisualViewportSupported(); + + public static long maxMemory() { + return 1073741824l; } - private static int checkLegacyImmediateContinueSupport0() { - try { - final JSString token = JSString.valueOf(EaglercraftUUID.randomUUID().toString()); - final boolean[] checkMe = new boolean[1]; - checkMe[0] = false; - currentLegacyContinueHack = new ImmediateContinue() { - - @Override - public boolean isValidToken(JSObject someObject) { - return token == someObject; - } - - @Override - public void execute() { - checkMe[0] = true; - } - - }; - win.postMessage(token, windowMessagePostOrigin); - if(checkMe[0]) { - currentLegacyContinueHack = null; - return IMMEDIATE_CONT_FAILED_NOT_ASYNC; - } - sleep(10); - currentLegacyContinueHack = null; - if(!checkMe[0]) { - return IMMEDIATE_CONT_FAILED_NOT_CONT; - }else { - return IMMEDIATE_CONT_SUPPORTED; - } - }catch(Throwable t) { - currentLegacyContinueHack = null; - return IMMEDIATE_CONT_FAILED_EXCEPTIONS; - } + public static long nanoTime() { + return (long) (steadyTimeMillis0(steadyTimeFunc) * 1000000.0); } - @JSBody(params = { "win" }, script = "if((typeof location.origin === \"string\") && location.origin.length > 0) {" - + "var orig = location.origin; if(orig.indexOf(\"file:\") === 0) orig = \"null\"; return orig; }" - + "else return \"*\";") - private static native String getOriginForPost(Window win); + public static OutputStream newDeflaterOutputStream(OutputStream os) throws IOException { + return new DeflaterOutputStream(os); + } - public static void removeEventHandlers() { - try { - immediateContinueSupport = false; - if(windowMessageListener != null) { - win.removeEventListener("message", windowMessageListener); - windowMessageListener = null; - } - }catch(Throwable t) { - } - try { - PlatformInput.removeEventHandlers(); - }catch(Throwable t) { - } + public static InputStream newGZIPInputStream(InputStream is) throws IOException { + return new GZIPInputStream(is); } - - public static void getStackTrace(Throwable t, Consumer ret) { - JSObject o = JSExceptions.getJSException(t); - if(o != null && TeaVMUtils.isTruthy(o)) { - try { - String stack = TeaVMUtils.getStackSafe(o); - if(stack != null) { - String[] stackElements = stack.split("[\\r\\n]+"); - if(stackElements.length > 0) { - if(isDeobfStackTraces) { - TeaVMRuntimeDeobfuscator.initialize(); - TeaVMRuntimeDeobfuscator.deobfExceptionStack(Arrays.asList(stackElements)); - } - for(int i = 0; i < stackElements.length; ++i) { - String str = stackElements[i].trim(); - if(str.startsWith("at ")) { - str = str.substring(3).trim(); - } - ret.accept(str); - } - return; - } - } - }catch(Throwable tt) { - ret.accept("[ error: " + tt.toString() + " ]"); - } - } - getFallbackStackTrace(t, ret); + + public static OutputStream newGZIPOutputStream(OutputStream os) throws IOException { + return new GZIPOutputStream(os); } - - private static void getFallbackStackTrace(Throwable t, Consumer ret) { - StackTraceElement[] el = t.getStackTrace(); - if(el.length > 0) { - for(int i = 0; i < el.length; ++i) { - ret.accept(el[i].toString()); - } - }else { - ret.accept("[no stack trace]"); - } + + public static InputStream newInflaterInputStream(InputStream is) throws IOException { + return new InflaterInputStream(is); } - - @JSBody(params = { "o" }, script = "console.error(o);") - public static native void printNativeExceptionToConsoleTeaVM(JSObject o); - + + public static void postCreate() { + if (getClientConfigAdapter().isAllowBootMenu()) { + checkBootMenu(); + } + EarlyLoadScreen.paintFinal(true, true, false); + EarlyLoadScreen.destroy(); + } + public static boolean printJSExceptionIfBrowser(Throwable t) { - if(t != null) { + if (t != null) { JSObject o = JSExceptions.getJSException(t); - if(o != null && TeaVMUtils.isTruthy(o)) { + if (o != null && TeaVMUtils.isTruthy(o)) { printNativeExceptionToConsoleTeaVM(o); return true; } @@ -1034,77 +1134,53 @@ public class PlatformRuntime { return false; } - public static void exit() { - logger.fatal("Game is attempting to exit!"); + @JSBody(params = { "o" }, script = "console.error(o);") + public static native void printNativeExceptionToConsoleTeaVM(JSObject o); + + public static long randomSeed() { + return (long) (Math.random() * 9007199254740991.0); + } + + public static void removeEventHandlers() { + try { + immediateContinueSupport = false; + if (windowMessageListener != null) { + win.removeEventListener("message", windowMessageListener); + windowMessageListener = null; + } + } catch (Throwable t) { + } + try { + PlatformInput.removeEventHandlers(); + } catch (Throwable t) { + } + } + + public static void requestANGLE(EnumPlatformANGLE plaf) { + } + + @JSBody(params = {}, script = "return location.protocol && location.protocol.toLowerCase() === \"https:\";") + public static native boolean requireSSL(); + + private static void safeShutdownChannel(MessageChannel chan) { + try { + chan.getPort1().close(); + } catch (Throwable tt) { + } + try { + chan.getPort2().close(); + } catch (Throwable tt) { + } + } + + public static void setDisplayBootMenuNextRefresh(boolean en) { + BootMenuEntryPoint.setDisplayBootMenuNextRefresh(win, en); } public static void setThreadName(String string) { currentThreadName = string; } - public static long maxMemory() { - return 1073741824l; - } - - public static long totalMemory() { - return 1073741824l; - } - - public static long freeMemory() { - return 1073741824l; - } - - public static String getCallingClass(int backTrace) { - return null; - } - - public static OutputStream newDeflaterOutputStream(OutputStream os) throws IOException { - return new DeflaterOutputStream(os); - } - - public static OutputStream newGZIPOutputStream(OutputStream os) throws IOException { - return new GZIPOutputStream(os); - } - - public static InputStream newInflaterInputStream(InputStream is) throws IOException { - return new InflaterInputStream(is); - } - - public static InputStream newGZIPInputStream(InputStream is) throws IOException { - return new GZIPInputStream(is); - } - - @JSBody(params = { }, script = "return location.protocol && location.protocol.toLowerCase() === \"https:\";") - public static native boolean requireSSL(); - - @JSBody(params = { }, script = "return location.protocol && location.protocol.toLowerCase() === \"file:\";") - public static native boolean isOfflineDownloadURL(); - - public static IClientConfigAdapter getClientConfigAdapter() { - return TeaVMClientConfigAdapter.instance; - } - - public static long randomSeed() { - return (long)(Math.random() * 9007199254740991.0); - } - - private static String currentThreadName = "main"; - - public static String currentThreadName() { - return currentThreadName; - } - - @JSBody(params = { "steadyTimeFunc" }, script = "return steadyTimeFunc();") - private static native double steadyTimeMillis0(JSObject steadyTimeFunc); - - public static long steadyTimeMillis() { - return (long)steadyTimeMillis0(steadyTimeFunc); - } - - public static long nanoTime() { - return (long)(steadyTimeMillis0(steadyTimeFunc) * 1000000.0); - } - @Async public static native void sleep(int millis); @@ -1112,77 +1188,37 @@ public class PlatformRuntime { Platform.schedule(new DumbSleepHandler(callback), millis); } - private static class DumbSleepHandler implements PlatformRunnable { - private final AsyncCallback callback; - private DumbSleepHandler(AsyncCallback callback) { - this.callback = callback; - } - @Override - public void run() { - callback.complete(null); + @JSBody(params = { "evt", "mainWin" }, script = "return evt.source === mainWin;") + private static native boolean sourceEquals(MessageEvent evt, Window mainWin); + + public static long steadyTimeMillis() { + return (long) steadyTimeMillis0(steadyTimeFunc); + } + + @JSBody(params = { "steadyTimeFunc" }, script = "return steadyTimeFunc();") + private static native double steadyTimeMillis0(JSObject steadyTimeFunc); + + public static double steadyTimeMillisTeaVM() { + return steadyTimeMillis0(steadyTimeFunc); + } + + public static void swapDelayTeaVM() { + if (!useDelayOnSwap && immediateContinueSupport) { + immediateContinueTeaVM0(); + } else { + sleep(0); } } - static void checkBootMenu() { - while(PlatformInput.keyboardNext()) { - if(PlatformInput.keyboardGetEventKeyState()) { - int key = PlatformInput.keyboardGetEventKey(); - if(key == KeyboardConstants.KEY_DELETE || key == KeyboardConstants.KEY_BACK) { - enterBootMenu(); - } - } - } + public static long totalMemory() { + return 1073741824l; } - @JSBody(params = {}, script = "delete __isEaglerX188Running;") - private static native void clearRunningFlag(); - - static void enterBootMenu() { - if(!getClientConfigAdapter().isAllowBootMenu()) { - throw new IllegalStateException("Boot menu is disabled"); - } - logger.info("Attempting to destroy context and enter boot menu..."); - EaglercraftGPU.destroyCache(); - Filesystem.closeAllHandles(); - PlatformAudio.destroy(); - PlatformScreenRecord.destroy(); - removeEventHandlers(); - if(webgl != null) { - EarlyLoadScreen.destroy(); - PlatformInput.clearEvenBuffers(); - WebGLBackBuffer.destroy(); - } - if(canvas != null) { - canvas.delete(); - canvas = null; - } - PlatformOpenGL.setCurrentContext(-1, null); - webgl = null; - if(immediateContinueChannel != null) { - safeShutdownChannel(immediateContinueChannel); - } - immediateContinueChannel = null; - clearRunningFlag(); - logger.info("Firing boot menu escape signal..."); - throw new TeaVMEnterBootMenuException(); + public static void writeCrashReport(String crashDump) { + ClientMain.showCrashScreen(crashDump); } - public static void postCreate() { - if(getClientConfigAdapter().isAllowBootMenu()) { - checkBootMenu(); - } - EarlyLoadScreen.paintFinal(true, true, false); - EarlyLoadScreen.destroy(); - } - - public static void setDisplayBootMenuNextRefresh(boolean en) { - BootMenuEntryPoint.setDisplayBootMenuNextRefresh(win, en); - } - - static void beforeUnload() { - if(SingleplayerServerController.isWorldRunning()) { - SingleplayerServerController.autoSave(); - } - } + @JSBody(params = {}, script = "return {antialias: false, depth: false, powerPreference: \"high-performance\", desynchronized: true, preserveDrawingBuffer: false, premultipliedAlpha: false, alpha: false};") + public static native JSObject youEagler(); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java index 70a92277..66d0e1d3 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformScreenRecord.java @@ -3,7 +3,6 @@ package net.lax1dude.eaglercraft.v1_8.internal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.EnumSet; -import java.util.HashSet; import java.util.Set; import org.teavm.interop.Async; @@ -16,7 +15,6 @@ import org.teavm.jso.browser.Window; import org.teavm.jso.canvas.CanvasRenderingContext2D; import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.events.EventListener; -import org.teavm.jso.dom.html.HTMLAnchorElement; import org.teavm.jso.dom.html.HTMLCanvasElement; import org.teavm.jso.webaudio.MediaStream; @@ -30,23 +28,33 @@ import net.lax1dude.eaglercraft.v1_8.recording.EnumScreenRecordingCodec; /** * Copyright (c) 2024 lax1dude, ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformScreenRecord { - static final Logger logger = LogManager.getLogger("PlatformScreenRecord"); + private static interface DataAvailableEvent extends Event { + @JSProperty + JSObject getData(); + } + @JSFunctor + private static interface MediaHandler extends JSObject { + void onMedia(MediaStream stream); + } + + static final Logger logger = LogManager.getLogger("PlatformScreenRecord"); static Window win; static HTMLCanvasElement canvas; static boolean support; @@ -59,58 +67,36 @@ public class PlatformScreenRecord { static long lastDownscaleFrameCaptured = 0l; static long startTime = 0l; static boolean currentMicLock = false; + static JSObject mediaRec = null; + static ScreenRecordParameters currentParameters = null; - @JSBody(params = { "win", "canvas" }, script = "return (typeof win.MediaRecorder !== \"undefined\") && (typeof win.MediaRecorder.isTypeSupported === \"function\") && (typeof canvas.captureStream === \"function\");") - private static native boolean hasMediaRecorder(Window win, HTMLCanvasElement canvas); + private static final SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss"); - @JSBody(params = { "win", "codec" }, script = "return win.MediaRecorder.isTypeSupported(codec);") - private static native boolean hasMediaCodec(Window win, String codec); + private static boolean canMic = true; - static void initContext(Window window, HTMLCanvasElement canvasElement) { - win = window; - canvas = canvasElement; - supportedCodecs.clear(); - try { - support = hasMediaRecorder(window, canvasElement); - if(support) { - logger.info("MediaRecorder is supported, checking codecs..."); - EnumScreenRecordingCodec[] allCodecs = EnumScreenRecordingCodec.values(); - for(int i = 0; i < allCodecs.length; ++i) { - if(hasMediaCodec(window, allCodecs[i].mimeType)) { - supportedCodecs.add(allCodecs[i]); - } - } - if(!supportedCodecs.isEmpty()) { - logger.info("Found {} codecs that are probably supported!", supportedCodecs.size()); - }else { - logger.error("No supported codecs found!"); - support = false; - } - } - }catch(Throwable t) { - supportedCodecs.clear(); - logger.error("Disabling screen recording because of exceptions!"); - support = false; - } - } + private static MediaStream mic = null; + + @JSBody(params = {}, script = "return (typeof MediaRecorder !== \"undefined\");") + private static native boolean canRec(); static void captureFrameHook() { - if(mediaRec != null && currentParameters != null && currentParameters.resolutionDivisior > 1 && downscaleCanvas != null && downscaleCanvasCtx != null) { - if(currentParameters.captureFrameRate > 0) { + if (mediaRec != null && currentParameters != null && currentParameters.resolutionDivisior > 1 + && downscaleCanvas != null && downscaleCanvasCtx != null) { + if (currentParameters.captureFrameRate > 0) { long curTime = PlatformRuntime.steadyTimeMillis(); - if(curTime - lastDownscaleFrameCaptured < (long)(1000 / currentParameters.captureFrameRate)) { + if (curTime - lastDownscaleFrameCaptured < (long) (1000 / currentParameters.captureFrameRate)) { return; } lastDownscaleFrameCaptured = curTime; } int oldWidth = downscaleCanvas.getWidth(); int oldHeight = downscaleCanvas.getHeight(); - float divisor = (float)Math.sqrt(1.0 / Math.pow(2.0, currentParameters.resolutionDivisior - 1)); - int newWidth = (int)(PlatformInput.getWindowWidth() * divisor); - int newHeight = (int)(PlatformInput.getWindowHeight() * divisor); - if(oldWidth != newWidth || oldHeight != newHeight) { + float divisor = (float) Math.sqrt(1.0 / Math.pow(2.0, currentParameters.resolutionDivisior - 1)); + int newWidth = (int) (PlatformInput.getWindowWidth() * divisor); + int newHeight = (int) (PlatformInput.getWindowHeight() * divisor); + if (oldWidth != newWidth || oldHeight != newHeight) { downscaleCanvas.setWidth(newWidth); downscaleCanvas.setHeight(newHeight); } @@ -118,101 +104,28 @@ public class PlatformScreenRecord { } } - public static boolean isSupported() { - return support; - } - - public static boolean isCodecSupported(EnumScreenRecordingCodec codec) { - return supportedCodecs.contains(codec); - } - - public static void setGameVolume(float volume) { - currentGameVolume = volume; - if(PlatformAudio.gameRecGain != null) { - PlatformAudio.gameRecGain.getGain().setValue(volume); - } - } - - public static void setMicrophoneVolume(float volume) { - currentMicVolume = volume; - if(PlatformAudio.micRecGain != null) { - PlatformAudio.micRecGain.getGain().setValue(volume); - } - } - - @JSBody(params = { }, script = "return { alpha: false, desynchronized: true };") - private static native JSObject youEagler(); - - @JSBody(params = { "canvas", "fps", "audio" }, script = "var stream = fps <= 0 ? canvas.captureStream() : canvas.captureStream(fps); stream.addTrack(audio.getTracks()[0]); return stream;") + @JSBody(params = { "canvas", "fps", + "audio" }, script = "var stream = fps <= 0 ? canvas.captureStream() : canvas.captureStream(fps); stream.addTrack(audio.getTracks()[0]); return stream;") private static native MediaStream captureStreamAndAddAudio(HTMLCanvasElement canvas, int fps, MediaStream audio); - private static interface DataAvailableEvent extends Event { - @JSProperty - JSObject getData(); - } + @JSBody(params = { "canvas", + "audio" }, script = "var stream = canvas.captureStream(); stream.addTrack(audio.getTracks()[0]); return stream;") + private static native MediaStream captureStreamAndAddAudio(HTMLCanvasElement canvas, MediaStream audio); - private static final SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss"); + @JSBody(params = { "stream", "codec", "videoBitrate", + "audioBitrate" }, script = "var rec = new MediaRecorder(stream, { mimeType: codec, videoBitsPerSecond: videoBitrate, audioBitsPerSecond: audioBitrate }); rec.start(); return rec;") + private static native JSObject createMediaRecorder(MediaStream stream, String codec, int videoBitrate, + int audioBitrate); - public static void startRecording(ScreenRecordParameters params) { - if(!support) { - throw new IllegalStateException("Screen recording is not supported"); - } - if(isRecording()) { - throw new IllegalStateException("Already recording!"); - } - if(params.captureFrameRate <= 0 && (!PlatformInput.vsync || !PlatformInput.vsyncSupport)) { - throw new IllegalStateException("V-Sync is not enabled, please enable it in \"Video Settings\""); - } - if(params.resolutionDivisior > 1) { - float divisor = (float)Math.sqrt(1.0 / Math.pow(2.0, params.resolutionDivisior - 1)); - int newWidth = (int)(PlatformInput.getWindowWidth() * divisor); - int newHeight = (int)(PlatformInput.getWindowHeight() * divisor); - if(downscaleCanvas == null) { - downscaleCanvas = (HTMLCanvasElement) win.getDocument().createElement("canvas"); - downscaleCanvas.setWidth(newWidth); - downscaleCanvas.setHeight(newHeight); - downscaleCanvasCtx = (CanvasRenderingContext2D) downscaleCanvas.getContext("2d", youEagler()); - if(downscaleCanvasCtx == null) { - downscaleCanvas = null; - throw new IllegalStateException("Could not create downscaler canvas!"); - } - }else { - downscaleCanvas.setWidth(newWidth); - downscaleCanvas.setHeight(newHeight); - } - } - currentMicLock = currentMicVolume <= 0.0f; - recStream = captureStreamAndAddAudio(params.resolutionDivisior > 1 ? downscaleCanvas : canvas, Math.max(params.captureFrameRate, 0), - PlatformAudio.initRecordingStream(currentGameVolume, currentMicVolume)); - mediaRec = createMediaRecorder(recStream, params.codec.mimeType, params.videoBitsPerSecond * 1000, params.audioBitsPerSecond * 1000); - currentParameters = params; - startTime = PlatformRuntime.steadyTimeMillis(); - TeaVMUtils.addEventListener(mediaRec, "dataavailable", new EventListener() { - @Override - public void handleEvent(DataAvailableEvent evt) { - final String fileName = EaglercraftVersion.mainMenuStringB + " - " + EaglerProfile.getName() + " - " + fmt.format(new Date()) + "." + params.codec.fileExt; - if("video/webm".equals(params.codec.container)) { - FixWebMDurationJS.getRecUrl(evt, (int) (PlatformRuntime.steadyTimeMillis() - startTime), url -> { - HTMLAnchorElement a = (HTMLAnchorElement) win.getDocument().createElement("a"); - a.setDownload(fileName); - a.setHref(url); - a.click(); - TeaVMUtils.freeDataURL(url); - }, logger::info); - }else { - String url = TeaVMUtils.getDataURL(evt.getData()); - HTMLAnchorElement a = (HTMLAnchorElement) win.getDocument().createElement("a"); - a.setDownload(fileName); - a.setHref(url); - a.click(); - TeaVMUtils.freeDataURL(url); - } - } - }); + static void destroy() { + supportedCodecs.clear(); + support = false; + canvas = null; + win = null; } public static void endRecording() { - if(mediaRec != null) { + if (mediaRec != null) { stopRec(mediaRec); mediaRec = null; PlatformAudio.destroyRecordingStream(); @@ -220,48 +133,6 @@ public class PlatformScreenRecord { currentParameters = null; } - public static boolean isRecording() { - return mediaRec != null; - } - - public static boolean isMicVolumeLocked() { - return mediaRec != null && currentMicLock; - } - - public static boolean isVSyncLocked() { - return mediaRec != null && currentParameters != null && currentParameters.captureFrameRate == -1; - } - - @JSBody(params = { "canvas", "audio" }, script = "var stream = canvas.captureStream(); stream.addTrack(audio.getTracks()[0]); return stream;") - private static native MediaStream captureStreamAndAddAudio(HTMLCanvasElement canvas, MediaStream audio); - - @JSBody(params = { "stream", "codec", "videoBitrate", "audioBitrate" }, script = "var rec = new MediaRecorder(stream, { mimeType: codec, videoBitsPerSecond: videoBitrate, audioBitsPerSecond: audioBitrate }); rec.start(); return rec;") - private static native JSObject createMediaRecorder(MediaStream stream, String codec, int videoBitrate, int audioBitrate); - - @JSBody(params = { "rec" }, script = "rec.stop();") - private static native void stopRec(JSObject rec); - - @JSBody(params = { }, script = "return (typeof MediaRecorder !== \"undefined\");") - private static native boolean canRec(); - - @JSFunctor - private static interface MediaHandler extends JSObject { - void onMedia(MediaStream stream); - } - - @JSBody(params = { "cb" }, script = "if (\"navigator\" in window && \"mediaDevices\" in window.navigator && \"getUserMedia\" in window.navigator.mediaDevices) { try { window.navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(stream) { cb(stream); }).catch(function(err) { console.error(err); cb(null); }); } catch(e) { console.error(\"getUserMedia Error!\"); cb(null); } } else { console.error(\"No getUserMedia!\"); cb(null); }") - private static native void getMic0(MediaHandler cb); - - @Async - private static native MediaStream getMic1(); - - private static void getMic1(AsyncCallback cb) { - getMic0(cb::complete); - } - - private static boolean canMic = true; - private static MediaStream mic = null; - static MediaStream getMic() { if (canMic) { if (mic == null) { @@ -277,11 +148,143 @@ public class PlatformScreenRecord { return null; } - static void destroy() { - supportedCodecs.clear(); - support = false; - canvas = null; - win = null; + @JSBody(params = { + "cb" }, script = "if (\"navigator\" in window && \"mediaDevices\" in window.navigator && \"getUserMedia\" in window.navigator.mediaDevices) { try { window.navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(stream) { cb(stream); }).catch(function(err) { console.error(err); cb(null); }); } catch(e) { console.error(\"getUserMedia Error!\"); cb(null); } } else { console.error(\"No getUserMedia!\"); cb(null); }") + private static native void getMic0(MediaHandler cb); + + @Async + private static native MediaStream getMic1(); + + private static void getMic1(AsyncCallback cb) { + getMic0(cb::complete); } + @JSBody(params = { "win", "codec" }, script = "return win.MediaRecorder.isTypeSupported(codec);") + private static native boolean hasMediaCodec(Window win, String codec); + + @JSBody(params = { "win", + "canvas" }, script = "return (typeof win.MediaRecorder !== \"undefined\") && (typeof win.MediaRecorder.isTypeSupported === \"function\") && (typeof canvas.captureStream === \"function\");") + private static native boolean hasMediaRecorder(Window win, HTMLCanvasElement canvas); + + static void initContext(Window window, HTMLCanvasElement canvasElement) { + win = window; + canvas = canvasElement; + supportedCodecs.clear(); + try { + support = hasMediaRecorder(window, canvasElement); + if (support) { + logger.info("MediaRecorder is supported, checking codecs..."); + EnumScreenRecordingCodec[] allCodecs = EnumScreenRecordingCodec.values(); + for (int i = 0; i < allCodecs.length; ++i) { + if (hasMediaCodec(window, allCodecs[i].mimeType)) { + supportedCodecs.add(allCodecs[i]); + } + } + if (!supportedCodecs.isEmpty()) { + logger.info("Found {} codecs that are probably supported!", supportedCodecs.size()); + } else { + logger.error("No supported codecs found!"); + support = false; + } + } + } catch (Throwable t) { + supportedCodecs.clear(); + logger.error("Disabling screen recording because of exceptions!"); + support = false; + } + } + + public static boolean isCodecSupported(EnumScreenRecordingCodec codec) { + return supportedCodecs.contains(codec); + } + + public static boolean isMicVolumeLocked() { + return mediaRec != null && currentMicLock; + } + + public static boolean isRecording() { + return mediaRec != null; + } + + public static boolean isSupported() { + return support; + } + + public static boolean isVSyncLocked() { + return mediaRec != null && currentParameters != null && currentParameters.captureFrameRate == -1; + } + + public static void setGameVolume(float volume) { + currentGameVolume = volume; + if (PlatformAudio.gameRecGain != null) { + PlatformAudio.gameRecGain.getGain().setValue(volume); + } + } + + public static void setMicrophoneVolume(float volume) { + currentMicVolume = volume; + if (PlatformAudio.micRecGain != null) { + PlatformAudio.micRecGain.getGain().setValue(volume); + } + } + + public static void startRecording(ScreenRecordParameters params) { + if (!support) { + throw new IllegalStateException("Screen recording is not supported"); + } + if (isRecording()) { + throw new IllegalStateException("Already recording!"); + } + if (params.captureFrameRate <= 0 && (!PlatformInput.vsync || !PlatformInput.vsyncSupport)) { + throw new IllegalStateException("V-Sync is not enabled, please enable it in \"Video Settings\""); + } + if (params.resolutionDivisior > 1) { + float divisor = (float) Math.sqrt(1.0 / Math.pow(2.0, params.resolutionDivisior - 1)); + int newWidth = (int) (PlatformInput.getWindowWidth() * divisor); + int newHeight = (int) (PlatformInput.getWindowHeight() * divisor); + if (downscaleCanvas == null) { + downscaleCanvas = (HTMLCanvasElement) win.getDocument().createElement("canvas"); + downscaleCanvas.setWidth(newWidth); + downscaleCanvas.setHeight(newHeight); + downscaleCanvasCtx = (CanvasRenderingContext2D) downscaleCanvas.getContext("2d", youEagler()); + if (downscaleCanvasCtx == null) { + downscaleCanvas = null; + throw new IllegalStateException("Could not create downscaler canvas!"); + } + } else { + downscaleCanvas.setWidth(newWidth); + downscaleCanvas.setHeight(newHeight); + } + } + currentMicLock = currentMicVolume <= 0.0f; + recStream = captureStreamAndAddAudio(params.resolutionDivisior > 1 ? downscaleCanvas : canvas, + Math.max(params.captureFrameRate, 0), + PlatformAudio.initRecordingStream(currentGameVolume, currentMicVolume)); + mediaRec = createMediaRecorder(recStream, params.codec.mimeType, params.videoBitsPerSecond * 1000, + params.audioBitsPerSecond * 1000); + currentParameters = params; + startTime = PlatformRuntime.steadyTimeMillis(); + TeaVMUtils.addEventListener(mediaRec, "dataavailable", new EventListener() { + @Override + public void handleEvent(DataAvailableEvent evt) { + final String fileName = EaglercraftVersion.screenRecordingFilePrefix + " - " + EaglerProfile.getName() + + " - " + fmt.format(new Date()) + "." + params.codec.fileExt; + if ("video/webm".equals(params.codec.container)) { + FixWebMDurationJS.getRecUrl(evt, (int) (PlatformRuntime.steadyTimeMillis() - startTime), url -> { + PlatformApplication.downloadURLWithNameTeaVM(fileName, url, () -> TeaVMUtils.freeDataURL(url)); + }, logger::info); + } else { + String url = TeaVMUtils.getDataURL(evt.getData()); + PlatformApplication.downloadURLWithNameTeaVM(fileName, url, () -> TeaVMUtils.freeDataURL(url)); + } + } + }); + } + + @JSBody(params = { "rec" }, script = "rec.stop();") + private static native void stopRec(JSObject rec); + + @JSBody(params = {}, script = "return { alpha: false, desynchronized: true };") + private static native JSObject youEagler(); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java index e6b7af3a..3ff15853 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformUpdateSvc.java @@ -15,18 +15,19 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateResultObj; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformUpdateSvc { @@ -38,61 +39,31 @@ public class PlatformUpdateSvc { private static final UpdateProgressStruct progressStruct = new UpdateProgressStruct(); - @JSBody(params = { }, script = "if(typeof eaglercraftXClientSignature !== \"string\") return null; var ret = eaglercraftXClientSignature; eaglercraftXClientSignature = null; return ret;") - private static native String grabEaglercraftXClientSignature(); - - @JSBody(params = { }, script = "if(typeof eaglercraftXClientBundle !== \"string\") return null; var ret = eaglercraftXClientBundle; eaglercraftXClientBundle = null; return ret;") - private static native String grabEaglercraftXClientBundle(); - public static Thread updateThread = null; private static boolean hasInitialized = false; - public static boolean supported() { - return true; - } - - public static void initialize() { - if(!hasInitialized) { - hasInitialized = true; - eaglercraftXClientSignature = loadClientData(grabEaglercraftXClientSignature()); - eaglercraftXClientBundle = loadClientData(grabEaglercraftXClientBundle()); - } - } - - private static byte[] loadClientData(String url) { - if(url == null) { - return null; - } - ArrayBuffer buf = PlatformRuntime.downloadRemoteURI(url); - if(buf == null) { - logger.error("Failed to download client bundle or signature URL!"); - return null; - } - return TeaVMUtils.wrapByteArrayBuffer(buf); - } - - public static byte[] getClientSignatureData() { - if(!hasInitialized) { - initialize(); - } - return eaglercraftXClientSignature; - } - public static byte[] getClientBundleData() { - if(!hasInitialized) { + if (!hasInitialized) { initialize(); } return eaglercraftXClientBundle; } - public static void startClientUpdateFrom(UpdateCertificate clientUpdate) { - if(updateThread == null || !updateThread.isAlive()) { - updateThread = new Thread(new TeaVMUpdateThread(clientUpdate, progressStruct), "EaglerUpdateThread"); - updateThread.setDaemon(true); - updateThread.start(); - }else { - logger.error("Tried to start a new download while the current download thread was still alive!"); + public static byte[] getClientSignatureData() { + if (!hasInitialized) { + initialize(); + } + return eaglercraftXClientSignature; + } + + public static UpdateResultObj getUpdateResult() { + UpdateResultObj ret = updateResult; + if (ret != null) { + updateResult = null; + return ret; + } else { + return null; } } @@ -100,18 +71,18 @@ public class PlatformUpdateSvc { return progressStruct; } - public static UpdateResultObj getUpdateResult() { - UpdateResultObj ret = updateResult; - if(ret != null) { - updateResult = null; - return ret; - }else { - return null; - } - } + @JSBody(params = {}, script = "if(typeof eaglercraftXClientBundle !== \"string\") return null; var ret = eaglercraftXClientBundle; eaglercraftXClientBundle = null; return ret;") + private static native String grabEaglercraftXClientBundle(); - public static void setUpdateResultTeaVM(UpdateResultObj obj) { - updateResult = obj; + @JSBody(params = {}, script = "if(typeof eaglercraftXClientSignature !== \"string\") return null; var ret = eaglercraftXClientSignature; eaglercraftXClientSignature = null; return ret;") + private static native String grabEaglercraftXClientSignature(); + + public static void initialize() { + if (!hasInitialized) { + hasInitialized = true; + eaglercraftXClientSignature = loadClientData(grabEaglercraftXClientSignature()); + eaglercraftXClientBundle = loadClientData(grabEaglercraftXClientBundle()); + } } public static void installSignedClient(UpdateCertificate clientCert, byte[] clientPayload, boolean setDefault, @@ -121,6 +92,18 @@ public class PlatformUpdateSvc { clientCert.rawCertData, clientPayload, setDefault, setTimeout); } + private static byte[] loadClientData(String url) { + if (url == null) { + return null; + } + ArrayBuffer buf = PlatformRuntime.downloadRemoteURI(url); + if (buf == null) { + logger.error("Failed to download client bundle or signature URL!"); + return null; + } + return TeaVMUtils.wrapByteArrayBuffer(buf); + } + public static void quine(String filename, byte[] cert, byte[] data, String date) { EagRuntime.downloadFileWithName(filename, TeaVMUpdateThread.generateSignedOffline(cert, data, date)); } @@ -128,4 +111,22 @@ public class PlatformUpdateSvc { public static void quine(UpdateCertificate clientUpdate, byte[] data) { TeaVMUpdateThread.downloadSignedOffline(clientUpdate, data); } + + public static void setUpdateResultTeaVM(UpdateResultObj obj) { + updateResult = obj; + } + + public static void startClientUpdateFrom(UpdateCertificate clientUpdate) { + if (updateThread == null || !updateThread.isAlive()) { + updateThread = new Thread(new TeaVMUpdateThread(clientUpdate, progressStruct), "EaglerUpdateThread"); + updateThread.setDaemon(true); + updateThread.start(); + } else { + logger.error("Tried to start a new download while the current download thread was still alive!"); + } + } + + public static boolean supported() { + return true; + } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java index 4acb93e4..d363e016 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformVoiceClient.java @@ -1,13 +1,10 @@ package net.lax1dude.eaglercraft.v1_8.internal; -import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; -import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; -import net.lax1dude.eaglercraft.v1_8.log4j.Logger; -import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelPeerState; -import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState; -import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelType; -import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + import org.json.JSONObject; import org.json.JSONWriter; import org.teavm.jso.JSBody; @@ -18,139 +15,53 @@ import org.teavm.jso.dom.html.HTMLAudioElement; import org.teavm.jso.dom.html.HTMLDocument; import org.teavm.jso.json.JSON; import org.teavm.jso.typedarrays.Uint8Array; -import org.teavm.jso.webaudio.*; +import org.teavm.jso.webaudio.AnalyserNode; +import org.teavm.jso.webaudio.AudioContext; +import org.teavm.jso.webaudio.AudioNode; +import org.teavm.jso.webaudio.GainNode; +import org.teavm.jso.webaudio.MediaStream; +import org.teavm.jso.webaudio.MediaStreamAudioDestinationNode; +import org.teavm.jso.webaudio.MediaStreamAudioSourceNode; +import org.teavm.jso.webaudio.PannerNode; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelReadyState; +import net.lax1dude.eaglercraft.v1_8.voice.EnumVoiceChannelType; +import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController; /** * Copyright (c) 2022-2024 ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformVoiceClient { - private static final Logger logger = LogManager.getLogger("PlatformVoiceClient"); - - @JSBody(params = {}, script = "return typeof navigator.mediaDevices !== \"undefined\" && typeof navigator.mediaDevices.getUserMedia !== \"undefined\";") - private static native boolean isSupported0(); - - private static final int SRC_OBJECT_SUPPORT_NONE = -1; - private static final int SRC_OBJECT_SUPPORT_CORE = 0; - private static final int SRC_OBJECT_SUPPORT_MOZ = 1; - - static boolean hasCheckedSupport = false; - static boolean support = false; - static int srcObjectSupport = SRC_OBJECT_SUPPORT_NONE; - - public static boolean isSupported() { - if(!hasCheckedSupport) { - support = PlatformWebRTC.supported() && isSupported0(); - if(support) { - srcObjectSupport = checkSrcObjectSupport(PlatformRuntime.doc); - if(srcObjectSupport == SRC_OBJECT_SUPPORT_NONE) { - support = false; - }else if(srcObjectSupport == SRC_OBJECT_SUPPORT_MOZ) { - logger.info("Using moz- prefix for HTMLMediaElement.srcObject"); - } - } - hasCheckedSupport = true; - } - return support; - } - - @JSBody(params = { "item" }, script = "return item.streams[0];") - static native MediaStream getFirstStream(JSObject item); - - @JSBody(params = { "doc" }, script = "var aud = doc.createElement(\"audio\"); return (typeof aud.srcObject !== \"undefined\") ? 0 : ((typeof aud.mozSrcObject !== \"undefined\") ? 1 : -1);") - static native int checkSrcObjectSupport(HTMLDocument doc); - - static void setSrcObject(HTMLAudioElement aud, MediaStream stream) { - switch(srcObjectSupport) { - case SRC_OBJECT_SUPPORT_CORE: - setSrcObjectCore(aud, stream); - break; - case SRC_OBJECT_SUPPORT_MOZ: - setMozSrcObject(aud, stream); - break; - default: - throw new IllegalStateException(); - } - } - - @JSBody(params = { "aud", "stream" }, script = "return aud.srcObject = stream;") - private static native void setSrcObjectCore(HTMLAudioElement aud, MediaStream stream); - - @JSBody(params = { "aud", "stream" }, script = "return aud.mozSrcObject = stream;") - private static native void setMozSrcObject(HTMLAudioElement aud, MediaStream stream); - - @JSBody(params = { "pc", "stream" }, script = "return stream.getTracks().forEach(function(track) { pc.addTrack(track, stream); });") - static native void addStream(JSObject pc, MediaStream stream); - - @JSBody(params = { "rawStream", "muted" }, script = "return rawStream.getAudioTracks()[0].enabled = !muted;") - static native void mute(MediaStream rawStream, boolean muted); - - @JSBody(params = { "peerConnection", "str" }, script = "return peerConnection.addIceCandidate(new RTCIceCandidate(JSON.parse(str)));") - static native void addCoreIceCandidate(JSObject peerConnection, String str); - - @JSBody(params = { "peerConnection", "str" }, script = "return peerConnection.addIceCandidate(new mozRTCIceCandidate(JSON.parse(str)));") - static native void addMozIceCandidate(JSObject peerConnection, String str); - - static void addIceCandidate(JSObject peerConnection, String str) { - if(!PlatformWebRTC.hasCheckedSupport) PlatformWebRTC.supported(); - switch(PlatformWebRTC.supportedImpl) { - case PlatformWebRTC.WEBRTC_SUPPORT_CORE: - case PlatformWebRTC.WEBRTC_SUPPORT_WEBKIT: - addCoreIceCandidate(peerConnection, str); - break; - case PlatformWebRTC.WEBRTC_SUPPORT_MOZ: - addMozIceCandidate(peerConnection, str); - break; - default: - throw new UnsupportedOperationException(); - } - } - - public static void disconnect(JSObject peerConnection) { - PlatformWebRTC.closeIt(peerConnection); - } - - public static void setVoiceProximity(int prox) { - for (VoicePeer player : peerList.values()) { - if(player.panner != null) { - player.panner.setMaxDistance(VoiceClientController.getVoiceListenVolume() * 2 * prox + 0.1f); - } - } - } - - public static void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { - VoicePeer player = peerList.get(uuid); - if (player != null && player.panner != null) player.panner.setPosition((float) x, (float) y, (float) z); - } - public static class VoicePeer { public final EaglercraftUUID peerId; public final JSObject peerConnection; public MediaStream rawStream; - + private AnalyserNode analyser = null; private GainNode gain = null; private PannerNode panner = null; private AudioNode recNode = null; - + private HTMLAudioElement mediaElement = null; + public VoicePeer(EaglercraftUUID peerId, JSObject peerConnection, boolean offer) { this.peerId = peerId; this.peerConnection = peerConnection; @@ -165,10 +76,10 @@ public class PlatformVoiceClient { }); TeaVMUtils.addEventListener(peerConnection, "track", (EventListener) evt -> { rawStream = getFirstStream(evt); - HTMLAudioElement aud = (HTMLAudioElement) PlatformRuntime.doc.createElement("audio"); - aud.setAutoplay(true); - aud.setMuted(true); - setSrcObject(aud, rawStream); + mediaElement = (HTMLAudioElement) PlatformRuntime.doc.createElement("audio"); + mediaElement.setAutoplay(true); + mediaElement.setMuted(true); + setSrcObject(mediaElement, rawStream); handlePeerTrack(this, rawStream); }); @@ -179,37 +90,31 @@ public class PlatformVoiceClient { VoiceClientController.sendPacketDesc(peerId, JSON.stringify(desc)); }, err -> { logger.error("Failed to set local description for \"{}\"! {}", peerId, err); - if (peerStateInitial == EnumVoiceChannelPeerState.LOADING) { - peerStateInitial = EnumVoiceChannelPeerState.FAILED; - } signalDisconnect(VoicePeer.this, false); }); }, err -> { logger.error("Failed to set create offer for \"{}\"! {}", peerId, err); - if (peerStateInitial == EnumVoiceChannelPeerState.LOADING) { - peerStateInitial = EnumVoiceChannelPeerState.FAILED; - } signalDisconnect(VoicePeer.this, false); }); } TeaVMUtils.addEventListener(peerConnection, "connectionstatechange", (EventListener) evt -> { String cs = PlatformWebRTC.getConnectionState(peerConnection); - if ("disconnected".equals(cs)) { - signalDisconnect(VoicePeer.this, false); - } else if ("connected".equals(cs)) { - if (peerState != EnumVoiceChannelPeerState.SUCCESS) { - peerState = EnumVoiceChannelPeerState.SUCCESS; - } - } else if ("failed".equals(cs)) { - if (peerState == EnumVoiceChannelPeerState.LOADING) { - peerState = EnumVoiceChannelPeerState.FAILED; - } + if ("disconnected".equals(cs) || "failed".equals(cs)) { signalDisconnect(VoicePeer.this, false); } }); } + public void addICECandidate(String candidate) { + try { + addIceCandidate(peerConnection, candidate); + } catch (Throwable err) { + logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); + signalDisconnect(VoicePeer.this, false); + } + } + public void disconnect() { PlatformVoiceClient.disconnect(peerConnection); } @@ -226,74 +131,52 @@ public class PlatformVoiceClient { PlatformWebRTC.createAnswer(peerConnection, desc -> { PlatformWebRTC.setLocalDescription(peerConnection, desc, () -> { VoiceClientController.sendPacketDesc(peerId, JSON.stringify(desc)); - if (peerStateDesc != EnumVoiceChannelPeerState.SUCCESS) peerStateDesc = EnumVoiceChannelPeerState.SUCCESS; }, err -> { - logger.error("Failed to set local description for \"{}\"! {}", peerId, err.getMessage()); - if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; + logger.error("Failed to set local description for \"{}\"! {}", peerId, + err.getMessage()); signalDisconnect(VoicePeer.this, false); }); }, err -> { logger.error("Failed to create answer for \"{}\"! {}", peerId, err.getMessage()); - if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; signalDisconnect(VoicePeer.this, false); }); } }, err -> { logger.error("Failed to set remote description for \"{}\"! {}", peerId, err.getMessage()); - if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; signalDisconnect(VoicePeer.this, false); }); } catch (Throwable err) { logger.error("Failed to parse remote description for \"{}\"! {}", peerId, err.getMessage()); - if (peerStateDesc == EnumVoiceChannelPeerState.LOADING) peerStateDesc = EnumVoiceChannelPeerState.FAILED; - signalDisconnect(VoicePeer.this, false); - } - } - - public void addICECandidate(String candidate) { - try { - addIceCandidate(peerConnection, candidate); - if (peerStateIce != EnumVoiceChannelPeerState.SUCCESS) peerStateIce = EnumVoiceChannelPeerState.SUCCESS; - } catch (Throwable err) { - logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); - if (peerStateIce == EnumVoiceChannelPeerState.LOADING) peerStateIce = EnumVoiceChannelPeerState.FAILED; signalDisconnect(VoicePeer.this, false); } } } + private static final Logger logger = LogManager.getLogger("PlatformVoiceClient"); + + private static final int SRC_OBJECT_SUPPORT_NONE = -1; + private static final int SRC_OBJECT_SUPPORT_CORE = 0; + private static final int SRC_OBJECT_SUPPORT_MOZ = 1; + + static boolean hasCheckedSupport = false; + static boolean support = false; + static int srcObjectSupport = SRC_OBJECT_SUPPORT_NONE; + public static Set> iceServers = new HashSet<>(); - public static boolean hasInit = false; - public static final Map peerList = new HashMap<>(); - public static MediaStreamAudioDestinationNode localMediaStream; - public static GainNode localMediaStreamGain; - public static MediaStream localRawMediaStream; - public static EnumVoiceChannelReadyState readyState = EnumVoiceChannelReadyState.NONE; - public static EnumVoiceChannelPeerState peerState = EnumVoiceChannelPeerState.LOADING; - public static EnumVoiceChannelPeerState peerStateConnect = EnumVoiceChannelPeerState.LOADING; - public static EnumVoiceChannelPeerState peerStateInitial = EnumVoiceChannelPeerState.LOADING; - public static EnumVoiceChannelPeerState peerStateDesc = EnumVoiceChannelPeerState.LOADING; - public static EnumVoiceChannelPeerState peerStateIce = EnumVoiceChannelPeerState.LOADING; - public static AudioContext microphoneVolumeAudioContext = null; - public static void setICEServers(String[] urls) { - iceServers.clear(); - if (urls == null) return; - for (String url : urls) { - String[] etr = url.split(";"); - if (etr.length == 1) { - Map m = new HashMap<>(); - m.put("urls", etr[0]); - iceServers.add(m); - } else if (etr.length == 3) { - Map m = new HashMap<>(); - m.put("urls", etr[0]); - m.put("username", etr[1]); - m.put("credential", etr[2]); - iceServers.add(m); - } - } - } + public static boolean hasInit = false; + + public static final Map peerList = new HashMap<>(); + + public static MediaStreamAudioDestinationNode localMediaStream; + + public static GainNode localMediaStreamGain; + + public static MediaStream localRawMediaStream; + + public static EnumVoiceChannelReadyState readyState = EnumVoiceChannelReadyState.NONE; + + public static AudioContext microphoneVolumeAudioContext = null; public static void activateVoice(boolean talk) { if (hasInit) { @@ -301,131 +184,80 @@ public class PlatformVoiceClient { } } - public static void initializeDevices() { - if (!hasInit) { - localRawMediaStream = PlatformScreenRecord.getMic(); - if (localRawMediaStream == null) { - readyState = EnumVoiceChannelReadyState.ABORTED; - return; - } - microphoneVolumeAudioContext = AudioContext.create(); - mute(localRawMediaStream, true); - localMediaStream = microphoneVolumeAudioContext.createMediaStreamDestination(); - localMediaStreamGain = microphoneVolumeAudioContext.createGain(); - microphoneVolumeAudioContext.createMediaStreamSource(localRawMediaStream).connect(localMediaStreamGain); - localMediaStreamGain.connect(localMediaStream); - localMediaStreamGain.getGain().setValue(1.0F); - readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; - hasInit = true; - } else { - readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; + @JSBody(params = { "peerConnection", + "str" }, script = "return peerConnection.addIceCandidate(new RTCIceCandidate(JSON.parse(str)));") + static native void addCoreIceCandidate(JSObject peerConnection, String str); + + static void addIceCandidate(JSObject peerConnection, String str) { + if (!PlatformWebRTC.hasCheckedSupport) + PlatformWebRTC.supported(); + switch (PlatformWebRTC.supportedImpl) { + case PlatformWebRTC.WEBRTC_SUPPORT_CORE: + case PlatformWebRTC.WEBRTC_SUPPORT_CORE_NON_PROMISING: + case PlatformWebRTC.WEBRTC_SUPPORT_WEBKIT: + addCoreIceCandidate(peerConnection, str); + break; + case PlatformWebRTC.WEBRTC_SUPPORT_MOZ: + addMozIceCandidate(peerConnection, str); + break; + default: + throw new UnsupportedOperationException(); } } - public static void tickVoiceClient() { - for (VoicePeer voicePlayer : peerList.values()) { - AnalyserNode analyser = voicePlayer.analyser; - if(analyser != null) { - Uint8Array array = Uint8Array.create(analyser.getFrequencyBinCount()); - analyser.getByteFrequencyData(array); - int len = array.getLength(); - for (int i = 0; i < len; i++) { - if (array.get(i) >= 0.1f) { - VoiceClientController.getVoiceSpeaking().add(voicePlayer.peerId); - break; - } - } + @JSBody(params = { "peerConnection", + "str" }, script = "return peerConnection.addIceCandidate(new mozRTCIceCandidate(JSON.parse(str)));") + static native void addMozIceCandidate(JSObject peerConnection, String str); + + static void addRecordingDest(AudioNode destNode) { + for (VoicePeer peer : peerList.values()) { + if (peer.recNode != null) { + peer.recNode.connect(destNode); } } } - public static void setMicVolume(float val) { - if (hasInit) { - if(val > 0.5F) val = 0.5F + (val - 0.5F) * 2.0F; - if(val > 1.5F) val = 1.5F; - if(val < 0.0F) val = 0.0F; - localMediaStreamGain.getGain().setValue(val * 2.0F); - } + @JSBody(params = { "pc", + "stream" }, script = "return stream.getTracks().forEach(function(track) { pc.addTrack(track, stream); });") + static native void addStream(JSObject pc, MediaStream stream); + + @JSBody(params = { + "doc" }, script = "var aud = doc.createElement(\"audio\"); return (typeof aud.srcObject !== \"undefined\") ? 0 : ((typeof aud.mozSrcObject !== \"undefined\") ? 1 : -1);") + static native int checkSrcObjectSupport(HTMLDocument doc); + + public static void disconnect(JSObject peerConnection) { + PlatformWebRTC.closeIt(peerConnection); } - public static void resetPeerStates() { - peerState = peerStateConnect = peerStateInitial = peerStateDesc = peerStateIce = EnumVoiceChannelPeerState.LOADING; - } - - public static EnumVoiceChannelPeerState getPeerState() { - return peerState; - } - - public static EnumVoiceChannelPeerState getPeerStateConnect() { - return peerStateConnect; - } - - public static EnumVoiceChannelPeerState getPeerStateInitial() { - return peerStateInitial; - } - - public static EnumVoiceChannelPeerState getPeerStateDesc() { - return peerStateDesc; - } - - public static EnumVoiceChannelPeerState getPeerStateIce() { - return peerStateIce; - } + @JSBody(params = { "item" }, script = "return item.streams[0];") + static native MediaStream getFirstStream(JSObject item); public static EnumVoiceChannelReadyState getReadyState() { return readyState; } - public static void signalConnect(EaglercraftUUID peerId, boolean offer) { - if (!hasInit) initializeDevices(); - try { - JSObject peerConnection = PlatformWebRTC.createRTCPeerConnection(JSONWriter.valueToString(iceServers)); - VoicePeer peerInstance = new VoicePeer(peerId, peerConnection, offer); - peerList.put(peerId, peerInstance); - if (peerStateConnect != EnumVoiceChannelPeerState.SUCCESS) peerStateConnect = EnumVoiceChannelPeerState.SUCCESS; - } catch (Throwable e) { - if (peerStateConnect == EnumVoiceChannelPeerState.LOADING) peerStateConnect = EnumVoiceChannelPeerState.FAILED; + private static void handlePeerDisconnect(VoicePeer peer, boolean quiet) { + if (peer.analyser != null) { + peer.analyser.disconnect(); + peer.analyser = null; } - } - - public static void signalDescription(EaglercraftUUID peerId, String descJSON) { - VoicePeer peer = peerList.get(peerId); - if (peer != null) { - peer.setRemoteDescription(descJSON); + if (peer.gain != null) { + peer.gain.disconnect(); + peer.gain = null; } - } - - public static void signalDisconnect(EaglercraftUUID peerId, boolean quiet) { - VoicePeer peer = peerList.get(peerId); - if (peer != null) { - signalDisconnect(peer, quiet); + if (peer.panner != null) { + peer.panner.disconnect(); + peer.panner = null; } - } - - private static void signalDisconnect(VoicePeer peer, boolean quiet) { - peerList.remove(peer.peerId, peer); - try { - peer.disconnect(); - } catch (Throwable ignored) {} - handlePeerDisconnect(peer, quiet); - } - - public static void mutePeer(EaglercraftUUID peerId, boolean muted) { - VoicePeer peer = peerList.get(peerId); - if (peer != null) { - peer.mute(muted); - } - } - - public static void signalICECandidate(EaglercraftUUID peerId, String candidate) { - VoicePeer peer = peerList.get(peerId); - if (peer != null) { - peer.addICECandidate(candidate); + VoiceClientController.getVoiceListening().remove(peer.peerId); + if (!quiet) { + VoiceClientController.sendPacketDisconnectPeer(peer.peerId); } } private static void handlePeerTrack(VoicePeer peer, MediaStream audioStream) { - if (VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.NONE) return; + if (VoiceClientController.getVoiceChannel() == EnumVoiceChannelType.NONE) + return; MediaStreamAudioSourceNode audioNode = PlatformAudio.audioctx.createMediaStreamSource(audioStream); AnalyserNode analyser = PlatformAudio.audioctx.createAnalyser(); analyser.setSmoothingTimeConstant(0f); @@ -436,7 +268,7 @@ public class PlatformVoiceClient { gain.getGain().setValue(VoiceClientController.getVoiceListenVolume()); audioNode.connect(gain); gain.connect(PlatformAudio.audioctx.getDestination()); - if(PlatformAudio.gameRecGain != null) { + if (PlatformAudio.gameRecGain != null) { gain.connect(PlatformAudio.gameRecGain); } VoiceClientController.getVoiceListening().add(peer.peerId); @@ -460,7 +292,7 @@ public class PlatformVoiceClient { audioNode.connect(gain); gain.connect(panner); panner.connect(PlatformAudio.audioctx.getDestination()); - if(PlatformAudio.gameRecGain != null) { + if (PlatformAudio.gameRecGain != null) { panner.connect(PlatformAudio.gameRecGain); } VoiceClientController.getVoiceListening().add(peer.peerId); @@ -469,60 +301,208 @@ public class PlatformVoiceClient { peer.gain = gain; peer.recNode = panner; } - if (VoiceClientController.getVoiceMuted().contains(peer.peerId)) mutePeer(peer.peerId, true); + if (VoiceClientController.getVoiceMuted().contains(peer.peerId)) + mutePeer(peer.peerId, true); } - static void addRecordingDest(AudioNode destNode) { - for(VoicePeer peer : peerList.values()) { - if(peer.recNode != null) { - peer.recNode.connect(destNode); + public static void initializeDevices() { + if (!hasInit) { + localRawMediaStream = PlatformScreenRecord.getMic(); + if (localRawMediaStream == null) { + readyState = EnumVoiceChannelReadyState.ABORTED; + return; } + microphoneVolumeAudioContext = AudioContext.create(); + mute(localRawMediaStream, true); + localMediaStream = microphoneVolumeAudioContext.createMediaStreamDestination(); + localMediaStreamGain = microphoneVolumeAudioContext.createGain(); + microphoneVolumeAudioContext.createMediaStreamSource(localRawMediaStream).connect(localMediaStreamGain); + localMediaStreamGain.connect(localMediaStream); + localMediaStreamGain.getGain().setValue(1.0F); + readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; + hasInit = true; + } else { + readyState = EnumVoiceChannelReadyState.DEVICE_INITIALIZED; + } + } + + public static boolean isSupported() { + if (!hasCheckedSupport) { + support = PlatformWebRTC.supported() && isSupported0(); + if (support) { + srcObjectSupport = checkSrcObjectSupport(PlatformRuntime.doc); + if (srcObjectSupport == SRC_OBJECT_SUPPORT_NONE) { + support = false; + } else if (srcObjectSupport == SRC_OBJECT_SUPPORT_MOZ) { + logger.info("Using moz- prefix for HTMLMediaElement.srcObject"); + } + } + hasCheckedSupport = true; + } + return support; + } + + @JSBody(params = {}, script = "return typeof navigator.mediaDevices !== \"undefined\" && typeof navigator.mediaDevices.getUserMedia !== \"undefined\";") + private static native boolean isSupported0(); + + @JSBody(params = { "rawStream", "muted" }, script = "return rawStream.getAudioTracks()[0].enabled = !muted;") + static native void mute(MediaStream rawStream, boolean muted); + + public static void mutePeer(EaglercraftUUID peerId, boolean muted) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.mute(muted); } } static void removeRecordingDest(AudioNode destNode) { - for(VoicePeer peer : peerList.values()) { + for (VoicePeer peer : peerList.values()) { try { - if(peer.recNode != null) { + if (peer.recNode != null) { peer.recNode.disconnect(destNode); } - }catch(Throwable t) { + } catch (Throwable t) { } } } - private static void handlePeerDisconnect(VoicePeer peer, boolean quiet) { - if(peer.analyser != null) { - peer.analyser.disconnect(); - peer.analyser = null; - } - if(peer.gain != null) { - peer.gain.disconnect(); - peer.gain = null; - } - if(peer.panner != null) { - peer.panner.disconnect(); - peer.panner = null; - } - VoiceClientController.getVoiceListening().remove(peer.peerId); - if (!quiet) { - VoiceClientController.sendPacketDisconnectPeer(peer.peerId); + public static void setICEServers(String[] urls) { + iceServers.clear(); + if (urls == null) + return; + for (String url : urls) { + String[] etr = url.split(";"); + if (etr.length == 1) { + Map m = new HashMap<>(); + m.put("urls", etr[0]); + iceServers.add(m); + } else if (etr.length == 3) { + Map m = new HashMap<>(); + m.put("urls", etr[0]); + m.put("username", etr[1]); + m.put("credential", etr[2]); + iceServers.add(m); + } } } + public static void setMicVolume(float val) { + if (hasInit) { + if (val > 0.5F) + val = 0.5F + (val - 0.5F) * 2.0F; + if (val > 1.5F) + val = 1.5F; + if (val < 0.0F) + val = 0.0F; + localMediaStreamGain.getGain().setValue(val * 2.0F); + } + } + + @JSBody(params = { "aud", "stream" }, script = "return aud.mozSrcObject = stream;") + private static native void setMozSrcObject(HTMLAudioElement aud, MediaStream stream); + + static void setSrcObject(HTMLAudioElement aud, MediaStream stream) { + switch (srcObjectSupport) { + case SRC_OBJECT_SUPPORT_CORE: + setSrcObjectCore(aud, stream); + break; + case SRC_OBJECT_SUPPORT_MOZ: + setMozSrcObject(aud, stream); + break; + default: + throw new IllegalStateException(); + } + } + + @JSBody(params = { "aud", "stream" }, script = "return aud.srcObject = stream;") + private static native void setSrcObjectCore(HTMLAudioElement aud, MediaStream stream); + public static void setVoiceListenVolume(float f) { for (VoicePeer peer : peerList.values()) { - if(peer.gain != null) { + if (peer.gain != null) { float val = f; - if(val > 0.5f) val = 0.5f + (val - 0.5f) * 3.0f; - if(val > 2.0f) val = 2.0f; - if(val < 0.0f) val = 0.0f; + if (val > 0.5f) + val = 0.5f + (val - 0.5f) * 3.0f; + if (val > 2.0f) + val = 2.0f; + if (val < 0.0f) + val = 0.0f; peer.gain.getGain().setValue(val * 2.0f); } - if(peer.panner != null) { + if (peer.panner != null) { peer.panner.setMaxDistance(f * 2 * VoiceClientController.getVoiceProximity() + 0.1f); } } } + public static void setVoiceProximity(int prox) { + for (VoicePeer player : peerList.values()) { + if (player.panner != null) { + player.panner.setMaxDistance(VoiceClientController.getVoiceListenVolume() * 2 * prox + 0.1f); + } + } + } + + public static void signalConnect(EaglercraftUUID peerId, boolean offer) { + try { + JSObject peerConnection = PlatformWebRTC.createRTCPeerConnection(JSONWriter.valueToString(iceServers)); + VoicePeer peerInstance = new VoicePeer(peerId, peerConnection, offer); + peerList.put(peerId, peerInstance); + } catch (Throwable e) { + } + } + + public static void signalDescription(EaglercraftUUID peerId, String descJSON) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.setRemoteDescription(descJSON); + } + } + + public static void signalDisconnect(EaglercraftUUID peerId, boolean quiet) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + signalDisconnect(peer, quiet); + } + } + + private static void signalDisconnect(VoicePeer peer, boolean quiet) { + peerList.remove(peer.peerId, peer); + try { + peer.disconnect(); + } catch (Throwable ignored) { + } + handlePeerDisconnect(peer, quiet); + } + + public static void signalICECandidate(EaglercraftUUID peerId, String candidate) { + VoicePeer peer = peerList.get(peerId); + if (peer != null) { + peer.addICECandidate(candidate); + } + } + + public static void tickVoiceClient() { + for (VoicePeer voicePlayer : peerList.values()) { + AnalyserNode analyser = voicePlayer.analyser; + if (analyser != null) { + Uint8Array array = Uint8Array.create(analyser.getFrequencyBinCount()); + analyser.getByteFrequencyData(array); + int len = array.getLength(); + for (int i = 0; i < len; i++) { + if (array.get(i) >= 0.1f) { + VoiceClientController.getVoiceSpeaking().add(voicePlayer.peerId); + break; + } + } + } + } + } + + public static void updateVoicePosition(EaglercraftUUID uuid, double x, double y, double z) { + VoicePeer player = peerList.get(uuid); + if (player != null && player.panner != null) + player.panner.setPosition((float) x, (float) y, (float) z); + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java index 78d3d57f..e7139b1e 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebRTC.java @@ -1,26 +1,18 @@ package net.lax1dude.eaglercraft.v1_8.internal; -import net.lax1dude.eaglercraft.v1_8.EagRuntime; -import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; -import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; -import net.lax1dude.eaglercraft.v1_8.log4j.Logger; -import net.lax1dude.eaglercraft.v1_8.sp.lan.LANPeerEvent; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQuery; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayQueryRateLimitDummy; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerRateLimitTracker; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocketRateLimitDummy; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQuery; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryImpl; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayWorldsQueryRateLimitDummy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.json.JSONObject; import org.json.JSONWriter; import org.teavm.jso.JSBody; import org.teavm.jso.JSFunctor; import org.teavm.jso.JSObject; +import org.teavm.jso.browser.TimerHandler; import org.teavm.jso.browser.Window; import org.teavm.jso.core.JSError; import org.teavm.jso.dom.events.Event; @@ -32,304 +24,44 @@ import org.teavm.jso.websocket.WebSocket; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; -import java.util.*; +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.sp.internal.ClientPlatformSingleplayer; +import net.lax1dude.eaglercraft.v1_8.sp.lan.LANPeerEvent; /** * Copyright (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformWebRTC { - private static final Logger logger = LogManager.getLogger("PlatformWebRTC"); - - static final int WEBRTC_SUPPORT_NONE = 0; - static final int WEBRTC_SUPPORT_CORE = 1; - static final int WEBRTC_SUPPORT_WEBKIT = 2; - static final int WEBRTC_SUPPORT_MOZ = 3; - - @JSBody(script = "return (typeof RTCPeerConnection !== \"undefined\") ? 1 : ((typeof webkitRTCPeerConnection !== \"undefined\") ? 2 : ((typeof mozRTCPeerConnection !== \"undefined\") ? 3 : 0));") - private static native int checkSupportedImpl(); - - static boolean hasCheckedSupport = false; - static int supportedImpl = WEBRTC_SUPPORT_NONE; - static boolean useSessionDescConstructor = false; - static boolean useOldConnStateCheck = false; - static boolean belowChrome71Fix = false; - - public static boolean supported() { - if(!hasCheckedSupport) { - supportedImpl = checkSupportedImpl(); - hasCheckedSupport = true; - if(supportedImpl == WEBRTC_SUPPORT_NONE) { - logger.error("WebRTC is not supported on this browser!"); - }else if(supportedImpl == WEBRTC_SUPPORT_WEBKIT) { - logger.info("Using webkit- prefix for RTCPeerConnection"); - }else if(supportedImpl == WEBRTC_SUPPORT_MOZ) { - logger.info("Using moz- prefix for RTCPeerConnection"); - } - if(supportedImpl != WEBRTC_SUPPORT_NONE) { - belowChrome71Fix = isChromeBelow71(); - if(belowChrome71Fix) { - logger.info("Note: Detected Chrome below version 71, stripping \"a=extmap-allow-mixed\" from the description SDP field"); - } - }else { - belowChrome71Fix = false; - } - } - return supportedImpl != WEBRTC_SUPPORT_NONE; + @JSFunctor + public interface DescHandler extends JSObject { + void call(JSObject desc); } - @JSBody(params = { "item" }, script = "item.close();") - static native void closeIt(JSObject item); - - @JSBody(params = { "item" }, script = "return item.readyState;") - static native String getReadyState(JSObject item); - - @JSBody(params = { "item", "buffer" }, script = "item.send(buffer);") - static native void sendIt(JSObject item, ArrayBuffer buffer); - - @JSBody(params = { "item" }, script = "return !!item.candidate;") - static native boolean hasCandidate(JSObject item); - - @JSBody(params = { "item" }, script = "return item.connectionState || \"\";") - private static native String getModernConnectionState(JSObject item); - - @JSBody(params = { "item" }, script = "return item.iceConnectionState;") - private static native String getICEConnectionState(JSObject item); - - @JSBody(params = { "item" }, script = "return item.signalingState;") - private static native String getSignalingState(JSObject item); - - static String getConnectionState(JSObject item) { - if(useOldConnStateCheck) { - return getConnectionStateLegacy(item); - }else { - String str = getModernConnectionState(item); - if(str.length() == 0) { - useOldConnStateCheck = true; - logger.info("Note: Using legacy connection state check using iceConnectionState+signalingState"); - return getConnectionStateLegacy(item); - }else { - return str; - } - } + @JSFunctor + public interface EmptyHandler extends JSObject { + void call(); } - private static String getConnectionStateLegacy(JSObject item) { - String connState = getICEConnectionState(item); - switch(connState) { - case "new": - return "new"; - case "checking": - return "connecting"; - case "failed": - return "failed"; - case "disconnected": - return "disconnected"; - case "connected": - case "completed": - case "closed": - String signalState = getSignalingState(item); - switch(signalState) { - case "stable": - return "connected"; - case "have-local-offer": - case "have-remote-offer": - case "have-local-pranswer": - case "have-remote-pranswer": - return "connecting"; - case "closed": - default: - return "closed"; - } - default: - return "closed"; - } - } - - @JSBody(params = { "item" }, script = "return item.candidate.sdpMLineIndex;") - static native int getSdpMLineIndex(JSObject item); - - @JSBody(params = { "item" }, script = "return item.candidate.candidate;") - static native String getCandidate(JSObject item); - - static JSObject createRTCPeerConnection(String iceServers) { - if(!hasCheckedSupport) supported(); - switch(supportedImpl) { - case WEBRTC_SUPPORT_CORE: - return createCoreRTCPeerConnection(iceServers); - case WEBRTC_SUPPORT_WEBKIT: - return createWebkitRTCPeerConnection(iceServers); - case WEBRTC_SUPPORT_MOZ: - return createMozRTCPeerConnection(iceServers); - default: - throw new UnsupportedOperationException(); - } - } - - @JSBody(params = { "iceServers" }, script = "return new RTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") - static native JSObject createCoreRTCPeerConnection(String iceServers); - - @JSBody(params = { "iceServers" }, script = "return new webkitRTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") - static native JSObject createWebkitRTCPeerConnection(String iceServers); - - @JSBody(params = { "iceServers" }, script = "return new mozRTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") - static native JSObject createMozRTCPeerConnection(String iceServers); - - @JSBody(params = { "peerConnection", "name" }, script = "return peerConnection.createDataChannel(name);") - static native JSObject createDataChannel(JSObject peerConnection, String name); - - @JSBody(params = { "item", "type" }, script = "item.binaryType = type;") - static native void setBinaryType(JSObject item, String type); - - @JSBody(params = { "item" }, script = "return item.data;") - static native ArrayBuffer getData(JSObject item); - - @JSBody(params = { "item" }, script = "return item.channel;") - static native JSObject getChannel(JSObject item); - - @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createOffer(h1, h2);") - static native void createOffer(JSObject peerConnection, DescHandler h1, ErrorHandler h2); - - @JSBody(params = { "peerConnection", "desc", "h1", "h2" }, script = "peerConnection.setLocalDescription(desc, h1, h2);") - static native void setLocalDescription(JSObject peerConnection, JSObject desc, EmptyHandler h1, ErrorHandler h2); - - @JSBody(params = { "peerConnection", "str" }, script = "var candidateList = JSON.parse(str); for (var i = 0; i < candidateList.length; ++i) { peerConnection.addIceCandidate(new RTCIceCandidate(candidateList[i])); }; return null;") - private static native void addCoreIceCandidates(JSObject peerConnection, String str); - - @JSBody(params = { "peerConnection", "str" }, script = "var candidateList = JSON.parse(str); for (var i = 0; i < candidateList.length; ++i) { peerConnection.addIceCandidate(new mozRTCIceCandidate(candidateList[i])); }; return null;") - private static native void addMozIceCandidates(JSObject peerConnection, String str); - - @JSBody(params = { }, script = "if(!navigator || !navigator.userAgent) return false;" - + "var ua = navigator.userAgent.toLowerCase();" - + "var i = ua.indexOf(\"chrome/\");" - + "if(i === -1) return false;" - + "i += 7;" - + "var j = ua.indexOf(\".\", i);" - + "if(j === -1 || j < i) j = ua.length;" - + "var versStr = ua.substring(i, j);" - + "versStr = parseInt(versStr);" - + "return !isNaN(versStr) && versStr < 71;") - private static native boolean isChromeBelow71(); - - static void addIceCandidates(JSObject peerConnection, String str) { - if(!hasCheckedSupport) supported(); - switch(supportedImpl) { - case WEBRTC_SUPPORT_CORE: - case WEBRTC_SUPPORT_WEBKIT: - addCoreIceCandidates(peerConnection, str); - break; - case WEBRTC_SUPPORT_MOZ: - addMozIceCandidates(peerConnection, str); - break; - default: - throw new UnsupportedOperationException(); - } - } - - @JSBody(params = { "peerConnection", "str" }, script = "try { peerConnection.setRemoteDescription(str); return true; } catch(ex) { if(ex.name === \"TypeError\") return false; else throw ex; }") - private static native boolean setCoreRemoteDescription(JSObject peerConnection, JSObject str); - - @JSBody(params = { "peerConnection", "str" }, script = "peerConnection.setRemoteDescription(new RTCSessionDescription(str));") - private static native void setCoreRemoteDescriptionLegacy(JSObject peerConnection, JSObject str); - - @JSBody(params = { "peerConnection", "str" }, script = "peerConnection.setRemoteDescription(new mozRTCSessionDescription(str));") - private static native void setMozRemoteDescriptionLegacy(JSObject peerConnection, JSObject str); - - static void setRemoteDescription(JSObject peerConnection, JSObject str) { - if(!hasCheckedSupport) supported(); - if(belowChrome71Fix) { - removeExtmapAllowMixed(str); - } - switch(supportedImpl) { - case WEBRTC_SUPPORT_CORE: - if(useSessionDescConstructor) { - setCoreRemoteDescriptionLegacy(peerConnection, str); - }else { - if(!setCoreRemoteDescription(peerConnection, str)) { - useSessionDescConstructor = true; - logger.info("Note: Caught suspicious exception, using legacy RTCSessionDescription method"); - setCoreRemoteDescriptionLegacy(peerConnection, str); - } - } - break; - case WEBRTC_SUPPORT_WEBKIT: - setCoreRemoteDescriptionLegacy(peerConnection, str); - break; - case WEBRTC_SUPPORT_MOZ: - setMozRemoteDescriptionLegacy(peerConnection, str); - break; - default: - throw new UnsupportedOperationException(); - } - } - - @JSBody(params = { "peerConnection", "str", "h1", "h2" }, script = "try { peerConnection.setRemoteDescription(str, h1, h2); return true; } catch(ex) { if(ex.name === \"TypeError\") return false; else throw ex; }") - private static native boolean setCoreRemoteDescription2(JSObject peerConnection, JSObject str, EmptyHandler h1, ErrorHandler h2); - - @JSBody(params = { "peerConnection", "str", "h1", "h2" }, script = "peerConnection.setRemoteDescription(new RTCSessionDescription(str), h1, h2);") - private static native void setCoreRemoteDescription2Legacy(JSObject peerConnection, JSObject str, EmptyHandler h1, ErrorHandler h2); - - @JSBody(params = { "peerConnection", "str", "h1", "h2" }, script = "peerConnection.setRemoteDescription(new mozRTCSessionDescription(str), h1, h2);") - private static native void setMozRemoteDescription2Legacy(JSObject peerConnection, JSObject str, EmptyHandler h1, ErrorHandler h2); - - static void setRemoteDescription2(JSObject peerConnection, JSObject str, EmptyHandler h1, ErrorHandler h2) { - if(!hasCheckedSupport) supported(); - if(belowChrome71Fix) { - removeExtmapAllowMixed(str); - } - switch(supportedImpl) { - case WEBRTC_SUPPORT_CORE: - if(useSessionDescConstructor) { - setCoreRemoteDescription2Legacy(peerConnection, str, h1, h2); - }else { - if(!setCoreRemoteDescription2(peerConnection, str, h1, h2)) { - useSessionDescConstructor = true; - logger.info("Note: Caught suspicious exception, using legacy RTCSessionDescription method"); - setCoreRemoteDescription2Legacy(peerConnection, str, h1, h2); - } - } - break; - case WEBRTC_SUPPORT_WEBKIT: - setCoreRemoteDescription2Legacy(peerConnection, str, h1, h2); - break; - case WEBRTC_SUPPORT_MOZ: - setMozRemoteDescription2Legacy(peerConnection, str, h1, h2); - break; - default: - throw new UnsupportedOperationException(); - } - } - - @JSBody(params = { "objIn" }, script = "if(typeof objIn.sdp === \"string\"" - + "&& objIn.sdp.indexOf(\"a=extmap-allow-mixed\") !== -1) {" - + "objIn.sdp = objIn.sdp.split(\"\\n\").filter(function(line) {" - + "return line.trim() !== \"a=extmap-allow-mixed\";" - + "}).join(\"\\n\");" - + "}") - private static native void removeExtmapAllowMixed(JSObject objIn); - - @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createAnswer(h1, h2);") - static native void createAnswer(JSObject peerConnection, DescHandler h1, ErrorHandler h2); - - @JSBody(params = { "sock", "buffer" }, script = "sock.send(buffer);") - static native void nativeBinarySend(WebSocket sock, ArrayBuffer buffer); - - private static final Map fuckTeaVM = new HashMap<>(); - - public static void runScheduledTasks() { - + @JSFunctor + public interface ErrorHandler extends JSObject { + void call(JSError err); } public static class LANClient { @@ -367,6 +99,18 @@ public class PlatformWebRTC { } } + public void sendPacketToServer(ArrayBuffer buffer) { + if (dataChannel != null && "open".equals(getReadyState(dataChannel))) { + try { + sendIt(dataChannel, buffer); + } catch (Throwable e) { + signalRemoteDisconnect(false); + } + } else { + signalRemoteDisconnect(false); + } + } + public void setIceServers(String[] urls) { iceServers.clear(); for (String url : urls) { @@ -385,30 +129,26 @@ public class PlatformWebRTC { } } - public void sendPacketToServer(ArrayBuffer buffer) { - if (dataChannel != null && "open".equals(getReadyState(dataChannel))) { - try { - sendIt(dataChannel, buffer); - } catch (Throwable e) { - signalRemoteDisconnect(false); - } - }else { - signalRemoteDisconnect(false); - } - } - public void signalRemoteConnect() { List> iceCandidates = new ArrayList<>(); TeaVMUtils.addEventListener(peerConnection, "icecandidate", (EventListener) evt -> { if (hasCandidate(evt)) { if (iceCandidates.isEmpty()) { - Window.setTimeout(() -> { + final int[] candidateState = new int[2]; + final TimerHandler[] runnable = new TimerHandler[1]; + Window.setTimeout(runnable[0] = () -> { if (peerConnection != null && !"disconnected".equals(getConnectionState(peerConnection))) { + int trial = ++candidateState[1]; + if (candidateState[0] != iceCandidates.size() && trial < 3) { + candidateState[0] = iceCandidates.size(); + Window.setTimeout(runnable[0], 2000); + return; + } clientICECandidate = JSONWriter.valueToString(iceCandidates); iceCandidates.clear(); } - }, 3000); + }, 2000); } Map m = new HashMap<>(); m.put("sdpMLineIndex", "" + getSdpMLineIndex(evt)); @@ -423,17 +163,17 @@ public class PlatformWebRTC { final Object[] evtHandler = new Object[1]; evtHandler[0] = (EventListener) evt -> { if (!iceCandidates.isEmpty()) { - Window.setTimeout(() -> ((EventListener)evtHandler[0]).handleEvent(evt), 1); + Window.setTimeout(() -> ((EventListener) evtHandler[0]).handleEvent(evt), 10); return; } clientDataChannelClosed = false; clientDataChannelOpen = true; }; - TeaVMUtils.addEventListener(dataChannel, "open", (EventListener)evtHandler[0]); + TeaVMUtils.addEventListener(dataChannel, "open", (EventListener) evtHandler[0]); TeaVMUtils.addEventListener(dataChannel, "message", (EventListener) evt -> { - synchronized(clientLANPacketBuffer) { + synchronized (clientLANPacketBuffer) { clientLANPacketBuffer.add(TeaVMUtils.wrapByteArrayBuffer(getData(evt))); } }); @@ -475,6 +215,19 @@ public class PlatformWebRTC { } } + public void signalRemoteDisconnect(boolean quiet) { + if (dataChannel != null) { + closeIt(dataChannel); + dataChannel = null; + } + if (peerConnection != null) { + closeIt(peerConnection); + } + if (!quiet) + clientDataChannelClosed = true; + readyState = READYSTATE_DISCONNECTED; + } + public void signalRemoteICECandidate(String candidates) { try { addIceCandidates(peerConnection, candidates); @@ -484,28 +237,14 @@ public class PlatformWebRTC { signalRemoteDisconnect(false); } } - - public void signalRemoteDisconnect(boolean quiet) { - if (dataChannel != null) { - closeIt(dataChannel); - dataChannel = null; - } - if (peerConnection != null) { - closeIt(peerConnection); - } - if (!quiet) clientDataChannelClosed = true; - readyState = READYSTATE_DISCONNECTED; - } } - public static final byte PEERSTATE_FAILED = 0; - public static final byte PEERSTATE_SUCCESS = 1; - public static final byte PEERSTATE_LOADING = 2; - public static class LANPeer { public LANServer client; public String peerId; public JSObject peerConnection; + public JSObject dataChannel; + public String ipcChannel; public LANPeer(LANServer client, String peerId, JSObject peerConnection) { this.client = client; @@ -517,15 +256,24 @@ public class PlatformWebRTC { TeaVMUtils.addEventListener(peerConnection, "icecandidate", (EventListener) evt -> { if (hasCandidate(evt)) { if (iceCandidates.isEmpty()) { - Window.setTimeout(() -> { + final int[] candidateState = new int[2]; + final TimerHandler[] runnable = new TimerHandler[1]; + Window.setTimeout(runnable[0] = () -> { if (peerConnection != null && !"disconnected".equals(getConnectionState(peerConnection))) { - LANPeerEvent.LANPeerICECandidateEvent e = new LANPeerEvent.LANPeerICECandidateEvent(peerId, JSONWriter.valueToString(iceCandidates)); - synchronized(serverLANEventBuffer) { + int trial = ++candidateState[1]; + if (candidateState[0] != iceCandidates.size() && trial < 3) { + candidateState[0] = iceCandidates.size(); + Window.setTimeout(runnable[0], 2000); + return; + } + LANPeerEvent.LANPeerICECandidateEvent e = new LANPeerEvent.LANPeerICECandidateEvent( + peerId, JSONWriter.valueToString(iceCandidates)); + synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(peerId, e); } iceCandidates.clear(); } - }, 3000); + }, 2000); } Map m = new HashMap<>(); m.put("sdpMLineIndex", "" + getSdpMLineIndex(evt)); @@ -537,50 +285,74 @@ public class PlatformWebRTC { final Object[] evtHandler = new Object[1]; evtHandler[0] = (EventListener) evt -> { if (!iceCandidates.isEmpty()) { - Window.setTimeout(() -> ((EventListener)evtHandler[0]).handleEvent(evt), 1); + Window.setTimeout(() -> ((EventListener) evtHandler[0]).handleEvent(evt), 10); return; } - if (getChannel(evt) == null) return; + if (getChannel(evt) == null) + return; JSObject dataChannel = getChannel(evt); - synchronized(fuckTeaVM) { - fuckTeaVM.put(peerId, dataChannel); + if (this.dataChannel != null) { + closeIt(dataChannel); + return; } - synchronized(serverLANEventBuffer) { + this.dataChannel = dataChannel; + synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(peerId, new LANPeerEvent.LANPeerDataChannelEvent(peerId)); } TeaVMUtils.addEventListener(dataChannel, "message", (EventListener) evt2 -> { - LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, TeaVMUtils.wrapByteArrayBuffer(getData(evt2))); - synchronized(serverLANEventBuffer) { - serverLANEventBuffer.put(peerId, e); + ArrayBuffer data = getData(evt2); + if (ipcChannel != null) { + ClientPlatformSingleplayer.sendPacketTeaVM(ipcChannel, data); + } else { + LANPeerEvent.LANPeerPacketEvent e = new LANPeerEvent.LANPeerPacketEvent(peerId, + TeaVMUtils.wrapByteArrayBuffer(data)); + synchronized (serverLANEventBuffer) { + serverLANEventBuffer.put(peerId, e); + } } }); }; - - TeaVMUtils.addEventListener(peerConnection, "datachannel", (EventListener)evtHandler[0]); + + TeaVMUtils.addEventListener(peerConnection, "datachannel", (EventListener) evtHandler[0]); TeaVMUtils.addEventListener(peerConnection, "connectionstatechange", (EventListener) evt -> { String connectionState = getConnectionState(peerConnection); - if ("disconnected".equals(connectionState)) { - client.signalRemoteDisconnect(peerId); - } else if ("connected".equals(connectionState)) { - if (client.peerState != PEERSTATE_SUCCESS) client.peerState = PEERSTATE_SUCCESS; - } else if ("failed".equals(connectionState)) { - if (client.peerState == PEERSTATE_LOADING) client.peerState = PEERSTATE_FAILED; + if ("disconnected".equals(connectionState) || "failed".equals(connectionState)) { client.signalRemoteDisconnect(peerId); } }); } + public void addICECandidate(String candidates) { + try { + addIceCandidates(peerConnection, candidates); + } catch (Throwable err) { + logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); + client.signalRemoteDisconnect(peerId); + } + } + public void disconnect() { - synchronized(fuckTeaVM) { - if (fuckTeaVM.get(peerId) != null) { - closeIt(fuckTeaVM.get(peerId)); - fuckTeaVM.remove(peerId); - } + if (dataChannel != null) { + closeIt(dataChannel); } closeIt(peerConnection); } + public void mapIPC(String ipcChannel) { + if (this.ipcChannel == null) { + if (ipcChannel != null) { + this.ipcChannel = ipcChannel; + this.client.ipcMapList.put(ipcChannel, this); + } + } else { + if (ipcChannel == null) { + this.client.ipcMapList.remove(this.ipcChannel); + this.ipcChannel = null; + } + } + } + public void setRemoteDescription(String descJSON) { try { JSONObject remoteDesc = new JSONObject(descJSON); @@ -588,42 +360,30 @@ public class PlatformWebRTC { if (remoteDesc.has("type") && "offer".equals(remoteDesc.getString("type"))) { createAnswer(peerConnection, desc -> { setLocalDescription(peerConnection, desc, () -> { - LANPeerEvent.LANPeerDescriptionEvent e = new LANPeerEvent.LANPeerDescriptionEvent(peerId, JSON.stringify(desc)); - synchronized(serverLANEventBuffer) { + LANPeerEvent.LANPeerDescriptionEvent e = new LANPeerEvent.LANPeerDescriptionEvent( + peerId, JSON.stringify(desc)); + synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(peerId, e); } - if (client.peerStateDesc != PEERSTATE_SUCCESS) client.peerStateDesc = PEERSTATE_SUCCESS; }, err -> { - logger.error("Failed to set local description for \"{}\"! {}", peerId, TeaVMUtils.safeErrorMsgToString(err)); - if (client.peerStateDesc == PEERSTATE_LOADING) client.peerStateDesc = PEERSTATE_FAILED; + logger.error("Failed to set local description for \"{}\"! {}", peerId, + TeaVMUtils.safeErrorMsgToString(err)); client.signalRemoteDisconnect(peerId); }); }, err -> { - logger.error("Failed to create answer for \"{}\"! {}", peerId, TeaVMUtils.safeErrorMsgToString(err)); - if (client.peerStateDesc == PEERSTATE_LOADING) client.peerStateDesc = PEERSTATE_FAILED; + logger.error("Failed to create answer for \"{}\"! {}", peerId, + TeaVMUtils.safeErrorMsgToString(err)); client.signalRemoteDisconnect(peerId); }); } }, err -> { - logger.error("Failed to set remote description for \"{}\"! {}", peerId, TeaVMUtils.safeErrorMsgToString(err)); - if (client.peerStateDesc == PEERSTATE_LOADING) client.peerStateDesc = PEERSTATE_FAILED; + logger.error("Failed to set remote description for \"{}\"! {}", peerId, + TeaVMUtils.safeErrorMsgToString(err)); client.signalRemoteDisconnect(peerId); }); } catch (Throwable err) { logger.error("Failed to parse remote description for \"{}\"! {}", peerId, err.getMessage()); logger.error(err); - if (client.peerStateDesc == PEERSTATE_LOADING) client.peerStateDesc = PEERSTATE_FAILED; - client.signalRemoteDisconnect(peerId); - } - } - - public void addICECandidate(String candidates) { - try { - addIceCandidates(peerConnection, candidates); - if (client.peerStateIce != PEERSTATE_SUCCESS) client.peerStateIce = PEERSTATE_SUCCESS; - } catch (Throwable err) { - logger.error("Failed to parse ice candidate for \"{}\"! {}", peerId, err.getMessage()); - if (client.peerStateIce == PEERSTATE_LOADING) client.peerStateIce = PEERSTATE_FAILED; client.signalRemoteDisconnect(peerId); } } @@ -632,11 +392,41 @@ public class PlatformWebRTC { public static class LANServer { public Set> iceServers = new HashSet<>(); public Map peerList = new HashMap<>(); - public byte peerState = PEERSTATE_LOADING; - public byte peerStateConnect = PEERSTATE_LOADING; - public byte peerStateInitial = PEERSTATE_LOADING; - public byte peerStateDesc = PEERSTATE_LOADING; - public byte peerStateIce = PEERSTATE_LOADING; + public Map ipcMapList = new HashMap<>(); + + public int countPeers() { + return peerList.size(); + } + + public void sendPacketToRemoteClient(LANPeer thePeer, ArrayBuffer buffer) { + boolean b = false; + if (thePeer.dataChannel != null && "open".equals(getReadyState(thePeer.dataChannel))) { + try { + sendIt(thePeer.dataChannel, buffer); + } catch (Throwable e) { + b = true; + } + } else { + b = true; + } + if (b) { + signalRemoteDisconnect(thePeer.peerId); + } + } + + public void sendPacketToRemoteClient(String peerId, ArrayBuffer buffer) { + LANPeer thePeer = this.peerList.get(peerId); + if (thePeer != null) { + sendPacketToRemoteClient(thePeer, buffer); + } + } + + public void serverPeerMapIPC(String peer, String ipcChannel) { + LANPeer peerr = peerList.get(peer); + if (peerr != null) { + peerr.mapIPC(ipcChannel); + } + } public void setIceServers(String[] urls) { iceServers.clear(); @@ -656,39 +446,15 @@ public class PlatformWebRTC { } } - public void sendPacketToRemoteClient(String peerId, ArrayBuffer buffer) { - LANPeer thePeer = this.peerList.get(peerId); - if (thePeer != null) { - boolean b = false; - synchronized(fuckTeaVM) { - if (fuckTeaVM.get(thePeer.peerId) != null && "open".equals(getReadyState(fuckTeaVM.get(thePeer.peerId)))) { - try { - sendIt(fuckTeaVM.get(thePeer.peerId), buffer); - } catch (Throwable e) { - b = true; - } - } else { - b = true; - } - } - if(b) { - signalRemoteDisconnect(peerId); - } - } - } - - public void resetPeerStates() { - peerState = peerStateConnect = peerStateInitial = peerStateDesc = peerStateIce = PEERSTATE_LOADING; - } - public void signalRemoteConnect(String peerId) { try { JSObject peerConnection = createRTCPeerConnection(JSONWriter.valueToString(iceServers)); LANPeer peerInstance = new LANPeer(this, peerId, peerConnection); peerList.put(peerId, peerInstance); - if (peerStateConnect != PEERSTATE_SUCCESS) peerStateConnect = PEERSTATE_SUCCESS; } catch (Throwable e) { - if (peerStateConnect == PEERSTATE_LOADING) peerStateConnect = PEERSTATE_FAILED; + logger.error("Failed to create peer for \"{}\"", peerId); + logger.error(e); + signalRemoteDisconnect(peerId); } } @@ -699,145 +465,113 @@ public class PlatformWebRTC { } } - public void signalRemoteICECandidate(String peerId, String candidate) { - LANPeer thePeer = peerList.get(peerId); - if (thePeer != null) { - thePeer.addICECandidate(candidate); - } - } - public void signalRemoteDisconnect(String peerId) { if (peerId == null || peerId.isEmpty()) { for (LANPeer thePeer : peerList.values()) { if (thePeer != null) { try { thePeer.disconnect(); - } catch (Throwable ignored) {} - synchronized(serverLANEventBuffer) { - serverLANEventBuffer.put(thePeer.peerId, new LANPeerEvent.LANPeerDisconnectEvent(thePeer.peerId)); + } catch (Throwable ignored) { + } + synchronized (serverLANEventBuffer) { + serverLANEventBuffer.put(thePeer.peerId, + new LANPeerEvent.LANPeerDisconnectEvent(thePeer.peerId)); } } } peerList.clear(); - synchronized(fuckTeaVM) { - fuckTeaVM.clear(); - } return; } - LANPeer thePeer = peerList.get(peerId); - if(thePeer != null) { - peerList.remove(peerId); + LANPeer thePeer = peerList.remove(peerId); + if (thePeer != null) { + if (thePeer.ipcChannel != null) { + ipcMapList.remove(thePeer.ipcChannel); + } try { thePeer.disconnect(); - } catch (Throwable ignored) {} - synchronized(fuckTeaVM) { - fuckTeaVM.remove(peerId); + } catch (Throwable ignored) { } - synchronized(serverLANEventBuffer) { + synchronized (serverLANEventBuffer) { serverLANEventBuffer.put(thePeer.peerId, new LANPeerEvent.LANPeerDisconnectEvent(peerId)); } } } - public int countPeers() { - return peerList.size(); - } - } - - @JSFunctor - public interface EmptyHandler extends JSObject { - void call(); - } - - @JSFunctor - public interface DescHandler extends JSObject { - void call(JSObject desc); - } - - @JSFunctor - public interface ErrorHandler extends JSObject { - void call(JSError err); - } - - public static RelayQuery openRelayQuery(String addr) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if(limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayQueryRateLimitDummy(limit); - } - return new RelayQueryImpl(addr); - } - - public static RelayWorldsQuery openRelayWorldsQuery(String addr) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if(limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayWorldsQueryRateLimitDummy(limit); - } - return new RelayWorldsQueryImpl(addr); - } - - public static RelayServerSocket openRelayConnection(String addr, int timeout) { - RelayQuery.RateLimit limit = RelayServerRateLimitTracker.isLimited(addr); - if(limit == RelayQuery.RateLimit.LOCKED || limit == RelayQuery.RateLimit.BLOCKED) { - return new RelayServerSocketRateLimitDummy(limit); - } - return new RelayServerSocketImpl(addr, timeout); - } - - private static LANClient rtcLANClient = null; - - public static void startRTCLANClient() { - if (rtcLANClient == null) { - rtcLANClient = new LANClient(); - } - } - - private static final List clientLANPacketBuffer = new ArrayList<>(); - - private static String clientICECandidate = null; - private static String clientDescription = null; - private static boolean clientDataChannelOpen = false; - private static boolean clientDataChannelClosed = true; - - public static int clientLANReadyState() { - return rtcLANClient.readyState; - } - - public static void clientLANCloseConnection() { - rtcLANClient.signalRemoteDisconnect(false); - } - - // todo: ArrayBuffer version - public static void clientLANSendPacket(byte[] pkt) { - rtcLANClient.sendPacketToServer(TeaVMUtils.unwrapArrayBuffer(pkt)); - } - - public static byte[] clientLANReadPacket() { - synchronized(clientLANPacketBuffer) { - return !clientLANPacketBuffer.isEmpty() ? clientLANPacketBuffer.remove(0) : null; - } - } - - public static List clientLANReadAllPacket() { - synchronized(clientLANPacketBuffer) { - if(!clientLANPacketBuffer.isEmpty()) { - List ret = new ArrayList<>(clientLANPacketBuffer); - clientLANPacketBuffer.clear(); - return ret; - }else { - return null; + public void signalRemoteICECandidate(String peerId, String candidate) { + LANPeer thePeer = peerList.get(peerId); + if (thePeer != null) { + thePeer.addICECandidate(candidate); } } } - public static void clientLANSetICEServersAndConnect(String[] servers) { - rtcLANClient.setIceServers(servers); - if(clientLANReadyState() == LANClient.READYSTATE_CONNECTED || clientLANReadyState() == LANClient.READYSTATE_CONNECTING) { - rtcLANClient.signalRemoteDisconnect(true); + private static final Logger logger = LogManager.getLogger("PlatformWebRTC"); + + static final int WEBRTC_SUPPORT_NONE = 0; + static final int WEBRTC_SUPPORT_CORE = 1; + static final int WEBRTC_SUPPORT_WEBKIT = 2; + static final int WEBRTC_SUPPORT_MOZ = 3; + static final int WEBRTC_SUPPORT_CORE_NON_PROMISING = 4; + + static boolean hasCheckedSupport = false; + + static int supportedImpl = WEBRTC_SUPPORT_NONE; + + static boolean useSessionDescConstructor = false; + + static boolean useOldConnStateCheck = false; + + static boolean belowChrome71Fix = false; + + private static LANClient rtcLANClient = null; + + private static final List clientLANPacketBuffer = new ArrayList<>(); + + private static String clientICECandidate = null; + + private static String clientDescription = null; + + private static boolean clientDataChannelOpen = false; + + private static boolean clientDataChannelClosed = true; + + private static LANServer rtcLANServer = null; + + private static final ListMultimap serverLANEventBuffer = LinkedListMultimap.create(); + + @JSBody(params = { "peerConnection", + "str" }, script = "var candidateList = JSON.parse(str); for (var i = 0; i < candidateList.length; ++i) { peerConnection.addIceCandidate(new RTCIceCandidate(candidateList[i])); }; return null;") + private static native void addCoreIceCandidates(JSObject peerConnection, String str); + + static void addIceCandidates(JSObject peerConnection, String str) { + if (!hasCheckedSupport) + supported(); + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + case WEBRTC_SUPPORT_WEBKIT: + addCoreIceCandidates(peerConnection, str); + break; + case WEBRTC_SUPPORT_MOZ: + addMozIceCandidates(peerConnection, str); + break; + default: + throw new UnsupportedOperationException(); } - rtcLANClient.initialize(); - rtcLANClient.signalRemoteConnect(); } + @JSBody(params = { "peerConnection", + "str" }, script = "var candidateList = JSON.parse(str); for (var i = 0; i < candidateList.length; ++i) { peerConnection.addIceCandidate(new mozRTCIceCandidate(candidateList[i])); }; return null;") + private static native void addMozIceCandidates(JSObject peerConnection, String str); + + @JSBody(script = "var checkPromising = function() { try {" + + "return (typeof (new RTCPeerConnection({iceServers:[{urls:\"stun:127.69.0.1:6969\"}]})).createOffer() === \"object\") ? 1 : 4;" + + "} catch(ex) {" + "return (ex.name === \"TypeError\") ? 4 : 1;" + "}};" + + "return (typeof RTCPeerConnection !== \"undefined\")" + " ? checkPromising()" + + " : ((typeof webkitRTCPeerConnection !== \"undefined\") ? 2" + + " : ((typeof mozRTCPeerConnection !== \"undefined\") ? 3" + " : 0));") + private static native int checkSupportedImpl(); + public static void clearLANClientState() { clientICECandidate = null; clientDescription = null; @@ -845,113 +579,89 @@ public class PlatformWebRTC { clientDataChannelClosed = true; } - public static String clientLANAwaitICECandidate() { - if(clientICECandidate != null) { - String ret = clientICECandidate; - clientICECandidate = null; - return ret; - }else { - return null; + public static boolean clientLANAwaitChannel() { + if (clientDataChannelOpen) { + clientDataChannelOpen = false; + return true; + } else { + return false; } } public static String clientLANAwaitDescription() { - if(clientDescription != null) { + if (clientDescription != null) { String ret = clientDescription; clientDescription = null; return ret; - }else { + } else { return null; } } - public static boolean clientLANAwaitChannel() { - if(clientDataChannelOpen) { - clientDataChannelOpen = false; - return true; - }else { - return false; + public static String clientLANAwaitICECandidate() { + if (clientICECandidate != null) { + String ret = clientICECandidate; + clientICECandidate = null; + return ret; + } else { + return null; } } + public static void clientLANCloseConnection() { + rtcLANClient.signalRemoteDisconnect(false); + } + public static boolean clientLANClosed() { return clientDataChannelClosed; } - public static void clientLANSetICECandidate(String candidate) { - rtcLANClient.signalRemoteICECandidate(candidate); + public static List clientLANReadAllPacket() { + synchronized (clientLANPacketBuffer) { + if (!clientLANPacketBuffer.isEmpty()) { + List ret = new ArrayList<>(clientLANPacketBuffer); + clientLANPacketBuffer.clear(); + return ret; + } else { + return null; + } + } + } + + public static byte[] clientLANReadPacket() { + synchronized (clientLANPacketBuffer) { + return !clientLANPacketBuffer.isEmpty() ? clientLANPacketBuffer.remove(0) : null; + } + } + + public static int clientLANReadyState() { + return rtcLANClient.readyState; + } + + public static void clientLANSendPacket(byte[] pkt) { + rtcLANClient.sendPacketToServer(TeaVMUtils.unwrapArrayBuffer(pkt)); } public static void clientLANSetDescription(String description) { rtcLANClient.signalRemoteDescription(description); } - private static LANServer rtcLANServer = null; + public static void clientLANSetICECandidate(String candidate) { + rtcLANClient.signalRemoteICECandidate(candidate); + } - public static void startRTCLANServer() { - if (rtcLANServer == null) { - rtcLANServer = new LANServer(); + public static void clientLANSetICEServersAndConnect(String[] servers) { + rtcLANClient.setIceServers(servers); + if (clientLANReadyState() == LANClient.READYSTATE_CONNECTED + || clientLANReadyState() == LANClient.READYSTATE_CONNECTING) { + rtcLANClient.signalRemoteDisconnect(true); } + rtcLANClient.initialize(); + rtcLANClient.signalRemoteConnect(); } - private static final ListMultimap serverLANEventBuffer = LinkedListMultimap.create(); - - public static void serverLANInitializeServer(String[] servers) { - synchronized(serverLANEventBuffer) { - serverLANEventBuffer.clear(); - } - rtcLANServer.resetPeerStates(); - rtcLANServer.setIceServers(servers); - } - - public static void serverLANCloseServer() { - rtcLANServer.signalRemoteDisconnect(""); - } - - public static LANPeerEvent serverLANGetEvent(String clientId) { - synchronized(serverLANEventBuffer) { - if(!serverLANEventBuffer.isEmpty()) { - List l = serverLANEventBuffer.get(clientId); - if(!l.isEmpty()) { - return l.remove(0); - } - } - return null; - } - } - - public static List serverLANGetAllEvent(String clientId) { - synchronized(serverLANEventBuffer) { - if(!serverLANEventBuffer.isEmpty()) { - List l = serverLANEventBuffer.removeAll(clientId); - if(l.isEmpty()) { - return null; - } - return l; - } - return null; - } - } - - public static void serverLANWritePacket(String peer, byte[] data) { - rtcLANServer.sendPacketToRemoteClient(peer, TeaVMUtils.unwrapArrayBuffer(data)); - } - - public static void serverLANCreatePeer(String peer) { - rtcLANServer.signalRemoteConnect(peer); - } - - public static void serverLANPeerICECandidates(String peer, String iceCandidates) { - rtcLANServer.signalRemoteICECandidate(peer, iceCandidates); - } - - public static void serverLANPeerDescription(String peer, String description) { - rtcLANServer.signalRemoteDescription(peer, description); - } - - public static void serverLANDisconnectPeer(String peer) { - rtcLANServer.signalRemoteDisconnect(peer); - } + @JSBody(params = { "item" }, script = "item.close();") + static native void closeIt(JSObject item); public static int countPeers() { if (rtcLANServer == null) { @@ -960,4 +670,427 @@ public class PlatformWebRTC { return rtcLANServer.countPeers(); } + static void createAnswer(JSObject peerConnection, DescHandler h1, ErrorHandler h2) { + if (!hasCheckedSupport) + supported(); + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + createAnswerPromising(peerConnection, h1, h2); + break; + case WEBRTC_SUPPORT_WEBKIT: + case WEBRTC_SUPPORT_MOZ: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + createAnswerLegacy(peerConnection, h1, h2); + break; + default: + throw new UnsupportedOperationException(); + } + } + + @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createAnswer(h1, h2);") + private static native void createAnswerLegacy(JSObject peerConnection, DescHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createAnswer().then(h1).catch(h2);") + private static native void createAnswerPromising(JSObject peerConnection, DescHandler h1, ErrorHandler h2); + + @JSBody(params = { + "iceServers" }, script = "return new RTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") + static native JSObject createCoreRTCPeerConnection(String iceServers); + + @JSBody(params = { "peerConnection", "name" }, script = "return peerConnection.createDataChannel(name);") + static native JSObject createDataChannel(JSObject peerConnection, String name); + + @JSBody(params = { + "iceServers" }, script = "return new mozRTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") + static native JSObject createMozRTCPeerConnection(String iceServers); + + static void createOffer(JSObject peerConnection, DescHandler h1, ErrorHandler h2) { + if (!hasCheckedSupport) + supported(); + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + createOfferPromising(peerConnection, h1, h2); + break; + case WEBRTC_SUPPORT_WEBKIT: + case WEBRTC_SUPPORT_MOZ: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + createOfferLegacy(peerConnection, h1, h2); + break; + default: + throw new UnsupportedOperationException(); + } + } + + @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createOffer(h1, h2);") + private static native void createOfferLegacy(JSObject peerConnection, DescHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", "h1", "h2" }, script = "peerConnection.createOffer().then(h1).catch(h2);") + private static native void createOfferPromising(JSObject peerConnection, DescHandler h1, ErrorHandler h2); + + static JSObject createRTCPeerConnection(String iceServers) { + if (!hasCheckedSupport) + supported(); + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + return createCoreRTCPeerConnection(iceServers); + case WEBRTC_SUPPORT_WEBKIT: + return createWebkitRTCPeerConnection(iceServers); + case WEBRTC_SUPPORT_MOZ: + return createMozRTCPeerConnection(iceServers); + default: + throw new UnsupportedOperationException(); + } + } + + @JSBody(params = { + "iceServers" }, script = "return new webkitRTCPeerConnection({ iceServers: JSON.parse(iceServers), optional: [ { DtlsSrtpKeyAgreement: true } ] });") + static native JSObject createWebkitRTCPeerConnection(String iceServers); + + @JSBody(params = { "item" }, script = "return item.candidate.candidate;") + static native String getCandidate(JSObject item); + + @JSBody(params = { "item" }, script = "return item.channel;") + static native JSObject getChannel(JSObject item); + + static String getConnectionState(JSObject item) { + if (useOldConnStateCheck) { + return getConnectionStateLegacy(item); + } else { + String str = getModernConnectionState(item); + if (str.length() == 0) { + useOldConnStateCheck = true; + logger.info("Note: Using legacy connection state check using iceConnectionState+signalingState"); + return getConnectionStateLegacy(item); + } else { + return str; + } + } + } + + private static String getConnectionStateLegacy(JSObject item) { + String connState = getICEConnectionState(item); + switch (connState) { + case "new": + return "new"; + case "checking": + return "connecting"; + case "failed": + return "failed"; + case "disconnected": + return "disconnected"; + case "connected": + case "completed": + case "closed": + String signalState = getSignalingState(item); + switch (signalState) { + case "stable": + return "connected"; + case "have-local-offer": + case "have-remote-offer": + case "have-local-pranswer": + case "have-remote-pranswer": + return "connecting"; + case "closed": + default: + return "closed"; + } + default: + return "closed"; + } + } + + @JSBody(params = { "item" }, script = "return item.data;") + static native ArrayBuffer getData(JSObject item); + + @JSBody(params = { "item" }, script = "return item.iceConnectionState;") + private static native String getICEConnectionState(JSObject item); + + @JSBody(params = { "item" }, script = "return item.connectionState || \"\";") + private static native String getModernConnectionState(JSObject item); + + @JSBody(params = { "item" }, script = "return item.readyState;") + static native String getReadyState(JSObject item); + + @JSBody(params = { "item" }, script = "return item.candidate.sdpMLineIndex;") + static native int getSdpMLineIndex(JSObject item); + + @JSBody(params = { "item" }, script = "return item.signalingState;") + private static native String getSignalingState(JSObject item); + + @JSBody(params = { "item" }, script = "return !!item.candidate;") + static native boolean hasCandidate(JSObject item); + + @JSBody(params = {}, script = "if(!navigator || !navigator.userAgent) return false;" + + "var ua = navigator.userAgent.toLowerCase();" + "var i = ua.indexOf(\"chrome/\");" + + "if(i === -1) return false;" + "i += 7;" + "var j = ua.indexOf(\".\", i);" + + "if(j === -1 || j < i) j = ua.length;" + "var versStr = ua.substring(i, j);" + + "versStr = parseInt(versStr);" + "return !isNaN(versStr) && versStr < 71;") + private static native boolean isChromeBelow71(); + + @JSBody(params = { "sock", "buffer" }, script = "sock.send(buffer);") + static native void nativeBinarySend(WebSocket sock, ArrayBuffer buffer); + + @JSBody(params = { "objIn" }, script = "if(typeof objIn.sdp === \"string\"" + + "&& objIn.sdp.indexOf(\"a=extmap-allow-mixed\") !== -1) {" + + "objIn.sdp = objIn.sdp.split(\"\\n\").filter(function(line) {" + + "return line.trim() !== \"a=extmap-allow-mixed\";" + "}).join(\"\\n\");" + "}") + private static native void removeExtmapAllowMixed(JSObject objIn); + + public static void runScheduledTasks() { + + } + + @JSBody(params = { "item", "buffer" }, script = "item.send(buffer);") + static native void sendIt(JSObject item, ArrayBuffer buffer); + + public static void serverLANCloseServer() { + rtcLANServer.signalRemoteDisconnect(""); + } + + public static void serverLANCreatePeer(String peer) { + rtcLANServer.signalRemoteConnect(peer); + } + + public static void serverLANDisconnectPeer(String peer) { + rtcLANServer.signalRemoteDisconnect(peer); + } + + public static List serverLANGetAllEvent(String clientId) { + synchronized (serverLANEventBuffer) { + if (!serverLANEventBuffer.isEmpty()) { + List l = serverLANEventBuffer.removeAll(clientId); + if (l.isEmpty()) { + return null; + } + return l; + } + return null; + } + } + + public static LANPeerEvent serverLANGetEvent(String clientId) { + synchronized (serverLANEventBuffer) { + if (!serverLANEventBuffer.isEmpty()) { + List l = serverLANEventBuffer.get(clientId); + if (!l.isEmpty()) { + return l.remove(0); + } + } + return null; + } + } + + public static void serverLANInitializeServer(String[] servers) { + synchronized (serverLANEventBuffer) { + serverLANEventBuffer.clear(); + } + rtcLANServer.setIceServers(servers); + } + + public static void serverLANPeerDescription(String peer, String description) { + rtcLANServer.signalRemoteDescription(peer, description); + } + + public static void serverLANPeerICECandidates(String peer, String iceCandidates) { + rtcLANServer.signalRemoteICECandidate(peer, iceCandidates); + } + + public static void serverLANPeerMapIPC(String peer, String ipcChannel) { + rtcLANServer.serverPeerMapIPC(peer, ipcChannel); + } + + public static boolean serverLANPeerPassIPC(String channelName, ArrayBuffer data) { + if (rtcLANServer != null) { + LANPeer peer = rtcLANServer.ipcMapList.get(channelName); + if (peer != null) { + rtcLANServer.sendPacketToRemoteClient(peer, data); + return true; + } else { + return false; + } + } else { + return false; + } + } + + public static void serverLANWritePacket(String peer, byte[] data) { + rtcLANServer.sendPacketToRemoteClient(peer, TeaVMUtils.unwrapArrayBuffer(data)); + } + + @JSBody(params = { "item", "type" }, script = "item.binaryType = type;") + static native void setBinaryType(JSObject item, String type); + + @JSBody(params = { "peerConnection", + "str" }, script = "try { peerConnection.setRemoteDescription(str); return true; } catch(ex) { if(ex.name === \"TypeError\") return false; else throw ex; }") + private static native boolean setCoreRemoteDescription(JSObject peerConnection, JSObject str); + + @JSBody(params = { "peerConnection", "str", "h1", + "h2" }, script = "try { peerConnection.setRemoteDescription(str, h1, h2); return true; } catch(ex) { if(ex.name === \"TypeError\") return false; else throw ex; }") + private static native boolean setCoreRemoteDescription2Legacy(JSObject peerConnection, JSObject str, + EmptyHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", "str", "h1", + "h2" }, script = "peerConnection.setRemoteDescription(new RTCSessionDescription(str), h1, h2);") + private static native void setCoreRemoteDescription2LegacyLegacy(JSObject peerConnection, JSObject str, + EmptyHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", "str", "h1", + "h2" }, script = "try { peerConnection.setRemoteDescription(str).then(h1).catch(h2); return true; } catch(ex) { if(ex.name === \"TypeError\") return false; else throw ex; }") + private static native boolean setCoreRemoteDescription2Promising(JSObject peerConnection, JSObject str, + EmptyHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", "str", "h1", + "h2" }, script = "peerConnection.setRemoteDescription(new RTCSessionDescription(str)).then(h1).catch(h2);") + private static native void setCoreRemoteDescription2PromisingLegacy(JSObject peerConnection, JSObject str, + EmptyHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", + "str" }, script = "peerConnection.setRemoteDescription(new RTCSessionDescription(str));") + private static native void setCoreRemoteDescriptionLegacy(JSObject peerConnection, JSObject str); + + static void setLocalDescription(JSObject peerConnection, JSObject desc, EmptyHandler h1, ErrorHandler h2) { + if (!hasCheckedSupport) + supported(); + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + setLocalDescriptionPromising(peerConnection, desc, h1, h2); + break; + case WEBRTC_SUPPORT_WEBKIT: + case WEBRTC_SUPPORT_MOZ: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + setLocalDescriptionLegacy(peerConnection, desc, h1, h2); + break; + default: + throw new UnsupportedOperationException(); + } + } + + @JSBody(params = { "peerConnection", "desc", "h1", + "h2" }, script = "peerConnection.setLocalDescription(desc, h1, h2);") + private static native void setLocalDescriptionLegacy(JSObject peerConnection, JSObject desc, EmptyHandler h1, + ErrorHandler h2); + + @JSBody(params = { "peerConnection", "desc", "h1", + "h2" }, script = "peerConnection.setLocalDescription(desc).then(h1).catch(h2);") + private static native void setLocalDescriptionPromising(JSObject peerConnection, JSObject desc, EmptyHandler h1, + ErrorHandler h2); + + @JSBody(params = { "peerConnection", "str", "h1", + "h2" }, script = "peerConnection.setRemoteDescription(new mozRTCSessionDescription(str), h1, h2);") + private static native void setMozRemoteDescription2LegacyLegacy(JSObject peerConnection, JSObject str, + EmptyHandler h1, ErrorHandler h2); + + @JSBody(params = { "peerConnection", + "str" }, script = "peerConnection.setRemoteDescription(new mozRTCSessionDescription(str));") + private static native void setMozRemoteDescriptionLegacy(JSObject peerConnection, JSObject str); + + static void setRemoteDescription(JSObject peerConnection, JSObject str) { + if (!hasCheckedSupport) + supported(); + if (belowChrome71Fix) { + removeExtmapAllowMixed(str); + } + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + if (useSessionDescConstructor) { + setCoreRemoteDescriptionLegacy(peerConnection, str); + } else { + if (!setCoreRemoteDescription(peerConnection, str)) { + useSessionDescConstructor = true; + logger.info("Note: Caught suspicious exception, using legacy RTCSessionDescription method"); + setCoreRemoteDescriptionLegacy(peerConnection, str); + } + } + break; + case WEBRTC_SUPPORT_WEBKIT: + setCoreRemoteDescriptionLegacy(peerConnection, str); + break; + case WEBRTC_SUPPORT_MOZ: + setMozRemoteDescriptionLegacy(peerConnection, str); + break; + default: + throw new UnsupportedOperationException(); + } + } + + static void setRemoteDescription2(JSObject peerConnection, JSObject str, EmptyHandler h1, ErrorHandler h2) { + if (!hasCheckedSupport) + supported(); + if (belowChrome71Fix) { + removeExtmapAllowMixed(str); + } + switch (supportedImpl) { + case WEBRTC_SUPPORT_CORE: + if (useSessionDescConstructor) { + setCoreRemoteDescription2PromisingLegacy(peerConnection, str, h1, h2); + } else { + if (!setCoreRemoteDescription2Promising(peerConnection, str, h1, h2)) { + useSessionDescConstructor = true; + logger.info("Note: Caught suspicious exception, using legacy RTCSessionDescription method"); + setCoreRemoteDescription2PromisingLegacy(peerConnection, str, h1, h2); + } + } + break; + case WEBRTC_SUPPORT_WEBKIT: + setCoreRemoteDescription2LegacyLegacy(peerConnection, str, h1, h2); + break; + case WEBRTC_SUPPORT_MOZ: + setMozRemoteDescription2LegacyLegacy(peerConnection, str, h1, h2); + break; + case WEBRTC_SUPPORT_CORE_NON_PROMISING: + if (useSessionDescConstructor) { + setCoreRemoteDescription2LegacyLegacy(peerConnection, str, h1, h2); + } else { + if (!setCoreRemoteDescription2Legacy(peerConnection, str, h1, h2)) { + useSessionDescConstructor = true; + logger.info("Note: Caught suspicious exception, using legacy RTCSessionDescription method"); + setCoreRemoteDescription2LegacyLegacy(peerConnection, str, h1, h2); + } + } + break; + default: + throw new UnsupportedOperationException(); + } + } + + public static void startRTCLANClient() { + if (rtcLANClient == null) { + rtcLANClient = new LANClient(); + } + } + + public static void startRTCLANServer() { + if (rtcLANServer == null) { + rtcLANServer = new LANServer(); + } + } + + public static boolean supported() { + if (!hasCheckedSupport) { + supportedImpl = checkSupportedImpl(); + hasCheckedSupport = true; + if (supportedImpl == WEBRTC_SUPPORT_NONE) { + logger.error("WebRTC is not supported on this browser!"); + } else if (supportedImpl == WEBRTC_SUPPORT_WEBKIT) { + logger.info("Using webkit- prefix for RTCPeerConnection"); + } else if (supportedImpl == WEBRTC_SUPPORT_MOZ) { + logger.info("Using moz- prefix for RTCPeerConnection"); + } else if (supportedImpl == WEBRTC_SUPPORT_CORE_NON_PROMISING) { + logger.info("Using non-promising RTCPeerConnection"); + } + if (supportedImpl != WEBRTC_SUPPORT_NONE) { + belowChrome71Fix = isChromeBelow71(); + if (belowChrome71Fix) { + logger.info( + "Note: Detected Chrome below version 71, stripping \"a=extmap-allow-mixed\" from the description SDP field"); + } + } else { + belowChrome71Fix = false; + } + } + return supportedImpl != WEBRTC_SUPPORT_NONE; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java index 739314d4..ff11ac8f 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformWebView.java @@ -34,40 +34,60 @@ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController.IPacketSen /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PlatformWebView { - private static final Logger logger = LogManager.getLogger("PlatformWebView"); + private static interface WebViewMessage extends JSObject { + @JSProperty + String getChannel(); + + @JSProperty("data") + ArrayBuffer getDataAsArrayBuffer(); + + @JSProperty("data") + String getDataAsString(); + + @JSProperty + boolean getOpen(); + + @JSProperty + String getType(); + + } + + private static final Logger logger = LogManager.getLogger("PlatformWebView"); private static boolean supportKnown = false; private static boolean supportForce = false; private static boolean enableCSP = true; private static boolean supported = false; + private static boolean cspSupport = false; - private static HTMLElement currentIFrameContainer = null; - private static HTMLElement currentAllowJavaScript = null; + private static HTMLElement currentAllowJavaScript = null; private static AdvancedHTMLIFrameElement currentIFrame = null; + private static WebViewOptions currentOptions = null; private static int webviewResetSerial = 0; private static String currentMessageChannelName = null; - private static Window win; + private static HTMLElement rootElement; private static Consumer currentMessageHandler = null; @@ -76,43 +96,402 @@ public class PlatformWebView { private static IPacketSendCallback packetSendCallback = null; - static void initRoot(Window win, HTMLElement rootElement) { - PlatformWebView.win = win; - PlatformWebView.rootElement = rootElement; + public static void beginShowing(WebViewOptions options, int x, int y, int w, int h) { + if (!supported()) { + return; + } + setupShowing(x, y, w, h); + if (options.scriptEnabled) { + PermissionsCache.Permission perm = PermissionsCache.getJavaScriptAllowed(options.permissionsOriginUUID, + hashPermissionFlags(options)); + if (perm == null) { + beginShowingEnableJavaScript(options); + } else if (perm.choice) { + beginShowingDirect(options); + } else { + beginShowingContentBlocked(options); + } + } else { + beginShowingDirect(options); + } } - public static boolean supported() { - if(!supportKnown) { - IClientConfigAdapter cfg = PlatformRuntime.getClientConfigAdapter(); - supportForce = cfg.isForceWebViewSupport(); - enableCSP = cfg.isEnableWebViewCSP(); - if(supportForce) { - supported = true; - cspSupport = true; - }else { - supported = false; - cspSupport = false; - try { - AdvancedHTMLIFrameElement tmp = (AdvancedHTMLIFrameElement)win.getDocument().createElement("iframe"); - supported = tmp != null && tmp.checkSafetyFeaturesSupported(); - cspSupport = enableCSP && supported && tmp.checkCSPSupported(); - }catch(Throwable ex) { - logger.error("Error checking iframe support"); - logger.error(ex); + private static void beginShowingContentBlocked(final WebViewOptions options) { + beginShowingEnableJSSetup(); + currentAllowJavaScript.setInnerHTML("

" + + " Content Blocked

" + + "

You chose to block JavaScript execution for this embed

" + + "

"); + final int serial = webviewResetSerial; + currentAllowJavaScript.querySelector("._eaglercraftX_re_evaluate_javascript").addEventListener("click", + new EventListener() { + @Override + public void handleEvent(Event evt) { + if (webviewResetSerial == serial && currentAllowJavaScript != null) { + PermissionsCache.clearJavaScriptAllowed(options.permissionsOriginUUID); + beginShowingEnableJavaScript(options); + } + } + }); + } + + private static void beginShowingDirect(WebViewOptions options) { + if (!supportForce) { + try { + currentOptions = options; + currentIFrame = (AdvancedHTMLIFrameElement) win.getDocument().createElement("iframe"); + currentIFrame.setAllowSafe(""); + currentIFrame.setReferrerPolicy("strict-origin"); + Set sandboxArgs = new HashSet<>(); + sandboxArgs.add("allow-downloads"); + if (options.scriptEnabled) { + sandboxArgs.add("allow-scripts"); + sandboxArgs.add("allow-pointer-lock"); + } + currentIFrame.setSandboxSafe(sandboxArgs); + } catch (IFrameSafetyException ex) { + logger.error("Caught safety exception while opening webview!"); + logger.error(ex); + if (currentIFrame != null) { + currentIFrame.delete(); + currentIFrame = null; + currentOptions = null; + } + logger.error("Things you can try:"); + logger.error("1. Set window.eaglercraftXOpts.forceWebViewSupport to true"); + logger.error("2. Set window.eaglercraftXOpts.enableWebViewCSP to false"); + logger.error("(these settings may compromise security)"); + beginShowingSafetyError(); + return; + } + } else { + currentOptions = options; + currentIFrame = (AdvancedHTMLIFrameElement) win.getDocument().createElement("iframe"); + try { + currentIFrame.setAllow(""); + } catch (Throwable t) { + } + try { + currentIFrame.setReferrerPolicy("strict-origin"); + } catch (Throwable t) { + } + try { + List sandboxArgs = new ArrayList<>(); + sandboxArgs.add("allow-downloads"); + if (options.scriptEnabled) { + sandboxArgs.add("allow-scripts"); + sandboxArgs.add("allow-pointer-lock"); + } + currentIFrame.setSandbox(String.join(" ", sandboxArgs)); + } catch (Throwable t) { + } + } + currentIFrame.setCredentialless(true); + currentIFrame.setLoading("lazy"); + boolean cspWarn = false; + if (options.contentMode == EnumWebViewContentMode.BLOB_BASED) { + if (enableCSP && cspSupport) { + if (currentIFrame.checkCSPSupported()) { + StringBuilder csp = new StringBuilder(); + csp.append("default-src 'none';"); + String protos = options.strictCSPEnable ? "" + : (PlatformRuntime.requireSSL() ? " https:" : " http: https:"); + if (options.scriptEnabled) { + csp.append(" script-src 'unsafe-eval' 'unsafe-inline' data: blob:").append(protos).append(';'); + csp.append(" style-src 'unsafe-eval' 'unsafe-inline' data: blob:").append(protos).append(';'); + csp.append(" img-src data: blob:").append(protos).append(';'); + csp.append(" font-src data: blob:").append(protos).append(';'); + csp.append(" child-src data: blob:").append(protos).append(';'); + csp.append(" frame-src data: blob:;"); + csp.append(" media-src data: mediastream: blob:").append(protos).append(';'); + csp.append(" connect-src data: blob:").append(protos).append(';'); + csp.append(" worker-src data: blob:").append(protos).append(';'); + } else { + csp.append(" style-src data: 'unsafe-inline'").append(protos).append(';'); + csp.append(" img-src data:").append(protos).append(';'); + csp.append(" font-src data:").append(protos).append(';'); + csp.append(" media-src data:").append(protos).append(';'); + } + currentIFrame.setCSP(csp.toString()); + } else { + logger.warn("This browser does not support CSP attribute on iframes! (try Chrome)"); + cspWarn = true; + } + } else { + cspWarn = true; + } + if (cspWarn && options.strictCSPEnable) { + logger.warn("Strict CSP was requested for this webview, but that feature is not available!"); + } + } else { + cspWarn = true; + } + CSSStyleDeclaration decl = currentIFrame.getStyle(); + decl.setProperty("border", "none"); + decl.setProperty("background-color", "white"); + decl.setProperty("width", "100%"); + decl.setProperty("height", "100%"); + currentIFrame.getClassList().add("_eaglercraftX_webview_iframe_element"); + currentIFrameContainer.appendChild(currentIFrame); + if (options.contentMode == EnumWebViewContentMode.BLOB_BASED) { + currentIFrame.setSourceDocument(new String(options.blob, StandardCharsets.UTF_8)); + } else { + currentIFrame.setSourceAddress(options.url.toString()); + } + final int resetSer = webviewResetSerial; + final AdvancedHTMLIFrameElement curIFrame = currentIFrame; + final boolean[] focusTracker = new boolean[1]; + currentIFrame.addEventListener("mouseover", new EventListener() { + @Override + public void handleEvent(Event evt) { + if (resetSer == webviewResetSerial && curIFrame == currentIFrame) { + if (!focusTracker[0]) { + focusTracker[0] = true; + currentIFrame.getContentWindow().focus(); + } } } - if(!supported) { - logger.error("This browser does not meet the safety requirements for webview support, this feature will be disabled"); - }else if(!cspSupport && enableCSP) { - logger.warn("This browser does not support CSP attribute on iframes! (try Chrome)"); + }); + currentIFrame.addEventListener("mouseout", new EventListener() { + @Override + public void handleEvent(Event evt) { + if (resetSer == webviewResetSerial && curIFrame == currentIFrame) { + if (focusTracker[0]) { + focusTracker[0] = false; + win.focus(); + } + } } - supportKnown = true; + }); + if (options.scriptEnabled && options.serverMessageAPIEnabled) { + currentMessageHandler = new Consumer() { + @Override + public void accept(MessageEvent evt) { + synchronized (messageQueue) { + if (resetSer == webviewResetSerial && curIFrame == currentIFrame) { + messageQueue.add(() -> { + if (resetSer == webviewResetSerial && curIFrame == currentIFrame) { + handleMessageRawFromFrame(evt.getData()); + } else { + logger.warn("Recieved message from on dead IFrame handler: (#" + resetSer + ") " + + curIFrame.getSourceAddress()); + } + }); + } else { + logger.warn("Recieved message from on dead IFrame handler: (#" + resetSer + ") " + + curIFrame.getSourceAddress()); + } + } + } + }; } - return supported; + logger.info("WebView is loading: \"{}\"", + options.contentMode == EnumWebViewContentMode.BLOB_BASED ? "about:srcdoc" + : currentIFrame.getSourceAddress()); + logger.info("JavaScript: {}, Strict CSP: {}, Message API: {}", options.scriptEnabled, + options.strictCSPEnable && !cspWarn, options.serverMessageAPIEnabled); } - public static boolean isShowing() { - return currentIFrameContainer != null; + private static void beginShowingEnableJavaScript(final WebViewOptions options) { + beginShowingEnableJSSetup(); + String strictCSPMarkup; + if (options.contentMode != EnumWebViewContentMode.BLOB_BASED) { + strictCSPMarkup = "Impossible"; + } else if (!cspSupport || !enableCSP) { + strictCSPMarkup = "Unsupported"; + } else if (options.strictCSPEnable) { + strictCSPMarkup = "Enabled"; + } else { + strictCSPMarkup = "Disabled"; + } + String messageAPIMarkup; + if (options.serverMessageAPIEnabled) { + messageAPIMarkup = "Enabled"; + } else { + messageAPIMarkup = "Disabled"; + } + currentAllowJavaScript.setInnerHTML( + "
" + + "

 Allow JavaScript

" + + "

" + + "

Strict CSP: " + strictCSPMarkup + " | " + + "Message API: " + messageAPIMarkup + "

" + + "

Remember my choice

" + + "

 " + + "

"); + final int serial = webviewResetSerial; + if (options.contentMode != EnumWebViewContentMode.BLOB_BASED) { + String urlStr = options.url.toString(); + currentAllowJavaScript.querySelector("._eaglercraftX_permission_target_url") + .setInnerText(urlStr.length() > 255 ? (urlStr.substring(0, 253) + "...") : urlStr); + } + currentAllowJavaScript.querySelector("._eaglercraftX_allow_javascript").addEventListener("click", + new EventListener() { + @Override + public void handleEvent(Event evt) { + if (webviewResetSerial == serial && currentAllowJavaScript != null) { + HTMLInputElement chkbox = (HTMLInputElement) currentAllowJavaScript + .querySelector("._eaglercraftX_remember_javascript"); + if (chkbox != null && chkbox.isChecked()) { + PermissionsCache.setJavaScriptAllowed(options.permissionsOriginUUID, + hashPermissionFlags(options), true); + } + currentAllowJavaScript.delete(); + currentAllowJavaScript = null; + ++webviewResetSerial; + beginShowingDirect(options); + } + } + }); + currentAllowJavaScript.querySelector("._eaglercraftX_block_javascript").addEventListener("click", + new EventListener() { + @Override + public void handleEvent(Event evt) { + if (webviewResetSerial == serial && currentAllowJavaScript != null) { + HTMLInputElement chkbox = (HTMLInputElement) currentAllowJavaScript + .querySelector("._eaglercraftX_remember_javascript"); + if (chkbox != null && chkbox.isChecked()) { + PermissionsCache.setJavaScriptAllowed(options.permissionsOriginUUID, + hashPermissionFlags(options), false); + } + beginShowingContentBlocked(options); + } + } + }); + } + + private static void beginShowingEnableJSSetup() { + if (currentAllowJavaScript != null) { + ++webviewResetSerial; + currentAllowJavaScript.delete(); + currentAllowJavaScript = null; + } + currentAllowJavaScript = win.getDocument().createElement("div"); + CSSStyleDeclaration decl = currentAllowJavaScript.getStyle(); + decl.setProperty("background-color", "white"); + decl.setProperty("width", "100%"); + decl.setProperty("height", "100%"); + currentAllowJavaScript.getClassList().add("_eaglercraftX_webview_permission_screen"); + currentIFrameContainer.appendChild(currentAllowJavaScript); + } + + private static void beginShowingSafetyError() { + beginShowingEnableJSSetup(); + currentAllowJavaScript.setInnerHTML("

" + + " IFrame Safety Error

" + + "

The content cannot be displayed safely!

" + + "

Check console for more details

"); + } + + @JSBody(params = { + "obj" }, script = "return (typeof obj === \"object\") && (obj.ver === 1) && ((typeof obj.channel === \"string\") && obj.channel.length > 0);") + private static native boolean checkRawMessageValid(JSObject obj); + + @JSBody(params = { "obj" }, script = "return (obj.data instanceof ArrayBuffer);") + private static native boolean checkRawMessageValidDataBin(JSObject obj); + + @JSBody(params = { "obj" }, script = "return (typeof obj.data === \"string\");") + private static native boolean checkRawMessageValidDataStr(JSObject obj); + + @JSBody(params = { "obj" }, script = "return (typeof obj.open === \"boolean\");") + private static native boolean checkRawMessageValidEn(JSObject obj); + + @JSBody(params = { "channel", + "contents" }, script = "return {ver:1,channel:channel,type:\"binary\",data:contents};") + private static native JSObject createBinaryMessage(String channel, ArrayBuffer contents); + + @JSBody(params = { "channel", + "contents" }, script = "return {ver:1,channel:channel,type:\"string\",data:contents};") + private static native JSObject createStringMessage(String channel, String contents); + + public static void endFallbackServer() { + + } + + public static void endShowing() { + ++webviewResetSerial; + if (currentIFrame != null) { + currentIFrame.delete(); + currentIFrame = null; + } + synchronized (messageQueue) { + messageQueue.clear(); + } + currentMessageHandler = null; + if (currentAllowJavaScript != null) { + currentAllowJavaScript.delete(); + currentAllowJavaScript = null; + } + currentIFrameContainer.delete(); + currentIFrameContainer = null; + if (currentMessageChannelName != null) { + sendMessageEnToServer(false, currentMessageChannelName); + currentMessageChannelName = null; + } + win.focus(); + currentOptions = null; + } + + public static boolean fallbackRunning() { + return false; + } + + public static boolean fallbackSupported() { + return false; + } + + public static String getFallbackURL() { + return null; + } + + private static String getURLOrigin(URI urlObject) { + String str = " " + urlObject.getScheme() + "://" + urlObject.getRawAuthority(); + if (str.startsWith(" http:")) { + str = str + " https" + str.substring(5); + } + return str; + } + + public static void handleMessageFromServer(SPacketWebViewMessageV4EAG packet) { + Window w; + if (currentMessageChannelName != null && currentIFrame != null + && (w = currentIFrame.getContentWindow()) != null) { + JSObject obj = null; + if (packet.type == SPacketWebViewMessageV4EAG.TYPE_STRING) { + obj = createStringMessage(currentMessageChannelName, new String(packet.data, StandardCharsets.UTF_8)); + } else if (packet.type == SPacketWebViewMessageV4EAG.TYPE_BINARY) { + obj = createBinaryMessage(currentMessageChannelName, TeaVMUtils.unwrapArrayBuffer(packet.data)); + } + if (obj != null) { + w.postMessage(obj, "*"); + } + } else { + logger.error("Server tried to send the WebView a message, but the message channel is not open!"); + } + } + + private static void handleMessageRawFromFrame(JSObject obj) { + if (checkRawMessageValid(obj)) { + if (checkRawMessageValidEn(obj)) { + WebViewMessage msg = (WebViewMessage) obj; + sendMessageEnToServer(msg.getOpen(), msg.getChannel()); + return; + } else if (checkRawMessageValidDataStr(obj)) { + WebViewMessage msg = (WebViewMessage) obj; + sendMessageToServer(msg.getChannel(), CPacketWebViewMessageV4EAG.TYPE_STRING, + msg.getDataAsString().getBytes(StandardCharsets.UTF_8)); + return; + } else if (checkRawMessageValidDataBin(obj)) { + WebViewMessage msg = (WebViewMessage) obj; + sendMessageToServer(msg.getChannel(), CPacketWebViewMessageV4EAG.TYPE_BINARY, + TeaVMUtils.wrapByteArrayBuffer(msg.getDataAsArrayBuffer())); + return; + } + } + logger.warn("WebView sent an invalid message!"); } private static int hashPermissionFlags(WebViewOptions opts) { @@ -122,27 +501,121 @@ public class PlatformWebView { return i; } - public static void beginShowing(WebViewOptions options, int x, int y, int w, int h) { - if(!supported()) { - return; - } - setupShowing(x, y, w, h); - if(options.scriptEnabled) { - PermissionsCache.Permission perm = PermissionsCache.getJavaScriptAllowed(options.permissionsOriginUUID, hashPermissionFlags(options)); - if(perm == null) { - beginShowingEnableJavaScript(options); - }else if(perm.choice) { - beginShowingDirect(options); - }else { - beginShowingContentBlocked(options); - } - }else { - beginShowingDirect(options); + static void initRoot(Window win, HTMLElement rootElement) { + PlatformWebView.win = win; + PlatformWebView.rootElement = rootElement; + } + + public static boolean isShowing() { + return currentIFrameContainer != null; + } + + public static void launchFallback(WebViewOptions options) { + + } + + static void onWindowMessageRecieved(MessageEvent evt) { + if (currentIFrame != null && currentMessageHandler != null && sourceEquals(evt, currentIFrame)) { + currentMessageHandler.accept(evt); } } + public static void resize(int x, int y, int w, int h) { + if (currentIFrameContainer != null) { + CSSStyleDeclaration decl = currentIFrameContainer.getStyle(); + float s = PlatformInput.getDPI(); + decl.setProperty("top", "" + (y / s) + "px"); + decl.setProperty("left", "" + (x / s) + "px"); + decl.setProperty("width", "" + ((w / s) - 10) + "px"); + decl.setProperty("height", "" + ((h / s) - 10) + "px"); + } + } + + public static void runTick() { + if (currentIFrame == null) { + return; + } + List lst = null; + synchronized (messageQueue) { + if (messageQueue.isEmpty()) { + return; + } + lst = new ArrayList<>(messageQueue); + messageQueue.clear(); + } + for (int i = 0, l = lst.size(); i < l; ++i) { + try { + lst.get(i).run(); + } catch (Throwable t) { + logger.error("Caught exception processing webview message!"); + logger.error(t); + } + } + } + + private static void sendMessageEnToServer(boolean messageChannelOpen, String channelName) { + if (channelName.length() > 255) { + logger.error("WebView tried to {} a channel, but channel name is too long, max is 255 characters!", + messageChannelOpen ? "open" : "close"); + return; + } + if (messageChannelOpen && currentMessageChannelName != null) { + logger.error("WebView tried to open channel, but a channel is already open!"); + sendMessageEnToServer(false, currentMessageChannelName); + } + if (!messageChannelOpen && currentMessageChannelName != null + && !currentMessageChannelName.equals(channelName)) { + logger.error("WebView tried to close the wrong channel!"); + } + if (!messageChannelOpen && currentMessageChannelName == null) { + logger.error("WebView tried to close channel, but the channel is not open!"); + return; + } + if (packetSendCallback != null) { + if (!packetSendCallback.sendPacket( + new CPacketWebViewMessageEnV4EAG(messageChannelOpen, messageChannelOpen ? channelName : null))) { + logger.error( + "WebView tried to send a packet to the server, but the server does not support this protocol!"); + return; + } + if (messageChannelOpen) { + logger.info("WebView opened message channel to server: \"{}\"", channelName); + currentMessageChannelName = channelName; + } else { + logger.info("WebView closed message channel to server: \"{}\"", currentMessageChannelName); + currentMessageChannelName = null; + } + } else { + logger.error("WebView tried to send a message, but no callback for sending packets is set!"); + } + } + + private static void sendMessageToServer(String channelName, int type, byte[] data) { + if (channelName.length() > 255) { + logger.error( + "WebView tried to send a message packet, but channel name is too long, max is 255 characters!"); + return; + } + if (!channelName.equals(currentMessageChannelName)) { + logger.error("WebView tried to send a message packet, but the channel is not open!"); + return; + } + if (packetSendCallback != null) { + if (!packetSendCallback.sendPacket(new CPacketWebViewMessageV4EAG(type, data))) { + logger.error( + "WebView tried to send a packet to the server, but the server does not support this protocol!"); + } + } else { + logger.error("WebView tried to send a message, but no callback for sending packets is set!"); + } + } + + public static void setPacketSendCallback(IPacketSendCallback callback) { + packetSendCallback = callback; + } + private static void setupShowing(int x, int y, int w, int h) { - if(currentIFrameContainer != null) { + if (currentIFrameContainer != null) { endShowing(); } currentIFrameContainer = win.getDocument().createElement("div"); @@ -157,483 +630,39 @@ public class PlatformWebView { rootElement.appendChild(currentIFrameContainer); } - private static void beginShowingDirect(WebViewOptions options) { - if(!supportForce) { - try { - currentOptions = options; - currentIFrame = (AdvancedHTMLIFrameElement)win.getDocument().createElement("iframe"); - currentIFrame.setAllowSafe(""); - currentIFrame.setReferrerPolicy("strict-origin"); - Set sandboxArgs = new HashSet<>(); - sandboxArgs.add("allow-downloads"); - if(options.scriptEnabled) { - sandboxArgs.add("allow-scripts"); - sandboxArgs.add("allow-pointer-lock"); - } - currentIFrame.setSandboxSafe(sandboxArgs); - }catch(IFrameSafetyException ex) { - logger.error("Caught safety exception while opening webview!"); - logger.error(ex); - if(currentIFrame != null) { - currentIFrame.delete(); - currentIFrame = null; - currentOptions = null; - } - logger.error("Things you can try:"); - logger.error("1. Set window.eaglercraftXOpts.forceWebViewSupport to true"); - logger.error("2. Set window.eaglercraftXOpts.enableWebViewCSP to false"); - logger.error("(these settings may compromise security)"); - beginShowingSafetyError(); - return; - } - }else { - currentOptions = options; - currentIFrame = (AdvancedHTMLIFrameElement)win.getDocument().createElement("iframe"); - try { - currentIFrame.setAllow(""); - }catch(Throwable t) { - } - try { - currentIFrame.setReferrerPolicy("strict-origin"); - }catch(Throwable t) { - } - try { - List sandboxArgs = new ArrayList<>(); - sandboxArgs.add("allow-downloads"); - sandboxArgs.add("allow-same-origin"); - if(options.scriptEnabled) { - sandboxArgs.add("allow-scripts"); - sandboxArgs.add("allow-pointer-lock"); - } - currentIFrame.setSandbox(String.join(" ", sandboxArgs)); - }catch(Throwable t) { - } - } - currentIFrame.setCredentialless(true); - currentIFrame.setLoading("lazy"); - boolean cspWarn = false; - if(options.contentMode == EnumWebViewContentMode.BLOB_BASED) { - if(enableCSP && cspSupport) { - if(currentIFrame.checkCSPSupported()) { - StringBuilder csp = new StringBuilder(); - csp.append("default-src 'none';"); - String protos = options.strictCSPEnable ? "" : (PlatformRuntime.requireSSL() ? " https:" : " http: https:"); - if(options.scriptEnabled) { - csp.append(" script-src 'unsafe-eval' 'unsafe-inline' data: blob:").append(protos).append(';'); - csp.append(" style-src 'unsafe-eval' 'unsafe-inline' data: blob:").append(protos).append(';'); - csp.append(" img-src data: blob:").append(protos).append(';'); - csp.append(" font-src data: blob:").append(protos).append(';'); - csp.append(" child-src data: blob:").append(protos).append(';'); - csp.append(" frame-src data: blob:;"); - csp.append(" media-src data: mediastream: blob:").append(protos).append(';'); - csp.append(" connect-src data: blob:").append(protos).append(';'); - csp.append(" worker-src data: blob:").append(protos).append(';'); - }else { - csp.append(" style-src data: 'unsafe-inline'").append(protos).append(';'); - csp.append(" img-src data:").append(protos).append(';'); - csp.append(" font-src data:").append(protos).append(';'); - csp.append(" media-src data:").append(protos).append(';'); - } - currentIFrame.setCSP(csp.toString()); - }else { - logger.warn("This browser does not support CSP attribute on iframes! (try Chrome)"); - cspWarn = true; - } - }else { - cspWarn = true; - } - if(cspWarn && options.strictCSPEnable) { - logger.warn("Strict CSP was requested for this webview, but that feature is not available!"); - } - }else { - cspWarn = true; - } - CSSStyleDeclaration decl = currentIFrame.getStyle(); - decl.setProperty("border", "none"); - decl.setProperty("background-color", "white"); - decl.setProperty("width", "100%"); - decl.setProperty("height", "100%"); - currentIFrame.getClassList().add("_eaglercraftX_webview_iframe_element"); - currentIFrameContainer.appendChild(currentIFrame); - if(options.contentMode == EnumWebViewContentMode.BLOB_BASED) { - currentIFrame.setSourceDocument(new String(options.blob, StandardCharsets.UTF_8)); - }else { - currentIFrame.setSourceAddress(options.url.toString()); - } - final int resetSer = webviewResetSerial; - final AdvancedHTMLIFrameElement curIFrame = currentIFrame; - final boolean[] focusTracker = new boolean[1]; - currentIFrame.addEventListener("mouseover", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(resetSer == webviewResetSerial && curIFrame == currentIFrame) { - if(!focusTracker[0]) { - focusTracker[0] = true; - currentIFrame.getContentWindow().focus(); - } - } - } - }); - currentIFrame.addEventListener("mouseout", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(resetSer == webviewResetSerial && curIFrame == currentIFrame) { - if(focusTracker[0]) { - focusTracker[0] = false; - win.focus(); - } - } - } - }); - if(options.scriptEnabled && options.serverMessageAPIEnabled) { - currentMessageHandler = new Consumer() { - @Override - public void accept(MessageEvent evt) { - synchronized(messageQueue) { - if(resetSer == webviewResetSerial && curIFrame == currentIFrame) { - messageQueue.add(() -> { - if(resetSer == webviewResetSerial && curIFrame == currentIFrame) { - handleMessageRawFromFrame(evt.getData()); - }else { - logger.warn("Recieved message from on dead IFrame handler: (#" + resetSer + ") " + curIFrame.getSourceAddress()); - } - }); - }else { - logger.warn("Recieved message from on dead IFrame handler: (#" + resetSer + ") " + curIFrame.getSourceAddress()); - } - } - } - }; - } - logger.info("WebView is loading: \"{}\"", options.contentMode == EnumWebViewContentMode.BLOB_BASED ? "about:srcdoc" : currentIFrame.getSourceAddress()); - logger.info("JavaScript: {}, Strict CSP: {}, Message API: {}", options.scriptEnabled, - options.strictCSPEnable && !cspWarn, options.serverMessageAPIEnabled); - } - - private static void beginShowingEnableJSSetup() { - if(currentAllowJavaScript != null) { - ++webviewResetSerial; - currentAllowJavaScript.delete(); - currentAllowJavaScript = null; - } - currentAllowJavaScript = win.getDocument().createElement("div"); - CSSStyleDeclaration decl = currentAllowJavaScript.getStyle(); - decl.setProperty("background-color", "white"); - decl.setProperty("width", "100%"); - decl.setProperty("height", "100%"); - currentAllowJavaScript.getClassList().add("_eaglercraftX_webview_permission_screen"); - currentIFrameContainer.appendChild(currentAllowJavaScript); - } - - private static void beginShowingEnableJavaScript(final WebViewOptions options) { - beginShowingEnableJSSetup(); - String strictCSPMarkup; - if(options.contentMode != EnumWebViewContentMode.BLOB_BASED) { - strictCSPMarkup = "Impossible"; - }else if(!cspSupport || !enableCSP) { - strictCSPMarkup = "Unsupported"; - }else if(options.strictCSPEnable) { - strictCSPMarkup = "Enabled"; - }else { - strictCSPMarkup = "Disabled"; - } - String messageAPIMarkup; - if(options.serverMessageAPIEnabled) { - messageAPIMarkup = "Enabled"; - }else { - messageAPIMarkup = "Disabled"; - } - currentAllowJavaScript.setInnerHTML( - "
" - + "

 Allow JavaScript

" - + "

" - + "

Strict CSP: " + strictCSPMarkup + " | " - + "Message API: " + messageAPIMarkup + "

" - + "

Remember my choice

" - + "

 " - + "

"); - final int serial = webviewResetSerial; - if(options.contentMode != EnumWebViewContentMode.BLOB_BASED) { - String urlStr = options.url.toString(); - currentAllowJavaScript.querySelector("._eaglercraftX_permission_target_url").setInnerText(urlStr.length() > 255 ? (urlStr.substring(0, 253) + "...") : urlStr); - } - currentAllowJavaScript.querySelector("._eaglercraftX_allow_javascript").addEventListener("click", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(webviewResetSerial == serial && currentAllowJavaScript != null) { - HTMLInputElement chkbox = (HTMLInputElement)currentAllowJavaScript.querySelector("._eaglercraftX_remember_javascript"); - if(chkbox != null && chkbox.isChecked()) { - PermissionsCache.setJavaScriptAllowed(options.permissionsOriginUUID, hashPermissionFlags(options), true); - } - currentAllowJavaScript.delete(); - currentAllowJavaScript = null; - ++webviewResetSerial; - beginShowingDirect(options); - } - } - }); - currentAllowJavaScript.querySelector("._eaglercraftX_block_javascript").addEventListener("click", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(webviewResetSerial == serial && currentAllowJavaScript != null) { - HTMLInputElement chkbox = (HTMLInputElement)currentAllowJavaScript.querySelector("._eaglercraftX_remember_javascript"); - if(chkbox != null && chkbox.isChecked()) { - PermissionsCache.setJavaScriptAllowed(options.permissionsOriginUUID, hashPermissionFlags(options), false); - } - beginShowingContentBlocked(options); - } - } - }); - } - - private static void beginShowingContentBlocked(final WebViewOptions options) { - beginShowingEnableJSSetup(); - currentAllowJavaScript.setInnerHTML( - "

" - + " Content Blocked

" - + "

You chose to block JavaScript execution for this embed

" - + "

"); - final int serial = webviewResetSerial; - currentAllowJavaScript.querySelector("._eaglercraftX_re_evaluate_javascript").addEventListener("click", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(webviewResetSerial == serial && currentAllowJavaScript != null) { - PermissionsCache.clearJavaScriptAllowed(options.permissionsOriginUUID); - beginShowingEnableJavaScript(options); - } - } - }); - } - - private static void beginShowingSafetyError() { - beginShowingEnableJSSetup(); - currentAllowJavaScript.setInnerHTML( - "

" - + " IFrame Safety Error

" - + "

The content cannot be displayed safely!

" - + "

Check console for more details

"); - } - - private static String getURLOrigin(URI urlObject) { - String str = " " + urlObject.getScheme() + "://" + urlObject.getRawAuthority(); - if(str.startsWith(" http:")) { - str = str + " https" + str.substring(5); - } - return str; - } - - public static void resize(int x, int y, int w, int h) { - if(currentIFrameContainer != null) { - CSSStyleDeclaration decl = currentIFrameContainer.getStyle(); - float s = PlatformInput.getDPI(); - decl.setProperty("top", "" + (y / s) + "px"); - decl.setProperty("left", "" + (x / s) + "px"); - decl.setProperty("width", "" + ((w / s) - 10) + "px"); - decl.setProperty("height", "" + ((h / s) - 10) + "px"); - } - } - - public static void endShowing() { - ++webviewResetSerial; - if(currentIFrame != null) { - currentIFrame.delete(); - currentIFrame = null; - } - synchronized(messageQueue) { - messageQueue.clear(); - } - currentMessageHandler = null; - if(currentAllowJavaScript != null) { - currentAllowJavaScript.delete(); - currentAllowJavaScript = null; - } - currentIFrameContainer.delete(); - currentIFrameContainer = null; - if(currentMessageChannelName != null) { - sendMessageEnToServer(false, currentMessageChannelName); - currentMessageChannelName = null; - } - win.focus(); - currentOptions = null; - } - - public static boolean fallbackSupported() { - return false; - } - - public static void launchFallback(WebViewOptions options) { - - } - - public static boolean fallbackRunning() { - return false; - } - - public static String getFallbackURL() { - return null; - } - - public static void endFallbackServer() { - - } - @JSBody(params = { "evt", "iframe" }, script = "return evt.source === iframe.contentWindow;") private static native boolean sourceEquals(MessageEvent evt, AdvancedHTMLIFrameElement iframe); - static void onWindowMessageRecieved(MessageEvent evt) { - if(currentIFrame != null && currentMessageHandler != null && sourceEquals(evt, currentIFrame)) { - currentMessageHandler.accept(evt); - } - } - - public static void setPacketSendCallback(IPacketSendCallback callback) { - packetSendCallback = callback; - } - - public static void runTick() { - if(currentIFrame == null) { - return; - } - List lst = null; - synchronized(messageQueue) { - if(messageQueue.isEmpty()) { - return; + public static boolean supported() { + if (!supportKnown) { + IClientConfigAdapter cfg = PlatformRuntime.getClientConfigAdapter(); + supportForce = cfg.isForceWebViewSupport(); + enableCSP = cfg.isEnableWebViewCSP(); + if (supportForce) { + supported = true; + cspSupport = true; + } else { + supported = false; + cspSupport = false; + try { + AdvancedHTMLIFrameElement tmp = (AdvancedHTMLIFrameElement) win.getDocument() + .createElement("iframe"); + supported = tmp != null && tmp.checkSafetyFeaturesSupported(); + cspSupport = enableCSP && supported && tmp.checkCSPSupported(); + } catch (Throwable ex) { + logger.error("Error checking iframe support"); + logger.error(ex); + } } - lst = new ArrayList<>(messageQueue); - messageQueue.clear(); - } - for(int i = 0, l = lst.size(); i < l; ++i) { - try { - lst.get(i).run(); - }catch(Throwable t) { - logger.error("Caught exception processing webview message!"); - logger.error(t); + if (!supported) { + logger.error( + "This browser does not meet the safety requirements for webview support, this feature will be disabled"); + } else if (!cspSupport && enableCSP) { + logger.warn("This browser does not support CSP attribute on iframes! (try Chrome)"); } + supportKnown = true; } - } - - @JSBody(params = { "channel", "contents" }, script = "return {ver:1,channel:channel,type:\"string\",data:contents};") - private static native JSObject createStringMessage(String channel, String contents); - - @JSBody(params = { "channel", "contents" }, script = "return {ver:1,channel:channel,type:\"binary\",data:contents};") - private static native JSObject createBinaryMessage(String channel, ArrayBuffer contents); - - public static void handleMessageFromServer(SPacketWebViewMessageV4EAG packet) { - Window w; - if(currentMessageChannelName != null && currentIFrame != null && (w = currentIFrame.getContentWindow()) != null) { - JSObject obj = null; - if(packet.type == SPacketWebViewMessageV4EAG.TYPE_STRING) { - obj = createStringMessage(currentMessageChannelName, new String(packet.data, StandardCharsets.UTF_8)); - }else if(packet.type == SPacketWebViewMessageV4EAG.TYPE_BINARY) { - obj = createBinaryMessage(currentMessageChannelName, TeaVMUtils.unwrapArrayBuffer(packet.data)); - } - if(obj != null) { - w.postMessage(obj, "*"); - } - }else { - logger.error("Server tried to send the WebView a message, but the message channel is not open!"); - } - } - - @JSBody(params = { "obj" }, script = "return (typeof obj === \"object\") && (obj.ver === 1) && ((typeof obj.channel === \"string\") && obj.channel.length > 0);") - private static native boolean checkRawMessageValid(JSObject obj); - - @JSBody(params = { "obj" }, script = "return (typeof obj.open === \"boolean\");") - private static native boolean checkRawMessageValidEn(JSObject obj); - - @JSBody(params = { "obj" }, script = "return (typeof obj.data === \"string\");") - private static native boolean checkRawMessageValidDataStr(JSObject obj); - - @JSBody(params = { "obj" }, script = "return (obj.data instanceof ArrayBuffer);") - private static native boolean checkRawMessageValidDataBin(JSObject obj); - - private static interface WebViewMessage extends JSObject { - - @JSProperty - String getType(); - - @JSProperty - String getChannel(); - - @JSProperty("data") - String getDataAsString(); - - @JSProperty("data") - ArrayBuffer getDataAsArrayBuffer(); - - @JSProperty - boolean getOpen(); - - } - - private static void handleMessageRawFromFrame(JSObject obj) { - if(checkRawMessageValid(obj)) { - if(checkRawMessageValidEn(obj)) { - WebViewMessage msg = (WebViewMessage)obj; - sendMessageEnToServer(msg.getOpen(), msg.getChannel()); - return; - }else if(checkRawMessageValidDataStr(obj)) { - WebViewMessage msg = (WebViewMessage)obj; - sendMessageToServer(msg.getChannel(), CPacketWebViewMessageV4EAG.TYPE_STRING, msg.getDataAsString().getBytes(StandardCharsets.UTF_8)); - return; - }else if(checkRawMessageValidDataBin(obj)) { - WebViewMessage msg = (WebViewMessage)obj; - sendMessageToServer(msg.getChannel(), CPacketWebViewMessageV4EAG.TYPE_BINARY, TeaVMUtils.wrapByteArrayBuffer(msg.getDataAsArrayBuffer())); - return; - } - } - logger.warn("WebView sent an invalid message!"); - } - - private static void sendMessageToServer(String channelName, int type, byte[] data) { - if(channelName.length() > 255) { - logger.error("WebView tried to send a message packet, but channel name is too long, max is 255 characters!"); - return; - } - if(!channelName.equals(currentMessageChannelName)) { - logger.error("WebView tried to send a message packet, but the channel is not open!"); - return; - } - if(packetSendCallback != null) { - if(!packetSendCallback.sendPacket(new CPacketWebViewMessageV4EAG(type, data))) { - logger.error("WebView tried to send a packet to the server, but the server does not support this protocol!"); - } - }else { - logger.error("WebView tried to send a message, but no callback for sending packets is set!"); - } - } - - private static void sendMessageEnToServer(boolean messageChannelOpen, String channelName) { - if(channelName.length() > 255) { - logger.error("WebView tried to {} a channel, but channel name is too long, max is 255 characters!", messageChannelOpen ? "open" : "close"); - return; - } - if(messageChannelOpen && currentMessageChannelName != null) { - logger.error("WebView tried to open channel, but a channel is already open!"); - sendMessageEnToServer(false, currentMessageChannelName); - } - if(!messageChannelOpen && currentMessageChannelName != null && !currentMessageChannelName.equals(channelName)) { - logger.error("WebView tried to close the wrong channel!"); - } - if(!messageChannelOpen && currentMessageChannelName == null) { - logger.error("WebView tried to close channel, but the channel is not open!"); - return; - } - if(packetSendCallback != null) { - if(!packetSendCallback.sendPacket(new CPacketWebViewMessageEnV4EAG(messageChannelOpen, messageChannelOpen ? channelName : null))) { - logger.error("WebView tried to send a packet to the server, but the server does not support this protocol!"); - return; - } - if(messageChannelOpen) { - logger.info("WebView opened message channel to server: \"{}\"", channelName); - currentMessageChannelName = channelName; - }else { - logger.info("WebView closed message channel to server: \"{}\"", currentMessageChannelName); - currentMessageChannelName = null; - } - }else { - logger.error("WebView tried to send a message, but no callback for sending packets is set!"); - } + return supported; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java index 755046af..991346aa 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayBufferAllocator.java @@ -8,30 +8,185 @@ import org.teavm.jso.typedarrays.Uint16Array; import org.teavm.jso.typedarrays.Uint8Array; /** - * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerArrayBufferAllocator { - + public static class WrongBufferClassType extends RuntimeException { public WrongBufferClassType(String msg) { super(msg); } } + private static final ByteBuffer ZERO_LENGTH_BYTE_BUFFER = new EaglerArrayByteBuffer(Int8Array.create(0)); + + private static final IntBuffer ZERO_LENGTH_INT_BUFFER = new EaglerArrayIntBuffer(Int32Array.create(0)); + + private static final FloatBuffer ZERO_LENGTH_FLOAT_BUFFER = new EaglerArrayFloatBuffer(Float32Array.create(0)); + public static ByteBuffer allocateByteBuffer(int size) { - return new EaglerArrayByteBuffer(Int8Array.create(size)); + if (size != 0) { + return new EaglerArrayByteBuffer(Int8Array.create(size)); + } else { + return ZERO_LENGTH_BYTE_BUFFER; + } + } + + public static FloatBuffer allocateFloatBuffer(int size) { + if (size != 0) { + return new EaglerArrayFloatBuffer(Float32Array.create(size)); + } else { + return ZERO_LENGTH_FLOAT_BUFFER; + } + } + + public static IntBuffer allocateIntBuffer(int size) { + if (size != 0) { + return new EaglerArrayIntBuffer(Int32Array.create(size)); + } else { + return ZERO_LENGTH_INT_BUFFER; + } + } + + public static DataView getDataView(ByteBuffer buffer) { + if (buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer) buffer; + DataView d = b.dataView; + int p = b.position; + int l = b.limit; + if (p == 0 && l == b.capacity) { + return d; + } else { + return DataView.create(d.getBuffer(), d.getByteOffset() + p, l - p); + } + } else { + throw notEagler(buffer); + } + } + + public static Uint16Array getDataView16Unsigned(ByteBuffer buffer) { + if (buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer) buffer; + Int8Array d = b.typedArray; + int p = b.position; + return Uint16Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 1); + } else { + throw notEagler(buffer); + } + } + + public static Int32Array getDataView32(IntBuffer buffer) { + if (buffer instanceof EaglerArrayIntBuffer) { + EaglerArrayIntBuffer b = (EaglerArrayIntBuffer) buffer; + Int32Array d = b.typedArray; + int p = b.position; + int l = b.limit; + if (p == 0 && l == b.capacity) { + return d; + } else { + return Int32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); + } + } else { + throw notEagler(buffer); + } + } + + public static Float32Array getDataView32F(ByteBuffer buffer) { + if (buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer) buffer; + Int8Array d = b.typedArray; + int p = b.position; + return Float32Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 2); + } else { + throw notEagler(buffer); + } + } + + public static Float32Array getDataView32F(FloatBuffer buffer) { + if (buffer instanceof EaglerArrayFloatBuffer) { + EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer) buffer; + Float32Array d = b.typedArray; + int p = b.position; + int l = b.limit; + if (p == 0 && l == b.capacity) { + return d; + } else { + return Float32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); + } + } else { + throw notEagler(buffer); + } + } + + public static Int8Array getDataView8(ByteBuffer buffer) { + if (buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer) buffer; + Int8Array d = b.typedArray; + int p = b.position; + int l = b.limit; + if (p == 0 && l == b.capacity) { + return d; + } else { + int i = d.getByteOffset(); + return Int8Array.create(d.getBuffer(), d.getByteOffset() + p, l - p); + } + } else { + throw notEagler(buffer); + } + } + + public static Uint8Array getDataView8Unsigned(ByteBuffer buffer) { + if (buffer instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer b = (EaglerArrayByteBuffer) buffer; + Int8Array d = b.typedArray; + int p = b.position; + int i = d.getByteOffset(); + return Uint8Array.create(d.getBuffer(), i + p, b.limit - p); + } else { + throw notEagler(buffer); + } + } + + public static Uint8Array getDataView8Unsigned(FloatBuffer buffer) { + if (buffer instanceof EaglerArrayFloatBuffer) { + EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer) buffer; + Float32Array d = b.typedArray; + int p = b.position; + int l = b.limit; + return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); + } else { + throw notEagler(buffer); + } + } + + public static Uint8Array getDataView8Unsigned(IntBuffer buffer) { + if (buffer instanceof EaglerArrayIntBuffer) { + EaglerArrayIntBuffer b = (EaglerArrayIntBuffer) buffer; + Int32Array d = b.typedArray; + int p = b.position; + int l = b.limit; + return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); + } else { + throw notEagler(buffer); + } + } + + private static WrongBufferClassType notEagler(Object clazz) { + return new WrongBufferClassType( + "Tried to pass a " + clazz.getClass().getSimpleName() + " which is not a native eagler buffer"); } public static ByteBuffer wrapByteBufferTeaVM(DataView dv) { @@ -42,147 +197,12 @@ public class EaglerArrayBufferAllocator { return new EaglerArrayByteBuffer(typedArray); } - public static IntBuffer allocateIntBuffer(int size) { - return new EaglerArrayIntBuffer(Int32Array.create(size)); + public static FloatBuffer wrapFloatBufferTeaVM(Float32Array typedArray) { + return new EaglerArrayFloatBuffer(typedArray); } public static IntBuffer wrapIntBufferTeaVM(Int32Array typedArray) { return new EaglerArrayIntBuffer(typedArray); } - public static FloatBuffer allocateFloatBuffer(int size) { - return new EaglerArrayFloatBuffer(Float32Array.create(size)); - } - - public static FloatBuffer wrapFloatBufferTeaVM(Float32Array typedArray) { - return new EaglerArrayFloatBuffer(typedArray); - } - - public static DataView getDataView(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - DataView d = b.dataView; - int p = b.position; - int l = b.limit; - if(p == 0 && l == b.capacity) { - return d; - }else { - return DataView.create(d.getBuffer(), d.getByteOffset() + p, l - p); - } - }else { - throw notEagler(buffer); - } - } - - public static Int8Array getDataView8(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - Int8Array d = b.typedArray; - int p = b.position; - int l = b.limit; - if(p == 0 && l == b.capacity) { - return d; - }else { - int i = d.getByteOffset(); - return Int8Array.create(d.getBuffer(), d.getByteOffset() + p, l - p); - } - }else { - throw notEagler(buffer); - } - } - - public static Uint8Array getDataView8Unsigned(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - Int8Array d = b.typedArray; - int p = b.position; - int i = d.getByteOffset(); - return Uint8Array.create(d.getBuffer(), i + p, b.limit - p); - }else { - throw notEagler(buffer); - } - } - - public static Uint16Array getDataView16Unsigned(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - Int8Array d = b.typedArray; - int p = b.position; - return Uint16Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 1); - }else { - throw notEagler(buffer); - } - } - - public static Float32Array getDataView32F(ByteBuffer buffer) { - if(buffer instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer b = (EaglerArrayByteBuffer)buffer; - Int8Array d = b.typedArray; - int p = b.position; - return Float32Array.create(d.getBuffer(), d.getByteOffset() + p, (b.limit - p) >> 2); - }else { - throw notEagler(buffer); - } - } - - public static Int32Array getDataView32(IntBuffer buffer) { - if(buffer instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; - Int32Array d = b.typedArray; - int p = b.position; - int l = b.limit; - if(p == 0 && l == b.capacity) { - return d; - }else { - return Int32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); - } - }else { - throw notEagler(buffer); - } - } - - public static Uint8Array getDataView8Unsigned(IntBuffer buffer) { - if(buffer instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer b = (EaglerArrayIntBuffer)buffer; - Int32Array d = b.typedArray; - int p = b.position; - int l = b.limit; - return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); - }else { - throw notEagler(buffer); - } - } - - public static Float32Array getDataView32F(FloatBuffer buffer) { - if(buffer instanceof EaglerArrayFloatBuffer) { - EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; - Float32Array d = b.typedArray; - int p = b.position; - int l = b.limit; - if(p == 0 && l == b.capacity) { - return d; - }else { - return Float32Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), l - p); - } - }else { - throw notEagler(buffer); - } - } - - public static Uint8Array getDataView8Unsigned(FloatBuffer buffer) { - if(buffer instanceof EaglerArrayFloatBuffer) { - EaglerArrayFloatBuffer b = (EaglerArrayFloatBuffer)buffer; - Float32Array d = b.typedArray; - int p = b.position; - int l = b.limit; - return Uint8Array.create(d.getBuffer(), d.getByteOffset() + (p << 2), (l - p) << 2); - }else { - throw notEagler(buffer); - } - } - - private static WrongBufferClassType notEagler(Object clazz) { - return new WrongBufferClassType("Tried to pass a " + clazz.getClass().getSimpleName() + " which is not a native eagler buffer"); - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java index 558d8fe4..6c57f84a 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java @@ -10,18 +10,19 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerArrayByteBuffer implements ByteBuffer { @@ -69,307 +70,32 @@ public class EaglerArrayByteBuffer implements ByteBuffer { this.mark = mark; } - @Override - public int capacity() { - return capacity; - } - - @Override - public int position() { - return position; - } - - @Override - public int limit() { - return limit; - } - - @Override - public int remaining() { - return limit - position; - } - - @Override - public boolean hasRemaining() { - return limit > position; - } - - @Override - public boolean hasArray() { - return false; - } - @Override public byte[] array() { throw new UnsupportedOperationException(); } @Override - public boolean isDirect() { - return true; - } - - @Override - public ByteBuffer duplicate() { - return new EaglerArrayByteBuffer(dataView, position, limit, mark); - } - - @Override - public byte get() { - if(position >= limit) throw Buffer.makeIOOBE(position); - return typedArray.get(position++); - } - - @Override - public ByteBuffer put(byte b) { - if(position >= limit) throw Buffer.makeIOOBE(position); - typedArray.set(position++, b); - return this; - } - - @Override - public byte get(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public ByteBuffer put(int index, byte b) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, b); - return this; - } - - @Override - public ByteBuffer get(byte[] dst, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, length), offset); - position += length; - return this; - } - - @Override - public ByteBuffer get(byte[] dst) { - if(position + dst.length > limit) throw Buffer.makeIOOBE(position + dst.length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, dst.length)); - position += dst.length; - return this; - } - - @Override - public ByteBuffer put(ByteBuffer src) { - if(src instanceof EaglerArrayByteBuffer) { - EaglerArrayByteBuffer c = (EaglerArrayByteBuffer)src; - int l = c.limit - c.position; - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - typedArray.set(Int8Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + c.position, l), position); - position += l; - c.position += l; - }else { - int l = src.remaining(); - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - for(int i = 0; i < l; ++i) { - dataView.setInt8(position + l, src.get()); - } - position += l; - } - return this; - } - - @Override - public ByteBuffer put(byte[] src, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - if(offset == 0 && length == src.length) { - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - }else { - typedArray.set(Int8Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset, length), position); - } - position += length; - return this; - } - - @Override - public ByteBuffer put(byte[] src) { - if(position + src.length > limit) throw Buffer.makeIOOBE(position + src.length - 1); - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - position += src.length; - return this; - } - - @Override - public char getChar() { - if(position + 2 > limit) throw Buffer.makeIOOBE(position); - char c = (char)dataView.getUint16(position, true); - position += 2; - return c; - } - - @Override - public ByteBuffer putChar(char value) { - if(position + 2 > limit) throw Buffer.makeIOOBE(position); - dataView.setUint16(position, (short)value, true); - position += 2; - return this; - } - - @Override - public char getChar(int index) { - if(index < 0 || index + 2 > limit) throw Buffer.makeIOOBE(index); - return (char)dataView.getUint16(index, true); - } - - @Override - public ByteBuffer putChar(int index, char value) { - if(index < 0 || index + 2 > limit) throw Buffer.makeIOOBE(index); - dataView.setUint16(index, value, true); - return this; - } - - @Override - public short getShort() { - if(position + 2 > limit) throw Buffer.makeIOOBE(position); - short s = dataView.getInt16(position, true); - position += 2; - return s; - } - - @Override - public ByteBuffer putShort(short value) { - if(position + 2 > limit) throw Buffer.makeIOOBE(position); - dataView.setInt16(position, value, true); - position += 2; - return this; - } - - @Override - public short getShort(int index) { - if(index < 0 || index + 2 > limit) throw Buffer.makeIOOBE(index); - return dataView.getInt16(index, true); - } - - @Override - public ByteBuffer putShort(int index, short value) { - if(index < 0 || index + 2 > limit) throw Buffer.makeIOOBE(index); - dataView.setInt16(index, value, true); - return this; - } - - @Override - public ShortBuffer asShortBuffer() { - return new EaglerArrayShortBuffer(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 1)); - } - - @Override - public int getInt() { - if(position + 4 > limit) throw Buffer.makeIOOBE(position); - int i = dataView.getInt32(position, true); - position += 4; - return i; - } - - @Override - public ByteBuffer putInt(int value) { - if(position + 4 > limit) throw Buffer.makeIOOBE(position); - dataView.setInt32(position, value, true); - position += 4; - return this; - } - - @Override - public int getInt(int index) { - if(index < 0 || index + 4 > limit) throw Buffer.makeIOOBE(index); - return dataView.getInt32(index, true); - } - - @Override - public ByteBuffer putInt(int index, int value) { - if(index < 0 || index + 4 > limit) throw Buffer.makeIOOBE(index); - dataView.setInt32(index, value, true); - return this; + public FloatBuffer asFloatBuffer() { + return new EaglerArrayFloatBuffer( + Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); } @Override public IntBuffer asIntBuffer() { - return new EaglerArrayIntBuffer(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); + return new EaglerArrayIntBuffer( + Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); } @Override - public long getLong() { - if(position + 8 > limit) throw Buffer.makeIOOBE(position); - long l = (long)dataView.getUint32(position, true) | ((long) dataView.getUint32(position + 4) << 32l); - position += 8; - return l; + public ShortBuffer asShortBuffer() { + return new EaglerArrayShortBuffer( + Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 1)); } @Override - public ByteBuffer putLong(long value) { - if(position + 8 > limit) throw Buffer.makeIOOBE(position); - dataView.setUint32(position, (int) (value & 0xFFFFFFFFl), true); - dataView.setUint32(position + 4, (int) (value >>> 32l), true); - position += 8; - return this; - } - - @Override - public long getLong(int index) { - if(index < 0 || index + 8 > limit) throw Buffer.makeIOOBE(index); - return (long)dataView.getUint32(index, true) | ((long) dataView.getUint32(index + 4) << 32l); - } - - @Override - public ByteBuffer putLong(int index, long value) { - if(index < 0 || index + 8 > limit) throw Buffer.makeIOOBE(index); - dataView.setUint32(index, (int) (value & 0xFFFFFFFFl), true); - dataView.setUint32(index + 4, (int) (value >>> 32l), true); - return this; - } - - @Override - public float getFloat() { - if(position + 4 > limit) throw Buffer.makeIOOBE(position); - float f = dataView.getFloat32(position, true); - position += 4; - return f; - } - - @Override - public ByteBuffer putFloat(float value) { - if(position + 4 > limit) throw Buffer.makeIOOBE(position); - dataView.setFloat32(position, value, true); - position += 4; - return this; - } - - @Override - public float getFloat(int index) { - if(index < 0 || index + 4 > limit) throw Buffer.makeIOOBE(index); - return dataView.getFloat32(index, true); - } - - @Override - public ByteBuffer putFloat(int index, float value) { - if(index < 0 || index + 4 > limit) throw Buffer.makeIOOBE(index); - dataView.setFloat32(index, value, true); - return this; - } - - @Override - public FloatBuffer asFloatBuffer() { - return new EaglerArrayFloatBuffer(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset(), typedArray.getLength() >> 2)); - } - - @Override - public ByteBuffer mark() { - mark = position; - return this; - } - - @Override - public ByteBuffer reset() { - int m = mark; - if(m < 0) throw new IndexOutOfBoundsException("Invalid mark: " + m); - position = m; - return this; + public int capacity() { + return capacity; } @Override @@ -380,6 +106,11 @@ public class EaglerArrayByteBuffer implements ByteBuffer { return this; } + @Override + public ByteBuffer duplicate() { + return new EaglerArrayByteBuffer(dataView, position, limit, mark); + } + @Override public ByteBuffer flip() { limit = position; @@ -388,24 +119,333 @@ public class EaglerArrayByteBuffer implements ByteBuffer { return this; } + @Override + public byte get() { + if (position >= limit) + throw Buffer.makeIOOBE(position); + return typedArray.get(position++); + } + + @Override + public ByteBuffer get(byte[] dst) { + if (position + dst.length > limit) + throw Buffer.makeIOOBE(position + dst.length - 1); + TeaVMUtils.unwrapArrayBufferView(dst) + .set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, dst.length)); + position += dst.length; + return this; + } + + @Override + public ByteBuffer get(byte[] dst, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + TeaVMUtils.unwrapArrayBufferView(dst) + .set(Int8Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + position, length), offset); + position += length; + return this; + } + + @Override + public byte get(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public char getChar() { + if (position + 2 > limit) + throw Buffer.makeIOOBE(position); + char c = (char) dataView.getUint16(position, true); + position += 2; + return c; + } + + @Override + public char getChar(int index) { + if (index < 0 || index + 2 > limit) + throw Buffer.makeIOOBE(index); + return (char) dataView.getUint16(index, true); + } + + @Override + public float getFloat() { + if (position + 4 > limit) + throw Buffer.makeIOOBE(position); + float f = dataView.getFloat32(position, true); + position += 4; + return f; + } + + @Override + public float getFloat(int index) { + if (index < 0 || index + 4 > limit) + throw Buffer.makeIOOBE(index); + return dataView.getFloat32(index, true); + } + + @Override + public int getInt() { + if (position + 4 > limit) + throw Buffer.makeIOOBE(position); + int i = dataView.getInt32(position, true); + position += 4; + return i; + } + + @Override + public int getInt(int index) { + if (index < 0 || index + 4 > limit) + throw Buffer.makeIOOBE(index); + return dataView.getInt32(index, true); + } + + @Override + public long getLong() { + if (position + 8 > limit) + throw Buffer.makeIOOBE(position); + long l = (long) dataView.getUint32(position, true) | ((long) dataView.getUint32(position + 4) << 32l); + position += 8; + return l; + } + + @Override + public long getLong(int index) { + if (index < 0 || index + 8 > limit) + throw Buffer.makeIOOBE(index); + return (long) dataView.getUint32(index, true) | ((long) dataView.getUint32(index + 4) << 32l); + } + + @Override + public short getShort() { + if (position + 2 > limit) + throw Buffer.makeIOOBE(position); + short s = dataView.getInt16(position, true); + position += 2; + return s; + } + + @Override + public short getShort(int index) { + if (index < 0 || index + 2 > limit) + throw Buffer.makeIOOBE(index); + return dataView.getInt16(index, true); + } + + @Override + public boolean hasArray() { + return false; + } + + @Override + public boolean hasRemaining() { + return limit > position; + } + + @Override + public boolean isDirect() { + return true; + } + + @Override + public int limit() { + return limit; + } + + @Override + public ByteBuffer limit(int newLimit) { + if (newLimit < 0 || newLimit > capacity) + throw Buffer.makeIOOBE(newLimit); + limit = newLimit; + return this; + } + + @Override + public ByteBuffer mark() { + mark = position; + return this; + } + + @Override + public int position() { + return position; + } + + @Override + public ByteBuffer position(int newPosition) { + if (newPosition < 0 || newPosition > limit) + throw Buffer.makeIOOBE(newPosition); + position = newPosition; + return this; + } + + @Override + public ByteBuffer put(byte b) { + if (position >= limit) + throw Buffer.makeIOOBE(position); + typedArray.set(position++, b); + return this; + } + + @Override + public ByteBuffer put(byte[] src) { + if (position + src.length > limit) + throw Buffer.makeIOOBE(position + src.length - 1); + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + position += src.length; + return this; + } + + @Override + public ByteBuffer put(byte[] src, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + if (offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + } else { + typedArray.set(Int8Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset, length), position); + } + position += length; + return this; + } + + @Override + public ByteBuffer put(ByteBuffer src) { + if (src instanceof EaglerArrayByteBuffer) { + EaglerArrayByteBuffer c = (EaglerArrayByteBuffer) src; + int l = c.limit - c.position; + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + typedArray.set(Int8Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + c.position, l), + position); + position += l; + c.position += l; + } else { + int l = src.remaining(); + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + for (int i = 0; i < l; ++i) { + dataView.setInt8(position + i, src.get()); + } + position += l; + } + return this; + } + + @Override + public ByteBuffer put(int index, byte b) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, b); + return this; + } + + @Override + public ByteBuffer putChar(char value) { + if (position + 2 > limit) + throw Buffer.makeIOOBE(position); + dataView.setUint16(position, (short) value, true); + position += 2; + return this; + } + + @Override + public ByteBuffer putChar(int index, char value) { + if (index < 0 || index + 2 > limit) + throw Buffer.makeIOOBE(index); + dataView.setUint16(index, value, true); + return this; + } + + @Override + public ByteBuffer putFloat(float value) { + if (position + 4 > limit) + throw Buffer.makeIOOBE(position); + dataView.setFloat32(position, value, true); + position += 4; + return this; + } + + @Override + public ByteBuffer putFloat(int index, float value) { + if (index < 0 || index + 4 > limit) + throw Buffer.makeIOOBE(index); + dataView.setFloat32(index, value, true); + return this; + } + + @Override + public ByteBuffer putInt(int value) { + if (position + 4 > limit) + throw Buffer.makeIOOBE(position); + dataView.setInt32(position, value, true); + position += 4; + return this; + } + + @Override + public ByteBuffer putInt(int index, int value) { + if (index < 0 || index + 4 > limit) + throw Buffer.makeIOOBE(index); + dataView.setInt32(index, value, true); + return this; + } + + @Override + public ByteBuffer putLong(int index, long value) { + if (index < 0 || index + 8 > limit) + throw Buffer.makeIOOBE(index); + dataView.setUint32(index, (int) (value & 0xFFFFFFFFl), true); + dataView.setUint32(index + 4, (int) (value >>> 32l), true); + return this; + } + + @Override + public ByteBuffer putLong(long value) { + if (position + 8 > limit) + throw Buffer.makeIOOBE(position); + dataView.setUint32(position, (int) (value & 0xFFFFFFFFl), true); + dataView.setUint32(position + 4, (int) (value >>> 32l), true); + position += 8; + return this; + } + + @Override + public ByteBuffer putShort(int index, short value) { + if (index < 0 || index + 2 > limit) + throw Buffer.makeIOOBE(index); + dataView.setInt16(index, value, true); + return this; + } + + @Override + public ByteBuffer putShort(short value) { + if (position + 2 > limit) + throw Buffer.makeIOOBE(position); + dataView.setInt16(position, value, true); + position += 2; + return this; + } + + @Override + public int remaining() { + return limit - position; + } + + @Override + public ByteBuffer reset() { + int m = mark; + if (m < 0) + throw new IndexOutOfBoundsException("Invalid mark: " + m); + position = m; + return this; + } + @Override public ByteBuffer rewind() { position = 0; mark = -1; return this; } - - @Override - public ByteBuffer limit(int newLimit) { - if(newLimit < 0 || newLimit > capacity) throw Buffer.makeIOOBE(newLimit); - limit = newLimit; - return this; - } - - @Override - public ByteBuffer position(int newPosition) { - if(newPosition < 0 || newPosition > limit) throw Buffer.makeIOOBE(newPosition); - position = newPosition; - return this; - } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java index 396676a0..f8957571 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayFloatBuffer.java @@ -6,29 +6,30 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerArrayFloatBuffer implements FloatBuffer { - final Float32Array typedArray; + private static final int SHIFT = 2; + final Float32Array typedArray; final int capacity; int position; int limit; - int mark; - private static final int SHIFT = 2; + int mark; EaglerArrayFloatBuffer(Float32Array typedArray) { this.typedArray = typedArray; @@ -46,157 +47,14 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { this.mark = mark; } - @Override - public int capacity() { - return capacity; - } - - @Override - public int position() { - return position; - } - - @Override - public int limit() { - return limit; - } - - @Override - public int remaining() { - return limit - position; - } - - @Override - public boolean hasRemaining() { - return position < limit; - } - - @Override - public boolean hasArray() { - return false; - } - @Override public float[] array() { throw new UnsupportedOperationException(); } @Override - public FloatBuffer duplicate() { - return new EaglerArrayFloatBuffer(typedArray, position, limit, mark); - } - - @Override - public float get() { - if(position >= limit) throw Buffer.makeIOOBE(position); - return typedArray.get(position++); - } - - @Override - public FloatBuffer put(float b) { - if(position >= limit) throw Buffer.makeIOOBE(position); - typedArray.set(position++, b); - return this; - } - - @Override - public float get(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public FloatBuffer put(int index, float b) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, b); - return this; - } - - @Override - public float getElement(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public void putElement(int index, float value) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, value); - } - - @Override - public FloatBuffer get(float[] dst, int offset, int length) { - if(position + length > limit) Buffer.makeIOOBE(position + length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); - position += length; - return this; - } - - @Override - public FloatBuffer get(float[] dst) { - if(position + dst.length > limit) Buffer.makeIOOBE(position + dst.length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); - position += dst.length; - return this; - } - - @Override - public FloatBuffer put(FloatBuffer src) { - if(src instanceof EaglerArrayFloatBuffer) { - EaglerArrayFloatBuffer c = (EaglerArrayFloatBuffer)src; - int l = c.limit - c.position; - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - typedArray.set(Float32Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); - position += l; - c.position += l; - }else { - int l = src.remaining(); - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - for(int i = 0; i < l; ++i) { - typedArray.set(position + l, src.get()); - } - position += l; - } - return this; - } - - @Override - public FloatBuffer put(float[] src, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - if(offset == 0 && length == src.length) { - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - }else { - typedArray.set(Float32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); - } - position += length; - return this; - } - - @Override - public FloatBuffer put(float[] src) { - if(position + src.length > limit) throw Buffer.makeIOOBE(position + src.length - 1); - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - position += src.length; - return this; - } - - @Override - public boolean isDirect() { - return true; - } - - @Override - public FloatBuffer mark() { - mark = position; - return this; - } - - @Override - public FloatBuffer reset() { - int m = mark; - if(m < 0) throw new IndexOutOfBoundsException("Invalid mark: " + m); - position = m; - return this; + public int capacity() { + return capacity; } @Override @@ -207,6 +65,11 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { return this; } + @Override + public FloatBuffer duplicate() { + return new EaglerArrayFloatBuffer(typedArray, position, limit, mark); + } + @Override public FloatBuffer flip() { limit = position; @@ -215,6 +78,177 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { return this; } + @Override + public float get() { + if (position >= limit) + throw Buffer.makeIOOBE(position); + return typedArray.get(position++); + } + + @Override + public FloatBuffer get(float[] dst) { + if (position + dst.length > limit) + Buffer.makeIOOBE(position + dst.length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set(Float32Array.create(typedArray.getBuffer(), + typedArray.getByteOffset() + (position << SHIFT), dst.length)); + position += dst.length; + return this; + } + + @Override + public FloatBuffer get(float[] dst, int offset, int length) { + if (position + length > limit) + Buffer.makeIOOBE(position + length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set( + Float32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), + offset); + position += length; + return this; + } + + @Override + public float get(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public float getElement(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public boolean hasArray() { + return false; + } + + @Override + public boolean hasRemaining() { + return position < limit; + } + + @Override + public boolean isDirect() { + return true; + } + + @Override + public int limit() { + return limit; + } + + @Override + public FloatBuffer limit(int newLimit) { + if (newLimit < 0 || newLimit > capacity) + throw Buffer.makeIOOBE(newLimit); + limit = newLimit; + return this; + } + + @Override + public FloatBuffer mark() { + mark = position; + return this; + } + + @Override + public int position() { + return position; + } + + @Override + public FloatBuffer position(int newPosition) { + if (newPosition < 0 || newPosition > limit) + throw Buffer.makeIOOBE(newPosition); + position = newPosition; + return this; + } + + @Override + public FloatBuffer put(float b) { + if (position >= limit) + throw Buffer.makeIOOBE(position); + typedArray.set(position++, b); + return this; + } + + @Override + public FloatBuffer put(float[] src) { + if (position + src.length > limit) + throw Buffer.makeIOOBE(position + src.length - 1); + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + position += src.length; + return this; + } + + @Override + public FloatBuffer put(float[] src, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + if (offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + } else { + typedArray.set(Float32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); + } + position += length; + return this; + } + + @Override + public FloatBuffer put(FloatBuffer src) { + if (src instanceof EaglerArrayFloatBuffer) { + EaglerArrayFloatBuffer c = (EaglerArrayFloatBuffer) src; + int l = c.limit - c.position; + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + typedArray.set(Float32Array.create(c.typedArray.getBuffer(), + c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); + position += l; + c.position += l; + } else { + int l = src.remaining(); + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + for (int i = 0; i < l; ++i) { + typedArray.set(position + i, src.get()); + } + position += l; + } + return this; + } + + @Override + public FloatBuffer put(int index, float b) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, b); + return this; + } + + @Override + public void putElement(int index, float value) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, value); + } + + @Override + public int remaining() { + return limit - position; + } + + @Override + public FloatBuffer reset() { + int m = mark; + if (m < 0) + throw new IndexOutOfBoundsException("Invalid mark: " + m); + position = m; + return this; + } + @Override public FloatBuffer rewind() { position = 0; @@ -222,18 +256,4 @@ public class EaglerArrayFloatBuffer implements FloatBuffer { return this; } - @Override - public FloatBuffer limit(int newLimit) { - if(newLimit < 0 || newLimit > capacity) throw Buffer.makeIOOBE(newLimit); - limit = newLimit; - return this; - } - - @Override - public FloatBuffer position(int newPosition) { - if(newPosition < 0 || newPosition > limit) throw Buffer.makeIOOBE(newPosition); - position = newPosition; - return this; - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java index af0b86be..e331d57a 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayIntBuffer.java @@ -6,29 +6,30 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerArrayIntBuffer implements IntBuffer { - final Int32Array typedArray; + private static final int SHIFT = 2; + final Int32Array typedArray; final int capacity; int position; int limit; - int mark; - private static final int SHIFT = 2; + int mark; EaglerArrayIntBuffer(Int32Array typedArray) { this.typedArray = typedArray; @@ -46,157 +47,14 @@ public class EaglerArrayIntBuffer implements IntBuffer { this.mark = mark; } - @Override - public int capacity() { - return capacity; - } - - @Override - public int position() { - return position; - } - - @Override - public int limit() { - return limit; - } - - @Override - public int remaining() { - return limit - position; - } - - @Override - public boolean hasRemaining() { - return position < limit; - } - - @Override - public boolean hasArray() { - return false; - } - @Override public int[] array() { throw new UnsupportedOperationException(); } @Override - public IntBuffer duplicate() { - return new EaglerArrayIntBuffer(typedArray, position, limit, mark); - } - - @Override - public int get() { - if(position >= limit) throw Buffer.makeIOOBE(position); - return typedArray.get(position++); - } - - @Override - public IntBuffer put(int b) { - if(position >= limit) throw Buffer.makeIOOBE(position); - typedArray.set(position++, b); - return this; - } - - @Override - public int get(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public IntBuffer put(int index, int b) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, b); - return this; - } - - @Override - public int getElement(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public void putElement(int index, int value) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, value); - } - - @Override - public IntBuffer get(int[] dst, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); - position += length; - return this; - } - - @Override - public IntBuffer get(int[] dst) { - if(position + dst.length > limit) throw Buffer.makeIOOBE(position + dst.length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); - position += dst.length; - return this; - } - - @Override - public IntBuffer put(IntBuffer src) { - if(src instanceof EaglerArrayIntBuffer) { - EaglerArrayIntBuffer c = (EaglerArrayIntBuffer)src; - int l = c.limit - c.position; - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - typedArray.set(Int32Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); - position += l; - c.position += l; - }else { - int l = src.remaining(); - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - for(int i = 0; i < l; ++i) { - typedArray.set(position + l, src.get()); - } - position += l; - } - return this; - } - - @Override - public IntBuffer put(int[] src, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - if(offset == 0 && length == src.length) { - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - }else { - typedArray.set(Int32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); - } - position += length; - return this; - } - - @Override - public IntBuffer put(int[] src) { - if(position + src.length > limit) throw Buffer.makeIOOBE(position + src.length - 1); - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - position += src.length; - return this; - } - - @Override - public boolean isDirect() { - return true; - } - - @Override - public IntBuffer mark() { - mark = position; - return this; - } - - @Override - public IntBuffer reset() { - int m = mark; - if(m < 0) throw new IndexOutOfBoundsException("Invalid mark: " + m); - position = m; - return this; + public int capacity() { + return capacity; } @Override @@ -207,6 +65,11 @@ public class EaglerArrayIntBuffer implements IntBuffer { return this; } + @Override + public IntBuffer duplicate() { + return new EaglerArrayIntBuffer(typedArray, position, limit, mark); + } + @Override public IntBuffer flip() { limit = position; @@ -215,6 +78,177 @@ public class EaglerArrayIntBuffer implements IntBuffer { return this; } + @Override + public int get() { + if (position >= limit) + throw Buffer.makeIOOBE(position); + return typedArray.get(position++); + } + + @Override + public int get(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public IntBuffer get(int[] dst) { + if (position + dst.length > limit) + throw Buffer.makeIOOBE(position + dst.length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set(Int32Array.create(typedArray.getBuffer(), + typedArray.getByteOffset() + (position << SHIFT), dst.length)); + position += dst.length; + return this; + } + + @Override + public IntBuffer get(int[] dst, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set( + Int32Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), + offset); + position += length; + return this; + } + + @Override + public int getElement(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public boolean hasArray() { + return false; + } + + @Override + public boolean hasRemaining() { + return position < limit; + } + + @Override + public boolean isDirect() { + return true; + } + + @Override + public int limit() { + return limit; + } + + @Override + public IntBuffer limit(int newLimit) { + if (newLimit < 0 || newLimit > capacity) + throw Buffer.makeIOOBE(newLimit); + limit = newLimit; + return this; + } + + @Override + public IntBuffer mark() { + mark = position; + return this; + } + + @Override + public int position() { + return position; + } + + @Override + public IntBuffer position(int newPosition) { + if (newPosition < 0 || newPosition > limit) + throw Buffer.makeIOOBE(newPosition); + position = newPosition; + return this; + } + + @Override + public IntBuffer put(int b) { + if (position >= limit) + throw Buffer.makeIOOBE(position); + typedArray.set(position++, b); + return this; + } + + @Override + public IntBuffer put(int index, int b) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, b); + return this; + } + + @Override + public IntBuffer put(int[] src) { + if (position + src.length > limit) + throw Buffer.makeIOOBE(position + src.length - 1); + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + position += src.length; + return this; + } + + @Override + public IntBuffer put(int[] src, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + if (offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + } else { + typedArray.set(Int32Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); + } + position += length; + return this; + } + + @Override + public IntBuffer put(IntBuffer src) { + if (src instanceof EaglerArrayIntBuffer) { + EaglerArrayIntBuffer c = (EaglerArrayIntBuffer) src; + int l = c.limit - c.position; + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + typedArray.set(Int32Array.create(c.typedArray.getBuffer(), + c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); + position += l; + c.position += l; + } else { + int l = src.remaining(); + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + for (int i = 0; i < l; ++i) { + typedArray.set(position + i, src.get()); + } + position += l; + } + return this; + } + + @Override + public void putElement(int index, int value) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, value); + } + + @Override + public int remaining() { + return limit - position; + } + + @Override + public IntBuffer reset() { + int m = mark; + if (m < 0) + throw new IndexOutOfBoundsException("Invalid mark: " + m); + position = m; + return this; + } + @Override public IntBuffer rewind() { position = 0; @@ -222,18 +256,4 @@ public class EaglerArrayIntBuffer implements IntBuffer { return this; } - @Override - public IntBuffer limit(int newLimit) { - if(newLimit < 0 || newLimit > capacity) throw Buffer.makeIOOBE(newLimit); - limit = newLimit; - return this; - } - - @Override - public IntBuffer position(int newPosition) { - if(newPosition < 0 || newPosition > limit) throw Buffer.makeIOOBE(newPosition); - position = newPosition; - return this; - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java index 80bb3ddb..7d71c0e2 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayShortBuffer.java @@ -6,29 +6,30 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMUtils; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EaglerArrayShortBuffer implements ShortBuffer { - final Int16Array typedArray; + private static final int SHIFT = 1; + final Int16Array typedArray; final int capacity; int position; int limit; - int mark; - private static final int SHIFT = 1; + int mark; EaglerArrayShortBuffer(Int16Array typedArray) { this.typedArray = typedArray; @@ -46,157 +47,14 @@ public class EaglerArrayShortBuffer implements ShortBuffer { this.mark = mark; } - @Override - public int capacity() { - return capacity; - } - - @Override - public int position() { - return position; - } - - @Override - public int limit() { - return limit; - } - - @Override - public int remaining() { - return limit - position; - } - - @Override - public boolean hasRemaining() { - return position < limit; - } - - @Override - public boolean hasArray() { - return false; - } - @Override public short[] array() { throw new UnsupportedOperationException(); } @Override - public ShortBuffer duplicate() { - return new EaglerArrayShortBuffer(typedArray, position, limit, mark); - } - - @Override - public short get() { - if(position >= limit) throw Buffer.makeIOOBE(position); - return typedArray.get(position++); - } - - @Override - public ShortBuffer put(short b) { - if(position >= limit) throw Buffer.makeIOOBE(position); - typedArray.set(position++, b); - return this; - } - - @Override - public short get(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public ShortBuffer put(int index, short b) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, b); - return this; - } - - @Override - public short getElement(int index) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - return typedArray.get(index); - } - - @Override - public void putElement(int index, short value) { - if(index < 0 || index >= limit) throw Buffer.makeIOOBE(index); - typedArray.set(index, value); - } - - @Override - public ShortBuffer get(short[] dst, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), offset); - position += length; - return this; - } - - @Override - public ShortBuffer get(short[] dst) { - if(position + dst.length > limit) throw Buffer.makeIOOBE(position + dst.length - 1); - TeaVMUtils.unwrapArrayBufferView(dst).set(Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), dst.length)); - position += dst.length; - return this; - } - - @Override - public ShortBuffer put(ShortBuffer src) { - if(src instanceof EaglerArrayShortBuffer) { - EaglerArrayShortBuffer c = (EaglerArrayShortBuffer)src; - int l = c.limit - c.position; - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - typedArray.set(Int16Array.create(c.typedArray.getBuffer(), c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); - position += l; - c.position += l; - }else { - int l = src.remaining(); - if(position + l > limit) throw Buffer.makeIOOBE(position + l - 1); - for(int i = 0; i < l; ++i) { - typedArray.set(position + l, src.get()); - } - position += l; - } - return this; - } - - @Override - public ShortBuffer put(short[] src, int offset, int length) { - if(position + length > limit) throw Buffer.makeIOOBE(position + length - 1); - if(offset == 0 && length == src.length) { - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - }else { - typedArray.set(Int16Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); - } - position += length; - return this; - } - - @Override - public ShortBuffer put(short[] src) { - if(position + src.length > limit) throw Buffer.makeIOOBE(position + src.length - 1); - typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); - position += src.length; - return this; - } - - @Override - public boolean isDirect() { - return true; - } - - @Override - public ShortBuffer mark() { - mark = position; - return this; - } - - @Override - public ShortBuffer reset() { - int m = mark; - if(m < 0) throw new IndexOutOfBoundsException("Invalid mark: " + m); - position = m; - return this; + public int capacity() { + return capacity; } @Override @@ -207,6 +65,11 @@ public class EaglerArrayShortBuffer implements ShortBuffer { return this; } + @Override + public ShortBuffer duplicate() { + return new EaglerArrayShortBuffer(typedArray, position, limit, mark); + } + @Override public ShortBuffer flip() { limit = position; @@ -215,6 +78,177 @@ public class EaglerArrayShortBuffer implements ShortBuffer { return this; } + @Override + public short get() { + if (position >= limit) + throw Buffer.makeIOOBE(position); + return typedArray.get(position++); + } + + @Override + public short get(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public ShortBuffer get(short[] dst) { + if (position + dst.length > limit) + throw Buffer.makeIOOBE(position + dst.length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set(Int16Array.create(typedArray.getBuffer(), + typedArray.getByteOffset() + (position << SHIFT), dst.length)); + position += dst.length; + return this; + } + + @Override + public ShortBuffer get(short[] dst, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + TeaVMUtils.unwrapArrayBufferView(dst).set( + Int16Array.create(typedArray.getBuffer(), typedArray.getByteOffset() + (position << SHIFT), length), + offset); + position += length; + return this; + } + + @Override + public short getElement(int index) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + return typedArray.get(index); + } + + @Override + public boolean hasArray() { + return false; + } + + @Override + public boolean hasRemaining() { + return position < limit; + } + + @Override + public boolean isDirect() { + return true; + } + + @Override + public int limit() { + return limit; + } + + @Override + public ShortBuffer limit(int newLimit) { + if (newLimit < 0 || newLimit > capacity) + throw Buffer.makeIOOBE(newLimit); + limit = newLimit; + return this; + } + + @Override + public ShortBuffer mark() { + mark = position; + return this; + } + + @Override + public int position() { + return position; + } + + @Override + public ShortBuffer position(int newPosition) { + if (newPosition < 0 || newPosition > limit) + throw Buffer.makeIOOBE(newPosition); + position = newPosition; + return this; + } + + @Override + public ShortBuffer put(int index, short b) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, b); + return this; + } + + @Override + public ShortBuffer put(short b) { + if (position >= limit) + throw Buffer.makeIOOBE(position); + typedArray.set(position++, b); + return this; + } + + @Override + public ShortBuffer put(short[] src) { + if (position + src.length > limit) + throw Buffer.makeIOOBE(position + src.length - 1); + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + position += src.length; + return this; + } + + @Override + public ShortBuffer put(short[] src, int offset, int length) { + if (position + length > limit) + throw Buffer.makeIOOBE(position + length - 1); + if (offset == 0 && length == src.length) { + typedArray.set(TeaVMUtils.unwrapArrayBufferView(src), position); + } else { + typedArray.set(Int16Array.create(TeaVMUtils.unwrapArrayBuffer(src), offset << SHIFT, length), position); + } + position += length; + return this; + } + + @Override + public ShortBuffer put(ShortBuffer src) { + if (src instanceof EaglerArrayShortBuffer) { + EaglerArrayShortBuffer c = (EaglerArrayShortBuffer) src; + int l = c.limit - c.position; + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + typedArray.set(Int16Array.create(c.typedArray.getBuffer(), + c.typedArray.getByteOffset() + (c.position << SHIFT), l), position); + position += l; + c.position += l; + } else { + int l = src.remaining(); + if (position + l > limit) + throw Buffer.makeIOOBE(position + l - 1); + for (int i = 0; i < l; ++i) { + typedArray.set(position + i, src.get()); + } + position += l; + } + return this; + } + + @Override + public void putElement(int index, short value) { + if (index < 0 || index >= limit) + throw Buffer.makeIOOBE(index); + typedArray.set(index, value); + } + + @Override + public int remaining() { + return limit - position; + } + + @Override + public ShortBuffer reset() { + int m = mark; + if (m < 0) + throw new IndexOutOfBoundsException("Invalid mark: " + m); + position = m; + return this; + } + @Override public ShortBuffer rewind() { position = 0; @@ -222,18 +256,4 @@ public class EaglerArrayShortBuffer implements ShortBuffer { return this; } - @Override - public ShortBuffer limit(int newLimit) { - if(newLimit < 0 || newLimit > capacity) throw Buffer.makeIOOBE(newLimit); - limit = newLimit; - return this; - } - - @Override - public ShortBuffer position(int newPosition) { - if(newPosition < 0 || newPosition > limit) throw Buffer.makeIOOBE(newPosition); - position = newPosition; - return this; - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/AdvancedHTMLIFrameElement.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/AdvancedHTMLIFrameElement.java index cfaba268..62d0d823 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/AdvancedHTMLIFrameElement.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/AdvancedHTMLIFrameElement.java @@ -14,107 +14,108 @@ import com.google.common.collect.Iterators; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class AdvancedHTMLIFrameElement implements HTMLIFrameElement { + public void assertSafetyFeaturesSupported() { + if (!checkSafetyFeaturesSupported()) { + throw new IFrameSafetyException("Some required security features are not supported on this browser!"); + } + } + + @JSBody(params = {}, script = "return (typeof this.csp === \"string\");") + public native boolean checkCSPSupported(); + + @JSBody(params = {}, script = "return (typeof this.allow === \"string\") && (typeof this.sandbox === \"object\");") + public native boolean checkSafetyFeaturesSupported(); + + @JSProperty + public abstract String getAllow(); + + @JSProperty + public abstract DOMTokenList getSandbox(); + @JSProperty public abstract void setAllow(String str); @JSProperty - public abstract String getAllow(); + public abstract void setAllowFullscreen(boolean en); public void setAllowSafe(String requiredValue) { setAllow(requiredValue); - if(!requiredValue.equals(getAllow())) { + if (!requiredValue.equals(getAllow())) { throw new IFrameSafetyException("Could not set allow attribute to: " + requiredValue); } } - @JSProperty - public abstract void setAllowFullscreen(boolean en); - @JSProperty public abstract void setCredentialless(boolean en); + @JSProperty("csp") + public abstract void setCSP(String str); + @JSProperty public abstract void setLoading(String str); @JSProperty public abstract void setReferrerPolicy(String str); - @JSProperty("csp") - public abstract void setCSP(String str); - @JSProperty public abstract void setSandbox(String str); - @JSProperty - public abstract DOMTokenList getSandbox(); - - public void assertSafetyFeaturesSupported() { - if(!checkSafetyFeaturesSupported()) { - throw new IFrameSafetyException("Some required security features are not supported on this browser!"); - } - } - public void setSandboxSafe(Collection requiredTokens) { setSandboxSafe(new HashSet<>(requiredTokens)); } - public void setSandboxSafe(Set requiredTokens) { - setSandbox(String.join(" ", requiredTokens)); - DOMTokenList theSandbox = getSandbox(); - for(String s : requiredTokens) { - if(!theSandbox.contains(s)) { - throw new IFrameSafetyException("Failed to set sandbox attribute: " + s); - } - } - int l = theSandbox.getLength(); - for(int i = 0; i < l; ++i) { - String s = theSandbox.item(i); - if(!requiredTokens.contains(s)) { - throw new IFrameSafetyException("Unknown sandbox attribute detected: " + s); - } - } - } - public void setSandboxSafe(Collection requiredTokens, Collection optionalTokens) { setSandboxSafe(new HashSet<>(requiredTokens), new HashSet<>(optionalTokens)); } - public void setSandboxSafe(Set requiredTokens, Set optionalTokens) { - setSandbox(StringUtils.join(Iterators.concat(requiredTokens.iterator(), optionalTokens.iterator()), " ")); + public void setSandboxSafe(Set requiredTokens) { + setSandbox(String.join(" ", requiredTokens)); DOMTokenList theSandbox = getSandbox(); - for(String s : requiredTokens) { - if(!theSandbox.contains(s)) { + for (String s : requiredTokens) { + if (!theSandbox.contains(s)) { throw new IFrameSafetyException("Failed to set sandbox attribute: " + s); } } int l = theSandbox.getLength(); - for(int i = 0; i < l; ++i) { + for (int i = 0; i < l; ++i) { String s = theSandbox.item(i); - if(!requiredTokens.contains(s) && !optionalTokens.contains(s)) { + if (!requiredTokens.contains(s)) { throw new IFrameSafetyException("Unknown sandbox attribute detected: " + s); } } } - @JSBody(params = {}, script = "return (typeof this.allow === \"string\") && (typeof this.sandbox === \"object\");") - public native boolean checkSafetyFeaturesSupported(); - - @JSBody(params = {}, script = "return (typeof this.csp === \"string\");") - public native boolean checkCSPSupported(); + public void setSandboxSafe(Set requiredTokens, Set optionalTokens) { + setSandbox(StringUtils.join(Iterators.concat(requiredTokens.iterator(), optionalTokens.iterator()), " ")); + DOMTokenList theSandbox = getSandbox(); + for (String s : requiredTokens) { + if (!theSandbox.contains(s)) { + throw new IFrameSafetyException("Failed to set sandbox attribute: " + s); + } + } + int l = theSandbox.getLength(); + for (int i = 0; i < l; ++i) { + String s = theSandbox.item(i); + if (!requiredTokens.contains(s) && !optionalTokens.contains(s)) { + throw new IFrameSafetyException("Unknown sandbox attribute detected: " + s); + } + } + } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ArrayBufferInputStream.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ArrayBufferInputStream.java index 4adb6be0..060147d9 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ArrayBufferInputStream.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ArrayBufferInputStream.java @@ -9,18 +9,19 @@ import org.teavm.jso.typedarrays.Uint8Array; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ArrayBufferInputStream extends InputStream { @@ -35,7 +36,7 @@ public class ArrayBufferInputStream extends InputStream { } public ArrayBufferInputStream(ArrayBuffer bufferIn, int off, int len) { - if(off + len > bufferIn.getByteLength()) { + if (off + len > bufferIn.getByteLength()) { throw new IllegalArgumentException("offset " + off + " and length " + len + " are out of bounds for a " + bufferIn.getByteLength() + " long arraybuffer"); } @@ -45,67 +46,21 @@ public class ArrayBufferInputStream extends InputStream { limit = off + len; } - @Override - public int read() { - if(position >= limit) { - return -1; - } - return typed.get(position++); - } - - @Override - public int read(byte b[], int off, int len) { - if(off + len > b.length) { - throw new ArrayIndexOutOfBoundsException("offset " + off + " and length " + len - + " are out of bounds for a " + b.length + " array"); - } - - int avail = limit - position; - if(len > avail) { - len = avail; - } - - if(len <= 0) { - return -1; - } - - TeaVMUtils.unwrapArrayBufferView(b).set(Int8Array.create(buffer, position, len), off); - - position += len; - - return len; - } - - @Override - public long skip(long n) { - int avail = limit - position; - if(n > avail) { - n = avail; - } - position += (int)n; - return n; - } - @Override public int available() { return limit - position; } - public int getPosition() { - return position; - } - - public int getLimit() { - return limit; - } - public ArrayBuffer getBuffer() { return buffer; } - @Override - public boolean markSupported() { - return true; + public int getLimit() { + return limit; + } + + public int getPosition() { + return position; } @Override @@ -113,11 +68,57 @@ public class ArrayBufferInputStream extends InputStream { mark = position; } + @Override + public boolean markSupported() { + return true; + } + + @Override + public int read() { + if (position >= limit) { + return -1; + } + return typed.get(position++); + } + + @Override + public int read(byte b[], int off, int len) { + if (off + len > b.length) { + throw new ArrayIndexOutOfBoundsException( + "offset " + off + " and length " + len + " are out of bounds for a " + b.length + " array"); + } + + int avail = limit - position; + if (len > avail) { + len = avail; + } + + if (len <= 0) { + return -1; + } + + TeaVMUtils.unwrapArrayBufferView(b).set(Int8Array.create(buffer, position, len), off); + + position += len; + + return len; + } + @Override public synchronized void reset() throws IOException { - if(mark == -1) { + if (mark == -1) { throw new IOException("Cannot reset, stream has no mark!"); } position = mark; } + + @Override + public long skip(long n) { + int avail = limit - position; + if (n > avail) { + n = avail; + } + position += (int) n; + return n; + } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Base64VarIntArray.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Base64VarIntArray.java index 9f46b148..3d63dc18 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Base64VarIntArray.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Base64VarIntArray.java @@ -9,82 +9,77 @@ import net.lax1dude.eaglercraft.v1_8.Base64; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class Base64VarIntArray { - public static String encodeVarIntArray(List values) { - StringBuilder ret = new StringBuilder(); - for(int i = 0, j, k, l = values.size(); i < l; ++i) { - j = values.get(i); - if(j < 0) j = 0; - for(;;) { - k = j & 31; - if(j > 31) { - j >>>= 5; - ret.append(Base64.lookupIntChar(k | 32)); - }else { - ret.append(Base64.lookupIntChar(k)); + public static int[] decodeVarIntArray(JSString values) { + int[] ret = new int[8]; + int o = 0; + for (int i = 0, j, k, m, l = values.getLength(); i < l;) { + k = 0; + m = 0; + for (;;) { + j = Base64.lookupCharInt((char) values.charCodeAt(i++)); + if (j == -1) { + return null; + } + k |= (j & 31) << m; + if (j > 31) { + if (i >= l) { + return null; + } + m += 5; + } else { break; } } - } - return ret.toString(); - } - - public static String encodeVarIntArray(int[] values) { - StringBuilder ret = new StringBuilder(); - for(int i = 0, j, k; i < values.length; ++i) { - j = values[i]; - if(j < 0) j = 0; - for(;;) { - k = j & 31; - if(j > 31) { - j >>>= 5; - ret.append(Base64.lookupIntChar(k | 32)); - }else { - ret.append(Base64.lookupIntChar(k)); - break; - } + j = ret.length; + if (o >= j) { + int[] newRet = new int[j << 1]; + System.arraycopy(ret, 0, newRet, 0, j); + ret = newRet; } + ret[o++] = k; } - return ret.toString(); + return o != ret.length ? Arrays.copyOf(ret, o) : ret; } public static int[] decodeVarIntArray(String values) { int[] ret = new int[8]; int o = 0; - for(int i = 0, j, k, m, l = values.length(); i < l;) { + for (int i = 0, j, k, m, l = values.length(); i < l;) { k = 0; m = 0; - for(;;) { + for (;;) { j = Base64.lookupCharInt(values.charAt(i++)); - if(j == -1) { + if (j == -1) { return null; } k |= (j & 31) << m; - if(j > 31) { - if(i >= l) { + if (j > 31) { + if (i >= l) { return null; } m += 5; - }else { + } else { break; } } j = ret.length; - if(o >= j) { + if (o >= j) { int[] newRet = new int[j << 1]; System.arraycopy(ret, 0, newRet, 0, j); ret = newRet; @@ -94,36 +89,44 @@ public class Base64VarIntArray { return o != ret.length ? Arrays.copyOf(ret, o) : ret; } - public static int[] decodeVarIntArray(JSString values) { - int[] ret = new int[8]; - int o = 0; - for(int i = 0, j, k, m, l = values.getLength(); i < l;) { - k = 0; - m = 0; - for(;;) { - j = Base64.lookupCharInt((char)values.charCodeAt(i++)); - if(j == -1) { - return null; - } - k |= (j & 31) << m; - if(j > 31) { - if(i >= l) { - return null; - } - m += 5; - }else { + public static String encodeVarIntArray(int[] values) { + StringBuilder ret = new StringBuilder(); + for (int i = 0, j, k; i < values.length; ++i) { + j = values[i]; + if (j < 0) + j = 0; + for (;;) { + k = j & 31; + if (j > 31) { + j >>>= 5; + ret.append(Base64.lookupIntChar(k | 32)); + } else { + ret.append(Base64.lookupIntChar(k)); break; } } - j = ret.length; - if(o >= j) { - int[] newRet = new int[j << 1]; - System.arraycopy(ret, 0, newRet, 0, j); - ret = newRet; - } - ret[o++] = k; } - return o != ret.length ? Arrays.copyOf(ret, o) : ret; + return ret.toString(); + } + + public static String encodeVarIntArray(List values) { + StringBuilder ret = new StringBuilder(); + for (int i = 0, j, k, l = values.size(); i < l; ++i) { + j = values.get(i); + if (j < 0) + j = 0; + for (;;) { + k = j & 31; + if (j > 31) { + j >>>= 5; + ret.append(Base64.lookupIntChar(k | 32)); + } else { + ret.append(Base64.lookupIntChar(k)); + break; + } + } + } + return ret.toString(); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/BooleanResult.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/BooleanResult.java index dc7f80e1..4f6a089b 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/BooleanResult.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/BooleanResult.java @@ -2,32 +2,33 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class BooleanResult { - + public static final BooleanResult TRUE = new BooleanResult(true); public static final BooleanResult FALSE = new BooleanResult(false); - - public final boolean bool; - - private BooleanResult(boolean b) { - bool = b; - } - + public static BooleanResult _new(boolean b) { return b ? TRUE : FALSE; } - -} \ No newline at end of file + + public final boolean bool; + + private BooleanResult(boolean b) { + bool = b; + } + +} diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClassesJSLocator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClassesJSLocator.java index f196c149..ecdf4689 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClassesJSLocator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClassesJSLocator.java @@ -11,26 +11,45 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClassesJSLocator { private static final Logger logger = LogManager.getLogger("ClassesJSLocator"); + public static HTMLScriptElement resolveClassesJSFromInline() { + NodeList elements = PlatformRuntime.doc.getElementsByTagName("script"); + for (int i = 0, l = elements.getLength(); i < l; ++i) { + HTMLScriptElement tag = (HTMLScriptElement) elements.get(i); + String scriptSrc = tag.getText(); + if (scriptSrc != null && scriptSrc.length() > 1024 * 1024) { + // I'm not feeling very creative tonight + int j = scriptSrc.indexOf("var $rt_seed=2463534242;"); + if (j > 0 && j < 2048 && scriptSrc.indexOf("$rt_createNumericArray(") != -1) { + logger.warn( + "Could not locate classes.js through conventional means, however an inline script tag was found on the page that (probably) contains a TeaVM program"); + return tag; + } + } + } + return null; + } + public static String resolveClassesJSFromThrowable() { String str = resolveClassesJSFromThrowable0(); - if(str != null && str.equalsIgnoreCase(PlatformRuntime.win.getLocation().getFullURL())) { + if (str != null && str.equalsIgnoreCase(PlatformRuntime.win.getLocation().getFullURL())) { return null; } return str; @@ -39,24 +58,24 @@ public class ClassesJSLocator { private static String resolveClassesJSFromThrowable0() { String str = TeaVMUtils.dumpJSStackTrace(); String[] frames = EagUtils.splitPattern.split(str); - if("Error".equals(frames[0])) { + if ("Error".equals(frames[0])) { // V8 stack trace - if(frames.length > 1) { + if (frames.length > 1) { String framesTrim = frames[1].trim(); - if(framesTrim.startsWith("at")) { - //definitely V8 + if (framesTrim.startsWith("at")) { + // definitely V8 int i = framesTrim.indexOf('('); int j = framesTrim.indexOf(')'); - if(i != -1 && j != -1 && i < j) { + if (i != -1 && j != -1 && i < j) { return tryResolveClassesSourceFromFrame(framesTrim.substring(i + 1, j)); } } } - }else { + } else { // Mozilla/WebKit stack trace String framesTrim = frames[0].trim(); int i = framesTrim.indexOf('@'); - if(i != -1) { + if (i != -1) { return tryResolveClassesSourceFromFrame(framesTrim.substring(i + 1)); } } @@ -65,30 +84,13 @@ public class ClassesJSLocator { private static String tryResolveClassesSourceFromFrame(String fileLineCol) { int i = fileLineCol.lastIndexOf(':'); - if(i > 0) { + if (i > 0) { i = fileLineCol.lastIndexOf(':', i - 1); } - if(i != -1) { + if (i != -1) { return fileLineCol.substring(0, i); } return null; } - public static HTMLScriptElement resolveClassesJSFromInline() { - NodeList elements = PlatformRuntime.doc.getElementsByTagName("script"); - for(int i = 0, l = elements.getLength(); i < l; ++i) { - HTMLScriptElement tag = (HTMLScriptElement)elements.get(i); - String scriptSrc = tag.getText(); - if(scriptSrc != null && scriptSrc.length() > 1024 * 1024) { - // I'm not feeling very creative tonight - int j = scriptSrc.indexOf("var $rt_seed=2463534242;"); - if(j > 0 && j < 2048 && scriptSrc.indexOf("$rt_createNumericArray(") != -1) { - logger.warn("Could not locate classes.js through conventional means, however an inline script tag was found on the page that (probably) contains a TeaVM program"); - return tag; - } - } - } - return null; - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java index f692fabe..ffefdb3e 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java @@ -39,175 +39,203 @@ import net.minecraft.client.main.Main; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientMain { - - private static final String crashImage = "data:image/png;base64,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"; - // avoid inlining of constant - private static String crashImageWrapper() { - return crashImage.substring(0); + public static class EPKFileEntry { + + public final String url; + public final String path; + + protected EPKFileEntry(String url, String path) { + this.url = url; + this.path = path; + } } - @JSBody(params = {}, script = "if((typeof __isEaglerX188Running === \"string\") && __isEaglerX188Running === \"yes\") return true; __isEaglerX188Running = \"yes\"; return false;") - private static native boolean getRunningFlag(); + @JSFunctor + private static interface WindowErrorHandler extends JSObject { + void call(String message, String file, int line, int col, JSError error); + } + + private static final String crashImage = "data:image/png;base64,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"; private static final PrintStream systemOut = System.out; private static final PrintStream systemErr = System.err; private static JSObject windowErrorHandler = null; + public static String configRootElementId = null; + + public static HTMLElement configRootElement = null; + + public static EPKFileEntry[] configEPKFiles = null; + + public static String configLocalesFolder = null; + public static boolean crashOnUncaughtExceptions = false; + private static boolean isCrashed = false; + private static String webGLCrashStringCache = null; + private static String shimsCrashStringCache = null; + + private static HTMLElement integratedServerCrashPanel = null; + public static void _main() { - if(getRunningFlag()) { + if (getRunningFlag()) { systemErr.println("ClientMain: [ERROR] eaglercraftx is already running!"); return; } try { systemOut.println("ClientMain: [INFO] eaglercraftx is starting..."); JSObject opts = getEaglerXOpts(); - - if(opts == null) { + + if (opts == null) { systemErr.println("ClientMain: [ERROR] the \"window.eaglercraftXOpts\" variable is undefined"); systemErr.println("ClientMain: [ERROR] eaglercraftx cannot start"); Window.alert("ERROR: game cannot start, the \"window.eaglercraftXOpts\" variable is undefined"); return; } - + try { - JSEaglercraftXOptsRoot eaglercraftOpts = (JSEaglercraftXOptsRoot)opts; + JSEaglercraftXOptsRoot eaglercraftOpts = (JSEaglercraftXOptsRoot) opts; crashOnUncaughtExceptions = eaglercraftOpts.getCrashOnUncaughtExceptions(false); PlatformRuntime.isDeobfStackTraces = eaglercraftOpts.getDeobfStackTraces(true); - + configRootElementId = eaglercraftOpts.getContainer(); - if(configRootElementId == null) { + if (configRootElementId == null) { throw new JSONException("window.eaglercraftXOpts.container is undefined!"); } configRootElement = Window.current().getDocument().getElementById(configRootElementId); - + HTMLElement oldContent; - while((oldContent = configRootElement.querySelector("._eaglercraftX_wrapper_element")) != null) { + while ((oldContent = configRootElement.querySelector("._eaglercraftX_wrapper_element")) != null) { oldContent.delete(); } - + String epkSingleURL = eaglercraftOpts.getAssetsURI(); - if(epkSingleURL != null) { + if (epkSingleURL != null) { configEPKFiles = new EPKFileEntry[] { new EPKFileEntry(epkSingleURL, "") }; - }else { + } else { JSArrayReader epkURLs = eaglercraftOpts.getAssetsURIArray(); int len = epkURLs.getLength(); - if(len == 0) { + if (len == 0) { throw new JSONException("assetsURI array cannot be empty!"); } configEPKFiles = new EPKFileEntry[len]; - for(int i = 0; i < len; ++i) { + for (int i = 0; i < len; ++i) { JSEaglercraftXOptsAssetsURI etr = epkURLs.get(i); String url = etr.getURL(); - if(url == null) { + if (url == null) { throw new JSONException("assetsURI is missing a url!"); } configEPKFiles[i] = new EPKFileEntry(url, etr.getPath("")); } } - + configLocalesFolder = eaglercraftOpts.getLocalesURI("lang"); - if(configLocalesFolder.endsWith("/")) { + if (configLocalesFolder.endsWith("/")) { configLocalesFolder = configLocalesFolder.substring(0, configLocalesFolder.length() - 1); } - - ((TeaVMClientConfigAdapter)TeaVMClientConfigAdapter.instance).loadNative(eaglercraftOpts); - + + ((TeaVMClientConfigAdapter) TeaVMClientConfigAdapter.instance).loadNative(eaglercraftOpts); + systemOut.println("ClientMain: [INFO] configuration was successful"); - }catch(Throwable t) { + } catch (Throwable t) { systemErr.println("ClientMain: [ERROR] the \"window.eaglercraftXOpts\" variable is invalid"); EagRuntime.debugPrintStackTraceToSTDERR(t); systemErr.println("ClientMain: [ERROR] eaglercraftx cannot start"); - Window.alert("ERROR: game cannot start, the \"window.eaglercraftXOpts\" variable is invalid: " + t.toString()); + Window.alert("ERROR: game cannot start, the \"window.eaglercraftXOpts\" variable is invalid: " + + t.toString()); return; } - - if(crashOnUncaughtExceptions) { + + if (crashOnUncaughtExceptions) { systemOut.println("ClientMain: [INFO] registering crash handlers"); - + windowErrorHandler = setWindowErrorHandler(Window.current(), new WindowErrorHandler() { @Override public void call(String message, String file, int line, int col, JSError error) { - if(windowErrorHandler != null) { + if (windowErrorHandler != null) { error = TeaVMUtils.ensureDefined(error); - if(error == null) { - systemErr.println("ClientMain: [ERROR] recieved error event, but the error is null, ignoring"); + if (error == null) { + systemErr.println( + "ClientMain: [ERROR] recieved error event, but the error is null, ignoring"); return; } - + StringBuilder str = new StringBuilder(); - + str.append("Native Browser Exception\n"); str.append("----------------------------------\n"); - str.append(" Line: ").append((file == null ? "unknown" : file) + ":" + line + ":" + col).append('\n'); + str.append(" Line: ").append((file == null ? "unknown" : file) + ":" + line + ":" + col) + .append('\n'); str.append(" Type: ").append(error.getName()).append('\n'); - str.append(" Desc: ").append(error.getMessage() == null ? "null" : error.getMessage()).append('\n'); - - if(message != null) { - if(error.getMessage() == null || !message.endsWith(error.getMessage())) { + str.append(" Desc: ").append(error.getMessage() == null ? "null" : error.getMessage()) + .append('\n'); + + if (message != null) { + if (error.getMessage() == null || !message.endsWith(error.getMessage())) { str.append(" Desc: ").append(message).append('\n'); } } - + str.append("----------------------------------\n\n"); String stack = TeaVMUtils.getStackSafe(error); - if(PlatformRuntime.isDeobfStackTraces && !StringUtils.isAllEmpty(stack)) { + if (PlatformRuntime.isDeobfStackTraces && !StringUtils.isAllEmpty(stack)) { TeaVMRuntimeDeobfuscator.initialize(); stack = TeaVMRuntimeDeobfuscator.deobfExceptionStack(stack); } str.append(stack == null ? "No stack trace is available" : stack).append('\n'); - + showCrashScreen(str.toString()); } } }); } - + systemOut.println("ClientMain: [INFO] initializing eaglercraftx runtime"); - + LogManager.logRedirector = new ILogRedirector() { @Override public void log(String txt, boolean err) { PlatformApplication.addLogMessage(txt, err); } }; - + try { EagRuntime.create(); - }catch(PlatformIncompatibleException ex) { + } catch (PlatformIncompatibleException ex) { systemErr.println("ClientMain: [ERROR] this browser is incompatible with eaglercraftx!"); systemErr.println("ClientMain: [ERROR] Reason: " + ex.getMessage()); try { showIncompatibleScreen(ex.getMessage()); - }catch(Throwable t) { + } catch (Throwable t) { } return; - }catch(TeaVMEnterBootMenuException ee) { + } catch (TeaVMEnterBootMenuException ee) { try { systemOut.println("ClientMain: [INFO] launching eaglercraftx boot menu"); + BootMenuEntryPoint.wasManuallyInvoked = ee.isManual; BootMenuEntryPoint.launchMenu(Window.current(), configRootElement); - }catch(Throwable t) { + } catch (Throwable t) { showCrashScreen("Failed to enter boot menu!", t); } return; - }catch(Throwable t) { + } catch (Throwable t) { systemErr.println("ClientMain: [ERROR] eaglercraftx's runtime could not be initialized!"); EagRuntime.debugPrintStackTraceToSTDERR(t); showCrashScreen("EaglercraftX's runtime could not be initialized!", t); @@ -219,71 +247,239 @@ public class ClientMain { try { Main.appMain(); - }catch(Throwable t) { + } catch (Throwable t) { systemErr.println("ClientMain: [ERROR] unhandled exception caused main thread to exit"); EagRuntime.debugPrintStackTraceToSTDERR(t); showCrashScreen("Unhandled exception caused main thread to exit!", t); } - - }finally { + + } finally { systemErr.println("ClientMain: [ERROR] eaglercraftx main thread has exited"); } } - + + private static void addArray(StringBuilder str, String var) { + str.append("window.").append(var).append(" = ").append(getArray(var)).append('\n'); + } + + private static void addDebug(StringBuilder str, String var) { + str.append("window.").append(var).append(" = ").append(getString(var)).append('\n'); + } + + private static void addDebugLocation(StringBuilder str, String var) { + str.append("window.location.").append(var).append(" = ").append(getStringLocation(var)).append('\n'); + } + + private static void addDebugNav(StringBuilder str, String var) { + str.append("window.navigator.").append(var).append(" = ").append(getStringNav(var)).append('\n'); + } + + private static void addDebugNavPlugins(StringBuilder str) { + str.append("window.navigator.plugins = ").append(getStringNavPlugins()).append('\n'); + } + + private static void addDebugScreen(StringBuilder str, String var) { + str.append("window.screen.").append(var).append(" = ").append(getStringScreen(var)).append('\n'); + } + + private static String addShimsToCrash() { + if (shimsCrashStringCache != null) { + return shimsCrashStringCache; + } + + try { + StringBuilder ret = new StringBuilder(); + + ES6ShimStatus status = ES6ShimStatus.getRuntimeStatus(); + ret.append("eaglercraft.es6shims.status = ").append(status.getStatus()).append('\n'); + ret.append("eaglercraft.es6shims.shims = [ "); + Set shims = status.getShims(); + boolean b = false; + for (EnumES6Shims shim : shims) { + if (b) { + ret.append(", "); + } + ret.append(shim); + b = true; + } + ret.append(" ]\n"); + + return shimsCrashStringCache = ret.toString(); + } catch (Throwable tt) { + return shimsCrashStringCache = "ERROR: could not query ES6 shim info - " + tt.toString() + "\n"; + } + } + + private static String addWebGLToCrash() { + if (webGLCrashStringCache != null) { + return webGLCrashStringCache; + } + + try { + StringBuilder ret = new StringBuilder(); + + WebGLRenderingContext ctx = PlatformRuntime.webgl; + boolean experimental = PlatformRuntime.webglExperimental; + + if (ctx == null) { + experimental = false; + HTMLCanvasElement cvs = (HTMLCanvasElement) Window.current().getDocument().createElement("canvas"); + + cvs.setWidth(64); + cvs.setHeight(64); + + ctx = (WebGLRenderingContext) cvs.getContext("webgl2"); + + if (ctx == null) { + ctx = (WebGLRenderingContext) cvs.getContext("webgl"); + if (ctx == null) { + experimental = true; + ctx = (WebGLRenderingContext) cvs.getContext("experimental-webgl"); + } + } + } + + if (ctx != null) { + if (PlatformRuntime.webgl != null) { + ret.append("webgl.version = ").append(ctx.getParameterString(WebGLRenderingContext.VERSION)) + .append('\n'); + } + if (ctx.getExtension("WEBGL_debug_renderer_info") != null) { + ret.append("webgl.renderer = ").append(ctx.getParameterString(/* UNMASKED_RENDERER_WEBGL */ 0x9246)) + .append('\n'); + ret.append("webgl.vendor = ").append(ctx.getParameterString(/* UNMASKED_VENDOR_WEBGL */ 0x9245)) + .append('\n'); + } else { + ret.append("webgl.renderer = ").append(ctx.getParameterString(WebGLRenderingContext.RENDERER)) + .append(" [masked]").append('\n'); + ret.append("webgl.vendor = ").append(ctx.getParameterString(WebGLRenderingContext.VENDOR)) + .append(" [masked]").append('\n'); + } + // ret.append('\n').append("\nwebgl.anisotropicGlitch = + // ").append(DetectAnisotropicGlitch.hasGlitch()).append('\n'); //TODO + int id = PlatformOpenGL.checkOpenGLESVersion(); + if (id > 0) { + ret.append('\n').append("webgl.version.id = ").append(id).append('\n'); + ret.append("webgl.experimental = ").append(experimental).append('\n'); + if (id == 200) { + ret.append("webgl.ext.ANGLE_instanced_arrays = ") + .append(ctx.getExtension("ANGLE_instanced_arrays") != null).append('\n'); + ret.append("webgl.ext.EXT_color_buffer_half_float = ") + .append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); + ret.append("webgl.ext.EXT_shader_texture_lod = ") + .append(ctx.getExtension("EXT_shader_texture_lod") != null).append('\n'); + ret.append("webgl.ext.OES_fbo_render_mipmap = ") + .append(ctx.getExtension("OES_fbo_render_mipmap") != null).append('\n'); + ret.append("webgl.ext.OES_texture_float = ") + .append(ctx.getExtension("OES_texture_float") != null).append('\n'); + ret.append("webgl.ext.OES_texture_half_float = ") + .append(ctx.getExtension("OES_texture_half_float") != null).append('\n'); + ret.append("webgl.ext.OES_texture_half_float_linear = ") + .append(ctx.getExtension("OES_texture_half_float_linear") != null).append('\n'); + } else if (id >= 300) { + ret.append("webgl.ext.EXT_color_buffer_float = ") + .append(ctx.getExtension("EXT_color_buffer_float") != null).append('\n'); + ret.append("webgl.ext.EXT_color_buffer_half_float = ") + .append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); + ret.append("webgl.ext.OES_texture_float_linear = ") + .append(ctx.getExtension("OES_texture_float_linear") != null).append('\n'); + } + ret.append("webgl.ext.EXT_texture_filter_anisotropic = ") + .append(ctx.getExtension("EXT_texture_filter_anisotropic") != null).append('\n'); + } else { + ret.append("webgl.ext.ANGLE_instanced_arrays = ") + .append(ctx.getExtension("ANGLE_instanced_arrays") != null).append('\n'); + ret.append("webgl.ext.EXT_color_buffer_float = ") + .append(ctx.getExtension("EXT_color_buffer_float") != null).append('\n'); + ret.append("webgl.ext.EXT_color_buffer_half_float = ") + .append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); + ret.append("webgl.ext.EXT_shader_texture_lod = ") + .append(ctx.getExtension("EXT_shader_texture_lod") != null).append('\n'); + ret.append("webgl.ext.OES_fbo_render_mipmap = ") + .append(ctx.getExtension("OES_fbo_render_mipmap") != null).append('\n'); + ret.append("webgl.ext.OES_texture_float = ").append(ctx.getExtension("OES_texture_float") != null) + .append('\n'); + ret.append("webgl.ext.OES_texture_float_linear = ") + .append(ctx.getExtension("OES_texture_float_linear") != null).append('\n'); + ret.append("webgl.ext.OES_texture_half_float = ") + .append(ctx.getExtension("OES_texture_half_float") != null).append('\n'); + ret.append("webgl.ext.OES_texture_half_float_linear = ") + .append(ctx.getExtension("OES_texture_half_float_linear") != null).append('\n'); + ret.append("webgl.ext.EXT_texture_filter_anisotropic = ") + .append(ctx.getExtension("EXT_texture_filter_anisotropic") != null).append('\n'); + } + } else { + ret.append("Failed to query GPU info!\n"); + } + + return webGLCrashStringCache = ret.toString(); + } catch (Throwable tt) { + return webGLCrashStringCache = "ERROR: could not query webgl info - " + tt.toString() + "\n"; + } + } + + // avoid inlining of constant + private static String crashImageWrapper() { + return crashImage.substring(0); + } + + @JSBody(params = { + "v" }, script = "try { return (typeof window[v] !== \"undefined\") ? JSON.stringify(window[v]) : \"[\\\"\\\"]\"; } catch(e) { return \"[\\\"\\\"]\"; }") + private static native String getArray(String var); + @JSBody(params = {}, script = "if(typeof eaglercraftXOpts === \"undefined\") {return null;}" + "else if(typeof eaglercraftXOpts === \"string\") {return JSON.parse(eaglercraftXOpts);}" + "else {return eaglercraftXOpts;}") private static native JSObject getEaglerXOpts(); - public static class EPKFileEntry { - - public final String url; - public final String path; - - protected EPKFileEntry(String url, String path) { - this.url = url; - this.path = path; + @JSBody(params = {}, script = "if((typeof __isEaglerX188Running === \"string\") && __isEaglerX188Running === \"yes\") return true; __isEaglerX188Running = \"yes\"; return false;") + private static native boolean getRunningFlag(); + + @JSBody(params = { "v" }, script = "try { return \"\"+window[v]; } catch(e) { return \"\"; }") + private static native String getString(String var); + + @JSBody(params = { "v" }, script = "try { return \"\"+window.location[v]; } catch(e) { return \"\"; }") + private static native String getStringLocation(String var); + + @JSBody(params = { "v" }, script = "try { return \"\"+window.navigator[v]; } catch(e) { return \"\"; }") + private static native String getStringNav(String var); + + @JSBody(params = {}, script = "try { var retObj = new Array; if(typeof navigator.plugins === \"object\")" + + "{ var len = navigator.plugins.length; if(len > 0) { for(var idx = 0; idx < len; ++idx) {" + + "var thePlugin = navigator.plugins[idx]; retObj.push({ name: thePlugin.name," + + "filename: thePlugin.filename, desc: thePlugin.description }); } } } return JSON.stringify(retObj);" + + "} catch(e) { return \"\"; }") + private static native String getStringNavPlugins(); + + @JSBody(params = { "v" }, script = "try { return \"\"+window.screen[v]; } catch(e) { return \"\"; }") + private static native String getStringScreen(String var); + + public static void hideIntegratedServerCrashReportOverlay() { + if (integratedServerCrashPanel != null) { + integratedServerCrashPanel.getStyle().setProperty("display", "none"); } } - public static String configRootElementId = null; - public static HTMLElement configRootElement = null; - public static EPKFileEntry[] configEPKFiles = null; - public static String configLocalesFolder = null; - public static boolean crashOnUncaughtExceptions = false; - - @JSFunctor - private static interface WindowErrorHandler extends JSObject { - void call(String message, String file, int line, int col, JSError error); - } - - @JSBody(params = { "win", "handler" }, script = "var evtHandler = function(e) { handler(" - + "(typeof e.message === \"string\") ? e.message : null," - + "(typeof e.filename === \"string\") ? e.filename : null," - + "(typeof e.lineno === \"number\") ? e.lineno : 0," - + "(typeof e.colno === \"number\") ? e.colno : 0," - + "(typeof e.error === \"undefined\") ? null : e.error);}; win.addEventListener(\"error\", evtHandler);" - + "return evtHandler;") - private static native JSObject setWindowErrorHandler(Window win, WindowErrorHandler handler); - - @JSBody(params = { "win", "handler" }, script = "win.removeEventListener(\"error\", evtHandler);") - private static native void removeWindowErrorHandler(Window win, JSObject handler); - public static void removeErrorHandler(Window win) { - if(windowErrorHandler != null) { + if (windowErrorHandler != null) { removeWindowErrorHandler(win, windowErrorHandler); windowErrorHandler = null; } } - - public static void showCrashScreen(String message, Throwable t) { - try { - showCrashScreen(message + "\n\n" + EagRuntime.getStackTrace(t)); - }catch(Throwable tt) { - } - } - private static boolean isCrashed = false; + @JSBody(params = { "win", "handler" }, script = "win.removeEventListener(\"error\", evtHandler);") + private static native void removeWindowErrorHandler(Window win, JSObject handler); + + @JSBody(params = { "el", "str" }, script = "el.innerText = str;") + private static native void setInnerText(HTMLElement el, String str); + + @JSBody(params = { "win", "handler" }, script = "var evtHandler = function(e) { handler(" + + "(typeof e.message === \"string\") ? e.message : null," + + "(typeof e.filename === \"string\") ? e.filename : null," + + "(typeof e.lineno === \"number\") ? e.lineno : 0," + "(typeof e.colno === \"number\") ? e.colno : 0," + + "(typeof e.error === \"undefined\") ? null : e.error);}; win.addEventListener(\"error\", evtHandler);" + + "return evtHandler;") + private static native JSObject setWindowErrorHandler(Window win, WindowErrorHandler handler); public static void showCrashScreen(String t) { StringBuilder strBeforeBuilder = new StringBuilder(); @@ -291,13 +487,13 @@ public class ClientMain { strBeforeBuilder.append(t); strBeforeBuilder.append('\n').append('\n'); String strBefore = strBeforeBuilder.toString(); - + HTMLDocument doc = Window.current().getDocument(); HTMLElement el; - if(PlatformRuntime.parent != null) { + if (PlatformRuntime.parent != null) { el = PlatformRuntime.parent; - }else { - if(configRootElement == null) { + } else { + if (configRootElement == null) { configRootElement = doc.getElementById(configRootElementId); } el = configRootElement; @@ -349,69 +545,71 @@ public class ClientMain { addDebugLocation(str, "href"); str.append('\n'); String strAfter = str.toString(); - + String strFinal = strBefore + strAfter; List additionalInfo = new LinkedList<>(); try { TeaVMClientConfigAdapter.instance.getHooks().callCrashReportHook(strFinal, additionalInfo::add); - }catch(Throwable tt) { + } catch (Throwable tt) { systemErr.println("Uncaught exception invoking crash report hook!"); EagRuntime.debugPrintStackTraceToSTDERR(tt); } - - if(!isCrashed) { + + if (!isCrashed) { isCrashed = true; - - if(additionalInfo.size() > 0) { + + if (additionalInfo.size() > 0) { try { StringBuilder builderFinal = new StringBuilder(); builderFinal.append(strBefore); - builderFinal.append("Got the following messages from the crash report hook registered in eaglercraftXOpts:\n\n"); - for(String str2 : additionalInfo) { + builderFinal.append( + "Got the following messages from the crash report hook registered in eaglercraftXOpts:\n\n"); + for (String str2 : additionalInfo) { builderFinal.append("----------[ CRASH HOOK ]----------\n"); builderFinal.append(str2).append('\n'); builderFinal.append("----------------------------------\n\n"); } builderFinal.append(strAfter); strFinal = builderFinal.toString(); - }catch(Throwable tt) { + } catch (Throwable tt) { systemErr.println("Uncaught exception concatenating crash report hook messages!"); EagRuntime.debugPrintStackTraceToSTDERR(tt); } } - - if(el == null) { + + if (el == null) { Window.alert("Root element not found, crash report was printed to console"); systemErr.println(strFinal); return; } - + HTMLElement img = doc.createElement("img"); HTMLElement div = doc.createElement("div"); img.setAttribute("style", "z-index:100;position:absolute;top:10px;left:calc(50% - 151px);"); img.setAttribute("src", crashImageWrapper()); - div.setAttribute("style", "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font: 14px monospace;padding:10px;"); + div.setAttribute("style", + "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font: 14px monospace;padding:10px;"); div.getClassList().add("_eaglercraftX_crash_element"); el.appendChild(img); el.appendChild(div); div.appendChild(doc.createTextNode(strFinal)); - + PlatformRuntime.removeEventHandlers(); - }else { + } else { systemErr.println(); systemErr.println("An additional crash report was supressed:"); String[] s = t.split("[\\r\\n]+"); - for(int i = 0; i < s.length; ++i) { + for (int i = 0; i < s.length; ++i) { systemErr.println(" " + s[i]); } - if(additionalInfo.size() > 0) { - for(String str2 : additionalInfo) { - if(str2 != null) { + if (additionalInfo.size() > 0) { + for (String str2 : additionalInfo) { + if (str2 != null) { systemErr.println(); systemErr.println(" ----------[ CRASH HOOK ]----------"); s = str2.split("[\\r\\n]+"); - for(int i = 0; i < s.length; ++i) { + for (int i = 0; i < s.length; ++i) { systemErr.println(" " + s[i]); } systemErr.println(" ----------------------------------"); @@ -421,229 +619,125 @@ public class ClientMain { } } - private static String webGLCrashStringCache = null; - - private static String addWebGLToCrash() { - if(webGLCrashStringCache != null) { - return webGLCrashStringCache; - } - + public static void showCrashScreen(String message, Throwable t) { try { - StringBuilder ret = new StringBuilder(); - - WebGLRenderingContext ctx = PlatformRuntime.webgl; - boolean experimental = PlatformRuntime.webglExperimental; - - if(ctx == null) { - experimental = false; - HTMLCanvasElement cvs = (HTMLCanvasElement) Window.current().getDocument().createElement("canvas"); - - cvs.setWidth(64); - cvs.setHeight(64); - - ctx = (WebGLRenderingContext)cvs.getContext("webgl2"); - - if(ctx == null) { - ctx = (WebGLRenderingContext)cvs.getContext("webgl"); - if(ctx == null) { - experimental = true; - ctx = (WebGLRenderingContext)cvs.getContext("experimental-webgl"); - } - } - } - - if(ctx != null) { - if(PlatformRuntime.webgl != null) { - ret.append("webgl.version = ").append(ctx.getParameterString(WebGLRenderingContext.VERSION)).append('\n'); - } - if(ctx.getExtension("WEBGL_debug_renderer_info") != null) { - ret.append("webgl.renderer = ").append(ctx.getParameterString(/* UNMASKED_RENDERER_WEBGL */ 0x9246)).append('\n'); - ret.append("webgl.vendor = ").append(ctx.getParameterString(/* UNMASKED_VENDOR_WEBGL */ 0x9245)).append('\n'); - }else { - ret.append("webgl.renderer = ").append(ctx.getParameterString(WebGLRenderingContext.RENDERER)).append( " [masked]").append('\n'); - ret.append("webgl.vendor = ").append(ctx.getParameterString(WebGLRenderingContext.VENDOR)).append(" [masked]").append('\n'); - } - //ret.append('\n').append("\nwebgl.anisotropicGlitch = ").append(DetectAnisotropicGlitch.hasGlitch()).append('\n'); //TODO - int id = PlatformOpenGL.checkOpenGLESVersion(); - if(id > 0) { - ret.append('\n').append("webgl.version.id = ").append(id).append('\n'); - ret.append("webgl.experimental = ").append(experimental).append('\n'); - if(id == 200) { - ret.append("webgl.ext.ANGLE_instanced_arrays = ").append(ctx.getExtension("ANGLE_instanced_arrays") != null).append('\n'); - ret.append("webgl.ext.EXT_color_buffer_half_float = ").append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); - ret.append("webgl.ext.EXT_shader_texture_lod = ").append(ctx.getExtension("EXT_shader_texture_lod") != null).append('\n'); - ret.append("webgl.ext.OES_fbo_render_mipmap = ").append(ctx.getExtension("OES_fbo_render_mipmap") != null).append('\n'); - ret.append("webgl.ext.OES_texture_float = ").append(ctx.getExtension("OES_texture_float") != null).append('\n'); - ret.append("webgl.ext.OES_texture_half_float = ").append(ctx.getExtension("OES_texture_half_float") != null).append('\n'); - ret.append("webgl.ext.OES_texture_half_float_linear = ").append(ctx.getExtension("OES_texture_half_float_linear") != null).append('\n'); - }else if(id >= 300) { - ret.append("webgl.ext.EXT_color_buffer_float = ").append(ctx.getExtension("EXT_color_buffer_float") != null).append('\n'); - ret.append("webgl.ext.EXT_color_buffer_half_float = ").append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); - ret.append("webgl.ext.OES_texture_float_linear = ").append(ctx.getExtension("OES_texture_float_linear") != null).append('\n'); - } - ret.append("webgl.ext.EXT_texture_filter_anisotropic = ").append(ctx.getExtension("EXT_texture_filter_anisotropic") != null).append('\n'); - }else { - ret.append("webgl.ext.ANGLE_instanced_arrays = ").append(ctx.getExtension("ANGLE_instanced_arrays") != null).append('\n'); - ret.append("webgl.ext.EXT_color_buffer_float = ").append(ctx.getExtension("EXT_color_buffer_float") != null).append('\n'); - ret.append("webgl.ext.EXT_color_buffer_half_float = ").append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); - ret.append("webgl.ext.EXT_shader_texture_lod = ").append(ctx.getExtension("EXT_shader_texture_lod") != null).append('\n'); - ret.append("webgl.ext.OES_fbo_render_mipmap = ").append(ctx.getExtension("OES_fbo_render_mipmap") != null).append('\n'); - ret.append("webgl.ext.OES_texture_float = ").append(ctx.getExtension("OES_texture_float") != null).append('\n'); - ret.append("webgl.ext.OES_texture_float_linear = ").append(ctx.getExtension("OES_texture_float_linear") != null).append('\n'); - ret.append("webgl.ext.OES_texture_half_float = ").append(ctx.getExtension("OES_texture_half_float") != null).append('\n'); - ret.append("webgl.ext.OES_texture_half_float_linear = ").append(ctx.getExtension("OES_texture_half_float_linear") != null).append('\n'); - ret.append("webgl.ext.EXT_texture_filter_anisotropic = ").append(ctx.getExtension("EXT_texture_filter_anisotropic") != null).append('\n'); - } - }else { - ret.append("Failed to query GPU info!\n"); - } - - return webGLCrashStringCache = ret.toString(); - }catch(Throwable tt) { - return webGLCrashStringCache = "ERROR: could not query webgl info - " + tt.toString() + "\n"; - } - } - - private static String shimsCrashStringCache = null; - - private static String addShimsToCrash() { - if(shimsCrashStringCache != null) { - return shimsCrashStringCache; - } - - try { - StringBuilder ret = new StringBuilder(); - - ES6ShimStatus status = ES6ShimStatus.getRuntimeStatus(); - ret.append("eaglercraft.es6shims.status = ").append(status.getStatus()).append('\n'); - ret.append("eaglercraft.es6shims.shims = [ "); - Set shims = status.getShims(); - boolean b = false; - for(EnumES6Shims shim : shims) { - if(b) { - ret.append(", "); - } - ret.append(shim); - b = true; - } - ret.append(" ]\n"); - - return shimsCrashStringCache = ret.toString(); - }catch(Throwable tt) { - return shimsCrashStringCache = "ERROR: could not query ES6 shim info - " + tt.toString() + "\n"; + showCrashScreen(message + "\n\n" + EagRuntime.getStackTrace(t)); + } catch (Throwable tt) { } } public static void showIncompatibleScreen(String t) { - if(!isCrashed) { + if (!isCrashed) { isCrashed = true; - + HTMLDocument doc = Window.current().getDocument(); HTMLElement el; - if(PlatformRuntime.parent != null) { + if (PlatformRuntime.parent != null) { el = PlatformRuntime.parent; - }else { - if(configRootElement == null) { + } else { + if (configRootElement == null) { configRootElement = doc.getElementById(configRootElementId); } el = configRootElement; } - - if(el == null) { + + if (el == null) { + Window.alert("Compatibility error: " + t); System.err.println("Compatibility error: " + t); return; } - + String s = el.getAttribute("style"); el.setAttribute("style", (s == null ? "" : s) + "position:relative;"); HTMLElement img = doc.createElement("img"); HTMLElement div = doc.createElement("div"); img.setAttribute("style", "z-index:100;position:absolute;top:10px;left:calc(50% - 151px);"); img.setAttribute("src", crashImageWrapper()); - div.setAttribute("style", "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;font:18px sans-serif;padding:40px;"); + div.setAttribute("style", + "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;font:18px sans-serif;padding:40px;"); div.getClassList().add("_eaglercraftX_incompatible_element"); el.appendChild(img); el.appendChild(div); - div.setInnerHTML("

+ This device is incompatible with Eaglercraft :(

" - + "
" - + "

Issue:

" - + "

" - + "

" - + "

Current Date: " + (new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")).format(new Date()) + "

" - + "


Things you can try:

" - + "
    " - + "
  1. Just try using Eaglercraft on a different device, it isn't a bug it's common sense
  2. " - + "
  3. If you are on a mobile device, please try a proper desktop or a laptop computer
  4. " - + "
  5. If you are using a device with no mouse cursor, please use a device with a mouse cursor
  6. " - + "
  7. If you are not using Chrome/Edge, try installing the latest Google Chrome
  8. " - + "
  9. If your browser is out of date, please update it to the latest version
  10. " - + "
  11. If you are using an old OS such as Windows 7, please try Windows 10 or 11
  12. " - + "
" - + "
"); - + div.setInnerHTML( + "

+ This device is incompatible with Eaglercraft :(

" + + "
" + + "

Issue:

" + + "

" + + "

" + + "

Current Date: " + + (new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")).format(new Date()) + "

" + + "


Things you can try:

" + + "
    " + + "
  1. Just try using Eaglercraft on a different device, it isn't a bug it's common sense
  2. " + + "
  3. If this screen just appeared randomly, try restarting your browser or device
  4. " + + "
  5. If you are not using Chrome/Edge, try installing the latest Google Chrome
  6. " + + "
  7. If your browser is out of date, please update it to the latest version
  8. " + + "
" + "
"); + div.querySelector("#_eaglercraftX_crashReason").appendChild(doc.createTextNode(t)); - div.querySelector("#_eaglercraftX_crashUserAgent").appendChild(doc.createTextNode(getStringNav("userAgent"))); - + div.querySelector("#_eaglercraftX_crashUserAgent") + .appendChild(doc.createTextNode(getStringNav("userAgent"))); + PlatformRuntime.removeEventHandlers(); - + String webGLRenderer = "No GL_RENDERER string could be queried"; - + try { HTMLCanvasElement cvs = (HTMLCanvasElement) Window.current().getDocument().createElement("canvas"); - + cvs.setWidth(64); cvs.setHeight(64); - - WebGLRenderingContext ctx = (WebGLRenderingContext)cvs.getContext("webgl"); - - if(ctx != null) { + + WebGLRenderingContext ctx = (WebGLRenderingContext) cvs.getContext("webgl"); + + if (ctx != null) { String r; - if(ctx.getExtension("WEBGL_debug_renderer_info") != null) { + if (ctx.getExtension("WEBGL_debug_renderer_info") != null) { r = ctx.getParameterString(/* UNMASKED_RENDERER_WEBGL */ 0x9246); - }else { + } else { r = ctx.getParameterString(WebGLRenderingContext.RENDERER); - if(r != null) { + if (r != null) { r += " [masked]"; } } - if(r != null) { + if (r != null) { webGLRenderer = r; } } - }catch(Throwable tt) { + } catch (Throwable tt) { } - + div.querySelector("#_eaglercraftX_crashWebGL").appendChild(doc.createTextNode(webGLRenderer)); - + } } - private static HTMLElement integratedServerCrashPanel = null; - public static void showIntegratedServerCrashReportOverlay(String report, int x, int y, int w, int h) { - if(integratedServerCrashPanel == null) { + if (integratedServerCrashPanel == null) { HTMLDocument doc = Window.current().getDocument(); HTMLElement el; - if(PlatformRuntime.parent != null) { + if (PlatformRuntime.parent != null) { el = PlatformRuntime.parent; - }else { - if(configRootElement == null) { + } else { + if (configRootElement == null) { configRootElement = doc.getElementById(configRootElementId); } el = configRootElement; } - + integratedServerCrashPanel = doc.createElement("div"); - integratedServerCrashPanel.setAttribute("style", "z-index:99;position:absolute;background-color:black;color:white;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font:18px sans-serif;padding:20px;display:none;"); + integratedServerCrashPanel.setAttribute("style", + "z-index:99;position:absolute;background-color:black;color:white;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font:18px sans-serif;padding:20px;display:none;"); integratedServerCrashPanel.getClassList().add("_eaglercraftX_integratedserver_crash_element"); el.appendChild(integratedServerCrashPanel); } String sourceURL = ClientPlatformSingleplayer.getLoadedWorkerSourceURLTeaVM(); String workerURL = ClientPlatformSingleplayer.getLoadedWorkerURLTeaVM(); String currentDate = (new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")).format(new Date()); - if(workerURL != null) { - report = "WORKER SRC: " + sourceURL +"\nWORKER URL: " + workerURL + "\n\nCURRENT DATE: " + currentDate + "\n\n" + report.replaceAll(workerURL, ""); - }else { + if (workerURL != null) { + report = "WORKER SRC: " + sourceURL + "\nWORKER URL: " + workerURL + "\n\nCURRENT DATE: " + currentDate + + "\n\n" + report.replaceAll(workerURL, ""); + } else { report = "CURRENT DATE: " + currentDate + "\n\n" + report; } setInnerText(integratedServerCrashPanel, ""); @@ -657,59 +751,4 @@ public class ClientMain { style.setProperty("display", "block"); } - public static void hideIntegratedServerCrashReportOverlay() { - if(integratedServerCrashPanel != null) { - integratedServerCrashPanel.getStyle().setProperty("display", "none"); - } - } - - @JSBody(params = { "el", "str" }, script = "el.innerText = str;") - private static native void setInnerText(HTMLElement el, String str); - - @JSBody(params = { "v" }, script = "try { return \"\"+window[v]; } catch(e) { return \"\"; }") - private static native String getString(String var); - - @JSBody(params = { "v" }, script = "try { return \"\"+window.navigator[v]; } catch(e) { return \"\"; }") - private static native String getStringNav(String var); - - @JSBody(params = { "v" }, script = "try { return \"\"+window.screen[v]; } catch(e) { return \"\"; }") - private static native String getStringScreen(String var); - - @JSBody(params = { "v" }, script = "try { return \"\"+window.location[v]; } catch(e) { return \"\"; }") - private static native String getStringLocation(String var); - - @JSBody(params = { }, script = "try { var retObj = new Array; if(typeof navigator.plugins === \"object\")" - + "{ var len = navigator.plugins.length; if(len > 0) { for(var idx = 0; idx < len; ++idx) {" - + "var thePlugin = navigator.plugins[idx]; retObj.push({ name: thePlugin.name," - + "filename: thePlugin.filename, desc: thePlugin.description }); } } } return JSON.stringify(retObj);" - + "} catch(e) { return \"\"; }") - private static native String getStringNavPlugins(); - - private static void addDebug(StringBuilder str, String var) { - str.append("window.").append(var).append(" = ").append(getString(var)).append('\n'); - } - - private static void addDebugNav(StringBuilder str, String var) { - str.append("window.navigator.").append(var).append(" = ").append(getStringNav(var)).append('\n'); - } - - private static void addDebugNavPlugins(StringBuilder str) { - str.append("window.navigator.plugins = ").append(getStringNavPlugins()).append('\n'); - } - - private static void addDebugScreen(StringBuilder str, String var) { - str.append("window.screen.").append(var).append(" = ").append(getStringScreen(var)).append('\n'); - } - - private static void addDebugLocation(StringBuilder str, String var) { - str.append("window.location.").append(var).append(" = ").append(getStringLocation(var)).append('\n'); - } - - private static void addArray(StringBuilder str, String var) { - str.append("window.").append(var).append(" = ").append(getArray(var)).append('\n'); - } - - @JSBody(params = { "v" }, script = "try { return (typeof window[v] !== \"undefined\") ? JSON.stringify(window[v]) : \"[\\\"\\\"]\"; } catch(e) { return \"[\\\"\\\"]\"; }") - private static native String getArray(String var); - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java index 264d41b0..b4f7518e 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java @@ -19,31 +19,32 @@ import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class DebugConsoleWindow { private static class LogMessage { - + private final boolean err; private final String msg; - + public LogMessage(boolean err, String msg) { this.err = err; this.msg = msg; } - + } private static final int bufferSpoolSize = 256; @@ -59,6 +60,81 @@ public class DebugConsoleWindow { private static EventListener unload = null; private static String unloadName = null; + public static void addLogMessage(String text, boolean isErr) { + if (logger == null) { + synchronized (messageBuffer) { + if (logger == null) { + messageBuffer.add(new LogMessage(isErr, text)); + while (messageBuffer.size() > bufferSpoolSize) { + messageBuffer.remove(0); + } + return; + } + } + } + appendLogMessageAndScroll(text + "\n", isErr ? "#DD0000" : "#000000"); + } + + private static void appendLogMessage(String text, String color) { + HTMLElement el = loggerDoc.createElement("span"); + el.setInnerText(text); + el.getStyle().setProperty("color", color); + loggerMessageContainer.appendChild(el); + HTMLCollection children = loggerMessageContainer.getChildren(); + while (children.getLength() > windowMaxMessages) { + children.get(0).delete(); + } + } + + private static void appendLogMessageAndScroll(String text, String color) { + if (logger != null) { + boolean b = isScrollToEnd(logger, loggerDoc); + appendLogMessage(text, color); + if (b) { + scrollToEnd0(logger, loggerDoc); + } + } + } + + private static boolean debugConsoleLocalStorageGet() { + try { + if (parent.getLocalStorage() != null) { + return Boolean.valueOf(parent.getLocalStorage().getItem( + PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole")); + } else { + return false; + } + } catch (Throwable t) { + return false; + } + } + + private static void debugConsoleLocalStorageSet(boolean val) { + try { + if (parent.getLocalStorage() != null) { + parent.getLocalStorage().setItem( + PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole", + Boolean.toString(val)); + } + } catch (Throwable t) { + } + } + + public static void destroyWindow() { + if (logger != null) { + Window w = logger; + logger = null; + try { + w.close(); + } catch (Throwable t) { + } + removeEventListeners(); + } + } + + @JSBody(params = { "doc", "str" }, script = "doc.write(str);doc.close();") + private static native void documentWrite(HTMLDocument doc, String str); + public static void initialize(Window parentWindow) { parent = parentWindow; if (PlatformRuntime.getClientConfigAdapter().isOpenDebugConsoleOnLaunch() || debugConsoleLocalStorageGet()) { @@ -66,48 +142,35 @@ public class DebugConsoleWindow { } } + @JSBody(params = { "win", "doc" }, script = "return (win.innerHeight + win.pageYOffset) >= doc.body.offsetHeight;") + private static native boolean isScrollToEnd(Window win, HTMLDocument doc); + + public static boolean isShowingDebugConsole() { + return logger != null; + } + public static void removeEventListeners() { - if(unloadName != null && unload != null) { + if (unloadName != null && unload != null) { try { parent.removeEventListener(unloadName, unload); - }catch(Throwable t) { + } catch (Throwable t) { } } unload = null; unloadName = null; } - private static void debugConsoleLocalStorageSet(boolean val) { - try { - if(parent.getLocalStorage() != null) { - parent.getLocalStorage().setItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole", Boolean.toString(val)); - } - }catch(Throwable t) { - } - } - - private static boolean debugConsoleLocalStorageGet() { - try { - if(parent.getLocalStorage() != null) { - return Boolean.valueOf(parent.getLocalStorage().getItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole")); - }else { - return false; - } - }catch(Throwable t) { - return false; - } - } + @JSBody(params = { "win", + "doc" }, script = "setTimeout(function(){win.scrollTo(0, doc.body.scrollHeight || doc.body.clientHeight);}, 1);") + private static native void scrollToEnd0(Window win, HTMLDocument doc); public static void showDebugConsole() { debugConsoleLocalStorageSet(true); showDebugConsole0(); } - @JSBody(params = { "doc", "str" }, script = "doc.write(str);doc.close();") - private static native void documentWrite(HTMLDocument doc, String str); - private static void showDebugConsole0() { - if(logger == null) { + if (logger == null) { try { parent.addEventListener( unloadName = ((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()) @@ -118,15 +181,16 @@ public class DebugConsoleWindow { destroyWindow(); } }); - }catch(Throwable t) { + } catch (Throwable t) { } float s = PlatformInput.getDPI(); - int w = (int)(1000 * s); - int h = (int)(400 * s); + int w = (int) (1000 * s); + int h = (int) (400 * s); int x = (parent.getScreen().getWidth() - w) / 2; int y = (parent.getScreen().getHeight() - h) / 2; - logger = parent.open("", "_blank", "top=" + y + ",left=" + x + ",width=" + w + ",height=" + h + ",menubar=0,status=0,titlebar=0,toolbar=0"); - if(logger == null || TeaVMUtils.isNotTruthy(logger)) { + logger = parent.open("", "_blank", "top=" + y + ",left=" + x + ",width=" + w + ",height=" + h + + ",menubar=0,status=0,titlebar=0,toolbar=0"); + if (logger == null || TeaVMUtils.isNotTruthy(logger)) { logger = null; debugConsoleLocalStorageSet(false); LogManager.getLogger("DebugConsoleWindow").error("Logger popup was blocked!"); @@ -134,14 +198,16 @@ public class DebugConsoleWindow { return; } logger.focus(); - documentWrite(logger.getDocument(), "" - + "Debug Console" - + "

"); + documentWrite(logger.getDocument(), + "" + + "Debug Console" + + "

"); loggerDoc = logger.getDocument(); loggerBody = loggerDoc.getBody(); loggerMessageContainer = loggerDoc.getElementById("loggerMessageContainer"); - synchronized(messageBuffer) { - for(LogMessage msg : messageBuffer) { + synchronized (messageBuffer) { + for (LogMessage msg : messageBuffer) { appendLogMessage(msg.msg + "\n", msg.err ? "#DD0000" : "#000000"); } messageBuffer.clear(); @@ -150,7 +216,7 @@ public class DebugConsoleWindow { EventListener unloadListener = new EventListener() { @Override public void handleEvent(Event evt) { - if(logger != null) { + if (logger != null) { logger = null; debugConsoleLocalStorageSet(false); removeEventListeners(); @@ -159,67 +225,9 @@ public class DebugConsoleWindow { }; logger.addEventListener("beforeunload", unloadListener); logger.addEventListener("unload", unloadListener); - }else { + } else { logger.focus(); } } - public static void addLogMessage(String text, boolean isErr) { - if(logger == null) { - synchronized(messageBuffer) { - if(logger == null) { - messageBuffer.add(new LogMessage(isErr, text)); - while(messageBuffer.size() > bufferSpoolSize) { - messageBuffer.remove(0); - } - return; - } - } - } - appendLogMessageAndScroll(text + "\n", isErr ? "#DD0000" : "#000000"); - } - - private static void appendLogMessageAndScroll(String text, String color) { - if(logger != null) { - boolean b = isScrollToEnd(logger, loggerDoc); - appendLogMessage(text, color); - if(b) { - scrollToEnd0(logger, loggerDoc); - } - } - } - - private static void appendLogMessage(String text, String color) { - HTMLElement el = loggerDoc.createElement("span"); - el.setInnerText(text); - el.getStyle().setProperty("color", color); - loggerMessageContainer.appendChild(el); - HTMLCollection children = loggerMessageContainer.getChildren(); - while(children.getLength() > windowMaxMessages) { - children.get(0).delete(); - } - } - - @JSBody(params = { "win", "doc" }, script = "return (win.innerHeight + win.pageYOffset) >= doc.body.offsetHeight;") - private static native boolean isScrollToEnd(Window win, HTMLDocument doc); - - @JSBody(params = { "win", "doc" }, script = "setTimeout(function(){win.scrollTo(0, doc.body.scrollHeight || doc.body.clientHeight);}, 1);") - private static native void scrollToEnd0(Window win, HTMLDocument doc); - - public static void destroyWindow() { - if(logger != null) { - Window w = logger; - logger = null; - try { - w.close(); - }catch(Throwable t) { - } - removeEventListeners(); - } - } - - public static boolean isShowingDebugConsole() { - return logger != null; - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKDownloadHelper.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKDownloadHelper.java index ac822dca..5d1bbba3 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKDownloadHelper.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKDownloadHelper.java @@ -17,18 +17,19 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKDownloadHelper { @@ -39,25 +40,28 @@ public class EPKDownloadHelper { byte[] bTrue = Base64.decodeBase64("true"); boolean oldEPKInvalidFlag = Arrays.equals(bTrue, PlatformApplication.getLocalStorage("epkInvalidFlag", false)); boolean epkInvalidFlag = oldEPKInvalidFlag; - attempt_loop: for(int a = 0; a < 3; ++a) { - if(a == 1 && !PlatformRuntime.hasFetchSupportTeaVM()) continue; + attempt_loop: for (int a = 0; a < 3; ++a) { + if (a == 1 && !PlatformRuntime.hasFetchSupportTeaVM()) + continue; loadedFiles.clear(); boolean canBeInvalid = expectedVersionIdentifier != null; - for(int i = 0; i < epkFiles.length; ++i) { + for (int i = 0; i < epkFiles.length; ++i) { boolean noCache = false; String url = null; - switch(a) { + switch (a) { case 0: url = epkFiles[i].url; noCache = false; break; case 1: - logger.warn("Failed to download one or more correct/valid files, attempting to bypass the browser's cache..."); + logger.warn( + "Failed to download one or more correct/valid files, attempting to bypass the browser's cache..."); url = epkFiles[i].url; noCache = true; break; case 2: - logger.warn("Failed to download one or more correct/valid files, attempting to bypass the server's cache..."); + logger.warn( + "Failed to download one or more correct/valid files, attempting to bypass the server's cache..."); url = injectCacheInvalidationHack(epkFiles[i].url, expectedVersionIdentifier); noCache = true; break; @@ -68,91 +72,96 @@ public class EPKDownloadHelper { boolean canBeCorrupt = c && (a < 1 || toCheck.startsWith("http:") || toCheck.startsWith("https:")); canBeInvalid &= c; String logURL = b ? "" : url; - + logger.info("Downloading: {}", logURL); - + ArrayBuffer epkFileData = PlatformRuntime.downloadRemoteURI(url, !noCache); - - if(epkFileData == null) { - if(a < 2 && canBeCorrupt) { + + if (epkFileData == null) { + if (a < 2 && canBeCorrupt) { logger.error("Could not download EPK file \"{}\"", logURL); continue attempt_loop; - }else { - throw new RuntimeInitializationFailureException("Could not download EPK file \"" + logURL + "\""); + } else { + throw new RuntimeInitializationFailureException( + "Could not download EPK file \"" + logURL + "\""); } } - + logger.info("Decompressing: {}", logURL); - + try { EPKLoader.loadEPK(epkFileData, epkFiles[i].path, loadedFiles); - }catch(Throwable t) { - if(a < 2 && canBeCorrupt) { + } catch (Throwable t) { + if (a < 2 && canBeCorrupt) { logger.error("Could not extract EPK file \"{}\"", logURL); continue attempt_loop; - }else { - throw new RuntimeInitializationFailureException("Could not extract EPK file \"" + logURL + "\"", t); + } else { + throw new RuntimeInitializationFailureException("Could not extract EPK file \"" + logURL + "\"", + t); } } } - if(canBeInvalid) { + if (canBeInvalid) { byte[] dat = loadedFiles.get("EPKVersionIdentifier.txt"); - if(dat != null) { + if (dat != null) { String epkStr = (new String(dat, StandardCharsets.UTF_8)).trim(); - if(expectedVersionIdentifier.equals(epkStr)) { + if (expectedVersionIdentifier.equals(epkStr)) { epkInvalidFlag = false; break; } - logger.error("EPK version identifier \"{}\" does not match the expected identifier \"{}\"", epkStr, expectedVersionIdentifier); - }else { - logger.error("Version identifier file is missing from the EPK, expecting \"{}\"", expectedVersionIdentifier); + logger.error("EPK version identifier \"{}\" does not match the expected identifier \"{}\"", epkStr, + expectedVersionIdentifier); + } else { + logger.error("Version identifier file is missing from the EPK, expecting \"{}\"", + expectedVersionIdentifier); } - if(epkInvalidFlag) { + if (epkInvalidFlag) { break; - }else { - if(a < 2) { + } else { + if (a < 2) { continue; - }else { - logger.error("Nothing we can do about this, ignoring the invalid EPK version and setting invalid flag to true"); + } else { + logger.error( + "Nothing we can do about this, ignoring the invalid EPK version and setting invalid flag to true"); epkInvalidFlag = true; } } - }else { + } else { epkInvalidFlag = false; break; } } - if(epkInvalidFlag != oldEPKInvalidFlag) { + if (epkInvalidFlag != oldEPKInvalidFlag) { PlatformApplication.setLocalStorage("epkInvalidFlag", epkInvalidFlag ? bTrue : null, false); } } private static String injectCacheInvalidationHack(String url, String cacheFixStr) { - if(cacheFixStr != null) { + if (cacheFixStr != null) { cacheFixStr = Window.encodeURIComponent(cacheFixStr); - }else { + } else { cacheFixStr = "t" + System.currentTimeMillis(); } String toCheck = url.indexOf("://") != -1 ? url : PlatformRuntime.win.getLocation().getFullURL(); - if(toCheck.startsWith("http:") || toCheck.startsWith("https:")) { + if (toCheck.startsWith("http:") || toCheck.startsWith("https:")) { int i = url.indexOf('?'); - if(i == url.length() - 1) { + if (i == url.length() - 1) { return url + "eaglerCacheFix=" + cacheFixStr; - }else if(i != -1) { + } else if (i != -1) { String s = url.substring(i + 1); - if(!s.startsWith("&") && !s.startsWith("#")) { + if (!s.startsWith("&") && !s.startsWith("#")) { s = "&" + s; } return url.substring(0, i + 1) + "eaglerCacheFix=" + cacheFixStr + s; - }else { + } else { i = url.indexOf('#'); - if(i != -1) { + if (i != -1) { return url.substring(0, i) + "?eaglerCacheFix=" + cacheFixStr + url.substring(i); - }else { + } else { return url + "?eaglerCacheFix=" + cacheFixStr; } } - }else { + } else { return url; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKLoader.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKLoader.java index ac12c2b1..c3123c83 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKLoader.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EPKLoader.java @@ -13,18 +13,19 @@ import com.jcraft.jzlib.InflaterInputStream; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EPKLoader { @@ -32,48 +33,49 @@ public class EPKLoader { loadEPK(epkFile, "", loadedFiles); } - public static final void loadEPK(ArrayBuffer epkFile, String path, Map loadedFiles) throws IOException { + public static final void loadEPK(ArrayBuffer epkFile, String path, Map loadedFiles) + throws IOException { int byteLength = epkFile.getByteLength(); int l = byteLength - 16; - if(l < 1) { + if (l < 1) { throw new IOException("EPK file is incomplete"); } - + ArrayBufferInputStream is = new ArrayBufferInputStream(epkFile, 0, byteLength - 8); - + byte[] header = new byte[8]; is.read(header); String type = readASCII(header); - - if(!"EAGPKG$$".equals(type)) { + + if (!"EAGPKG$$".equals(type)) { throw new IOException("Invalid EPK file type '" + type + "'"); } - + Uint8Array readEndCode = Uint8Array.create(epkFile, byteLength - 8, 8); - - byte[] endCode = new byte[] { (byte)':', (byte)':', (byte)':', (byte)'Y', - (byte)'E', (byte)'E', (byte)':', (byte)'>' }; - for(int i = 0; i < 8; ++i) { - if(readEndCode.get(i) != endCode[i]) { + + byte[] endCode = new byte[] { (byte) ':', (byte) ':', (byte) ':', (byte) 'Y', (byte) 'E', (byte) 'E', + (byte) ':', (byte) '>' }; + for (int i = 0; i < 8; ++i) { + if (readEndCode.get(i) != endCode[i]) { throw new IOException("EPK file is missing EOF code (:::YEE:>)"); } } - + String vers = readASCII(is); - if(!vers.startsWith("ver2.")) { + if (!vers.startsWith("ver2.")) { throw new IOException("Unknown or invalid EPK version: " + vers); } - + is.skip(is.read()); // skip filename is.skip(loadShort(is)); // skip comment is.skip(8); // skip millis date - + int numFiles = loadInt(is); - - char compressionType = (char)is.read(); - + + char compressionType = (char) is.read(); + InputStream zis; - switch(compressionType) { + switch (compressionType) { case 'G': zis = new GZIPInputStream(is); break; @@ -90,100 +92,101 @@ public class EPKLoader { int blockFile = ('F' << 24) | ('I' << 16) | ('L' << 8) | 'E'; int blockEnd = ('E' << 24) | ('N' << 16) | ('D' << 8) | '$'; int blockHead = ('H' << 24) | ('E' << 16) | ('A' << 8) | 'D'; - - if(path.length() > 0 && !path.endsWith("/")) { + + if (path.length() > 0 && !path.endsWith("/")) { path = path + "/"; } - + CRC32 crc32 = new CRC32(); int blockType; - for(int i = 0; i < numFiles; ++i) { - + for (int i = 0; i < numFiles; ++i) { + blockType = loadInt(zis); - - if(blockType == blockEnd) { + + if (blockType == blockEnd) { throw new IOException("Unexpected END when there are still " + (numFiles - i) + " files remaining"); } - + String name = readASCII(zis); int len = loadInt(zis); - - if(i == 0) { - if(blockType == blockHead) { + + if (i == 0) { + if (blockType == blockHead) { byte[] readType = new byte[len]; zis.read(readType); - if(!"file-type".equals(name) || !"epk/resources".equals(readASCII(readType))) { + if (!"file-type".equals(name) || !"epk/resources".equals(readASCII(readType))) { throw new IOException("EPK is not of file-type 'epk/resources'!"); } - if(zis.read() != '>') { + if (zis.read() != '>') { throw new IOException("Object '" + name + "' is incomplete"); } continue; - }else { - throw new IOException("File '" + name + "' did not have a file-type block as the first entry in the file"); + } else { + throw new IOException( + "File '" + name + "' did not have a file-type block as the first entry in the file"); } } - - if(blockType == blockFile) { - if(len < 5) { + + if (blockType == blockFile) { + if (len < 5) { throw new IOException("File '" + name + "' is incomplete"); } - + int expectedCRC = loadInt(zis); - + byte[] load = new byte[len - 5]; zis.read(load); - if(len > 5) { + if (len > 5) { crc32.reset(); crc32.update(load, 0, load.length); - if(expectedCRC != (int)crc32.getValue()) { + if (expectedCRC != (int) crc32.getValue()) { throw new IOException("File '" + name + "' has an invalid checksum"); } } - - if(zis.read() != ':') { + + if (zis.read() != ':') { throw new IOException("File '" + name + "' is incomplete"); } - + loadedFiles.put(path + name, load); - }else { + } else { zis.skip(len); } - if(zis.read() != '>') { + if (zis.read() != '>') { throw new IOException("Object '" + name + "' is incomplete"); } } - - if(loadInt(zis) != blockEnd) { + + if (loadInt(zis) != blockEnd) { throw new IOException("EPK missing END$ object"); } - + zis.close(); } - - private static final int loadShort(InputStream is) throws IOException { - return (is.read() << 8) | is.read(); - } - + private static final int loadInt(InputStream is) throws IOException { return (is.read() << 24) | (is.read() << 16) | (is.read() << 8) | is.read(); } - + + private static final int loadShort(InputStream is) throws IOException { + return (is.read() << 8) | is.read(); + } + private static final String readASCII(byte[] bytesIn) throws IOException { char[] charIn = new char[bytesIn.length]; - for(int i = 0; i < bytesIn.length; ++i) { - charIn[i] = (char)((int)bytesIn[i] & 0xFF); + for (int i = 0; i < bytesIn.length; ++i) { + charIn[i] = (char) ((int) bytesIn[i] & 0xFF); } return new String(charIn); } - + private static final String readASCII(InputStream bytesIn) throws IOException { int len = bytesIn.read(); char[] charIn = new char[len]; - for(int i = 0; i < len; ++i) { - charIn[i] = (char)(bytesIn.read() & 0xFF); + for (int i = 0; i < len; ++i) { + charIn[i] = (char) (bytesIn.read() & 0xFF); } return new String(charIn); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatus.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatus.java index afa40d52..80576e72 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatus.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatus.java @@ -10,18 +10,19 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ES6ShimStatus { @@ -29,39 +30,39 @@ public class ES6ShimStatus { private static ES6ShimStatus instance = null; - @JSBody(params = { }, script = "return (typeof __eaglercraftXES6ShimStatus === \"object\") ? __eaglercraftXES6ShimStatus : null;") - private static native ES6ShimStatusJS getRuntimeStatus0(); - public static ES6ShimStatus getRuntimeStatus() { - if(instance == null) { + if (instance == null) { return instance = new ES6ShimStatus(getRuntimeStatus0()); } ES6ShimStatusJS jsImpl = getRuntimeStatus0(); - if(instance.impl != jsImpl) { + if (instance.impl != jsImpl) { instance = new ES6ShimStatus(jsImpl); } return instance; } + @JSBody(params = {}, script = "return (typeof __eaglercraftXES6ShimStatus === \"object\") ? __eaglercraftXES6ShimStatus : null;") + private static native ES6ShimStatusJS getRuntimeStatus0(); + private final ES6ShimStatusJS impl; private final EnumES6ShimStatus status; private final Set shims; public ES6ShimStatus(ES6ShimStatusJS impl) { this.impl = impl; - if(impl != null && TeaVMUtils.isTruthy(impl)) { + if (impl != null && TeaVMUtils.isTruthy(impl)) { this.status = EnumES6ShimStatus.getStatusById(impl.getShimInitStatus()); this.shims = EnumSet.noneOf(EnumES6Shims.class); - for(int i = 0, id, l = impl.getEnabledShimCount(); i < l; ++i) { + for (int i = 0, id, l = impl.getEnabledShimCount(); i < l; ++i) { id = impl.getEnabledShimID(i); EnumES6Shims theShim = EnumES6Shims.getShimById(id); - if(theShim != null) { + if (theShim != null) { this.shims.add(theShim); - }else { + } else { logger.warn("Ignoring unknown shim id: {}", id); } } - }else { + } else { this.status = EnumES6ShimStatus.STATUS_NOT_PRESENT; this.shims = EnumSet.noneOf(EnumES6Shims.class); } @@ -71,12 +72,12 @@ public class ES6ShimStatus { return impl; } - public EnumES6ShimStatus getStatus() { - return status; - } - public Set getShims() { return shims; } + public EnumES6ShimStatus getStatus() { + return status; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatusJS.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatusJS.java index 20b49e17..febb0ebd 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatusJS.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ES6ShimStatusJS.java @@ -4,18 +4,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ES6ShimStatusJS extends JSObject { @@ -43,10 +44,10 @@ public interface ES6ShimStatusJS extends JSObject { public static final int SHIM_MATH_SIGN = 15; public static final int SHIM_SYMBOL = 16; - int getShimInitStatus(); - int getEnabledShimCount(); int getEnabledShimID(int idx); + int getShimInitStatus(); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EarlyLoadScreen.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EarlyLoadScreen.java index 69f6b973..28b4c038 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EarlyLoadScreen.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EarlyLoadScreen.java @@ -1,5 +1,60 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglActiveTexture; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglAttachShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindAttribLocation; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindBuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindTexture; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindVertexArray; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBufferData; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglClear; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglClearColor; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCompileShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCreateProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCreateShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteBuffers; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteTextures; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteVertexArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDetachShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDisableVertexAttribArray; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDrawArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglEnableVertexAttribArray; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenBuffers; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenTextures; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenVertexArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGetUniformLocation; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglLinkProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglShaderSource; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglTexImage2D; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglTexParameteri; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUniform1i; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUniform2f; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUniform4f; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUseProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglVertexAttribPointer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglViewport; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_ARRAY_BUFFER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_CLAMP_TO_EDGE; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_COLOR_BUFFER_BIT; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_FLOAT; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_FRAGMENT_SHADER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_NEAREST; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_RGBA; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_STATIC_DRAW; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE0; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_2D; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_MAG_FILTER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_MIN_FILTER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_WRAP_S; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_WRAP_T; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TRIANGLES; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_UNSIGNED_BYTE; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_VERTEX_SHADER; + +import net.lax1dude.eaglercraft.v1_8.Base64; +import net.lax1dude.eaglercraft.v1_8.EagUtils; import net.lax1dude.eaglercraft.v1_8.internal.IBufferArrayGL; import net.lax1dude.eaglercraft.v1_8.internal.IBufferGL; import net.lax1dude.eaglercraft.v1_8.internal.IProgramGL; @@ -14,26 +69,21 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.IntBuffer; import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; import net.lax1dude.eaglercraft.v1_8.opengl.ImageData; -import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; -import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; - -import net.lax1dude.eaglercraft.v1_8.Base64; -import net.lax1dude.eaglercraft.v1_8.EagUtils; - /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class EarlyLoadScreen { @@ -49,169 +99,50 @@ public class EarlyLoadScreen { private static ITextureGL finalTexture = null; - public static void paintScreen(int glesVers, boolean vaos, boolean showPressDeleteText) { - boolean gles3 = glesVers >= 300; - - // create textures: - - ITextureGL tex = _wglGenTextures(); - _wglActiveTexture(GL_TEXTURE0); - _wglBindTexture(GL_TEXTURE_2D, tex); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - ImageData img = PlatformAssets.loadImageFile(Base64.decodeBase64(loadScreen)); - ByteBuffer upload = PlatformRuntime.allocateByteBuffer(192*192*4); - IntBuffer pixelUpload = upload.asIntBuffer(); - pixelUpload.put(img.pixels); - pixelUpload.flip(); - _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 192, 192, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelUpload); - - pressDeleteTexture = _wglGenTextures(); - _wglBindTexture(GL_TEXTURE_2D, pressDeleteTexture); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - pixelUpload.clear(); - img = PlatformAssets.loadImageFile(Base64.decodeBase64(pressDeleteText)); - pixelUpload.put(img.pixels); - pixelUpload.flip(); - _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 384, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelUpload); - - // create vertex buffer: - - FloatBuffer vertexUpload = upload.asFloatBuffer(); - vertexUpload.clear(); - vertexUpload.put(0.0f); vertexUpload.put(0.0f); - vertexUpload.put(0.0f); vertexUpload.put(1.0f); - vertexUpload.put(1.0f); vertexUpload.put(0.0f); - vertexUpload.put(1.0f); vertexUpload.put(0.0f); - vertexUpload.put(0.0f); vertexUpload.put(1.0f); - vertexUpload.put(1.0f); vertexUpload.put(1.0f); - vertexUpload.flip(); - - vbo = _wglGenBuffers(); - _wglBindBuffer(GL_ARRAY_BUFFER, vbo); - _wglBufferData(GL_ARRAY_BUFFER, vertexUpload, GL_STATIC_DRAW); - - PlatformRuntime.freeByteBuffer(upload); - - // compile the splash shader: - - IShaderGL vert = _wglCreateShader(GL_VERTEX_SHADER); - _wglShaderSource(vert, gles3 - ? "#version 300 es\nprecision mediump float; layout(location = 0) in vec2 a_pos; out vec2 v_pos; void main() { gl_Position = vec4(((v_pos = a_pos) - 0.5) * vec2(2.0, -2.0), 0.0, 1.0); }" - : "#version 100\nprecision mediump float; attribute vec2 a_pos; varying vec2 v_pos; void main() { gl_Position = vec4(((v_pos = a_pos) - 0.5) * vec2(2.0, -2.0), 0.0, 1.0); }"); - _wglCompileShader(vert); - - IShaderGL frag = _wglCreateShader(GL_FRAGMENT_SHADER); - _wglShaderSource(frag, gles3 - ? "#version 300 es\nprecision mediump float; precision mediump sampler2D; in vec2 v_pos; layout(location = 0) out vec4 fragColor; uniform sampler2D tex; uniform vec2 aspect; void main() { fragColor = vec4(textureLod(tex, clamp(v_pos * aspect - ((aspect - 1.0) * 0.5), 0.02, 0.98), 0.0).rgb, 1.0); }" - : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_pos; uniform sampler2D tex; uniform vec2 aspect; void main() { gl_FragColor = vec4(texture2D(tex, clamp(v_pos * aspect - ((aspect - 1.0) * 0.5), 0.02, 0.98)).rgb, 1.0); }"); - _wglCompileShader(frag); - - program = _wglCreateProgram(); - - _wglAttachShader(program, vert); - _wglAttachShader(program, frag); - if(!gles3) { - _wglBindAttribLocation(program, 0, "a_pos"); + public static void destroy() { + if (vbo != null) { + _wglDeleteBuffers(vbo); + vbo = null; } - _wglLinkProgram(program); - _wglDetachShader(program, vert); - _wglDetachShader(program, frag); - _wglDeleteShader(vert); - _wglDeleteShader(frag); - - _wglUseProgram(program); - _wglUniform1i(_wglGetUniformLocation(program, "tex"), 0); - - // compile the delete key text shader: - - if(showPressDeleteText) { - vert = _wglCreateShader(GL_VERTEX_SHADER); - _wglShaderSource(vert, gles3 - ? "#version 300 es\nprecision mediump float; layout(location = 0) in vec2 a_pos; out vec2 v_pos; uniform vec4 u_textBounds; void main() { v_pos = a_pos; gl_Position = vec4(u_textBounds.xy + u_textBounds.zw * a_pos, 0.0, 1.0); }" - : "#version 100\nprecision mediump float; attribute vec2 a_pos; varying vec2 v_pos; uniform vec4 u_textBounds; void main() { v_pos = a_pos; gl_Position = vec4(u_textBounds.xy + u_textBounds.zw * a_pos, 0.0, 1.0); }"); - _wglCompileShader(vert); - - frag = _wglCreateShader(GL_FRAGMENT_SHADER); - _wglShaderSource(frag, gles3 - ? "#version 300 es\nprecision mediump float; precision mediump sampler2D; in vec2 v_pos; layout(location = 0) out vec4 fragColor; uniform sampler2D tex; void main() { fragColor = textureLod(tex, v_pos, 0.0); if(fragColor.a < 0.01) discard; }" - : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_pos; uniform sampler2D tex; void main() { gl_FragColor = texture2D(tex, v_pos); if(gl_FragColor.a < 0.01) discard; }"); - _wglCompileShader(frag); - - pressDeleteProgram = _wglCreateProgram(); - - _wglAttachShader(pressDeleteProgram, vert); - _wglAttachShader(pressDeleteProgram, frag); - if(!gles3) { - _wglBindAttribLocation(pressDeleteProgram, 0, "a_pos"); - } - _wglLinkProgram(pressDeleteProgram); - _wglDetachShader(pressDeleteProgram, vert); - _wglDetachShader(pressDeleteProgram, frag); - _wglDeleteShader(vert); - _wglDeleteShader(frag); - - _wglUseProgram(pressDeleteProgram); - _wglUniform1i(_wglGetUniformLocation(pressDeleteProgram, "tex"), 0); + if (program != null) { + _wglDeleteProgram(program); + program = null; } - - int width = PlatformInput.getWindowWidth(); - int height = PlatformInput.getWindowHeight(); - float x, y; - if(width > height) { - x = (float)width / (float)height; - y = 1.0f; - }else { - x = 1.0f; - y = (float)height / (float)width; + if (pressDeleteTexture != null) { + _wglDeleteTextures(pressDeleteTexture); + pressDeleteTexture = null; } - - _wglActiveTexture(GL_TEXTURE0); - _wglBindTexture(GL_TEXTURE_2D, tex); - - _wglViewport(0, 0, width, height); - _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); - _wglClear(GL_COLOR_BUFFER_BIT); - - _wglUseProgram(program); - _wglUniform2f(_wglGetUniformLocation(program, "aspect"), x, y); - - IBufferArrayGL vao = null; - if(vaos) { - vao = _wglGenVertexArrays(); - _wglBindVertexArray(vao); + if (pressDeleteProgram != null) { + _wglDeleteProgram(pressDeleteProgram); + pressDeleteProgram = null; } - _wglEnableVertexAttribArray(0); - _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); - _wglDrawArrays(GL_TRIANGLES, 0, 6); - - if(showPressDeleteText) { - renderPressDeleteText(x, y); - } - - _wglDisableVertexAttribArray(0); - - PlatformInput.update(); - EagUtils.sleep(50); // allow webgl to flush - - _wglUseProgram(null); - _wglBindBuffer(GL_ARRAY_BUFFER, null); - _wglBindTexture(GL_TEXTURE_2D, null); - _wglDeleteTextures(tex); - if(vaos) { - _wglDeleteVertexArrays(vao); + if (finalTexture != null) { + _wglDeleteTextures(finalTexture); + finalTexture = null; } } + public static void loadFinal(byte[] image) { + ImageData img = PlatformAssets.loadImageFile(image); + if (img == null) { + return; + } + finalTexture = _wglGenTextures(); + _wglActiveTexture(GL_TEXTURE0); + _wglBindTexture(GL_TEXTURE_2D, finalTexture); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + IntBuffer upload = PlatformRuntime.allocateIntBuffer(img.width * img.height); + upload.put(img.pixels); + upload.flip(); + _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, upload); + PlatformRuntime.freeIntBuffer(upload); + } + public static void paintEnable(boolean vaos, boolean showPressDeleteText) { - + ITextureGL tex = _wglGenTextures(); _wglActiveTexture(GL_TEXTURE0); _wglBindTexture(GL_TEXTURE_2D, tex); @@ -220,37 +151,37 @@ public class EarlyLoadScreen { _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); ImageData img = PlatformAssets.loadImageFile(Base64.decodeBase64(enableScreen)); - IntBuffer upload = PlatformRuntime.allocateIntBuffer(128*128); + IntBuffer upload = PlatformRuntime.allocateIntBuffer(128 * 128); upload.put(img.pixels); upload.flip(); _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, upload); - + PlatformRuntime.freeIntBuffer(upload); - + _wglUseProgram(program); int width = PlatformInput.getWindowWidth(); int height = PlatformInput.getWindowHeight(); float x, y; - if(width > height) { - x = (float)width / (float)height; + if (width > height) { + x = (float) width / (float) height; y = 1.0f; - }else { + } else { x = 1.0f; - y = (float)height / (float)width; + y = (float) height / (float) width; } - + _wglActiveTexture(GL_TEXTURE0); _wglBindTexture(GL_TEXTURE_2D, tex); - + _wglViewport(0, 0, width, height); _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); _wglClear(GL_COLOR_BUFFER_BIT); - + _wglUniform2f(_wglGetUniformLocation(program, "aspect"), x, y); IBufferArrayGL vao = null; - if(vaos) { + if (vaos) { vao = _wglGenVertexArrays(); _wglBindVertexArray(vao); } @@ -258,13 +189,13 @@ public class EarlyLoadScreen { _wglEnableVertexAttribArray(0); _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); _wglDrawArrays(GL_TRIANGLES, 0, 6); - - if(showPressDeleteText) { + + if (showPressDeleteText) { renderPressDeleteText(x, y); } - + _wglDisableVertexAttribArray(0); - + PlatformInput.update(); EagUtils.sleep(50); // allow webgl to flush @@ -272,104 +203,257 @@ public class EarlyLoadScreen { _wglBindBuffer(GL_ARRAY_BUFFER, null); _wglBindTexture(GL_TEXTURE_2D, null); _wglDeleteTextures(tex); - if(vaos) { + if (vaos) { _wglDeleteVertexArrays(vao); } - - } - public static void loadFinal(byte[] image) { - finalTexture = _wglGenTextures(); - _wglActiveTexture(GL_TEXTURE0); - _wglBindTexture(GL_TEXTURE_2D, finalTexture); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - ImageData img = PlatformAssets.loadImageFile(image); - IntBuffer upload = PlatformRuntime.allocateIntBuffer(256*256); - upload.put(img.pixels); - upload.flip(); - _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, upload); - PlatformRuntime.freeIntBuffer(upload); } public static void paintFinal(boolean vaos, boolean softVAOs, boolean showPressDeleteText) { - if(finalTexture == null) return; - + if (finalTexture == null) + return; + _wglBindTexture(GL_TEXTURE_2D, finalTexture); _wglUseProgram(program); int width = PlatformInput.getWindowWidth(); int height = PlatformInput.getWindowHeight(); float x, y; - if(width > height) { - x = (float)width / (float)height; + if (width > height) { + x = (float) width / (float) height; y = 1.0f; - }else { + } else { x = 1.0f; - y = (float)height / (float)width; + y = (float) height / (float) width; } - + _wglActiveTexture(GL_TEXTURE0); _wglBindTexture(GL_TEXTURE_2D, finalTexture); - + _wglViewport(0, 0, width, height); _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); _wglClear(GL_COLOR_BUFFER_BIT); - + _wglUniform2f(_wglGetUniformLocation(program, "aspect"), x, y); IBufferArrayGL vao = null; - if(vaos) { - if(softVAOs) { + if (vaos) { + if (softVAOs) { vao = EaglercraftGPU.createGLBufferArray(); EaglercraftGPU.bindGLBufferArray(vao); - }else { + } else { vao = _wglGenVertexArrays(); _wglBindVertexArray(vao); } } - if(vaos && softVAOs) { + if (vaos && softVAOs) { EaglercraftGPU.bindVAOGLArrayBuffer(vbo); EaglercraftGPU.enableVertexAttribArray(0); EaglercraftGPU.vertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); EaglercraftGPU.doDrawArrays(GL_TRIANGLES, 0, 6); - }else { + } else { _wglBindBuffer(GL_ARRAY_BUFFER, vbo); _wglEnableVertexAttribArray(0); _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); _wglDrawArrays(GL_TRIANGLES, 0, 6); } - - if(!softVAOs && showPressDeleteText) { + + if (!softVAOs && showPressDeleteText) { renderPressDeleteText(x, y); } - if(!softVAOs) { + if (!softVAOs) { _wglDisableVertexAttribArray(0); } - + PlatformInput.update(); EagUtils.sleep(50); // allow webgl to flush _wglUseProgram(null); - if(!(vaos && softVAOs)) { + if (!(vaos && softVAOs)) { _wglBindBuffer(GL_ARRAY_BUFFER, null); } _wglBindTexture(GL_TEXTURE_2D, null); - if(softVAOs) { - EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_TEXTURE0); + if (softVAOs) { + EaglercraftGPU.clearCurrentBinding( + EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_TEXTURE0); } - if(vaos) { - if(softVAOs) { + if (vaos) { + if (softVAOs) { EaglercraftGPU.destroyGLBufferArray(vao); - }else { + } else { _wglDeleteVertexArrays(vao); } } } + public static void paintScreen(int glesVers, boolean vaos, boolean showPressDeleteText) { + boolean gles3 = glesVers >= 300; + + // create textures: + + ITextureGL tex = _wglGenTextures(); + _wglActiveTexture(GL_TEXTURE0); + _wglBindTexture(GL_TEXTURE_2D, tex); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + ImageData img = PlatformAssets.loadImageFile(Base64.decodeBase64(loadScreen)); + ByteBuffer upload = PlatformRuntime.allocateByteBuffer(192 * 192 * 4); + IntBuffer pixelUpload = upload.asIntBuffer(); + pixelUpload.put(img.pixels); + pixelUpload.flip(); + _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 192, 192, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelUpload); + + pressDeleteTexture = _wglGenTextures(); + _wglBindTexture(GL_TEXTURE_2D, pressDeleteTexture); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + pixelUpload.clear(); + img = PlatformAssets.loadImageFile(Base64.decodeBase64(pressDeleteText)); + pixelUpload.put(img.pixels); + pixelUpload.flip(); + _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 384, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelUpload); + + // create vertex buffer: + + FloatBuffer vertexUpload = upload.asFloatBuffer(); + vertexUpload.clear(); + vertexUpload.put(0.0f); + vertexUpload.put(0.0f); + vertexUpload.put(0.0f); + vertexUpload.put(1.0f); + vertexUpload.put(1.0f); + vertexUpload.put(0.0f); + vertexUpload.put(1.0f); + vertexUpload.put(0.0f); + vertexUpload.put(0.0f); + vertexUpload.put(1.0f); + vertexUpload.put(1.0f); + vertexUpload.put(1.0f); + vertexUpload.flip(); + + vbo = _wglGenBuffers(); + _wglBindBuffer(GL_ARRAY_BUFFER, vbo); + _wglBufferData(GL_ARRAY_BUFFER, vertexUpload, GL_STATIC_DRAW); + + PlatformRuntime.freeByteBuffer(upload); + + // compile the splash shader: + + IShaderGL vert = _wglCreateShader(GL_VERTEX_SHADER); + _wglShaderSource(vert, gles3 + ? "#version 300 es\nprecision mediump float; layout(location = 0) in vec2 a_pos; out vec2 v_pos; void main() { gl_Position = vec4(((v_pos = a_pos) - 0.5) * vec2(2.0, -2.0), 0.0, 1.0); }" + : "#version 100\nprecision mediump float; attribute vec2 a_pos; varying vec2 v_pos; void main() { gl_Position = vec4(((v_pos = a_pos) - 0.5) * vec2(2.0, -2.0), 0.0, 1.0); }"); + _wglCompileShader(vert); + + IShaderGL frag = _wglCreateShader(GL_FRAGMENT_SHADER); + _wglShaderSource(frag, gles3 + ? "#version 300 es\nprecision mediump float; precision mediump sampler2D; in vec2 v_pos; layout(location = 0) out vec4 fragColor; uniform sampler2D tex; uniform vec2 aspect; void main() { fragColor = vec4(textureLod(tex, clamp(v_pos * aspect - ((aspect - 1.0) * 0.5), 0.02, 0.98), 0.0).rgb, 1.0); }" + : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_pos; uniform sampler2D tex; uniform vec2 aspect; void main() { gl_FragColor = vec4(texture2D(tex, clamp(v_pos * aspect - ((aspect - 1.0) * 0.5), 0.02, 0.98)).rgb, 1.0); }"); + _wglCompileShader(frag); + + program = _wglCreateProgram(); + + _wglAttachShader(program, vert); + _wglAttachShader(program, frag); + if (!gles3) { + _wglBindAttribLocation(program, 0, "a_pos"); + } + _wglLinkProgram(program); + _wglDetachShader(program, vert); + _wglDetachShader(program, frag); + _wglDeleteShader(vert); + _wglDeleteShader(frag); + + _wglUseProgram(program); + _wglUniform1i(_wglGetUniformLocation(program, "tex"), 0); + + // compile the delete key text shader: + + if (showPressDeleteText) { + vert = _wglCreateShader(GL_VERTEX_SHADER); + _wglShaderSource(vert, gles3 + ? "#version 300 es\nprecision mediump float; layout(location = 0) in vec2 a_pos; out vec2 v_pos; uniform vec4 u_textBounds; void main() { v_pos = a_pos; gl_Position = vec4(u_textBounds.xy + u_textBounds.zw * a_pos, 0.0, 1.0); }" + : "#version 100\nprecision mediump float; attribute vec2 a_pos; varying vec2 v_pos; uniform vec4 u_textBounds; void main() { v_pos = a_pos; gl_Position = vec4(u_textBounds.xy + u_textBounds.zw * a_pos, 0.0, 1.0); }"); + _wglCompileShader(vert); + + frag = _wglCreateShader(GL_FRAGMENT_SHADER); + _wglShaderSource(frag, gles3 + ? "#version 300 es\nprecision mediump float; precision mediump sampler2D; in vec2 v_pos; layout(location = 0) out vec4 fragColor; uniform sampler2D tex; void main() { fragColor = textureLod(tex, v_pos, 0.0); if(fragColor.a < 0.01) discard; }" + : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_pos; uniform sampler2D tex; void main() { gl_FragColor = texture2D(tex, v_pos); if(gl_FragColor.a < 0.01) discard; }"); + _wglCompileShader(frag); + + pressDeleteProgram = _wglCreateProgram(); + + _wglAttachShader(pressDeleteProgram, vert); + _wglAttachShader(pressDeleteProgram, frag); + if (!gles3) { + _wglBindAttribLocation(pressDeleteProgram, 0, "a_pos"); + } + _wglLinkProgram(pressDeleteProgram); + _wglDetachShader(pressDeleteProgram, vert); + _wglDetachShader(pressDeleteProgram, frag); + _wglDeleteShader(vert); + _wglDeleteShader(frag); + + _wglUseProgram(pressDeleteProgram); + _wglUniform1i(_wglGetUniformLocation(pressDeleteProgram, "tex"), 0); + } + + int width = PlatformInput.getWindowWidth(); + int height = PlatformInput.getWindowHeight(); + float x, y; + if (width > height) { + x = (float) width / (float) height; + y = 1.0f; + } else { + x = 1.0f; + y = (float) height / (float) width; + } + + _wglActiveTexture(GL_TEXTURE0); + _wglBindTexture(GL_TEXTURE_2D, tex); + + _wglViewport(0, 0, width, height); + _wglClearColor(1.0f, 1.0f, 1.0f, 1.0f); + _wglClear(GL_COLOR_BUFFER_BIT); + + _wglUseProgram(program); + _wglUniform2f(_wglGetUniformLocation(program, "aspect"), x, y); + + IBufferArrayGL vao = null; + if (vaos) { + vao = _wglGenVertexArrays(); + _wglBindVertexArray(vao); + } + _wglEnableVertexAttribArray(0); + _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); + _wglDrawArrays(GL_TRIANGLES, 0, 6); + + if (showPressDeleteText) { + renderPressDeleteText(x, y); + } + + _wglDisableVertexAttribArray(0); + + PlatformInput.update(); + EagUtils.sleep(50); // allow webgl to flush + + _wglUseProgram(null); + _wglBindBuffer(GL_ARRAY_BUFFER, null); + _wglBindTexture(GL_TEXTURE_2D, null); + _wglDeleteTextures(tex); + if (vaos) { + _wglDeleteVertexArrays(vao); + } + } + private static void renderPressDeleteText(float aspectX, float aspectY) { aspectX = 1.0f / aspectX; aspectY = 1.0f / aspectY; @@ -384,27 +468,4 @@ public class EarlyLoadScreen { _wglDrawArrays(GL_TRIANGLES, 0, 6); } - public static void destroy() { - if(vbo != null) { - _wglDeleteBuffers(vbo); - vbo = null; - } - if(program != null) { - _wglDeleteProgram(program); - program = null; - } - if(pressDeleteTexture != null) { - _wglDeleteTextures(pressDeleteTexture); - pressDeleteTexture = null; - } - if(pressDeleteProgram != null) { - _wglDeleteProgram(pressDeleteProgram); - pressDeleteProgram = null; - } - if(finalTexture != null) { - _wglDeleteTextures(finalTexture); - finalTexture = null; - } - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6ShimStatus.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6ShimStatus.java index 571edb5d..ca4923a1 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6ShimStatus.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6ShimStatus.java @@ -2,18 +2,19 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumES6ShimStatus { STATUS_NOT_PRESENT(Integer.MIN_VALUE, "Not present"), @@ -23,12 +24,12 @@ public enum EnumES6ShimStatus { STATUS_DISABLED_ERRORS(ES6ShimStatusJS.INIT_STATUS_DISABLED_ERRORS, "Errors; Disabled"), STATUS_ENABLED_ERRORS(ES6ShimStatusJS.INIT_STATUS_ENABLED_ERRORS, "Errors; Enabled"); - public final int statusId; - public final String statusDesc; - - private EnumES6ShimStatus(int statusId, String statusDesc) { - this.statusId = statusId; - this.statusDesc = statusDesc; + private static final EnumES6ShimStatus[] lookup = new EnumES6ShimStatus[5]; + static { + EnumES6ShimStatus[] _values = values(); + for (int i = 0; i < _values.length; ++i) { + lookup[_values[i].statusId + 1] = _values[i]; + } } public static EnumES6ShimStatus getStatusById(int id) { @@ -36,6 +37,15 @@ public enum EnumES6ShimStatus { return (id >= 0 && id < lookup.length) ? lookup[id] : null; } + public final int statusId; + + public final String statusDesc; + + private EnumES6ShimStatus(int statusId, String statusDesc) { + this.statusId = statusId; + this.statusDesc = statusDesc; + } + public boolean isEnabled() { return (statusId != -1) && (statusId & 1) != 0; } @@ -44,13 +54,4 @@ public enum EnumES6ShimStatus { return (statusId == -1) || (statusId & 2) != 0; } - private static final EnumES6ShimStatus[] lookup = new EnumES6ShimStatus[5]; - - static { - EnumES6ShimStatus[] _values = values(); - for(int i = 0; i < _values.length; ++i) { - lookup[_values[i].statusId + 1] = _values[i]; - } - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6Shims.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6Shims.java index d621be31..b86866b3 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6Shims.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/EnumES6Shims.java @@ -2,24 +2,23 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public enum EnumES6Shims { - SHIM_CLASS_MAP(ES6ShimStatusJS.SHIM_MAP, "Map"), - SHIM_CLASS_WEAKMAP(ES6ShimStatusJS.SHIM_WEAKMAP, "WeakMap"), - SHIM_CLASS_SET(ES6ShimStatusJS.SHIM_SET, "Set"), - SHIM_CLASS_WEAKSET(ES6ShimStatusJS.SHIM_WEAKSET, "WeakSet"), + SHIM_CLASS_MAP(ES6ShimStatusJS.SHIM_MAP, "Map"), SHIM_CLASS_WEAKMAP(ES6ShimStatusJS.SHIM_WEAKMAP, "WeakMap"), + SHIM_CLASS_SET(ES6ShimStatusJS.SHIM_SET, "Set"), SHIM_CLASS_WEAKSET(ES6ShimStatusJS.SHIM_WEAKSET, "WeakSet"), SHIM_CLASS_PROMISE(ES6ShimStatusJS.SHIM_PROMISE, "Promise"), SHIM_STRING_FROM_CODE_POINT(ES6ShimStatusJS.SHIM_STRING_FROM_CODE_POINT, "String.fromCodePoint"), SHIM_STRING_PROTO_CODE_POINT_AT(ES6ShimStatusJS.SHIM_STRING_CODE_POINT_AT, "String.prototype.codePointAt"), @@ -34,7 +33,20 @@ public enum EnumES6Shims { SHIM_MATH_SIGN(ES6ShimStatusJS.SHIM_MATH_SIGN, "Math.sign"), SHIM_FAKE_SYMBOL(ES6ShimStatusJS.SHIM_SYMBOL, "Symbol (sham)"); + private static final EnumES6Shims[] lookup = new EnumES6Shims[20]; + static { + EnumES6Shims[] _values = values(); + for (int i = 0; i < _values.length; ++i) { + lookup[_values[i].shimId] = _values[i]; + } + } + + public static EnumES6Shims getShimById(int id) { + return (id >= 0 && id < lookup.length) ? lookup[id] : null; + } + public final int shimId; + public final String shimDesc; private EnumES6Shims(int shimId, String shimDesc) { @@ -42,17 +54,4 @@ public enum EnumES6Shims { this.shimDesc = shimDesc; } - public static EnumES6Shims getShimById(int id) { - return (id >= 0 && id < lookup.length) ? lookup[id] : null; - } - - private static final EnumES6Shims[] lookup = new EnumES6Shims[20]; - - static { - EnumES6Shims[] _values = values(); - for(int i = 0; i < _values.length; ++i) { - lookup[_values[i].shimId] = _values[i]; - } - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/FixWebMDurationJS.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/FixWebMDurationJS.java index 8bbf4a1d..ff05d1fe 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/FixWebMDurationJS.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/FixWebMDurationJS.java @@ -10,40 +10,25 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2023-2024 lax1dude, ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class FixWebMDurationJS { - private static final Logger logger = LogManager.getLogger("FixWebMDurationJS"); - - private static JSObject fixWebMDurationHandle = null; - - @JSBody(params = {}, script = "return typeof window.ysFixWebmDuration !== \"undefined\"") - private static native boolean isOldScriptStillLoaded(); - - public static void checkOldScriptStillLoaded() { - if(isOldScriptStillLoaded()) { - logger.error("The \"fix-webm-duration.js\" script is no longer required for EaglercraftX 1.8 u20 and up, it can be safely removed from this page"); - } - } - - public static void getRecUrl(Event e, int duration, RecUrlHandler cb, LogMsgHandler logger) { - checkOldScriptStillLoaded(); - if(fixWebMDurationHandle == null) { - fixWebMDurationHandle = register(); - } - getRecUrlImpl(fixWebMDurationHandle, e, duration, cb, logger); + @JSFunctor + public static interface LogMsgHandler extends JSObject { + void onMsg(String url); } @JSFunctor @@ -51,36 +36,55 @@ public class FixWebMDurationJS { void onUrl(String url); } - @JSFunctor - public static interface LogMsgHandler extends JSObject { - void onMsg(String url); + private static final Logger logger = LogManager.getLogger("FixWebMDurationJS"); + + private static JSObject fixWebMDurationHandle = null; + + public static void checkOldScriptStillLoaded() { + if (isOldScriptStillLoaded()) { + logger.error( + "The \"fix-webm-duration.js\" script is no longer required for EaglercraftX 1.8 u20 and up, it can be safely removed from this page"); + } } - @JSBody(params = { "lib", "e", "duration", "cb", "lgg" }, script = "lib(e.data, duration, function(b) { cb(URL.createObjectURL(b)); }, { logger: lgg });") - private static native void getRecUrlImpl(JSObject lib, Event e, int duration, RecUrlHandler cb, LogMsgHandler logger); + public static void getRecUrl(Event e, int duration, RecUrlHandler cb, LogMsgHandler logger) { + checkOldScriptStillLoaded(); + if (fixWebMDurationHandle == null) { + fixWebMDurationHandle = register(); + } + getRecUrlImpl(fixWebMDurationHandle, e, duration, cb, logger); + } + + @JSBody(params = { "lib", "e", "duration", "cb", + "lgg" }, script = "lib(e.data, duration, function(b) { cb(URL.createObjectURL(b)); }, { logger: lgg });") + private static native void getRecUrlImpl(JSObject lib, Event e, int duration, RecUrlHandler cb, + LogMsgHandler logger); + + @JSBody(params = {}, script = "return typeof window.ysFixWebmDuration !== \"undefined\"") + private static native boolean isOldScriptStillLoaded(); /* * The MIT license (for fix-webm-duration) - * + * * Copyright (c) 2018 Yury Sitnikov - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ @JSBody(params = {}, script = "var m=function(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a};var e=function(a,b){this.name=a||\"Unknown\";this.type=b||\"Unknown\"};var l=function(a,b){e.call(this,a,b||\"Uint\")};var k=function(a,b){e.call(this,a,b||\"Float\")};var h=function(a,b){e.call(this,a,b||\"Container\")};var n=function(a){h.call(this,\"File\",\"File\");" diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IFrameSafetyException.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IFrameSafetyException.java index a3900983..5dc1b6ed 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IFrameSafetyException.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IFrameSafetyException.java @@ -2,32 +2,33 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IFrameSafetyException extends RuntimeException { public IFrameSafetyException() { } - public IFrameSafetyException(String message, Throwable cause) { - super(message, cause); - } - public IFrameSafetyException(String message) { super(message); } + public IFrameSafetyException(String message, Throwable cause) { + super(message, cause); + } + public IFrameSafetyException(Throwable cause) { super(cause); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ImmediateContinue.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ImmediateContinue.java index 53597780..ba9876e8 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ImmediateContinue.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ImmediateContinue.java @@ -4,23 +4,24 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface ImmediateContinue { - public boolean isValidToken(JSObject someObject); - public void execute(); + public boolean isValidToken(JSObject someObject); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IndexedDBFilesystem.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IndexedDBFilesystem.java index 8a75b99e..0994e69f 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IndexedDBFilesystem.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/IndexedDBFilesystem.java @@ -33,179 +33,128 @@ import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFSIterator2; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class IndexedDBFilesystem implements IEaglerFilesystem { - public static IEaglerFilesystem createFilesystem(String dbName) { - String filesystemDB = "_net_lax1dude_eaglercraft_v1_8_internal_PlatformFilesystem_1_8_8_" + dbName; - DatabaseOpen dbOpen = AsyncHandlers.openDB(filesystemDB); - - if(dbOpen.failedLocked) { - throw new FilesystemDatabaseLockedException(dbOpen.failedError); - } - - if(dbOpen.failedInit) { - throw new FilesystemDatabaseInitializationException(dbOpen.failedError); - } - - if(dbOpen.database == null) { - throw new NullPointerException("IDBDatabase is null!"); - } - - return new IndexedDBFilesystem(dbName, filesystemDB, dbOpen.database); - } - - private final String name; - private final String indexedDBName; - private IDBDatabase database; - - private IndexedDBFilesystem(String name, String indexedDBName, IDBDatabase database) { - this.name = name; - this.indexedDBName = indexedDBName; - this.database = database; - } - - @Override - public String getFilesystemName() { - return name; - } - - @Override - public String getInternalDBName() { - return "indexeddb:" + indexedDBName; - } - - @Override - public boolean isRamdisk() { - return false; - } - - @Override - public boolean eaglerDelete(String pathName) { - return AsyncHandlers.deleteFile(database, pathName).bool; - } - - @Override - public ByteBuffer eaglerRead(String pathName) { - ArrayBuffer ar = AsyncHandlers.readWholeFile(database, pathName); - if(ar == null) { - return null; - } - return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(Int8Array.create(ar)); - } - - @Override - public void eaglerWrite(String pathName, ByteBuffer data) { - if(!AsyncHandlers.writeWholeFile(database, pathName, EaglerArrayBufferAllocator.getDataView8Unsigned(data).getBuffer()).bool) { - throw new EaglerFileSystemException("Failed to write " + data.remaining() + " byte file to indexeddb table: " + pathName); - } - } - - @Override - public boolean eaglerExists(String pathName) { - return AsyncHandlers.fileExists(database, pathName).bool; - } - - @Override - public boolean eaglerMove(String pathNameOld, String pathNameNew) { - ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathNameOld); - return old != null && AsyncHandlers.writeWholeFile(database, pathNameNew, old).bool && AsyncHandlers.deleteFile(database, pathNameOld).bool; - } - - @Override - public int eaglerCopy(String pathNameOld, String pathNameNew) { - ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathNameOld); - if(old != null && AsyncHandlers.writeWholeFile(database, pathNameNew, old).bool) { - return old.getByteLength(); - }else { - return -1; - } - } - - @Override - public int eaglerSize(String pathName) { - ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathName); - return old == null ? -1 : old.getByteLength(); - } - - @Override - public void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive) { - if(recursive) { - AsyncHandlers.iterateFiles(database, pathName, false, itr); - }else { - AsyncHandlers.iterateFiles(database, pathName, false, new VFSFilenameIteratorNonRecursive(itr, VFSFilenameIteratorNonRecursive.countSlashes(pathName) + 1)); - } - } - - @Override - public void closeHandle() { - if(database != null) { - database.close(); - database = null; - } - } - - protected static class DatabaseOpen { - - protected final boolean failedInit; - protected final boolean failedLocked; - protected final String failedError; - - protected final IDBDatabase database; - - protected DatabaseOpen(boolean init, boolean locked, String error, IDBDatabase db) { - failedInit = init; - failedLocked = locked; - failedError = error; - database = db; - } - - } - - @JSBody(script = "return ((typeof indexedDB) !== 'undefined') ? indexedDB : null;") - protected static native IDBFactory createIDBFactory(); - - @JSFunctor - protected static interface OpenErrorCallback extends JSObject { - void call(String str); - } - - @JSBody(params = { "factory", "name", "ii", "errCB" }, script = "try { return factory.open(name, ii); } catch(err) { errCB(\"\" + err); return null; }") - protected static native IDBOpenDBRequest safeOpen(IDBFactory factory, String name, int i, OpenErrorCallback errCB); - protected static class AsyncHandlers { - + + @Async + protected static native BooleanResult deleteFile(IDBDatabase db, String name); + + private static void deleteFile(IDBDatabase db, String name, final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", "readwrite"); + final IDBRequest r = tx.objectStore("filesystem").delete(makeTheFuckingKeyWork(name)); + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.TRUE); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.FALSE); + } + }); + } + + @Async + protected static native BooleanResult fileExists(IDBDatabase db, String name); + + private static void fileExists(IDBDatabase db, String name, final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", "readonly"); + final IDBCountRequest r = tx.objectStore("filesystem").count(makeTheFuckingKeyWork(name)); + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult._new(r.getResult() > 0)); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(BooleanResult.FALSE); + } + }); + } + + @Async + protected static native Integer iterateFiles(IDBDatabase db, final String prefix, boolean rw, + final VFSFilenameIterator itr); + + private static void iterateFiles(IDBDatabase db, final String prefix, boolean rw, final VFSFilenameIterator itr, + final AsyncCallback cb) { + IDBTransaction tx = db.transaction("filesystem", rw ? "readwrite" : "readonly"); + final IDBCursorRequest r = tx.objectStore("filesystem").openCursor(); + final int[] res = new int[1]; + final boolean b = prefix.length() == 0; + TeaVMUtils.addEventListener(r, "success", new EventHandler() { + @Override + public void handleEvent() { + IDBCursor c = r.getResult(); + if (c == null || c.getKey() == null) { + cb.complete(res[0]); + return; + } + String k = readKey(c.getKey()); + if (k != null) { + if (b || k.startsWith(prefix)) { + int ci = res[0]++; + try { + itr.next(k); + } catch (VFSIterator2.BreakLoop ex) { + cb.complete(res[0]); + return; + } + } + } + c.doContinue(); + } + }); + TeaVMUtils.addEventListener(r, "error", new EventHandler() { + @Override + public void handleEvent() { + cb.complete(res[0] > 0 ? res[0] : -1); + } + }); + } + + @JSBody(params = { "obj" }, script = "return [obj];") + private static native JSObject makeTheFuckingKeyWork(String k); + @Async protected static native DatabaseOpen openDB(String name); - + private static void openDB(String name, final AsyncCallback cb) { IDBFactory i = createIDBFactory(); - if(i == null) { + if (i == null) { cb.complete(new DatabaseOpen(true, false, "window.indexedDB was null or undefined", null)); return; } final String[] errorHolder = new String[] { null }; final IDBOpenDBRequest f = safeOpen(i, name, 1, (e) -> errorHolder[0] = e); - if(f == null || TeaVMUtils.isNotTruthy(f)) { - cb.complete(new DatabaseOpen(true, false, errorHolder[0] != null ? errorHolder[0] : "database open request was null or undefined", null)); + if (f == null || TeaVMUtils.isNotTruthy(f)) { + cb.complete(new DatabaseOpen(true, false, + errorHolder[0] != null ? errorHolder[0] : "database open request was null or undefined", null)); return; } TeaVMUtils.addEventListener(f, "blocked", new EventHandler() { @Override public void handleEvent() { - cb.complete(new DatabaseOpen(false, true, null, null)); + cb.complete(new DatabaseOpen(false, true, "database locked", null)); } }); TeaVMUtils.addEventListener(f, "success", new EventHandler() { @@ -227,36 +176,18 @@ public class IndexedDBFilesystem implements IEaglerFilesystem { } }); } - - @Async - protected static native BooleanResult deleteFile(IDBDatabase db, String name); - - private static void deleteFile(IDBDatabase db, String name, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", "readwrite"); - final IDBRequest r = tx.objectStore("filesystem").delete(makeTheFuckingKeyWork(name)); - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.TRUE); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.FALSE); - } - }); - } - - @JSBody(params = { "obj" }, script = "return (typeof obj === \"undefined\") ? null : ((typeof obj.data === \"undefined\") ? null : obj.data);") + + @JSBody(params = { + "k" }, script = "return ((typeof k) === \"string\") ? k : (((typeof k) === \"undefined\") ? null : (((typeof k[0]) === \"string\") ? k[0] : null));") + private static native String readKey(JSObject k); + + @JSBody(params = { + "obj" }, script = "return (typeof obj === \"undefined\") ? null : ((typeof obj.data === \"undefined\") ? null : obj.data);") protected static native ArrayBuffer readRow(JSObject obj); - - @JSBody(params = { "obj" }, script = "return [obj];") - private static native JSObject makeTheFuckingKeyWork(String k); - + @Async protected static native ArrayBuffer readWholeFile(IDBDatabase db, String name); - + private static void readWholeFile(IDBDatabase db, String name, final AsyncCallback cb) { IDBTransaction tx = db.transaction("filesystem", "readonly"); final IDBGetRequest r = tx.objectStore("filesystem").get(makeTheFuckingKeyWork(name)); @@ -272,78 +203,17 @@ public class IndexedDBFilesystem implements IEaglerFilesystem { cb.complete(null); } }); - + } - - @JSBody(params = { "k" }, script = "return ((typeof k) === \"string\") ? k : (((typeof k) === \"undefined\") ? null : (((typeof k[0]) === \"string\") ? k[0] : null));") - private static native String readKey(JSObject k); - - @Async - protected static native Integer iterateFiles(IDBDatabase db, final String prefix, boolean rw, final VFSFilenameIterator itr); - - private static void iterateFiles(IDBDatabase db, final String prefix, boolean rw, final VFSFilenameIterator itr, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", rw ? "readwrite" : "readonly"); - final IDBCursorRequest r = tx.objectStore("filesystem").openCursor(); - final int[] res = new int[1]; - final boolean b = prefix.length() == 0; - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - IDBCursor c = r.getResult(); - if(c == null || c.getKey() == null || c.getValue() == null) { - cb.complete(res[0]); - return; - } - String k = readKey(c.getKey()); - if(k != null) { - if(b || k.startsWith(prefix)) { - int ci = res[0]++; - try { - itr.next(k); - }catch(VFSIterator2.BreakLoop ex) { - cb.complete(res[0]); - return; - } - } - } - c.doContinue(); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(res[0] > 0 ? res[0] : -1); - } - }); - } - - @Async - protected static native BooleanResult fileExists(IDBDatabase db, String name); - - private static void fileExists(IDBDatabase db, String name, final AsyncCallback cb) { - IDBTransaction tx = db.transaction("filesystem", "readonly"); - final IDBCountRequest r = tx.objectStore("filesystem").count(makeTheFuckingKeyWork(name)); - TeaVMUtils.addEventListener(r, "success", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult._new(r.getResult() > 0)); - } - }); - TeaVMUtils.addEventListener(r, "error", new EventHandler() { - @Override - public void handleEvent() { - cb.complete(BooleanResult.FALSE); - } - }); - } - + @JSBody(params = { "pat", "dat" }, script = "return { path: pat, data: dat };") protected static native JSObject writeRow(String name, ArrayBuffer data); - + @Async protected static native BooleanResult writeWholeFile(IDBDatabase db, String name, ArrayBuffer data); - - private static void writeWholeFile(IDBDatabase db, String name, ArrayBuffer data, final AsyncCallback cb) { + + private static void writeWholeFile(IDBDatabase db, String name, ArrayBuffer data, + final AsyncCallback cb) { IDBTransaction tx = db.transaction("filesystem", "readwrite"); final IDBRequest r = tx.objectStore("filesystem").put(writeRow(name, data)); TeaVMUtils.addEventListener(r, "success", new EventHandler() { @@ -359,7 +229,151 @@ public class IndexedDBFilesystem implements IEaglerFilesystem { } }); } - + + } + + protected static class DatabaseOpen { + + protected final boolean failedInit; + protected final boolean failedLocked; + protected final String failedError; + + protected final IDBDatabase database; + + protected DatabaseOpen(boolean init, boolean locked, String error, IDBDatabase db) { + failedInit = init; + failedLocked = locked; + failedError = error; + database = db; + } + + } + + @JSFunctor + protected static interface OpenErrorCallback extends JSObject { + void call(String str); + } + + public static IEaglerFilesystem createFilesystem(String dbName) { + String filesystemDB = "_net_lax1dude_eaglercraft_v1_8_internal_PlatformFilesystem_1_8_8_" + dbName; + DatabaseOpen dbOpen = AsyncHandlers.openDB(filesystemDB); + + if (dbOpen.failedLocked) { + throw new FilesystemDatabaseLockedException(dbOpen.failedError); + } + + if (dbOpen.failedInit) { + throw new FilesystemDatabaseInitializationException(dbOpen.failedError); + } + + if (dbOpen.database == null) { + throw new NullPointerException("IDBDatabase is null!"); + } + + return new IndexedDBFilesystem(dbName, filesystemDB, dbOpen.database); + } + + @JSBody(script = "return ((typeof indexedDB) !== 'undefined') ? indexedDB : null;") + protected static native IDBFactory createIDBFactory(); + + @JSBody(params = { "factory", "name", "ii", + "errCB" }, script = "try { return factory.open(name, ii); } catch(err) { errCB(\"\" + err); return null; }") + protected static native IDBOpenDBRequest safeOpen(IDBFactory factory, String name, int i, OpenErrorCallback errCB); + + private final String name; + + private final String indexedDBName; + + private IDBDatabase database; + + private IndexedDBFilesystem(String name, String indexedDBName, IDBDatabase database) { + this.name = name; + this.indexedDBName = indexedDBName; + this.database = database; + } + + @Override + public void closeHandle() { + if (database != null) { + database.close(); + database = null; + } + } + + @Override + public int eaglerCopy(String pathNameOld, String pathNameNew) { + ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathNameOld); + if (old != null && AsyncHandlers.writeWholeFile(database, pathNameNew, old).bool) { + return old.getByteLength(); + } else { + return -1; + } + } + + @Override + public boolean eaglerDelete(String pathName) { + return AsyncHandlers.deleteFile(database, pathName).bool; + } + + @Override + public boolean eaglerExists(String pathName) { + return AsyncHandlers.fileExists(database, pathName).bool; + } + + @Override + public void eaglerIterate(String pathName, VFSFilenameIterator itr, boolean recursive) { + if (recursive) { + AsyncHandlers.iterateFiles(database, pathName, false, itr); + } else { + AsyncHandlers.iterateFiles(database, pathName, false, new VFSFilenameIteratorNonRecursive(itr, + VFSFilenameIteratorNonRecursive.countSlashes(pathName) + 1)); + } + } + + @Override + public boolean eaglerMove(String pathNameOld, String pathNameNew) { + ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathNameOld); + return old != null && AsyncHandlers.writeWholeFile(database, pathNameNew, old).bool + && AsyncHandlers.deleteFile(database, pathNameOld).bool; + } + + @Override + public ByteBuffer eaglerRead(String pathName) { + ArrayBuffer ar = AsyncHandlers.readWholeFile(database, pathName); + if (ar == null) { + return null; + } + return EaglerArrayBufferAllocator.wrapByteBufferTeaVM(Int8Array.create(ar)); + } + + @Override + public int eaglerSize(String pathName) { + ArrayBuffer old = AsyncHandlers.readWholeFile(database, pathName); + return old == null ? -1 : old.getByteLength(); + } + + @Override + public void eaglerWrite(String pathName, ByteBuffer data) { + if (!AsyncHandlers.writeWholeFile(database, pathName, + EaglerArrayBufferAllocator.getDataView8Unsigned(data).getBuffer()).bool) { + throw new EaglerFileSystemException( + "Failed to write " + data.remaining() + " byte file to indexeddb table: " + pathName); + } + } + + @Override + public String getFilesystemName() { + return name; + } + + @Override + public String getInternalDBName() { + return "indexeddb:" + indexedDBName; + } + + @Override + public boolean isRamdisk() { + return false; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/InputEvent.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/InputEvent.java index 0d80779f..12054e5c 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/InputEvent.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/InputEvent.java @@ -5,18 +5,19 @@ import org.teavm.jso.dom.events.Event; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface InputEvent extends Event { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/JOrbisAudioBufferDecoder.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/JOrbisAudioBufferDecoder.java index 9a418fdf..5f8fe915 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/JOrbisAudioBufferDecoder.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/JOrbisAudioBufferDecoder.java @@ -26,21 +26,151 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class JOrbisAudioBufferDecoder { + private static final Logger logger = LogManager.getLogger("JOrbisAudioBufferDecoder"); + private static final JOrbisAudioBufferDecoder instance = new JOrbisAudioBufferDecoder(); + public static final int LOAD_VIA_AUDIOBUFFER = 0; + public static final int LOAD_VIA_WAV32F = 1; + public static final int LOAD_VIA_WAV16 = 2; + + private static float[][] appendFloatArrays(float[][] arrayOne, float[][] arrayTwo, int arrayTwoBytes) { + int bytes = arrayTwoBytes; + int l; + if (arrayTwo != null && (l = arrayTwo[0].length) != 0) { + if (l < arrayTwoBytes) { + bytes = l; + } + } else { + bytes = 0; + } + + if ((arrayOne != null || arrayTwo != null) && bytes > 0) { + float[][] newArray; + + if (arrayOne == null) { + int ch = arrayTwo.length; + int len1 = arrayTwo[0].length; + newArray = new float[ch][bytes]; + for (int i = 0; i < ch; ++i) { + System.arraycopy(arrayTwo[i], 0, newArray[i], 0, bytes); + } + arrayTwo = null; + } else { + int ch = arrayOne.length; + int len1 = arrayOne[0].length; + if (arrayTwo != null && bytes > 0) { + newArray = new float[ch][len1 + bytes]; + for (int i = 0; i < ch; ++i) { + System.arraycopy(arrayOne[i], 0, newArray[i], 0, len1); + System.arraycopy(arrayTwo[i], 0, newArray[i], len1, bytes); + } + arrayOne = null; + arrayTwo = null; + } else { + newArray = new float[ch][len1]; + for (int i = 0; i < ch; ++i) { + System.arraycopy(arrayOne[i], 0, newArray[i], 0, len1); + } + arrayOne = null; + } + } + + return newArray; + } else { + return null; + } + } + + public static AudioBuffer decodeAudioJOrbis(AudioContext ctx, byte[] data, String errorString, int loadVia) { + JOrbisAudioBufferDecoder dec = instance; + synchronized (dec) { + if (!dec.init(data, errorString)) { + logger.error("[{}]: Invalid header detected", errorString); + return null; + } + int ch = -1; + int len = 0; + List lst = new LinkedList<>(); + float[][] b; + while ((b = dec.readBytes()) != null) { + if (ch == -1) { + ch = b.length; + } + len += b[0].length; + lst.add(b); + } + if (dec.jorbisInfo.channels != ch) { + logger.warn("[{}]: Number of channels in header does not match the stream", errorString); + } + if (ch == -1 || len == 0) { + logger.error("[{}]: Empty file", errorString); + return null; + } + switch (loadVia) { + case LOAD_VIA_AUDIOBUFFER: { + AudioBuffer buffer = ctx.createBuffer(ch, len, dec.jorbisInfo.rate); + int len2 = 0; + for (float[][] fl : lst) { + for (int i = 0; i < ch; ++i) { + buffer.copyToChannel(TeaVMUtils.unwrapFloatArray(fl[i]), i, len2); + } + len2 += fl[0].length; + } + return buffer; + } + case LOAD_VIA_WAV32F: { + int len2 = PCMToWAVLoader.getWAVLen(lst, true); + if (len2 == 0 || len2 == 44) { + logger.error("[{}]: Invalid length for WAV calculated", errorString); + return null; + } + ByteBuffer buf = PlatformRuntime.allocateByteBuffer(len2); + try { + PCMToWAVLoader.createWAV32F(lst, ch, dec.jorbisInfo.rate, buf); + buf.flip(); + return PlatformAudio.decodeAudioBrowserAsync( + EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), errorString + ".wav"); + } finally { + PlatformRuntime.freeByteBuffer(buf); + } + } + case LOAD_VIA_WAV16: { + int len2 = PCMToWAVLoader.getWAVLen(lst, false); + if (len2 == 0 || len2 == 44) { + logger.error("[{}]: Invalid length for WAV calculated", errorString); + return null; + } + ByteBuffer buf = PlatformRuntime.allocateByteBuffer(len2); + try { + PCMToWAVLoader.createWAV16(lst, ch, dec.jorbisInfo.rate, buf); + buf.flip(); + return PlatformAudio.decodeAudioBrowserAsync( + EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), errorString + ".wav"); + } finally { + PlatformRuntime.freeByteBuffer(buf); + } + } + default: + throw new IllegalArgumentException(); + } + } + } + private EaglerInputStream inputStream; private boolean endOfStream = false; private byte[] buffer = null; @@ -52,97 +182,19 @@ public class JOrbisAudioBufferDecoder { private int[] pcmIndex; private Packet joggPacket = new Packet(); private Page joggPage = new Page(); + private StreamState joggStreamState = new StreamState(); + private SyncState joggSyncState = new SyncState(); + private DspState jorbisDspState = new DspState(); private Block jorbisBlock; private Comment jorbisComment; + private Info jorbisInfo; + private String errorString; - private static final Logger logger = LogManager.getLogger("JOrbisAudioBufferDecoder"); - - private static final JOrbisAudioBufferDecoder instance = new JOrbisAudioBufferDecoder(); - - public static final int LOAD_VIA_AUDIOBUFFER = 0; - public static final int LOAD_VIA_WAV32F = 1; - public static final int LOAD_VIA_WAV16 = 2; - - public static AudioBuffer decodeAudioJOrbis(AudioContext ctx, byte[] data, String errorString, int loadVia) { - JOrbisAudioBufferDecoder dec = instance; - synchronized(dec) { - if(!dec.init(data, errorString)) { - logger.error("[{}]: Invalid header detected", errorString); - return null; - } - int ch = -1; - int len = 0; - List lst = new LinkedList<>(); - float[][] b; - while((b = dec.readBytes()) != null) { - if(ch == -1) { - ch = b.length; - } - len += b[0].length; - lst.add(b); - } - if(dec.jorbisInfo.channels != ch) { - logger.warn("[{}]: Number of channels in header does not match the stream", errorString); - } - if(ch == -1 || len == 0) { - logger.error("[{}]: Empty file", errorString); - return null; - } - switch(loadVia) { - case LOAD_VIA_AUDIOBUFFER: { - AudioBuffer buffer = ctx.createBuffer(ch, len, dec.jorbisInfo.rate); - int len2 = 0; - for(float[][] fl : lst) { - for(int i = 0; i < ch; ++i) { - buffer.copyToChannel(TeaVMUtils.unwrapFloatArray(fl[i]), i, len2); - } - len2 += fl[0].length; - } - return buffer; - } - case LOAD_VIA_WAV32F: { - int len2 = PCMToWAVLoader.getWAVLen(lst, true); - if(len2 == 0 || len2 == 44) { - logger.error("[{}]: Invalid length for WAV calculated", errorString); - return null; - } - ByteBuffer buf = PlatformRuntime.allocateByteBuffer(len2); - try { - PCMToWAVLoader.createWAV32F(lst, ch, dec.jorbisInfo.rate, buf); - buf.flip(); - return PlatformAudio.decodeAudioBrowserAsync( - EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), errorString + ".wav"); - }finally { - PlatformRuntime.freeByteBuffer(buf); - } - } - case LOAD_VIA_WAV16: { - int len2 = PCMToWAVLoader.getWAVLen(lst, false); - if(len2 == 0 || len2 == 44) { - logger.error("[{}]: Invalid length for WAV calculated", errorString); - return null; - } - ByteBuffer buf = PlatformRuntime.allocateByteBuffer(len2); - try { - PCMToWAVLoader.createWAV16(lst, ch, dec.jorbisInfo.rate, buf); - buf.flip(); - return PlatformAudio.decodeAudioBrowserAsync( - EaglerArrayBufferAllocator.getDataView8(buf).getBuffer(), errorString + ".wav"); - }finally { - PlatformRuntime.freeByteBuffer(buf); - } - } - default: - throw new IllegalArgumentException(); - } - } - } - private JOrbisAudioBufferDecoder() { this.jorbisBlock = new Block(this.jorbisDspState); this.jorbisComment = new Comment(); @@ -189,19 +241,19 @@ public class JOrbisAudioBufferDecoder { this.jorbisDspState = new DspState(); this.jorbisInfo = new Info(); this.joggSyncState = new SyncState(); - + this.endOfStream = false; this.joggSyncState.init(); this.joggSyncState.buffer(this.bufferSize); this.buffer = this.joggSyncState.data; - + vigg: { this.index = this.joggSyncState.buffer(this.bufferSize); int bytes = this.inputStream.read(this.joggSyncState.data, this.index, this.bufferSize); if (bytes < 0) { bytes = 0; } - + this.joggSyncState.wrote(bytes); if (this.joggSyncState.pageout(this.joggPage) != 1) { if (bytes < this.bufferSize) { @@ -225,7 +277,7 @@ public class JOrbisAudioBufferDecoder { return false; } else { int i = 0; - + while (i < 2) { label73: while (true) { int result; @@ -233,47 +285,48 @@ public class JOrbisAudioBufferDecoder { if (i >= 2) { break label73; } - + result = this.joggSyncState.pageout(this.joggPage); if (result == 0) { break label73; } } while (result != 1); - + this.joggStreamState.pagein(this.joggPage); - + while (i < 2) { result = this.joggStreamState.packetout(this.joggPacket); if (result == 0) { break; } - + if (result == -1) { - logger.error("[{}]: Secondary Ogg header corrupt in method 'readHeader'.", errorString); + logger.error("[{}]: Secondary Ogg header corrupt in method 'readHeader'.", + errorString); return false; } - + this.jorbisInfo.synthesis_headerin(this.jorbisComment, this.joggPacket); ++i; } } - + this.index = this.joggSyncState.buffer(this.bufferSize); bytes = this.inputStream.read(this.joggSyncState.data, this.index, this.bufferSize); if (bytes < 0) { bytes = 0; } - + if (bytes == 0 && i < 2) { logger.error( "[{}]: End of file reached before finished reading Ogg header in method 'readHeader'", errorString); return false; } - + this.joggSyncState.wrote(bytes); } - + this.index = this.joggSyncState.buffer(this.bufferSize); this.buffer = this.joggSyncState.data; } @@ -286,10 +339,11 @@ public class JOrbisAudioBufferDecoder { int rate = this.jorbisInfo.rate; this.pcmInfo = new float[1][][]; this.pcmIndex = new int[channels]; - if(convertedBuffer == null || convertedBuffer.length != this.jorbisInfo.channels || (convertedBuffer.length > 0 && convertedBuffer[0].length != this.bufferSize)) { + if (convertedBuffer == null || convertedBuffer.length != this.jorbisInfo.channels + || (convertedBuffer.length > 0 && convertedBuffer[0].length != this.bufferSize)) { this.convertedBuffer = new float[this.jorbisInfo.channels][this.bufferSize]; } - + return true; } @@ -369,52 +423,4 @@ public class JOrbisAudioBufferDecoder { } } - private static float[][] appendFloatArrays(float[][] arrayOne, float[][] arrayTwo, int arrayTwoBytes) { - int bytes = arrayTwoBytes; - int l; - if (arrayTwo != null && (l = arrayTwo[0].length) != 0) { - if (l < arrayTwoBytes) { - bytes = l; - } - } else { - bytes = 0; - } - - if ((arrayOne != null || arrayTwo != null) && bytes > 0) { - float[][] newArray; - - if (arrayOne == null) { - int ch = arrayTwo.length; - int len1 = arrayTwo[0].length; - newArray = new float[ch][bytes]; - for(int i = 0; i < ch; ++i) { - System.arraycopy(arrayTwo[i], 0, newArray[i], 0, bytes); - } - arrayTwo = null; - } else { - int ch = arrayOne.length; - int len1 = arrayOne[0].length; - if (arrayTwo != null && bytes > 0) { - newArray = new float[ch][len1 + bytes]; - for(int i = 0; i < ch; ++i) { - System.arraycopy(arrayOne[i], 0, newArray[i], 0, len1); - System.arraycopy(arrayTwo[i], 0, newArray[i], len1, bytes); - } - arrayOne = null; - arrayTwo = null; - } else { - newArray = new float[ch][len1]; - for(int i = 0; i < ch; ++i) { - System.arraycopy(arrayOne[i], 0, newArray[i], 0, len1); - } - arrayOne = null; - } - } - - return newArray; - } else { - return null; - } - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/LegacyKeycodeTranslator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/LegacyKeycodeTranslator.java index a231d9a6..76180222 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/LegacyKeycodeTranslator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/LegacyKeycodeTranslator.java @@ -8,18 +8,19 @@ import com.google.common.collect.Sets; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class LegacyKeycodeTranslator { @@ -51,12 +52,130 @@ public class LegacyKeycodeTranslator { } - private static final Set numpadVolatile = Sets.newHashSet( - "Comma", "Minus", "Period", "Slash", "Equal", "Enter", "Digit0", "Digit1", "Digit2", "Digit3", - "Digit4", "Digit5", "Digit6", "Digit7", "Digit8", "Digit9", "IntlYen"); + private static final Set numpadVolatile = Sets.newHashSet("Comma", "Minus", "Period", "Slash", "Equal", + "Enter", "Digit0", "Digit1", "Digit2", "Digit3", "Digit4", "Digit5", "Digit6", "Digit7", "Digit8", "Digit9", + "IntlYen"); - private final Map codeLookupBase = new HashMap<>(); - private final Map codeLookupLayout = new HashMap<>(); + public static String getCodeFromLayoutChar(String keyChar) { + if (keyChar.length() != 1) { + return null; + } + char c = keyChar.charAt(0); + String ret = getCodeFromLayoutChar0(c); + if (ret == null) { + ret = getCodeFromLayoutChar0(Character.toLowerCase(c)); + } + return ret; + } + + private static String getCodeFromLayoutChar0(char keyChar) { + switch (keyChar) { + case 'e': + return "KeyE"; + case 'd': + return "KeyD"; + case 'u': + return "KeyU"; + case '-': + return "Minus"; + case 'h': + return "KeyH"; + case 'z': + return "KeyZ"; + case '=': + return "Equal"; + case 'p': + return "KeyP"; + case ';': + return "Semicolon"; + case ']': + return "BracketRight"; + case '/': + return "Slash"; + case '[': + return "BracketLeft"; + case 'l': + return "KeyL"; + case '8': + return "Digit8"; + case 'w': + return "KeyW"; + case 's': + return "KeyS"; + case '5': + return "Digit5"; + case '9': + return "Digit9"; + case 'o': + return "KeyO"; + case '.': + return "Period"; + case '6': + return "Digit6"; + case 'v': + return "KeyV"; + case '3': + return "Digit3"; + case '`': + return "Backquote"; + case 'g': + return "KeyG"; + case 'j': + return "KeyJ"; + case 'q': + return "KeyQ"; + case '1': + return "Digit1"; + case 't': + return "KeyT"; + case 'y': + return "KeyY"; + case '\'': + return "Quote"; + case '\\': + return "Backslash"; + case 'k': + return "KeyK"; + case 'f': + return "KeyF"; + case 'i': + return "KeyI"; + case 'r': + return "KeyR"; + case 'x': + return "KeyX"; + case 'a': + return "KeyA"; + case '2': + return "Digit2"; + case '7': + return "Digit7"; + case 'm': + return "KeyM"; + case '4': + return "Digit4"; + case '0': + return "Digit0"; + case 'n': + return "KeyN"; + case 'b': + return "KeyB"; + case 'c': + return "KeyC"; + case ',': + return "Comma"; + case '*': + return "NumpadMultiply"; + case 0xA5: + return "IntlYen"; + default: + return null; + } + } + + private final Map codeLookupBase = new HashMap<>(); + + private final Map codeLookupLayout = new HashMap<>(); public LegacyKeycodeTranslator() { codeLookupBase.put("Digit0", new LegacyKeycode(0x30, 0)); @@ -185,144 +304,29 @@ public class LegacyKeycodeTranslator { public LegacyKeycodeTranslator addBrowserLayoutMapping(String keyChar, String codeStr) { LegacyKeycode mapTo = codeLookupBase.get(codeStr); - if(mapTo != null) { + if (mapTo != null) { String keyCode = getCodeFromLayoutChar(keyChar); - if(keyCode != null && !keyCode.equals(codeStr) && !(codeStr.startsWith("Numpad") && numpadVolatile.contains(keyCode)) && !mapTo.equals(codeLookupBase.get(keyCode))) { + if (keyCode != null && !keyCode.equals(codeStr) + && !(codeStr.startsWith("Numpad") && numpadVolatile.contains(keyCode)) + && !mapTo.equals(codeLookupBase.get(keyCode))) { codeLookupLayout.put(keyCode, mapTo); } } return this; } - public int getRemappedKeyCount() { - return codeLookupLayout.size(); - } - - public Map buildLayoutTable() { - if(codeLookupLayout.isEmpty()) { + public Map buildLayoutTable() { + if (codeLookupLayout.isEmpty()) { return codeLookupBase; } - Map ret = new HashMap<>(); + Map ret = new HashMap<>(); ret.putAll(codeLookupBase); ret.putAll(codeLookupLayout); return ret; } - public static String getCodeFromLayoutChar(String keyChar) { - if(keyChar.length() != 1) { - return null; - } - char c = keyChar.charAt(0); - String ret = getCodeFromLayoutChar0(c); - if(ret == null) { - ret = getCodeFromLayoutChar0(Character.toLowerCase(c)); - } - return ret; - } - - private static String getCodeFromLayoutChar0(char keyChar) { - switch(keyChar) { - case 'e': - return "KeyE"; - case 'd': - return "KeyD"; - case 'u': - return "KeyU"; - case '-': - return "Minus"; - case 'h': - return "KeyH"; - case 'z': - return "KeyZ"; - case '=': - return "Equal"; - case 'p': - return "KeyP"; - case ';': - return "Semicolon"; - case ']': - return "BracketRight"; - case '/': - return "Slash"; - case '[': - return "BracketLeft"; - case 'l': - return "KeyL"; - case '8': - return "Digit8"; - case 'w': - return "KeyW"; - case 's': - return "KeyS"; - case '5': - return "Digit5"; - case '9': - return "Digit9"; - case 'o': - return "KeyO"; - case '.': - return "Period"; - case '6': - return "Digit6"; - case 'v': - return "KeyV"; - case '3': - return "Digit3"; - case '`': - return "Backquote"; - case 'g': - return "KeyG"; - case 'j': - return "KeyJ"; - case 'q': - return "KeyQ"; - case '1': - return "Digit1"; - case 't': - return "KeyT"; - case 'y': - return "KeyY"; - case '\'': - return "Quote"; - case '\\': - return "Backslash"; - case 'k': - return "KeyK"; - case 'f': - return "KeyF"; - case 'i': - return "KeyI"; - case 'r': - return "KeyR"; - case 'x': - return "KeyX"; - case 'a': - return "KeyA"; - case '2': - return "Digit2"; - case '7': - return "Digit7"; - case 'm': - return "KeyM"; - case '4': - return "Digit4"; - case '0': - return "Digit0"; - case 'n': - return "KeyN"; - case 'b': - return "KeyB"; - case 'c': - return "KeyC"; - case ',': - return "Comma"; - case '*': - return "NumpadMultiply"; - case 0xA5: - return "IntlYen"; - default: - return null; - } + public int getRemappedKeyCount() { + return codeLookupLayout.size(); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MainClass.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MainClass.java index 5369ca2e..3c176cd7 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MainClass.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MainClass.java @@ -4,38 +4,39 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.teavm.WorkerMain; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class MainClass { + private static void clientMain() { + ClientMain._main(); + } + public static void main(String[] args) { - if(args.length == 1) { - if("_worker_process_".equalsIgnoreCase(args[0])) { + if (args.length == 1) { + if ("_worker_process_".equalsIgnoreCase(args[0])) { workerMain(); return; } - }else if(args.length == 0) { + } else if (args.length == 0) { clientMain(); return; } System.out.println("???"); } - private static void clientMain() { - ClientMain._main(); - } - private static void workerMain() { WorkerMain._main(); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MessageChannel.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MessageChannel.java index 2adeed4d..2274a6af 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MessageChannel.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/MessageChannel.java @@ -7,27 +7,28 @@ import org.teavm.jso.workers.MessagePort; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class MessageChannel implements JSObject { - @JSBody(params = { }, script = "return (typeof MessageChannel !== \"undefined\");") - public static native boolean supported(); - - @JSBody(params = { }, script = "return new MessageChannel();") + @JSBody(params = {}, script = "return new MessageChannel();") public static native MessageChannel create(); + @JSBody(params = {}, script = "return (typeof MessageChannel !== \"undefined\");") + public static native boolean supported(); + @JSProperty public abstract MessagePort getPort1(); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/OffsetTouch.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/OffsetTouch.java index 511c2f1f..fa7c1d53 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/OffsetTouch.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/OffsetTouch.java @@ -5,39 +5,45 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.SortedTouchEvent.ITouchUIDMa /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class OffsetTouch { + public static OffsetTouch create(Touch touch, ITouchUIDMapper mapper, int originX, int originY) { + double contentScale = PlatformInput.getDPI(); + double d = 5.0 * contentScale; + OffsetTouch ot = new OffsetTouch(touch, mapper.call(touch.getIdentifier()), + (int) ((touch.getPageX() - originX) * contentScale), + PlatformInput.getWindowHeight() - (int) ((touch.getPageY() - originY) * contentScale) - 1, + (float) (touch.getRadiusXSafe(d) * 0.5 + touch.getRadiusYSafe(d) * 0.5)); + return ot; + } + public final Touch touch; public final int eventUID; public final int posX; public final int posY; - public OffsetTouch(Touch touch, int eventUID, int posX, int posY) { + public final float radius; + + public OffsetTouch(Touch touch, int eventUID, int posX, int posY, float radius) { this.touch = touch; this.eventUID = eventUID; this.posX = posX; this.posY = posY; - } - - public static OffsetTouch create(Touch touch, ITouchUIDMapper mapper, int originX, int originY) { - double contentScale = PlatformInput.getDPI(); - OffsetTouch ot = new OffsetTouch(touch, mapper.call(touch.getIdentifier()), - (int) ((touch.getPageX() - originX) * contentScale), - PlatformInput.getWindowHeight() - (int) ((touch.getPageY() - originY) * contentScale) - 1); - return ot; + this.radius = radius; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/PCMToWAVLoader.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/PCMToWAVLoader.java index 7f12dd29..a3db88f6 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/PCMToWAVLoader.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/PCMToWAVLoader.java @@ -6,60 +6,50 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.ByteBuffer; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class PCMToWAVLoader { - public static int getWAVLen(List data, boolean floating) { - int i = 44; - int j = floating ? 4 : 2; - int k; - for(float[][] f : data) { - k = f.length; - if(k == 0) continue; - i += k * f[0].length * j; - } - return i; - } - public static void createWAV16(List data, int chCount, int sampleRate, ByteBuffer bufferOut) { - if(chCount == 0 || data.isEmpty()) return; + if (chCount == 0 || data.isEmpty()) + return; int finalSize = bufferOut.remaining(); - + // header bufferOut.putInt(0x46464952); // magic bufferOut.putInt(finalSize - 8); // file len bufferOut.putInt(0x45564157); // magic - + // format chunk bufferOut.putInt(0x20746D66); // magic bufferOut.putInt(16); // format chunk len - 8 - bufferOut.putShort((short)1); // audio format = int - bufferOut.putShort((short)chCount); // channels + bufferOut.putShort((short) 1); // audio format = int + bufferOut.putShort((short) chCount); // channels bufferOut.putInt(sampleRate); // sample rate bufferOut.putInt(sampleRate * chCount * 2); // bytes per second - bufferOut.putShort((short)(chCount * 2)); // bytes per sample - bufferOut.putShort((short)16); // bits per sample - + bufferOut.putShort((short) (chCount * 2)); // bytes per sample + bufferOut.putShort((short) 16); // bits per sample + // data chunk bufferOut.putInt(0x61746164); // magic bufferOut.putInt(finalSize - 44); - for(float[][] f : data) { - for(int i = 0, l = f[0].length; i < l; ++i) { - for(int c = 0; c < chCount; ++c) { - int val = (int)(f[c][i] * 32767.0f); + for (float[][] f : data) { + for (int i = 0, l = f[0].length; i < l; ++i) { + for (int c = 0; c < chCount; ++c) { + int val = (int) (f[c][i] * 32767.0f); if (val > 32767) { val = 32767; } @@ -69,50 +59,65 @@ public class PCMToWAVLoader { if (val < 0) { val |= 32768; } - bufferOut.putShort((short)val); + bufferOut.putShort((short) val); } } } - - if(bufferOut.hasRemaining()) { + + if (bufferOut.hasRemaining()) { throw new IllegalStateException("Buffer was the wrong size! " + bufferOut.remaining() + " remaining"); } } public static void createWAV32F(List data, int chCount, int sampleRate, ByteBuffer bufferOut) { - if(chCount == 0 || data.isEmpty()) return; + if (chCount == 0 || data.isEmpty()) + return; int finalSize = bufferOut.remaining(); - + // header bufferOut.putInt(0x46464952); // magic bufferOut.putInt(finalSize - 8); // file len bufferOut.putInt(0x45564157); // magic - + // format chunk bufferOut.putInt(0x20746D66); // magic bufferOut.putInt(16); // format chunk len - 8 - bufferOut.putShort((short)3); // audio format = float - bufferOut.putShort((short)chCount); // channels + bufferOut.putShort((short) 3); // audio format = float + bufferOut.putShort((short) chCount); // channels bufferOut.putInt(sampleRate); // sample rate bufferOut.putInt(sampleRate * chCount * 4); // bytes per second - bufferOut.putShort((short)(chCount * 4)); // bytes per sample - bufferOut.putShort((short)32); // bits per sample - + bufferOut.putShort((short) (chCount * 4)); // bytes per sample + bufferOut.putShort((short) 32); // bits per sample + // data chunk bufferOut.putInt(0x61746164); // magic bufferOut.putInt(finalSize - 44); - - for(float[][] f : data) { - for(int i = 0, l = f[0].length; i < l; ++i) { - for(int c = 0; c < chCount; ++c) { + + for (float[][] f : data) { + for (int i = 0, l = f[0].length; i < l; ++i) { + for (int c = 0; c < chCount; ++c) { bufferOut.putFloat(f[c][i]); } } } - - if(bufferOut.hasRemaining()) { - throw new IllegalStateException("Buffer was the wrong size! " + finalSize + " " + bufferOut.remaining() + " remaining"); + + if (bufferOut.hasRemaining()) { + throw new IllegalStateException( + "Buffer was the wrong size! " + finalSize + " " + bufferOut.remaining() + " remaining"); } } + public static int getWAVLen(List data, boolean floating) { + int i = 44; + int j = floating ? 4 : 2; + int k; + for (float[][] f : data) { + k = f.length; + if (k == 0) + continue; + i += k * f[0].length * j; + } + return i; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/SortedTouchEvent.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/SortedTouchEvent.java index c500fba0..8f0b9b96 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/SortedTouchEvent.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/SortedTouchEvent.java @@ -7,18 +7,19 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class SortedTouchEvent { @@ -33,10 +34,12 @@ public class SortedTouchEvent { private final List eventTouches; public SortedTouchEvent(TouchEvent event, ITouchUIDMapper mapper) { - changedTouches = TeaVMUtils.toSortedTouchList(event.getChangedTouches(), mapper, PlatformInput.touchOffsetXTeaVM, PlatformInput.touchOffsetYTeaVM); - targetTouches = TeaVMUtils.toSortedTouchList(event.getTargetTouches(), mapper, PlatformInput.touchOffsetXTeaVM, PlatformInput.touchOffsetYTeaVM); + changedTouches = TeaVMUtils.toSortedTouchList(event.getChangedTouches(), mapper, + PlatformInput.touchOffsetXTeaVM, PlatformInput.touchOffsetYTeaVM); + targetTouches = TeaVMUtils.toSortedTouchList(event.getTargetTouches(), mapper, PlatformInput.touchOffsetXTeaVM, + PlatformInput.touchOffsetYTeaVM); this.event = event; - switch(event.getType()) { + switch (event.getType()) { case "touchstart": type = EnumTouchEvent.TOUCHSTART; eventTouches = changedTouches; @@ -54,32 +57,32 @@ public class SortedTouchEvent { } } - public int getTouchesSize() { - return event.getTouches().getLength(); + public List getChangedTouches() { + return changedTouches; } public int getChangedTouchesSize() { return event.getChangedTouches().getLength(); } - public List getChangedTouches() { - return changedTouches; - } - - public int getTargetTouchesSize() { - return event.getTargetTouches().getLength(); - } - - public List getTargetTouches() { - return targetTouches; + public List getEventTouches() { + return eventTouches; } public int getEventTouchesSize() { return eventTouches.size(); } - public List getEventTouches() { - return eventTouches; + public List getTargetTouches() { + return targetTouches; + } + + public int getTargetTouchesSize() { + return event.getTargetTouches().getLength(); + } + + public int getTouchesSize() { + return event.getTouches().getLength(); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLHandle.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLHandle.java index 902ac418..dadd9681 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLHandle.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLHandle.java @@ -2,27 +2,28 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface TeaVMBlobURLHandle { - default String toExternalForm() { - return TeaVMBlobURLManager.toExternalForm(this); - } - default void release() { TeaVMBlobURLManager.releaseURL(this); } + default String toExternalForm() { + return TeaVMBlobURLManager.toExternalForm(this); + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLManager.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLManager.java index a40bd93c..b0b4cc23 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLManager.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMBlobURLManager.java @@ -14,93 +14,25 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMBlobURLManager { - private static final Logger logger = LogManager.getLogger("TeaVMBlobURLManager"); - - private static boolean isSameOriginSupport = true; - - public static void initialize() { - if(((TeaVMClientConfigAdapter)PlatformRuntime.getClientConfigAdapter()).isDisableBlobURLsTeaVM()) { - isSameOriginSupport = false; - logger.info("Note: Blob urls have been disabled, client will use data: urls instead"); - }else { - try { - isSameOriginSupport = checkSameOriginSupport(); - }catch(Throwable t) { - isSameOriginSupport = false; - } - if(!isSameOriginSupport) { - logger.warn("Warning: Same-origin fetch support detected as false, client will use data: urls instead of blob: urls"); - } - } - } - - @Async - private static native Boolean checkSameOriginSupport(); - - private static void checkSameOriginSupport(final AsyncCallback cb) { - try { - checkSameOriginSupport0((v) -> cb.complete(v)); - }catch(Throwable t) { - cb.error(t); - } - } - @JSFunctor - private static interface SameOriginSupportCallback extends JSObject { - void call(boolean support); - } - - @JSBody(params = { "cb" }, script = "if((typeof URL === \"undefined\") || (typeof URL.createObjectURL !== \"function\")) { cb(false); }" - + "else { var objURL = URL.createObjectURL(new Blob([new Uint8Array([69, 69, 69, 69])]));" - + "if(!objURL) { cb(false); return; }" - + "var eag = function(theObjURL, theXHRObj) {" - + "theXHRObj.responseType = \"arraybuffer\";" - + "theXHRObj.addEventListener(\"load\", function(evt) { try { URL.revokeObjectURL(theObjURL); } catch(exx) { }" - + "var stat = theXHRObj.status;" - + "if(stat === 0 || (stat >= 200 && stat < 400)) {" - + "var typedArr = new Uint8Array(theXHRObj.response);" - + "if(typedArr.length === 4 && typedArr[0] === 69 && typedArr[1] === 69 && typedArr[2] === 69 && typedArr[3] === 69) {" - + "cb(true);" - + "} else { cb(false); } } else { cb(false); } });" - + "theXHRObj.addEventListener(\"error\", function(evt) { try { URL.revokeObjectURL(theObjURL); } catch(exx) { } cb(false); });" - + "theXHRObj.open(\"GET\", theObjURL, true);" - + "theXHRObj.send();" - + "}; eag(objURL, new XMLHttpRequest()); }") - private static native void checkSameOriginSupport0(SameOriginSupportCallback cb); - - private static class HandleRealBlobURL implements TeaVMBlobURLHandle { - - private final String blobURL; - - public HandleRealBlobURL(String blobURL) { - this.blobURL = blobURL; - } - - @Override - public String toExternalForm() { - return blobURL; - } - - @Override - public void release() { - revokeBlobURL(blobURL); - } - + private static interface ArrayBufferCallback extends JSObject { + void call(ArrayBuffer buf); } private static class HandleFakeBlobURL implements TeaVMBlobURLHandle { @@ -113,40 +45,46 @@ public class TeaVMBlobURLManager { this.blobMIME = blobMIME; } + @Override + public void release() { + + } + @Override public String toExternalForm() { return "data:" + blobMIME + ";base64," + Base64.encodeBase64String(blobData); } + } + + private static class HandleRealBlobURL implements TeaVMBlobURLHandle { + + private final String blobURL; + + public HandleRealBlobURL(String blobURL) { + this.blobURL = blobURL; + } + @Override public void release() { - + revokeBlobURL(blobURL); + } + + @Override + public String toExternalForm() { + return blobURL; } } - public static TeaVMBlobURLHandle registerNewURLByte(byte[] objectData, String mimeType) { - if(isSameOriginSupport) { - return new HandleRealBlobURL(createBlobURL(TeaVMUtils.unwrapArrayBuffer(objectData), mimeType)); - }else { - return new HandleFakeBlobURL(objectData, mimeType); - } + @JSFunctor + private static interface SameOriginSupportCallback extends JSObject { + void call(boolean support); } - public static TeaVMBlobURLHandle registerNewURLArrayBuffer(ArrayBuffer objectData, String mimeType) { - return registerNewURLByte(TeaVMUtils.wrapByteArrayBuffer(objectData), mimeType); - } + private static final Logger logger = LogManager.getLogger("TeaVMBlobURLManager"); - public static TeaVMBlobURLHandle registerNewURLBlob(JSObject objectData) { - if(isSameOriginSupport) { - return new HandleRealBlobURL(createBlobURL(objectData)); - }else { - return new HandleFakeBlobURL(TeaVMUtils.wrapByteArrayBuffer(blobToArrayBuffer(objectData)), getBlobMime(objectData)); - } - } - - @JSBody(params = { "objectData" }, script = "return objectData.type || \"application/octet-stream\";") - private static native String getBlobMime(JSObject objectData); + private static boolean isSameOriginSupport = true; @Async private static native ArrayBuffer blobToArrayBuffer(JSObject objectData); @@ -155,25 +93,89 @@ public class TeaVMBlobURLManager { blobToArrayBuffer0(objectData, cb::complete); } - @JSFunctor - private static interface ArrayBufferCallback extends JSObject { - void call(ArrayBuffer buf); - } - - @JSBody(params = { "objectData", "callback" }, script = - "var eag = function(reader){" + @JSBody(params = { "objectData", "callback" }, script = "var eag = function(reader){" + "reader.addEventListener(\"loadend\",function(evt){ callback(reader.result); });" + "reader.addEventListener(\"error\",function(evt){ callback(null); });" - + "reader.readAsArrayBuffer(objectData);" - + "}; eag(new FileReader());") + + "reader.readAsArrayBuffer(objectData);" + "}; eag(new FileReader());") private static native ArrayBuffer blobToArrayBuffer0(JSObject objectData, ArrayBufferCallback callback); + @Async + private static native Boolean checkSameOriginSupport(); + + private static void checkSameOriginSupport(final AsyncCallback cb) { + try { + checkSameOriginSupport0((v) -> cb.complete(v)); + } catch (Throwable t) { + cb.error(t); + } + } + + @JSBody(params = { + "cb" }, script = "if((typeof URL === \"undefined\") || (typeof URL.createObjectURL !== \"function\")) { cb(false); }" + + "else { var objURL = URL.createObjectURL(new Blob([new Uint8Array([69, 69, 69, 69])]));" + + "if(!objURL) { cb(false); return; }" + "var eag = function(theObjURL, theXHRObj) {" + + "theXHRObj.responseType = \"arraybuffer\";" + + "theXHRObj.addEventListener(\"load\", function(evt) { try { URL.revokeObjectURL(theObjURL); } catch(exx) { }" + + "var stat = theXHRObj.status;" + "if(stat === 0 || (stat >= 200 && stat < 400)) {" + + "var typedArr = new Uint8Array(theXHRObj.response);" + + "if(typedArr.length === 4 && typedArr[0] === 69 && typedArr[1] === 69 && typedArr[2] === 69 && typedArr[3] === 69) {" + + "cb(true);" + "} else { cb(false); } } else { cb(false); } });" + + "theXHRObj.addEventListener(\"error\", function(evt) { try { URL.revokeObjectURL(theObjURL); } catch(exx) { } cb(false); });" + + "theXHRObj.open(\"GET\", theObjURL, true);" + "theXHRObj.send();" + + "}; eag(objURL, new XMLHttpRequest()); }") + private static native void checkSameOriginSupport0(SameOriginSupportCallback cb); + @JSBody(params = { "buf", "mime" }, script = "return URL.createObjectURL(new Blob([buf], {type: mime}));") private static native String createBlobURL(ArrayBuffer buf, String mime); @JSBody(params = { "objectBlob" }, script = "return URL.createObjectURL(objectBlob);") private static native String createBlobURL(JSObject objectBlob); + @JSBody(params = { "objectData" }, script = "return objectData.type || \"application/octet-stream\";") + private static native String getBlobMime(JSObject objectData); + + public static void initialize() { + if (((TeaVMClientConfigAdapter) PlatformRuntime.getClientConfigAdapter()).isDisableBlobURLsTeaVM()) { + isSameOriginSupport = false; + logger.info("Note: Blob urls have been disabled, client will use data: urls instead"); + } else { + try { + isSameOriginSupport = checkSameOriginSupport(); + } catch (Throwable t) { + isSameOriginSupport = false; + } + if (!isSameOriginSupport) { + logger.warn( + "Warning: Same-origin fetch support detected as false, client will use data: urls instead of blob: urls"); + } + } + } + + public static TeaVMBlobURLHandle registerNewURLArrayBuffer(ArrayBuffer objectData, String mimeType) { + return registerNewURLByte(TeaVMUtils.wrapByteArrayBuffer(objectData), mimeType); + } + + public static TeaVMBlobURLHandle registerNewURLBlob(JSObject objectData) { + if (isSameOriginSupport) { + return new HandleRealBlobURL(createBlobURL(objectData)); + } else { + return new HandleFakeBlobURL(TeaVMUtils.wrapByteArrayBuffer(blobToArrayBuffer(objectData)), + getBlobMime(objectData)); + } + } + + public static TeaVMBlobURLHandle registerNewURLByte(byte[] objectData, String mimeType) { + if (isSameOriginSupport) { + return new HandleRealBlobURL(createBlobURL(TeaVMUtils.unwrapArrayBuffer(objectData), mimeType)); + } else { + return new HandleFakeBlobURL(objectData, mimeType); + } + } + + public static void releaseURL(TeaVMBlobURLHandle handle) { + handle.release(); + } + @JSBody(params = { "url" }, script = "URL.revokeObjectURL(url);") private static native void revokeBlobURL(String url); @@ -181,8 +183,4 @@ public class TeaVMBlobURLManager { return handle.toExternalForm(); } - public static void releaseURL(TeaVMBlobURLHandle handle) { - handle.release(); - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java index d8e5c14e..67beb907 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java @@ -3,16 +3,15 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; import java.util.ArrayList; import java.util.List; -import net.lax1dude.eaglercraft.v1_8.EagRuntime; -import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; -import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom; -import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.IBootMenuConfigAdapter; -import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; import org.json.JSONArray; import org.json.JSONObject; import org.teavm.jso.JSObject; import org.teavm.jso.core.JSArrayReader; +import net.lax1dude.eaglercraft.v1_8.EagRuntime; +import net.lax1dude.eaglercraft.v1_8.EaglercraftVersion; +import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom; +import net.lax1dude.eaglercraft.v1_8.boot_menu.teavm.IBootMenuConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.IClientConfigAdapter; import net.lax1dude.eaglercraft.v1_8.internal.IClientConfigAdapterHooks; import net.lax1dude.eaglercraft.v1_8.internal.teavm.opts.JSEaglercraftXOptsHooks; @@ -20,21 +19,23 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.opts.JSEaglercraftXOptsRelay import net.lax1dude.eaglercraft.v1_8.internal.teavm.opts.JSEaglercraftXOptsRoot; import net.lax1dude.eaglercraft.v1_8.internal.teavm.opts.JSEaglercraftXOptsServer; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayEntry; +import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenuConfigAdapter { @@ -43,7 +44,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu private String defaultLocale = "en_US"; private List defaultServers = new ArrayList<>(); private List relays = new ArrayList<>(); - private String serverToJoin = null; + private String serverToJoin = null; private String worldsDB = "worlds_starlike"; private String resourcePacksDB = "resourcePacks_starlike"; private JSONObject integratedServerOpts; @@ -55,8 +56,8 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu private boolean isEnableDownloadOfflineButton = true; private String downloadOfflineButtonLink = null; private boolean useSpecialCursors = false; - private boolean logInvalidCerts = true; - private boolean checkRelaysForUpdates = true; + private boolean logInvalidCerts = false; + private boolean checkRelaysForUpdates = false; private boolean enableSignatureBadge = false; private boolean allowVoiceClient = true; private boolean allowFNAWSkins = true; @@ -69,15 +70,15 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu private boolean openDebugConsoleOnLaunch = false; private boolean fixDebugConsoleUnloadListener = false; private boolean forceWebViewSupport = false; - private boolean enableWebViewCSP = false; - private boolean autoFixLegacyStyleAttr = true; + private boolean enableWebViewCSP = true; + private boolean autoFixLegacyStyleAttr = false; private boolean showBootMenuOnLaunch = false; private boolean bootMenuBlocksUnsignedClients = false; private boolean allowBootMenu = true; private boolean forceProfanityFilter = false; private boolean forceWebGL1 = false; private boolean forceWebGL2 = false; - private boolean allowExperimentalWebGL1 = false; + private boolean allowExperimentalWebGL1 = true; private boolean useWebGLExt = true; private boolean useDelayOnSwap = false; private boolean useJOrbisAudioDecoder = false; @@ -90,10 +91,351 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu private boolean singleThreadMode = false; private boolean enableEPKVersionCheck = true; + @Override + public boolean allowUpdateDL() { + return isAllowUpdateDL; + } + + @Override + public boolean allowUpdateSvc() { + return isAllowUpdateSvc; + } + + @Override + public String getDefaultLocale() { + return defaultLocale; + } + + @Override + public List getDefaultServerList() { + return defaultServers; + } + + @Override + public String getDownloadOfflineButtonLink() { + return downloadOfflineButtonLink; + } + + @Override + public IClientConfigAdapterHooks getHooks() { + return hooks; + } + + @Override + public JSONObject getIntegratedServerOpts() { + return integratedServerOpts; + } + + @Override + public String getLocalStorageNamespace() { + return localStorageNamespace; + } + + @Override + public List getRelays() { + return relays; + } + + @Override + public String getResourcePacksDB() { + return resourcePacksDB; + } + + @Override + public String getServerToJoin() { + return serverToJoin; + } + + @Override + public String getWorldsDB() { + return worldsDB; + } + + @Override + public boolean isAllowBootMenu() { + return allowBootMenu; + } + + public boolean isAllowExperimentalWebGL1TeaVM() { + return allowExperimentalWebGL1; + } + + @Override + public boolean isAllowFNAWSkins() { + return allowFNAWSkins; + } + + @Override + public boolean isAllowServerRedirects() { + return allowServerRedirects; + } + + @Override + public boolean isAllowVoiceClient() { + return allowVoiceClient; + } + + public boolean isAutoFixLegacyStyleAttrTeaVM() { + return autoFixLegacyStyleAttr; + } + + @Override + public boolean isBootMenuBlocksUnsignedClients() { + return bootMenuBlocksUnsignedClients; + } + + @Override + public boolean isCheckGLErrors() { + return checkGLErrors; + } + + @Override + public boolean isCheckRelaysForUpdates() { + return checkRelaysForUpdates; + } + + @Override + public boolean isCheckShaderGLErrors() { + return checkShaderGLErrors; + } + + @Override + public boolean isDemo() { + return demoMode; + } + + public boolean isDeobfStackTracesTeaVM() { + return deobfStackTraces; + } + + public boolean isDisableBlobURLsTeaVM() { + return disableBlobURLs; + } + + @Override + public boolean isEaglerNoDelay() { + return eaglerNoDelay; + } + + @Override + public boolean isEnableDownloadOfflineButton() { + return isEnableDownloadOfflineButton; + } + + public boolean isEnableEPKVersionCheckTeaVM() { + return enableEPKVersionCheck; + } + + @Override + public boolean isEnableMinceraft() { + return enableMinceraft; + } + + @Override + public boolean isEnableServerCookies() { + return enableServerCookies; + } + + @Override + public boolean isEnableSignatureBadge() { + return enableSignatureBadge; + } + + @Override + public boolean isEnableWebViewCSP() { + return enableWebViewCSP; + } + + @Override + public boolean isEnforceVSync() { + return false; + } + + public boolean isFixDebugConsoleUnloadListenerTeaVM() { + return fixDebugConsoleUnloadListener; + } + + @Override + public boolean isForceProfanityFilter() { + return forceProfanityFilter; + } + + public boolean isForceWebGL1TeaVM() { + return forceWebGL1; + } + + public boolean isForceWebGL2TeaVM() { + return forceWebGL2; + } + + @Override + public boolean isForceWebViewSupport() { + return forceWebViewSupport; + } + + @Override + public boolean isLogInvalidCerts() { + return logInvalidCerts; + } + + @Override + public boolean isOpenDebugConsoleOnLaunch() { + return openDebugConsoleOnLaunch; + } + + @Override + public boolean isRamdiskMode() { + return ramdiskMode; + } + + @Override + public boolean isShowBootMenuOnLaunch() { + return showBootMenuOnLaunch; + } + + public boolean isSingleThreadModeTeaVM() { + return singleThreadMode; + } + + public boolean isUseDelayOnSwapTeaVM() { + return useDelayOnSwap; + } + + public boolean isUseJOrbisAudioDecoderTeaVM() { + return useJOrbisAudioDecoder; + } + + public boolean isUseVisualViewportTeaVM() { + return useVisualViewport; + } + + public boolean isUseWebGLExtTeaVM() { + return useWebGLExt; + } + + public boolean isUseXHRFetchTeaVM() { + return useXHRFetch; + } + + public void loadJSON(JSONObject eaglercraftOpts) { + integratedServerOpts = eaglercraftOpts; + defaultLocale = eaglercraftOpts.optString("lang", "en_US"); + serverToJoin = eaglercraftOpts.optString("joinServer", null); + worldsDB = eaglercraftOpts.optString("worldsDB", "worlds_starlike"); + resourcePacksDB = eaglercraftOpts.optString("resourcePacksDB", "resourcePacks_starlike"); + checkGLErrors = eaglercraftOpts.optBoolean("checkGLErrors", false); + checkShaderGLErrors = eaglercraftOpts.optBoolean("checkShaderGLErrors", false); + if (EaglercraftVersion.forceDemoMode) { + eaglercraftOpts.put("demoMode", true); + } + demoMode = EaglercraftVersion.forceDemoMode || eaglercraftOpts.optBoolean("demoMode", false); + isAllowUpdateSvc = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftOpts.optBoolean("allowUpdateSvc", true); + isAllowUpdateDL = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftOpts.optBoolean("allowUpdateDL", true); + isEnableDownloadOfflineButton = eaglercraftOpts.optBoolean("enableDownloadOfflineButton", true); + downloadOfflineButtonLink = eaglercraftOpts.optString("downloadOfflineButtonLink", null); + useSpecialCursors = eaglercraftOpts.optBoolean("html5CursorSupport", false); + logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftOpts.optBoolean("logInvalidCerts", false); + enableSignatureBadge = eaglercraftOpts.optBoolean("enableSignatureBadge", false); + allowVoiceClient = eaglercraftOpts.optBoolean("allowVoiceClient", true); + allowFNAWSkins = eaglercraftOpts.optBoolean("allowFNAWSkins", true); + localStorageNamespace = eaglercraftOpts.optString("localStorageNamespace", + EaglercraftVersion.localStorageNamespace); + enableMinceraft = eaglercraftOpts.optBoolean("enableMinceraft", true); + enableServerCookies = !demoMode && eaglercraftOpts.optBoolean("enableServerCookies", true); + allowServerRedirects = eaglercraftOpts.optBoolean("allowServerRedirects", true); + crashOnUncaughtExceptions = eaglercraftOpts.optBoolean("crashOnUncaughtExceptions", false); + openDebugConsoleOnLaunch = eaglercraftOpts.optBoolean("openDebugConsoleOnLaunch", false); + fixDebugConsoleUnloadListener = eaglercraftOpts.optBoolean("fixDebugConsoleUnloadListener", false); + forceWebViewSupport = eaglercraftOpts.optBoolean("forceWebViewSupport", false); + enableWebViewCSP = eaglercraftOpts.optBoolean("enableWebViewCSP", true); + autoFixLegacyStyleAttr = eaglercraftOpts.optBoolean("autoFixLegacyStyleAttr", true); + showBootMenuOnLaunch = eaglercraftOpts.optBoolean("showBootMenuOnLaunch", false); + bootMenuBlocksUnsignedClients = eaglercraftOpts.optBoolean("bootMenuBlocksUnsignedClients", false); + allowBootMenu = eaglercraftOpts.optBoolean("allowBootMenu", !demoMode); + forceProfanityFilter = eaglercraftOpts.optBoolean("forceProfanityFilter", false); + forceWebGL1 = eaglercraftOpts.optBoolean("forceWebGL1", false); + forceWebGL2 = eaglercraftOpts.optBoolean("forceWebGL2", false); + allowExperimentalWebGL1 = eaglercraftOpts.optBoolean("allowExperimentalWebGL1", true); + useWebGLExt = eaglercraftOpts.optBoolean("useWebGLExt", true); + useDelayOnSwap = eaglercraftOpts.optBoolean("useDelayOnSwap", false); + useJOrbisAudioDecoder = eaglercraftOpts.optBoolean("useJOrbisAudioDecoder", false); + useXHRFetch = eaglercraftOpts.optBoolean("useXHRFetch", false); + useVisualViewport = eaglercraftOpts.optBoolean("useVisualViewport", true); + deobfStackTraces = eaglercraftOpts.optBoolean("deobfStackTraces", true); + disableBlobURLs = eaglercraftOpts.optBoolean("disableBlobURLs", false); + eaglerNoDelay = eaglercraftOpts.optBoolean("eaglerNoDelay", false); + ramdiskMode = eaglercraftOpts.optBoolean("ramdiskMode", false); + singleThreadMode = eaglercraftOpts.optBoolean("singleThreadMode", false); + enableEPKVersionCheck = eaglercraftOpts.optBoolean("enableEPKVersionCheck", true); + defaultServers.clear(); + JSONArray serversArray = eaglercraftOpts.optJSONArray("servers"); + if (serversArray != null) { + for (int i = 0, l = serversArray.length(); i < l; ++i) { + JSONObject serverEntry = serversArray.getJSONObject(i); + boolean hideAddr = serverEntry.optBoolean("hideAddr", false); + String serverAddr = serverEntry.optString("addr", null); + if (serverAddr != null) { + String serverName = serverEntry.optString("name", "Default Server #" + i); + defaultServers.add(new DefaultServer(serverName, serverAddr, hideAddr)); + } + } + } + + relays.clear(); + JSONArray relaysArray = eaglercraftOpts.optJSONArray("relays"); + if (relaysArray != null) { + boolean gotAPrimary = false; + for (int i = 0, l = relaysArray.length(); i < l; ++i) { + JSONObject relay = relaysArray.getJSONObject(i); + boolean p = relay.optBoolean("primary"); + if (p) { + if (gotAPrimary) { + p = false; + } else { + gotAPrimary = true; + } + } + relays.add(new RelayEntry(relay.getString("addr"), relay.getString("comment"), p)); + } + } + + boolean officialUpdates = !demoMode + && EaglercraftVersion.updateBundlePackageName.equals("net.lax1dude.eaglercraft.v1_8.client"); + if (relays.size() <= 0) { + int choice = ThreadLocalRandom.current().nextInt(3); + relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", choice == 0)); + relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", choice == 1)); + relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", choice == 2)); + checkRelaysForUpdates = !demoMode && eaglercraftOpts.optBoolean("checkRelaysForUpdates", officialUpdates); + } else { + if (officialUpdates) { + for (int i = 0, l = relays.size(); i < l; ++i) { + String addr = relays.get(i).address; + if (!addr.contains("deev.is") && !addr.contains("lax1dude.net") + && !addr.contains("shhnowisnottheti.me")) { + officialUpdates = false; + break; + } + } + } + checkRelaysForUpdates = !demoMode && eaglercraftOpts.optBoolean("checkRelaysForUpdates", officialUpdates); + } + + RelayManager.relayManager.load(EagRuntime.getStorage("r")); + + if (RelayManager.relayManager.count() <= 0) { + RelayManager.relayManager.loadDefaults(); + RelayManager.relayManager.save(); + } + } + public void loadNative(JSObject jsObject) { integratedServerOpts = new JSONObject(); - JSEaglercraftXOptsRoot eaglercraftXOpts = (JSEaglercraftXOptsRoot)jsObject; - + JSEaglercraftXOptsRoot eaglercraftXOpts = (JSEaglercraftXOptsRoot) jsObject; + defaultLocale = eaglercraftXOpts.getLang("en_US"); serverToJoin = eaglercraftXOpts.getJoinServer(null); worldsDB = eaglercraftXOpts.getWorldsDB("worlds_starlike"); @@ -101,12 +443,15 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu checkGLErrors = eaglercraftXOpts.getCheckGLErrors(false); checkShaderGLErrors = eaglercraftXOpts.getCheckShaderGLErrors(false); demoMode = EaglercraftVersion.forceDemoMode || eaglercraftXOpts.getDemoMode(false); - isAllowUpdateSvc = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftXOpts.getAllowUpdateSvc(true); - isAllowUpdateDL = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftXOpts.getAllowUpdateDL(true); + isAllowUpdateSvc = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftXOpts.getAllowUpdateSvc(true); + isAllowUpdateDL = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftXOpts.getAllowUpdateDL(true); isEnableDownloadOfflineButton = eaglercraftXOpts.getEnableDownloadOfflineButton(true); downloadOfflineButtonLink = eaglercraftXOpts.getDownloadOfflineButtonLink(null); useSpecialCursors = eaglercraftXOpts.getHtml5CursorSupport(false); - logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftXOpts.getLogInvalidCerts(true); + logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode + && eaglercraftXOpts.getLogInvalidCerts(false); enableSignatureBadge = eaglercraftXOpts.getEnableSignatureBadge(false); allowVoiceClient = eaglercraftXOpts.getAllowVoiceClient(true); allowFNAWSkins = !demoMode && eaglercraftXOpts.getAllowFNAWSkins(true); @@ -139,10 +484,10 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu singleThreadMode = eaglercraftXOpts.getSingleThreadMode(false); enableEPKVersionCheck = eaglercraftXOpts.getEnableEPKVersionCheck(true); JSEaglercraftXOptsHooks hooksObj = eaglercraftXOpts.getHooks(); - if(hooksObj != null) { + if (hooksObj != null) { hooks.loadHooks(hooksObj); } - + integratedServerOpts.put("worldsDB", worldsDB); integratedServerOpts.put("demoMode", demoMode); integratedServerOpts.put("lang", defaultLocale); @@ -156,34 +501,34 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu integratedServerOpts.put("eaglerNoDelay", eaglerNoDelay); integratedServerOpts.put("ramdiskMode", ramdiskMode); integratedServerOpts.put("singleThreadMode", singleThreadMode); - + defaultServers.clear(); JSArrayReader serversArray = eaglercraftXOpts.getServers(); - if(serversArray != null) { - for(int i = 0, l = serversArray.getLength(); i < l; ++i) { + if (serversArray != null) { + for (int i = 0, l = serversArray.getLength(); i < l; ++i) { JSEaglercraftXOptsServer serverEntry = serversArray.get(i); boolean hideAddr = serverEntry.getHideAddr(false); String serverAddr = serverEntry.getAddr(); - if(serverAddr != null) { + if (serverAddr != null) { String serverName = serverEntry.getName("Default Server #" + i); defaultServers.add(new DefaultServer(serverName, serverAddr, hideAddr)); } } } - + relays.clear(); JSArrayReader relaysArray = eaglercraftXOpts.getRelays(); - if(relaysArray != null) { + if (relaysArray != null) { boolean gotAPrimary = false; - for(int i = 0, l = relaysArray.getLength(); i < l; ++i) { + for (int i = 0, l = relaysArray.getLength(); i < l; ++i) { JSEaglercraftXOptsRelay relay = relaysArray.get(i); String addr = relay.getAddr(); - if(addr != null) { + if (addr != null) { boolean p = relay.getPrimary(); - if(p) { - if(gotAPrimary) { + if (p) { + if (gotAPrimary) { p = false; - }else { + } else { gotAPrimary = true; } } @@ -191,19 +536,21 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu } } } - - boolean officialUpdates = !demoMode && EaglercraftVersion.updateBundlePackageName.equals("net.lax1dude.eaglercraft.v1_8.client"); + + boolean officialUpdates = !demoMode + && EaglercraftVersion.updateBundlePackageName.equals("net.lax1dude.eaglercraft.v1_8.client"); if (relays.size() <= 0) { int choice = ThreadLocalRandom.current().nextInt(3); relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", choice == 0)); relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", choice == 1)); relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", choice == 2)); checkRelaysForUpdates = !demoMode && eaglercraftXOpts.getCheckRelaysForUpdates(officialUpdates); - }else { - if(officialUpdates) { - for(int i = 0, l = relays.size(); i < l; ++i) { + } else { + if (officialUpdates) { + for (int i = 0, l = relays.size(); i < l; ++i) { String addr = relays.get(i).address; - if(!addr.contains("deev.is") && !addr.contains("lax1dude.net") && !addr.contains("shhnowisnottheti.me")) { + if (!addr.contains("deev.is") && !addr.contains("lax1dude.net") + && !addr.contains("shhnowisnottheti.me")) { officialUpdates = false; break; } @@ -211,350 +558,15 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu } checkRelaysForUpdates = !demoMode && eaglercraftXOpts.getCheckRelaysForUpdates(officialUpdates); } - + RelayManager.relayManager.load(EagRuntime.getStorage("r")); - + if (RelayManager.relayManager.count() <= 0) { RelayManager.relayManager.loadDefaults(); RelayManager.relayManager.save(); } } - public void loadJSON(JSONObject eaglercraftOpts) { - integratedServerOpts = eaglercraftOpts; - defaultLocale = eaglercraftOpts.optString("lang", "en_US"); - serverToJoin = eaglercraftOpts.optString("joinServer", null); - worldsDB = eaglercraftOpts.optString("worldsDB", "worlds_starlike"); - resourcePacksDB = eaglercraftOpts.optString("resourcePacksDB", "resourcePacks_starlike"); - checkGLErrors = eaglercraftOpts.optBoolean("checkGLErrors", false); - checkShaderGLErrors = eaglercraftOpts.optBoolean("checkShaderGLErrors", false); - if(EaglercraftVersion.forceDemoMode) { - eaglercraftOpts.put("demoMode", true); - } - demoMode = EaglercraftVersion.forceDemoMode || eaglercraftOpts.optBoolean("demoMode", false); - isAllowUpdateSvc = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftOpts.optBoolean("allowUpdateSvc", true); - isAllowUpdateDL = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftOpts.optBoolean("allowUpdateDL", true); - isEnableDownloadOfflineButton = eaglercraftOpts.optBoolean("enableDownloadOfflineButton", true); - downloadOfflineButtonLink = eaglercraftOpts.optString("downloadOfflineButtonLink", null); - useSpecialCursors = eaglercraftOpts.optBoolean("html5CursorSupport", false); - logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftOpts.optBoolean("logInvalidCerts", true); - enableSignatureBadge = eaglercraftOpts.optBoolean("enableSignatureBadge", false); - allowVoiceClient = eaglercraftOpts.optBoolean("allowVoiceClient", true); - allowFNAWSkins = eaglercraftOpts.optBoolean("allowFNAWSkins", true); - localStorageNamespace = eaglercraftOpts.optString("localStorageNamespace", EaglercraftVersion.localStorageNamespace); - enableMinceraft = eaglercraftOpts.optBoolean("enableMinceraft", true); - enableServerCookies = !demoMode && eaglercraftOpts.optBoolean("enableServerCookies", true); - allowServerRedirects = eaglercraftOpts.optBoolean("allowServerRedirects", true); - crashOnUncaughtExceptions = eaglercraftOpts.optBoolean("crashOnUncaughtExceptions", false); - openDebugConsoleOnLaunch = eaglercraftOpts.optBoolean("openDebugConsoleOnLaunch", false); - fixDebugConsoleUnloadListener = eaglercraftOpts.optBoolean("fixDebugConsoleUnloadListener", false); - forceWebViewSupport = eaglercraftOpts.optBoolean("forceWebViewSupport", false); - enableWebViewCSP = eaglercraftOpts.optBoolean("enableWebViewCSP", true); - autoFixLegacyStyleAttr = eaglercraftOpts.optBoolean("autoFixLegacyStyleAttr", true); - showBootMenuOnLaunch = eaglercraftOpts.optBoolean("showBootMenuOnLaunch", false); - bootMenuBlocksUnsignedClients = eaglercraftOpts.optBoolean("bootMenuBlocksUnsignedClients", false); - allowBootMenu = eaglercraftOpts.optBoolean("allowBootMenu", !demoMode); - forceProfanityFilter = eaglercraftOpts.optBoolean("forceProfanityFilter", false); - forceWebGL1 = eaglercraftOpts.optBoolean("forceWebGL1", false); - forceWebGL2 = eaglercraftOpts.optBoolean("forceWebGL2", false); - allowExperimentalWebGL1 = eaglercraftOpts.optBoolean("allowExperimentalWebGL1", true); - useWebGLExt = eaglercraftOpts.optBoolean("useWebGLExt", true); - useDelayOnSwap = eaglercraftOpts.optBoolean("useDelayOnSwap", false); - useJOrbisAudioDecoder = eaglercraftOpts.optBoolean("useJOrbisAudioDecoder", false); - useXHRFetch = eaglercraftOpts.optBoolean("useXHRFetch", false); - useVisualViewport = eaglercraftOpts.optBoolean("useVisualViewport", true); - deobfStackTraces = eaglercraftOpts.optBoolean("deobfStackTraces", true); - disableBlobURLs = eaglercraftOpts.optBoolean("disableBlobURLs", false); - eaglerNoDelay = eaglercraftOpts.optBoolean("eaglerNoDelay", false); - ramdiskMode = eaglercraftOpts.optBoolean("ramdiskMode", false); - singleThreadMode = eaglercraftOpts.optBoolean("singleThreadMode", false); - enableEPKVersionCheck = eaglercraftOpts.optBoolean("enableEPKVersionCheck", true); - defaultServers.clear(); - JSONArray serversArray = eaglercraftOpts.optJSONArray("servers"); - if(serversArray != null) { - for(int i = 0, l = serversArray.length(); i < l; ++i) { - JSONObject serverEntry = serversArray.getJSONObject(i); - boolean hideAddr = serverEntry.optBoolean("hideAddr", false); - String serverAddr = serverEntry.optString("addr", null); - if(serverAddr != null) { - String serverName = serverEntry.optString("name", "Default Server #" + i); - defaultServers.add(new DefaultServer(serverName, serverAddr, hideAddr)); - } - } - } - - relays.clear(); - JSONArray relaysArray = eaglercraftOpts.optJSONArray("relays"); - if(relaysArray != null) { - boolean gotAPrimary = false; - for (int i = 0, l = relaysArray.length(); i < l; ++i) { - JSONObject relay = relaysArray.getJSONObject(i); - boolean p = relay.optBoolean("primary"); - if(p) { - if(gotAPrimary) { - p = false; - }else { - gotAPrimary = true; - } - } - relays.add(new RelayEntry(relay.getString("addr"), relay.getString("comment"), p)); - } - } - - boolean officialUpdates = !demoMode && EaglercraftVersion.updateBundlePackageName.equals("net.lax1dude.eaglercraft.v1_8.client"); - if (relays.size() <= 0) { - int choice = ThreadLocalRandom.current().nextInt(3); - relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", choice == 0)); - relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", choice == 1)); - relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", choice == 2)); - checkRelaysForUpdates = !demoMode && eaglercraftOpts.optBoolean("checkRelaysForUpdates", officialUpdates); - }else { - if(officialUpdates) { - for(int i = 0, l = relays.size(); i < l; ++i) { - String addr = relays.get(i).address; - if(!addr.contains("deev.is") && !addr.contains("lax1dude.net") && !addr.contains("shhnowisnottheti.me")) { - officialUpdates = false; - break; - } - } - } - checkRelaysForUpdates = !demoMode && eaglercraftOpts.optBoolean("checkRelaysForUpdates", officialUpdates); - } - - RelayManager.relayManager.load(EagRuntime.getStorage("r")); - - if (RelayManager.relayManager.count() <= 0) { - RelayManager.relayManager.loadDefaults(); - RelayManager.relayManager.save(); - } - } - - @Override - public String getDefaultLocale() { - return defaultLocale; - } - - @Override - public List getDefaultServerList() { - return defaultServers; - } - - @Override - public String getServerToJoin() { - return serverToJoin; - } - - @Override - public String getWorldsDB() { - return worldsDB; - } - - @Override - public String getResourcePacksDB() { - return resourcePacksDB; - } - - @Override - public JSONObject getIntegratedServerOpts() { - return integratedServerOpts; - } - - @Override - public List getRelays() { - return relays; - } - - @Override - public boolean isCheckGLErrors() { - return checkGLErrors; - } - - @Override - public boolean isCheckShaderGLErrors() { - return checkShaderGLErrors; - } - - @Override - public boolean isDemo() { - return demoMode; - } - - @Override - public boolean allowUpdateSvc() { - return isAllowUpdateSvc; - } - - @Override - public boolean allowUpdateDL() { - return isAllowUpdateDL; - } - - @Override - public boolean isEnableDownloadOfflineButton() { - return isEnableDownloadOfflineButton; - } - - @Override - public String getDownloadOfflineButtonLink() { - return downloadOfflineButtonLink; - } - - @Override - public boolean useSpecialCursors() { - return useSpecialCursors; - } - - @Override - public boolean isLogInvalidCerts() { - return logInvalidCerts; - } - - @Override - public boolean isCheckRelaysForUpdates() { - return checkRelaysForUpdates; - } - - @Override - public boolean isEnableSignatureBadge() { - return enableSignatureBadge; - } - - @Override - public boolean isAllowVoiceClient() { - return allowVoiceClient; - } - - @Override - public boolean isAllowFNAWSkins() { - return allowFNAWSkins; - } - - @Override - public String getLocalStorageNamespace() { - return localStorageNamespace; - } - - @Override - public boolean isEnableMinceraft() { - return enableMinceraft; - } - - @Override - public boolean isEnableServerCookies() { - return enableServerCookies; - } - - @Override - public boolean isAllowServerRedirects() { - return allowServerRedirects; - } - - @Override - public boolean isOpenDebugConsoleOnLaunch() { - return openDebugConsoleOnLaunch; - } - - public boolean isFixDebugConsoleUnloadListenerTeaVM() { - return fixDebugConsoleUnloadListener; - } - - @Override - public boolean isForceWebViewSupport() { - return forceWebViewSupport; - } - - @Override - public boolean isEnableWebViewCSP() { - return enableWebViewCSP; - } - - public boolean isAutoFixLegacyStyleAttrTeaVM() { - return autoFixLegacyStyleAttr; - } - - public boolean isForceWebGL1TeaVM() { - return forceWebGL1; - } - - public boolean isForceWebGL2TeaVM() { - return forceWebGL2; - } - - public boolean isAllowExperimentalWebGL1TeaVM() { - return allowExperimentalWebGL1; - } - - public boolean isUseWebGLExtTeaVM() { - return useWebGLExt; - } - - public boolean isUseDelayOnSwapTeaVM() { - return useDelayOnSwap; - } - - public boolean isUseJOrbisAudioDecoderTeaVM() { - return useJOrbisAudioDecoder; - } - - public boolean isUseXHRFetchTeaVM() { - return useXHRFetch; - } - - public boolean isDeobfStackTracesTeaVM() { - return deobfStackTraces; - } - - public boolean isUseVisualViewportTeaVM() { - return useVisualViewport; - } - - public boolean isDisableBlobURLsTeaVM() { - return disableBlobURLs; - } - - public boolean isSingleThreadModeTeaVM() { - return singleThreadMode; - } - - public boolean isEnableEPKVersionCheckTeaVM() { - return enableEPKVersionCheck; - } - - @Override - public boolean isShowBootMenuOnLaunch() { - return showBootMenuOnLaunch; - } - - @Override - public boolean isBootMenuBlocksUnsignedClients() { - return bootMenuBlocksUnsignedClients; - } - - @Override - public boolean isAllowBootMenu() { - return allowBootMenu; - } - - @Override - public boolean isForceProfanityFilter() { - return forceProfanityFilter; - } - - @Override - public boolean isEaglerNoDelay() { - return eaglerNoDelay; - } - - @Override - public boolean isRamdiskMode() { - return ramdiskMode; - } - - @Override - public IClientConfigAdapterHooks getHooks() { - return hooks; - } - public JSONObject toJSONObject() { JSONObject jsonObject = new JSONObject(); jsonObject.put("lang", defaultLocale); @@ -603,7 +615,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu jsonObject.put("singleThreadMode", singleThreadMode); jsonObject.put("enableEPKVersionCheck", enableEPKVersionCheck); JSONArray serversArr = new JSONArray(); - for(int i = 0, l = defaultServers.size(); i < l; ++i) { + for (int i = 0, l = defaultServers.size(); i < l; ++i) { DefaultServer srv = defaultServers.get(i); JSONObject obj = new JSONObject(); obj.put("addr", srv.addr); @@ -613,7 +625,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu } jsonObject.put("servers", serversArr); JSONArray relaysArr = new JSONArray(); - for(int i = 0, l = relays.size(); i < l; ++i) { + for (int i = 0, l = relays.size(); i < l; ++i) { RelayEntry rl = relays.get(i); JSONObject obj = new JSONObject(); obj.put("addr", rl.address); @@ -634,4 +646,9 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter, IBootMenu return toJSONObject().toString(4); } + @Override + public boolean useSpecialCursors() { + return useSpecialCursors; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java index 3af80ca7..94d1aa12 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java @@ -16,74 +16,22 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks { - private static final Logger logger = LogManager.getLogger("TeaVMClientConfigAdapterHooks"); - - private LocalStorageSaveHook saveHook = null; - private LocalStorageLoadHook loadHook = null; - private CrashReportHook crashHook = null; - private ScreenChangeHook screenChangedHook = null; - - @JSFunctor - private static interface LocalStorageSaveHook extends JSObject { - void call(String key, String base64); - } - - @Override - public void callLocalStorageSavedHook(String key, String base64) { - if(saveHook != null) { - callHookSafe("localStorageSaved", () -> { - saveHook.call(key, base64); - }); - } - } - - @JSFunctor - private static interface LocalStorageLoadHook extends JSObject { - String call(String key); - } - - @Override - public String callLocalStorageLoadHook(String key) { - if(loadHook != null) { - return (String)callHookSafeWithReturn("localStorageLoaded", () -> { - return loadHook.call(key); - }); - }else { - return null; - } - } - - @JSFunctor - private static interface ScreenChangeHook extends JSObject { - String call(String screenName, int scaledWidth, int scaledHeight, int realWidth, int realHeight, - int scaleFactor); - } - - @Override - public void callScreenChangedHook(String screenName, int scaledWidth, int scaledHeight, int realWidth, - int realHeight, int scaleFactor) { - if(screenChangedHook != null) { - callHookSafe("screenChanged", () -> { - screenChangedHook.call(screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor); - }); - } - } - @JSFunctor private static interface CrashReportHook extends JSObject { void call(String crashReport, CustomMessageCB customMessageCB); @@ -94,20 +42,29 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks void call(String msg); } - @Override - public void callCrashReportHook(String crashReport, Consumer customMessageCB) { - if(crashHook != null) { - callHookSafeSync("crashReportShow", () -> { - crashHook.call(crashReport, (msg) -> customMessageCB.accept(msg)); - }); - } + @JSFunctor + private static interface LocalStorageLoadHook extends JSObject { + String call(String key); } + @JSFunctor + private static interface LocalStorageSaveHook extends JSObject { + void call(String key, String base64); + } + + @JSFunctor + private static interface ScreenChangeHook extends JSObject { + String call(String screenName, int scaledWidth, int scaledHeight, int realWidth, int realHeight, + int scaleFactor); + } + + private static final Logger logger = LogManager.getLogger("TeaVMClientConfigAdapterHooks"); + private static void callHookSafe(String identifer, Runnable hooker) { Window.setTimeout(() -> { try { hooker.run(); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Caught exception while invoking eaglercraftXOpts \"{}\" hook!", identifer); logger.error(t); } @@ -121,10 +78,10 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks Window.setTimeout(() -> { try { hooker.run(); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Caught exception while invoking eaglercraftXOpts \"{}\" hook!", identifer); logger.error(t); - }finally { + } finally { cb.complete(null); } }, 0); @@ -133,25 +90,73 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks @Async private static native Object callHookSafeWithReturn(String identifer, Supplier hooker); - private static void callHookSafeWithReturn(String identifer, Supplier hooker, final AsyncCallback cb) { + private static void callHookSafeWithReturn(String identifer, Supplier hooker, + final AsyncCallback cb) { Window.setTimeout(() -> { Object res = null; try { res = hooker.get(); - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Caught exception while invoking eaglercraftXOpts \"{}\" hook!", identifer); logger.error(t); - }finally { + } finally { cb.complete(res); } }, 0); } + private LocalStorageSaveHook saveHook = null; + + private LocalStorageLoadHook loadHook = null; + + private CrashReportHook crashHook = null; + + private ScreenChangeHook screenChangedHook = null; + + @Override + public void callCrashReportHook(String crashReport, Consumer customMessageCB) { + if (crashHook != null) { + callHookSafeSync("crashReportShow", () -> { + crashHook.call(crashReport, (msg) -> customMessageCB.accept(msg)); + }); + } + } + + @Override + public String callLocalStorageLoadHook(String key) { + if (loadHook != null) { + return (String) callHookSafeWithReturn("localStorageLoaded", () -> { + return loadHook.call(key); + }); + } else { + return null; + } + } + + @Override + public void callLocalStorageSavedHook(String key, String base64) { + if (saveHook != null) { + callHookSafe("localStorageSaved", () -> { + saveHook.call(key, base64); + }); + } + } + + @Override + public void callScreenChangedHook(String screenName, int scaledWidth, int scaledHeight, int realWidth, + int realHeight, int scaleFactor) { + if (screenChangedHook != null) { + callHookSafe("screenChanged", () -> { + screenChangedHook.call(screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor); + }); + } + } + public void loadHooks(JSEaglercraftXOptsHooks hooks) { - saveHook = (LocalStorageSaveHook)hooks.getLocalStorageSavedHook(); - loadHook = (LocalStorageLoadHook)hooks.getLocalStorageLoadedHook(); - crashHook = (CrashReportHook)hooks.getCrashReportHook(); - screenChangedHook = (ScreenChangeHook)hooks.getScreenChangedHook(); + saveHook = (LocalStorageSaveHook) hooks.getLocalStorageSavedHook(); + loadHook = (LocalStorageLoadHook) hooks.getLocalStorageLoadedHook(); + crashHook = (CrashReportHook) hooks.getCrashReportHook(); + screenChangedHook = (ScreenChangeHook) hooks.getScreenChangedHook(); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMDataURLManager.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMDataURLManager.java index 8446c160..bc9fda74 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMDataURLManager.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMDataURLManager.java @@ -11,75 +11,76 @@ import net.lax1dude.eaglercraft.v1_8.Base64; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMDataURLManager { - private static void checkDataURLSupport0(boolean fetchBased, final AsyncCallback callback) { - final byte[] testData = new byte[1024]; - for(int i = 0; i < 1024; ++i) { - testData[i] = (byte)i; - } - String testURL = "data:application/octet-stream;base64," + Base64.encodeBase64String(testData); - TeaVMFetchJS.FetchHandler cb = (data) -> { - if(data != null && TeaVMUtils.isTruthy(data) && data.getByteLength() == 1024) { - byte[] bb = TeaVMUtils.wrapByteArrayBuffer(data); - callback.complete(Arrays.equals(bb, testData)); - }else { - callback.complete(false); - } - }; - try { - if(fetchBased) { - TeaVMFetchJS.doFetchDownload(testURL, "force-cache", cb); - }else { - TeaVMFetchJS.doXHRDownload(testURL, cb); - } - }catch(Throwable t) { - callback.complete(false); - } - } - - @Async - private static native Boolean checkDataURLSupport0(boolean fetchBased); - public static boolean checkDataURLSupport(boolean fetchBased) { Boolean b = null; try { b = checkDataURLSupport0(fetchBased); - }catch(Throwable t) { + } catch (Throwable t) { } return b != null && b.booleanValue(); } + @Async + private static native Boolean checkDataURLSupport0(boolean fetchBased); + + private static void checkDataURLSupport0(boolean fetchBased, final AsyncCallback callback) { + final byte[] testData = new byte[1024]; + for (int i = 0; i < 1024; ++i) { + testData[i] = (byte) i; + } + String testURL = "data:application/octet-stream;base64," + Base64.encodeBase64String(testData); + TeaVMFetchJS.FetchHandler cb = (data) -> { + if (data != null && TeaVMUtils.isTruthy(data) && data.getByteLength() == 1024) { + byte[] bb = TeaVMUtils.wrapByteArrayBuffer(data); + callback.complete(Arrays.equals(bb, testData)); + } else { + callback.complete(false); + } + }; + try { + if (fetchBased) { + TeaVMFetchJS.doFetchDownload(testURL, "force-cache", cb); + } else { + TeaVMFetchJS.doXHRDownload(testURL, cb); + } + } catch (Throwable t) { + callback.complete(false); + } + } + public static byte[] decodeDataURLFallback(String dataURL) { - if(dataURL.length() < 6 || !dataURL.substring(0, 5).equalsIgnoreCase("data:")) { + if (dataURL.length() < 6 || !dataURL.substring(0, 5).equalsIgnoreCase("data:")) { return null; } int i = dataURL.indexOf(','); - if(i == -1 || i >= dataURL.length() - 1) { + if (i == -1 || i >= dataURL.length() - 1) { return null; } String mime = dataURL.substring(0, i).toLowerCase(); String str = dataURL.substring(i + 1); try { - if(mime.endsWith(";base64")) { + if (mime.endsWith(";base64")) { return Base64.decodeBase64(str); - }else { + } else { return Window.decodeURIComponent(str).getBytes(StandardCharsets.UTF_8); } - }catch(Throwable t) { + } catch (Throwable t) { return null; } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMEnterBootMenuException.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMEnterBootMenuException.java index 7a67daaf..9f2ca922 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMEnterBootMenuException.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMEnterBootMenuException.java @@ -2,19 +2,26 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMEnterBootMenuException extends RuntimeException { + public final boolean isManual; + + public TeaVMEnterBootMenuException(boolean manual) { + this.isManual = manual; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMFetchJS.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMFetchJS.java index c0cb1a1d..4f103a25 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMFetchJS.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMFetchJS.java @@ -7,18 +7,19 @@ import org.teavm.jso.typedarrays.ArrayBuffer; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMFetchJS { @@ -27,7 +28,7 @@ public class TeaVMFetchJS { void onFetch(ArrayBuffer data); } - @JSBody(params = { }, script = "return (typeof fetch === \"function\");") + @JSBody(params = {}, script = "return (typeof fetch === \"function\");") public static native boolean checkFetchSupport(); @JSBody(params = { "uri", "forceCache", "callback" }, script = "fetch(uri, { cache: forceCache, mode: \"cors\" })" diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMRuntimeDeobfuscator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMRuntimeDeobfuscator.java index efece705..1bb3f18d 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMRuntimeDeobfuscator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMRuntimeDeobfuscator.java @@ -19,23 +19,22 @@ import net.lax1dude.eaglercraft.v1_8.log4j.Logger; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMRuntimeDeobfuscator { - private static final Logger logger = LogManager.getLogger("TeaVMRuntimeDeobfuscator"); - private static class DeobfNameEntry { private final String className; @@ -48,55 +47,198 @@ public class TeaVMRuntimeDeobfuscator { } + private static final Logger logger = LogManager.getLogger("TeaVMRuntimeDeobfuscator"); + private static final Object initLock = new Object(); - private static final Map deobfClassNames = new HashMap<>(); - private static final Map deobfFuncNames = new HashMap<>(); + private static final Map deobfClassNames = new HashMap<>(); + private static final Map deobfFuncNames = new HashMap<>(); private static boolean isInitialized = false; private static boolean isFailed = false; + private static int countLeadingWhitespace(String line) { + for (int i = 0, l = line.length(); i < l; ++i) { + char c = line.charAt(i); + if (c != ' ' && c != '\t') { + return i; + } + } + return 0; + } + + public static String deobfClassName(String clsName) { + if (!isInitialized) + return null; + return deobfClassNames.get(clsName); + } + + public static void deobfExceptionStack(List stackLines) { + if (!isInitialized) + return; + try { + for (int i = 0, l = stackLines.size(); i < l; ++i) { + String line = stackLines.get(i); + int len = line.length(); + if (len == 0) + continue; + int leadingWs = countLeadingWhitespace(line); + if (len > leadingWs + 3 && line.charAt(leadingWs) == 'a' && line.charAt(leadingWs + 1) == 't' + && line.charAt(leadingWs + 2) == ' ') { + leadingWs += 3; + } + int nextSpace = line.indexOf(' ', leadingWs); + int nextDot = line.indexOf('.', leadingWs); + String funcName2 = null; + if (nextDot > 0 && nextDot < nextSpace) { + funcName2 = line.substring(nextDot + 1, nextSpace); + nextSpace = nextDot; + } + if (nextSpace == -1) { + nextSpace = line.indexOf('@', leadingWs); + if (nextSpace == -1 && nextSpace < leadingWs) { + if (nextSpace == leadingWs + 1 && line.charAt(leadingWs) == '@') { + continue; + } + nextSpace = len; + } + } + if (nextSpace - leadingWs < 1) { + continue; + } + String funcName = line.substring(leadingWs, nextSpace); + String deobfName = deobfFunctionFullName(funcName); + if (deobfName != null) { + stackLines.set(i, line.substring(0, leadingWs) + deobfName + line.substring(nextSpace)); + } else { + deobfName = deobfClassName(funcName); + if (deobfName != null) { + DeobfNameEntry deobfName2 = null; + if (funcName2 != null && funcName2.indexOf('.') == -1) { + deobfName2 = deobfFuncNames.get(funcName2); + } + if (deobfName2 != null && deobfName.equals(deobfName2.className)) { + deobfName += "." + deobfName2.functionName + "()"; + } + stackLines.set(i, line.substring(0, leadingWs) + deobfName + line.substring(nextSpace)); + } + } + } + } catch (Throwable t) { + try { + logger.error("Failed to deobfuscate stack trace!"); + } catch (Throwable t2) { + } + } + } + + public static String deobfExceptionStack(String stackLines) { + if (!isInitialized) + return stackLines; + try { + List lines = Lists.newArrayList(EagUtils.splitPattern.split(stackLines)); + deobfExceptionStack(lines); + return String.join("\n", lines); + } catch (Throwable t) { + try { + logger.error("Failed to deobfuscate stack trace!"); + } catch (Throwable t2) { + } + return stackLines; + } + } + + public static String deobfFullName(String funcName) { + if (!isInitialized) + return null; + DeobfNameEntry ret = deobfFuncNames.get(funcName); + return ret != null ? (ret.className != null ? ret.className : "") + "." + ret.functionName + "()" + : deobfClassNames.get(funcName); + } + + public static String deobfFunctionClass(String funcName) { + if (!isInitialized) + return null; + DeobfNameEntry ret = deobfFuncNames.get(funcName); + return ret != null ? ret.className : null; + } + + public static String deobfFunctionFullName(String funcName) { + if (!isInitialized) + return null; + DeobfNameEntry ret = deobfFuncNames.get(funcName); + return ret != null ? (ret.className != null ? ret.className : "") + "." + ret.functionName + "()" + : null; + } + + public static String deobfFunctionName(String funcName) { + if (!isInitialized) + return null; + DeobfNameEntry ret = deobfFuncNames.get(funcName); + return ret != null ? ret.functionName : null; + } + @GeneratedBy(TeaVMRuntimeDeobfuscatorGenerator.class) private static native JSArrayReader getAllClasses(); + public static void initialize() { + if (!isFailed) { + synchronized (initLock) { + if (!isInitialized) { + try { + initialize0(); + isInitialized = true; + } catch (Throwable t) { + isFailed = true; + try { + logger.error("Failed to initialize the tables!"); + logger.error(t); + } catch (Throwable t2) { + } + } + } + } + } + } + private static void initialize0() { try { logger.info("Loading deobfuscation data, please wait..."); - }catch(Throwable t2) { + } catch (Throwable t2) { } long time = PlatformRuntime.steadyTimeMillis(); JSArrayReader classes = getAllClasses(); - if(classes.getLength() < 2) { + if (classes.getLength() < 2) { return; } deobfClassNames.clear(); deobfFuncNames.clear(); - JSArrayReader stringReaderA = (JSArrayReader)classes.get(0); - JSArrayReader stringReaderB = (JSArrayReader)classes.get(1); + JSArrayReader stringReaderA = (JSArrayReader) classes.get(0); + JSArrayReader stringReaderB = (JSArrayReader) classes.get(1); String[] javaStringPoolA = new String[stringReaderA.getLength()]; - for(int i = 0; i < javaStringPoolA.length; ++i) { + for (int i = 0; i < javaStringPoolA.length; ++i) { javaStringPoolA[i] = stringReaderA.get(i).stringValue(); } String[] javaStringPoolB = new String[stringReaderB.getLength()]; - for(int i = 0; i < javaStringPoolB.length; ++i) { + for (int i = 0; i < javaStringPoolB.length; ++i) { javaStringPoolB[i] = stringReaderB.get(i).stringValue(); } - for(int i = 2, l = classes.getLength() - 2; i < l; i += 3) { - int[] lookupTblClsName = Base64VarIntArray.decodeVarIntArray((JSString)classes.get(i)); + for (int i = 2, l = classes.getLength() - 2; i < l; i += 3) { + int[] lookupTblClsName = Base64VarIntArray.decodeVarIntArray((JSString) classes.get(i)); StringBuilder classNameBuilder = new StringBuilder(); boolean b = false; - for(int j = 0; j < lookupTblClsName.length; ++j) { - if(b) { + for (int j = 0; j < lookupTblClsName.length; ++j) { + if (b) { classNameBuilder.append('.'); } classNameBuilder.append(javaStringPoolA[lookupTblClsName[j]]); b = true; } String className = classNameBuilder.toString(); - String classObfName = ((JSString)classes.get(i + 1)).stringValue(); + String classObfName = ((JSString) classes.get(i + 1)).stringValue(); deobfClassNames.put(classObfName, className); - int[] lookupTbl = Base64VarIntArray.decodeVarIntArray((JSString)classes.get(i + 2)); - for(int j = 0, m = lookupTbl.length - 1; j < m; j += 2) { + int[] lookupTbl = Base64VarIntArray.decodeVarIntArray((JSString) classes.get(i + 2)); + for (int j = 0, m = lookupTbl.length - 1; j < m; j += 2) { String obfName = javaStringPoolB[lookupTbl[j]]; String deobfName = javaStringPoolB[lookupTbl[j + 1]]; deobfFuncNames.put(obfName, new DeobfNameEntry(className, deobfName)); @@ -104,138 +246,9 @@ public class TeaVMRuntimeDeobfuscator { } try { time = PlatformRuntime.steadyTimeMillis() - time; - logger.info("Indexed {} class names and {} function names after {}ms", deobfClassNames.size(), deobfFuncNames.size(), time); - }catch(Throwable t2) { - } - } - - public static void initialize() { - if(!isFailed) { - synchronized(initLock) { - if(!isInitialized) { - try { - initialize0(); - isInitialized = true; - }catch(Throwable t) { - isFailed = true; - try { - logger.error("Failed to initialize the tables!"); - logger.error(t); - }catch(Throwable t2) { - } - } - } - } - } - } - - public static String deobfClassName(String clsName) { - if(!isInitialized) return null; - return deobfClassNames.get(clsName); - } - - public static String deobfFunctionName(String funcName) { - if(!isInitialized) return null; - DeobfNameEntry ret = deobfFuncNames.get(funcName); - return ret != null ? ret.functionName : null; - } - - public static String deobfFunctionClass(String funcName) { - if(!isInitialized) return null; - DeobfNameEntry ret = deobfFuncNames.get(funcName); - return ret != null ? ret.className : null; - } - - public static String deobfFunctionFullName(String funcName) { - if(!isInitialized) return null; - DeobfNameEntry ret = deobfFuncNames.get(funcName); - return ret != null ? (ret.className != null ? ret.className : "") + "." + ret.functionName + "()" : null; - } - - public static String deobfFullName(String funcName) { - if(!isInitialized) return null; - DeobfNameEntry ret = deobfFuncNames.get(funcName); - return ret != null ? (ret.className != null ? ret.className : "") + "." + ret.functionName + "()" : deobfClassNames.get(funcName); - } - - private static int countLeadingWhitespace(String line) { - for(int i = 0, l = line.length(); i < l; ++i) { - char c = line.charAt(i); - if(c != ' ' && c != '\t') { - return i; - } - } - return 0; - } - - public static String deobfExceptionStack(String stackLines) { - if(!isInitialized) return stackLines; - try { - List lines = Lists.newArrayList(EagUtils.splitPattern.split(stackLines)); - deobfExceptionStack(lines); - return String.join("\n", lines); - }catch(Throwable t) { - try { - logger.error("Failed to deobfuscate stack trace!"); - }catch(Throwable t2) { - } - return stackLines; - } - } - - public static void deobfExceptionStack(List stackLines) { - if(!isInitialized) return; - try { - for(int i = 0, l = stackLines.size(); i < l; ++i) { - String line = stackLines.get(i); - int len = line.length(); - if(len == 0) continue; - int leadingWs = countLeadingWhitespace(line); - if(len > leadingWs + 3 && line.charAt(leadingWs) == 'a' && line.charAt(leadingWs + 1) == 't' && line.charAt(leadingWs + 2) == ' ') { - leadingWs += 3; - } - int nextSpace = line.indexOf(' ', leadingWs); - int nextDot = line.indexOf('.', leadingWs); - String funcName2 = null; - if(nextDot > 0 && nextDot < nextSpace) { - funcName2 = line.substring(nextDot + 1, nextSpace); - nextSpace = nextDot; - } - if(nextSpace == -1) { - nextSpace = line.indexOf('@', leadingWs); - if(nextSpace == -1 && nextSpace < leadingWs) { - if(nextSpace == leadingWs + 1 && line.charAt(leadingWs) == '@') { - continue; - } - nextSpace = len; - } - } - if(nextSpace - leadingWs < 1) { - continue; - } - String funcName = line.substring(leadingWs, nextSpace); - String deobfName = deobfFunctionFullName(funcName); - if(deobfName != null) { - stackLines.set(i, line.substring(0, leadingWs) + deobfName + line.substring(nextSpace)); - }else { - deobfName = deobfClassName(funcName); - if(deobfName != null) { - DeobfNameEntry deobfName2 = null; - if(funcName2 != null && funcName2.indexOf('.') == -1) { - deobfName2 = deobfFuncNames.get(funcName2); - } - if(deobfName2 != null && deobfName.equals(deobfName2.className)) { - deobfName += "." + deobfName2.functionName + "()"; - } - stackLines.set(i, line.substring(0, leadingWs) + deobfName + line.substring(nextSpace)); - } - } - } - }catch(Throwable t) { - try { - logger.error("Failed to deobfuscate stack trace!"); - }catch(Throwable t2) { - } + logger.info("Indexed {} class names and {} function names after {}ms", deobfClassNames.size(), + deobfFuncNames.size(), time); + } catch (Throwable t2) { } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java index 909f7816..426d0b1b 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUpdateThread.java @@ -34,24 +34,71 @@ import net.lax1dude.eaglercraft.v1_8.update.UpdateService; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMUpdateThread implements Runnable { private static final Logger logger = LogManager.getLogger("TeaVMUpdateThread"); + public static void downloadSignedOffline(UpdateCertificate cert, byte[] data) { + PlatformApplication.downloadFileWithName( + cert.bundleDisplayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + "_" + + cert.bundleDisplayVersion.replaceAll("[^a-zA-Z0-9\\-_]", "_") + "_Offline_Signed.html", + generateSignedOffline(cert, data)); + } + + @Async + private static native byte[] downloadWithProgress0(TeaVMUpdateThread self, String url); + + private static void downloadWithProgress0(TeaVMUpdateThread self, String url, AsyncCallback cb) { + try { + self.downloadWithProgressImpl(url, cb); + } catch (Throwable t) { + logger.error("Exception caught downloading file: {}", url); + logger.error(t); + cb.complete(null); + } + } + + private static String formatIPFSURL(String cid, String path, String pattern) { + return pattern.replace("$cid$", cid).replace("$path$", path); + } + + private static String formatProxyURL(String path, String pattern) { + return pattern.replace("$url$", Window.encodeURIComponent(path)); + } + + public static byte[] generateSignedOffline(byte[] cert, byte[] data, String date) { + byte[] b = PlatformAssets.getResourceBytes("SignedClientTemplate.txt"); + if (b == null) { + throw new RuntimeException("Could not load SignedClientTemplate.txt from assets.epk!"); + } + String templateHtml = new String(b, StandardCharsets.UTF_8); + templateHtml = templateHtml.replace("${client_signature}", Base64.encodeBase64String(cert)); + templateHtml = templateHtml.replace("${client_bundle}", Base64.encodeBase64String(data)); + templateHtml = templateHtml.replace("${date}", date); + return templateHtml.getBytes(StandardCharsets.UTF_8); + } + + public static byte[] generateSignedOffline(UpdateCertificate cert, byte[] data) { + return generateSignedOffline(cert.rawCertData, data, + (new SimpleDateFormat("MM/dd/yyyy")).format(new Date(cert.sigTimestamp))); + } + public final UpdateCertificate updateCert; + public final UpdateProgressStruct updateProg; public TeaVMUpdateThread(UpdateCertificate updateCert, UpdateProgressStruct updateProg) { @@ -59,6 +106,62 @@ public class TeaVMUpdateThread implements Runnable { this.updateProg = updateProg; } + private byte[] downloadWithProgress(String url) { + updateProg.progressBar = 0.0f; + try { + updateProg.statusString3 = url; + logger.info("Trying to download: {}", url); + byte[] b = downloadWithProgress0(this, url); + if (b == null) { + logger.error("Failed to download: {}", url); + } + return b; + } finally { + updateProg.statusString3 = null; + } + } + + private void downloadWithProgressImpl(String url, final AsyncCallback cb) { + final XMLHttpRequest xhr = XMLHttpRequest.create(); + xhr.open("GET", url); + xhr.setResponseType("arraybuffer"); + TeaVMUtils.addEventListener(xhr, "progress", new EventListener() { + @Override + public void handleEvent(ProgressEvent evt) { + updateProg.progressBar = Math.min((float) evt.getLoaded() / (float) updateCert.bundleDataLength, 1.0f); + } + }); + TeaVMUtils.addEventListener(xhr, "readystatechange", new EventListener() { + @Override + public void handleEvent(Event evt) { + if (xhr.getReadyState() == 4) { + if (xhr.getStatus() == 200) { + ArrayBuffer data = (ArrayBuffer) xhr.getResponse(); + if (data.getByteLength() == updateCert.bundleDataLength) { + cb.complete(TeaVMUtils.wrapByteArrayBuffer(data)); + } else { + logger.error("Unexpected response length {} (expect: {}) from URL: {}", xhr.getStatus(), + xhr.getStatusText(), url); + cb.complete(null); + } + } else { + logger.error("Got response code {} \"{}\" for url: {}", xhr.getStatus(), xhr.getStatusText(), + url); + cb.complete(null); + } + } + } + }); + TeaVMUtils.addEventListener(xhr, "error", new EventListener() { + @Override + public void handleEvent(ProgressEvent evt) { + logger.error("Exception caught downloading file: {}", url); + + } + }); + xhr.send(); + } + @Override public void run() { boolean success = false; @@ -71,72 +174,72 @@ public class TeaVMUpdateThread implements Runnable { updateProg.statusString2 = "Please Wait"; List urlListA = new ArrayList<>(); - ListMultimap downloadSources = updateCert.getSourceMultimap(); + ListMultimap downloadSources = updateCert.getSourceMultimap(); List ls = downloadSources.get("list"); - for(int k = 0, l = ls.size(); k < l; ++k) { + for (int k = 0, l = ls.size(); k < l; ++k) { String str1 = ls.get(k); updateProg.statusString2 = "Fetch List (" + (k + 1) + "/" + l + ")"; byte[] b = downloadWithProgress(str1); - if(b == null) { + if (b == null) { logger.error("Failed to load additional url list: {}", str1); continue; } try { String[] str2 = EagUtils.linesArray(new String(b, StandardCharsets.UTF_8)); - for(int i = 0; i < str2.length; ++i) { - if(!StringUtils.isAllBlank(str2[i]) && (str2[i] = str2[i].trim()).charAt(0) != '#') { + for (int i = 0; i < str2.length; ++i) { + if (!StringUtils.isAllBlank(str2[i]) && (str2[i] = str2[i].trim()).charAt(0) != '#') { String[] strrr = str2[i].split(":", 2); downloadSources.put(strrr[0].trim(), strrr[1].trim()); } } - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Failed to load/parse url list: {}", str1); logger.error(t); } } - + updateProg.statusString2 = "Please Wait"; - + urlListA.addAll(downloadSources.get("url")); - + List ls2 = downloadSources.get("use-gateway"); ls = downloadSources.get("ipfs"); - for(int k = 0, l = ls.size(); k < l; ++k) { + for (int k = 0, l = ls.size(); k < l; ++k) { String str1 = ls.get(k); String cid = str1; String path = ""; int pathSep = str1.indexOf('/'); - if(pathSep != -1) { + if (pathSep != -1) { path = cid.substring(pathSep + 1); cid = cid.substring(0, pathSep); } - for(int p = 0, q = ls2.size(); p < q; ++p) { + for (int p = 0, q = ls2.size(); p < q; ++p) { String str2 = ls2.get(p); urlListA.add(formatIPFSURL(cid, path, str2)); } } - + List urlListB = new ArrayList<>(); ls = downloadSources.get("use-proxy"); - for(int k = 0, l = ls.size(); k < l; ++k) { + for (int k = 0, l = ls.size(); k < l; ++k) { String str1 = ls.get(k); - for(int p = 0, q = urlListA.size(); p < q; ++p) { + for (int p = 0, q = urlListA.size(); p < q; ++p) { String str2 = urlListA.get(p); urlListB.add(formatProxyURL(str2, str1)); } } - + Collections.shuffle(urlListA); Collections.shuffle(urlListB); - + urlListA.addAll(urlListB); - - for(int i = 0, l = urlListA.size(); i < l; ++i) { + + for (int i = 0, l = urlListA.size(); i < l; ++i) { String url = urlListA.get(i); updateProg.statusString2 = "Attempt (" + (i + 1) + "/" + l + ")"; byte[] b = downloadWithProgress(url); - if(b == null) { + if (b == null) { updateProg.progressBar = 1.0f; updateProg.statusString3 = "FAILED!"; EagUtils.sleep(300); @@ -147,9 +250,10 @@ public class TeaVMUpdateThread implements Runnable { updateProg.progressBar = 1.0f; updateProg.statusString2 = "Verifying"; logger.info("Verifying downloaded file..."); - if(updateCert.isBundleDataValid(b)) { + if (updateCert.isBundleDataValid(b)) { logger.info("Success! Signature is valid!"); - PlatformUpdateSvc.setUpdateResultTeaVM(UpdateResultObj.createSuccess(new UpdateDataObj(updateCert, b))); + PlatformUpdateSvc + .setUpdateResultTeaVM(UpdateResultObj.createSuccess(new UpdateDataObj(updateCert, b))); success = true; return; } @@ -157,123 +261,30 @@ public class TeaVMUpdateThread implements Runnable { logger.error("File signature is invalid: {}", url); EagUtils.sleep(1000); } - + updateProg.progressBar = -1.0f; updateProg.statusString3 = null; - - }catch(Throwable t) { + + } catch (Throwable t) { logger.error("Uncaught exception downloading updates!"); logger.error(t); hasCompleted = true; PlatformUpdateSvc.setUpdateResultTeaVM(UpdateResultObj.createFailure(t.toString())); - }finally { + } finally { PlatformUpdateSvc.updateThread = null; updateProg.isBusy = false; - if(!success) { - String str = "Failed to download updates! No valid URL was found for " + updateCert.bundleDisplayVersion; + if (!success) { + String str = "Failed to download updates! No valid URL was found for " + + updateCert.bundleDisplayVersion; logger.error(str); - if(!hasCompleted) { + if (!hasCompleted) { PlatformUpdateSvc.setUpdateResultTeaVM(UpdateResultObj.createFailure(str)); } - Window.alert("ERROR: Failed to download updates!\n\nIf you are on a device with restricted internet access, try a different device or connect to a different WiFi network\n\nCheck the debug console for more info"); - }else { + Window.alert( + "ERROR: Failed to download updates!\n\nIf you are on a device with restricted internet access, try a different device or connect to a different WiFi network\n\nCheck the debug console for more info"); + } else { UpdateService.dismiss(updateCert); } } } - - private byte[] downloadWithProgress(String url) { - updateProg.progressBar = 0.0f; - try { - updateProg.statusString3 = url; - logger.info("Trying to download: {}", url); - byte[] b = downloadWithProgress0(this, url); - if(b == null) { - logger.error("Failed to download: {}", url); - } - return b; - }finally { - updateProg.statusString3 = null; - } - } - - @Async - private static native byte[] downloadWithProgress0(TeaVMUpdateThread self, String url); - - private static void downloadWithProgress0(TeaVMUpdateThread self, String url, AsyncCallback cb) { - try { - self.downloadWithProgressImpl(url, cb); - }catch(Throwable t) { - logger.error("Exception caught downloading file: {}", url); - logger.error(t); - cb.complete(null); - } - } - - private void downloadWithProgressImpl(String url, final AsyncCallback cb) { - final XMLHttpRequest xhr = XMLHttpRequest.create(); - xhr.open("GET", url); - xhr.setResponseType("arraybuffer"); - TeaVMUtils.addEventListener(xhr, "progress", new EventListener() { - @Override - public void handleEvent(ProgressEvent evt) { - updateProg.progressBar = Math.min((float)evt.getLoaded() / (float)updateCert.bundleDataLength, 1.0f); - } - }); - TeaVMUtils.addEventListener(xhr, "readystatechange", new EventListener() { - @Override - public void handleEvent(Event evt) { - if(xhr.getReadyState() == 4) { - if(xhr.getStatus() == 200) { - ArrayBuffer data = (ArrayBuffer)xhr.getResponse(); - if(data.getByteLength() == updateCert.bundleDataLength) { - cb.complete(TeaVMUtils.wrapByteArrayBuffer(data)); - }else { - logger.error("Unexpected response length {} (expect: {}) from URL: {}", xhr.getStatus(), xhr.getStatusText(), url); - cb.complete(null); - } - }else { - logger.error("Got response code {} \"{}\" for url: {}", xhr.getStatus(), xhr.getStatusText(), url); - cb.complete(null); - } - } - } - }); - TeaVMUtils.addEventListener(xhr, "error", new EventListener() { - @Override - public void handleEvent(ProgressEvent evt) { - logger.error("Exception caught downloading file: {}", url); - - } - }); - xhr.send(); - } - - private static String formatIPFSURL(String cid, String path, String pattern) { - return pattern.replace("$cid$", cid).replace("$path$", path); - } - - private static String formatProxyURL(String path, String pattern) { - return pattern.replace("$url$", Window.encodeURIComponent(path)); - } - - public static void downloadSignedOffline(UpdateCertificate cert, byte[] data) { - PlatformApplication.downloadFileWithName(cert.bundleDisplayName.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_") + "_" + cert.bundleDisplayVersion.replaceAll("[^a-zA-Z0-9\\-_]", "_") + "_Offline_Signed.html", generateSignedOffline(cert, data)); - } - - public static byte[] generateSignedOffline(UpdateCertificate cert, byte[] data) { - return generateSignedOffline(cert.rawCertData, data, (new SimpleDateFormat("MM/dd/yyyy")).format(new Date(cert.sigTimestamp))); - } - - public static byte[] generateSignedOffline(byte[] cert, byte[] data, String date) { - byte[] b = PlatformAssets.getResourceBytes("SignedClientTemplate.txt"); - if(b == null) { - throw new RuntimeException("Could not load SignedClientTemplate.txt from assets.epk!"); - } - String templateHtml = new String(b, StandardCharsets.UTF_8); - templateHtml = templateHtml.replace("${client_signature}", Base64.encodeBase64String(cert)); - templateHtml = templateHtml.replace("${client_bundle}", Base64.encodeBase64String(data)); - templateHtml = templateHtml.replace("${date}", date); - return templateHtml.getBytes(StandardCharsets.UTF_8); - } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java index ad2c8d8f..47b71f8f 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMUtils.java @@ -25,113 +25,69 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.generators.TeaVMUtilsUnwrapG /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMUtils { - @JSBody(params = { "url" }, script = "URL.revokeObjectURL(url);") - public static native void freeDataURL(String url); - - @JSBody(params = { "buf", "mime" }, script = "return URL.createObjectURL(new Blob([buf], {type: mime}));") - public static native String getDataURL(ArrayBuffer buf, String mime); - - @JSBody(params = { "blob" }, script = "return URL.createObjectURL(blob);") - public static native String getDataURL(JSObject blob); - + public static final Comparator touchSortingComparator2 = (t1, t2) -> { + return t1.eventUID - t2.eventUID; + }; + @JSBody(params = { "obj", "name", "handler" }, script = "obj.addEventListener(name, handler);") public static native void addEventListener(JSObject obj, String name, JSObject handler); - + @JSBody(params = {}, script = "return (new Error()).stack;") public static native String dumpJSStackTrace(); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native Int8Array unwrapByteArray(byte[] buf); + public static T ensureDefined(T valIn) { + return isUndefined((JSObject) valIn) ? null : valIn; + } - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) - public static native ArrayBuffer unwrapArrayBuffer(byte[] buf); + @JSBody(params = { "url" }, script = "URL.revokeObjectURL(url);") + public static native void freeDataURL(String url); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native ArrayBufferView unwrapArrayBufferView(byte[] buf); + @JSBody(params = { "buf", "mime" }, script = "return URL.createObjectURL(new Blob([buf], {type: mime}));") + public static native String getDataURL(ArrayBuffer buf, String mime); - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) - public static native byte[] wrapByteArray(Int8Array buf); + @JSBody(params = { "blob" }, script = "return URL.createObjectURL(blob);") + public static native String getDataURL(JSObject blob); - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) - public static native byte[] wrapByteArrayBuffer(ArrayBuffer buf); + @JSBody(params = { "obj" }, script = "return obj.stack||null;") + public static native String getStackSafe(JSObject object); - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) - public static native byte[] wrapByteArrayBufferView(ArrayBufferView buf); + @JSBody(params = { "obj" }, script = "return !obj;") + public static native boolean isNotTruthy(JSObject object); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapUnsignedTypedArray.class) - public static native Uint8Array unwrapUnsignedByteArray(byte[] buf); + @JSBody(params = { "obj" }, script = "return !!obj;") + public static native boolean isTruthy(JSObject object); - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) - public static native byte[] wrapUnsignedByteArray(Uint8Array buf); + @JSBody(params = { "obj" }, script = "return obj === undefined;") + public static native boolean isUndefined(JSObject object); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native Int32Array unwrapIntArray(int[] buf); + @JSBody(params = { "obj" }, script = "console.log(obj);") + public static native void objDump(JSObject obj); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) - public static native ArrayBuffer unwrapArrayBuffer(int[] buf); + @JSBody(params = { "obj", "name", "handler" }, script = "obj.removeEventListener(name, handler);") + public static native void removeEventListener(JSObject obj, String name, JSObject handler); - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native ArrayBufferView unwrapArrayBufferView(int[] buf); + @JSBody(params = { + "obj" }, script = "return (!!obj && (typeof obj.message === \"string\")) ? obj.message : (\"\" + obj);") + public static native String safeErrorMsgToString(JSObject obj); - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) - public static native int[] wrapIntArray(Int32Array buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) - public static native int[] wrapIntArrayBuffer(ArrayBuffer buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) - public static native int[] wrapIntArrayBufferView(ArrayBufferView buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native Float32Array unwrapFloatArray(float[] buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) - public static native ArrayBuffer unwrapArrayBuffer(float[] buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native ArrayBufferView unwrapArrayBufferView(float[] buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) - public static native float[] wrapFloatArray(Float32Array buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) - public static native float[] wrapFloatArrayBuffer(ArrayBuffer buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) - public static native float[] wrapFloatArrayBufferView(ArrayBufferView buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native Int16Array unwrapShortArray(short[] buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) - public static native ArrayBuffer unwrapArrayBuffer(short[] buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) - public static native ArrayBufferView unwrapArrayBufferView(short[] buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) - public static native short[] wrapShortArray(Int16Array buf); - - @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) - public static native short[] wrapShortArrayBuffer(ArrayBuffer buf); - - @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) - public static native short[] wrapShortArrayBuffer(ArrayBufferView buf); + @JSBody(params = { "obj" }, script = "return \"\" + obj;") + public static native String safeToString(JSObject obj); @Async public static native void sleepSetTimeout(int millis); @@ -140,19 +96,11 @@ public class TeaVMUtils { Window.setTimeout(() -> cb.complete(null), millis); } - public static final Comparator touchSortingComparator = (t1, t2) -> { - return t1.getIdentifier() - t2.getIdentifier(); - }; - - public static final Comparator touchSortingComparator2 = (t1, t2) -> { - return t1.touch.getIdentifier() - t2.touch.getIdentifier(); - }; - public static List toSortedTouchList(TouchList touchList, SortedTouchEvent.ITouchUIDMapper mapper, int originX, int originY) { int l = touchList.getLength(); List ret = new ArrayList<>(l); - for(int i = 0; i < l; ++i) { + for (int i = 0; i < l; ++i) { ret.add(OffsetTouch.create(touchList.item(i), mapper, originX, originY)); } Collections.sort(ret, touchSortingComparator2); @@ -167,29 +115,82 @@ public class TeaVMUtils { return ClassesJSLocator.resolveClassesJSFromInline(); } - @JSBody(params = { "obj" }, script = "console.log(obj);") - public static native void objDump(JSObject obj); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) + public static native ArrayBuffer unwrapArrayBuffer(byte[] buf); - @JSBody(params = { "obj" }, script = "return \"\" + obj;") - public static native String safeToString(JSObject obj); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) + public static native ArrayBuffer unwrapArrayBuffer(float[] buf); - @JSBody(params = { "obj" }, script = "return (!!obj && (typeof obj.message === \"string\")) ? obj.message : (\"\" + obj);") - public static native String safeErrorMsgToString(JSObject obj); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) + public static native ArrayBuffer unwrapArrayBuffer(int[] buf); - @JSBody(params = { "obj" }, script = "return !!obj;") - public static native boolean isTruthy(JSObject object); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapArrayBuffer.class) + public static native ArrayBuffer unwrapArrayBuffer(short[] buf); - @JSBody(params = { "obj" }, script = "return !obj;") - public static native boolean isNotTruthy(JSObject object); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native ArrayBufferView unwrapArrayBufferView(byte[] buf); - @JSBody(params = { "obj" }, script = "return obj === undefined;") - public static native boolean isUndefined(JSObject object); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native ArrayBufferView unwrapArrayBufferView(float[] buf); - public static T ensureDefined(T valIn) { - return isUndefined((JSObject)valIn) ? null : valIn; - } + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native ArrayBufferView unwrapArrayBufferView(int[] buf); - @JSBody(params = { "obj" }, script = "return obj.stack||null;") - public static native String getStackSafe(JSObject object); + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native ArrayBufferView unwrapArrayBufferView(short[] buf); + + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native Int8Array unwrapByteArray(byte[] buf); + + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native Float32Array unwrapFloatArray(float[] buf); + + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native Int32Array unwrapIntArray(int[] buf); + + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapTypedArray.class) + public static native Int16Array unwrapShortArray(short[] buf); + + @InjectedBy(TeaVMUtilsUnwrapGenerator.UnwrapUnsignedTypedArray.class) + public static native Uint8Array unwrapUnsignedByteArray(byte[] buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) + public static native byte[] wrapByteArray(Int8Array buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) + public static native byte[] wrapByteArrayBuffer(ArrayBuffer buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) + public static native byte[] wrapByteArrayBufferView(ArrayBufferView buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) + public static native float[] wrapFloatArray(Float32Array buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) + public static native float[] wrapFloatArrayBuffer(ArrayBuffer buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) + public static native float[] wrapFloatArrayBufferView(ArrayBufferView buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) + public static native int[] wrapIntArray(Int32Array buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) + public static native int[] wrapIntArrayBuffer(ArrayBuffer buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) + public static native int[] wrapIntArrayBufferView(ArrayBufferView buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapTypedArray.class) + public static native short[] wrapShortArray(Int16Array buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBuffer.class) + public static native short[] wrapShortArrayBuffer(ArrayBuffer buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) + public static native short[] wrapShortArrayBuffer(ArrayBufferView buf); + + @GeneratedBy(TeaVMUtilsUnwrapGenerator.WrapArrayBufferView.class) + public static native byte[] wrapUnsignedByteArray(Uint8Array buf); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketClient.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketClient.java index 34fb054d..e32f4702 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketClient.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketClient.java @@ -12,18 +12,19 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMWebSocketClient extends AbstractWebSocketClient { @@ -59,7 +60,7 @@ public class TeaVMWebSocketClient extends AbstractWebSocketClient { TeaVMUtils.addEventListener(sock, "error", new EventListener() { @Override public void handleEvent(Event evt) { - if(sockIsConnecting) { + if (sockIsConnecting) { sockIsFailed = true; sockIsConnecting = false; } @@ -67,12 +68,19 @@ public class TeaVMWebSocketClient extends AbstractWebSocketClient { }); } + @Override + public void close() { + sockIsConnecting = false; + sockIsConnected = false; + sock.close(); + } + @Override public boolean connectBlocking(int timeoutMS) { long startTime = PlatformRuntime.steadyTimeMillis(); - while(!sockIsConnected && !sockIsFailed) { + while (!sockIsConnected && !sockIsFailed) { EagUtils.sleep(50); - if(PlatformRuntime.steadyTimeMillis() - startTime > timeoutMS * 1000) { + if (PlatformRuntime.steadyTimeMillis() - startTime > timeoutMS * 1000) { break; } } @@ -86,35 +94,28 @@ public class TeaVMWebSocketClient extends AbstractWebSocketClient { : (sockIsConnecting ? EnumEaglerConnectionState.CONNECTING : EnumEaglerConnectionState.CLOSED)); } - @Override - public boolean isOpen() { - return sockIsConnected; - } - @Override public boolean isClosed() { return !sockIsConnecting && !sockIsConnected; } @Override - public void close() { - sockIsConnecting = false; - sockIsConnected = false; - sock.close(); - } - - @Override - public void send(String str) { - if(sockIsConnected) { - sock.send(str); - } + public boolean isOpen() { + return sockIsConnected; } @Override public void send(byte[] bytes) { - if(sockIsConnected) { + if (sockIsConnected) { sock.send(TeaVMUtils.unwrapArrayBuffer(bytes)); } } + @Override + public void send(String str) { + if (sockIsConnected) { + sock.send(str); + } + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketFrame.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketFrame.java index 33060579..48db6238 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketFrame.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMWebSocketFrame.java @@ -11,104 +11,107 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMWebSocketFrame implements IWebSocketFrame { + @JSBody(params = { "obj" }, script = "return obj.byteLength;") + private static native int arrLen(JSObject obj); + + @JSBody(params = { "obj" }, script = "return (typeof obj === \"string\");") + private static native boolean isStr(JSObject obj); + + @JSBody(params = { "obj" }, script = "return obj.length;") + private static native int strLen(JSObject obj); + + @JSBody(params = { "obj" }, script = "return obj;") + private static native String toStr(JSObject obj); + private JSObject data; + private boolean str; private String cachedStrContent = null; + private byte[] cachedByteContent = null; private int cachedLen = -1; private final long timestamp; - @JSBody(params = { "obj" }, script = "return (typeof obj === \"string\");") - private static native boolean isStr(JSObject obj); - public TeaVMWebSocketFrame(JSObject data) { this.data = data; this.str = isStr(data); this.timestamp = PlatformRuntime.steadyTimeMillis(); } - @Override - public boolean isString() { - return str; - } - - @JSBody(params = { "obj" }, script = "return obj;") - private static native String toStr(JSObject obj); - - @Override - public String getString() { - if(str) { - if(cachedStrContent == null) { - return (cachedStrContent = toStr(data)); - }else { - return cachedStrContent; - } - }else { - return null; - } - } - @Override public byte[] getByteArray() { - if(!str) { - if(cachedByteContent == null) { - return (cachedByteContent = TeaVMUtils.wrapByteArrayBuffer((ArrayBuffer)data)); - }else { + if (!str) { + if (cachedByteContent == null) { + return (cachedByteContent = TeaVMUtils.wrapByteArrayBuffer((ArrayBuffer) data)); + } else { return cachedByteContent; } - }else { + } else { return null; } } @Override public InputStream getInputStream() { - if(!str) { - return new ArrayBufferInputStream((ArrayBuffer)data); - }else { + if (!str) { + return new ArrayBufferInputStream((ArrayBuffer) data); + } else { return null; } } - @JSBody(params = { "obj" }, script = "return obj.length;") - private static native int strLen(JSObject obj); - - @JSBody(params = { "obj" }, script = "return obj.byteLength;") - private static native int arrLen(JSObject obj); - @Override public int getLength() { - if(cachedLen == -1) { - if(str) { + if (cachedLen == -1) { + if (str) { cachedLen = strLen(data); - }else { + } else { cachedLen = arrLen(data); } } return cachedLen; } + @Override + public String getString() { + if (str) { + if (cachedStrContent == null) { + return (cachedStrContent = toStr(data)); + } else { + return cachedStrContent; + } + } else { + return null; + } + } + @Override public long getTimestamp() { return timestamp; } + @Override + public boolean isString() { + return str; + } + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Touch.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Touch.java index 0a6234eb..07de9a0b 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Touch.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/Touch.java @@ -7,36 +7,37 @@ import org.teavm.jso.dom.xml.Element; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class Touch implements JSObject { - @JSProperty - public abstract int getIdentifier(); - - @JSProperty - public abstract double getScreenX(); - - @JSProperty - public abstract double getScreenY(); - @JSProperty public abstract double getClientX(); @JSProperty public abstract double getClientY(); + @JSProperty + public abstract double getForce(); + + @JSBody(params = { "defVal" }, script = "return (typeof this.force === \"number\") ? this.force : defVal;") + public abstract double getForceSafe(double defaultVal); + + @JSProperty + public abstract int getIdentifier(); + @JSProperty public abstract double getPageX(); @@ -56,10 +57,10 @@ public abstract class Touch implements JSObject { public abstract double getRadiusYSafe(double defaultVal); @JSProperty - public abstract double getForce(); + public abstract double getScreenX(); - @JSBody(params = { "defVal" }, script = "return (typeof this.force === \"number\") ? this.force : defVal;") - public abstract double getForceSafe(double defaultVal); + @JSProperty + public abstract double getScreenY(); @JSProperty public abstract Element getTarget(); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchEvent.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchEvent.java index 91cc6d78..a78933ae 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchEvent.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchEvent.java @@ -5,24 +5,28 @@ import org.teavm.jso.dom.events.Event; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface TouchEvent extends Event { @JSProperty boolean getAltKey(); + @JSProperty + TouchList getChangedTouches(); + @JSProperty boolean getCtrlKey(); @@ -32,9 +36,6 @@ public interface TouchEvent extends Event { @JSProperty boolean getShiftKey(); - @JSProperty - TouchList getChangedTouches(); - @JSProperty TouchList getTargetTouches(); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchList.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchList.java index 985fc6ca..dbccae7c 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchList.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TouchList.java @@ -5,18 +5,19 @@ import org.teavm.jso.JSProperty; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface TouchList extends JSObject { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/VisualViewport.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/VisualViewport.java index d01f5802..9a2e35b1 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/VisualViewport.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/VisualViewport.java @@ -6,21 +6,25 @@ import org.teavm.jso.dom.events.EventTarget; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface VisualViewport extends JSObject, EventTarget { + @JSProperty + int getHeight(); + @JSProperty int getOffsetLeft(); @@ -33,13 +37,10 @@ public interface VisualViewport extends JSObject, EventTarget { @JSProperty int getPageTop(); - @JSProperty - int getWidth(); - - @JSProperty - int getHeight(); - @JSProperty double getScale(); + @JSProperty + int getWidth(); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGL2RenderingContext.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGL2RenderingContext.java index 84a93515..bb491ed9 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGL2RenderingContext.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGL2RenderingContext.java @@ -10,70 +10,76 @@ import org.teavm.jso.webgl.WebGLUniformLocation; /** * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface WebGL2RenderingContext extends WebGLRenderingContext { - int TEXTURE_MAX_LEVEL = 0x0000813D; - int TEXTURE_MAX_ANISOTROPY_EXT = 0x000084FE; - int UNSIGNED_INT_24_8 = 0x000084FA; - int ANY_SAMPLES_PASSED = 0x00008D6A; - int QUERY_RESULT = 0x00008866; - int QUERY_RESULT_AVAILABLE = 0x00008867; - int DEPTH24_STENCIL8 = 0x000088F0; - int DEPTH_COMPONENT24 = 0x000081A6; - int DEPTH_COMPONENT32F = 0x00008CAC; - int READ_FRAMEBUFFER = 0x00008CA8; - int DRAW_FRAMEBUFFER = 0x00008CA9; - int RGB8 = 0x00008051; - int RGBA8 = 0x00008058; - int R8 = 0x00008229; - int RED = 0x00001903; - - WebGLQuery createQuery(); + int TEXTURE_MAX_LEVEL = 0x0000813D; + int TEXTURE_MAX_ANISOTROPY_EXT = 0x000084FE; + int UNSIGNED_INT_24_8 = 0x000084FA; + int ANY_SAMPLES_PASSED = 0x00008D6A; + int QUERY_RESULT = 0x00008866; + int QUERY_RESULT_AVAILABLE = 0x00008867; + int DEPTH24_STENCIL8 = 0x000088F0; + int DEPTH_COMPONENT24 = 0x000081A6; + int DEPTH_COMPONENT32F = 0x00008CAC; + int READ_FRAMEBUFFER = 0x00008CA8; + int DRAW_FRAMEBUFFER = 0x00008CA9; + int RGB8 = 0x00008051; + int RGBA8 = 0x00008058; + int R8 = 0x00008229; + int RED = 0x00001903; void beginQuery(int p1, WebGLQuery obj); - void endQuery(int p1); + void bindBufferRange(int p1, int p2, WebGLBuffer p3, int p4, int p5); - void deleteQuery(WebGLQuery obj); + void bindVertexArray(WebGLVertexArray obj); - int getQueryParameter(WebGLQuery obj, int p2); + void blitFramebuffer(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10); + + WebGLQuery createQuery(); WebGLVertexArray createVertexArray(); - void deleteVertexArray(WebGLVertexArray obj); + void deleteQuery(WebGLQuery obj); - void bindVertexArray(WebGLVertexArray obj); - - void renderbufferStorageMultisample(int p1, int p2, int p3, int p4, int p5); - - void blitFramebuffer(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10); - - void drawBuffers(int[] p1); - - void readBuffer(int p1); - - void vertexAttribDivisor(int p1, int p2); + void deleteVertexArray(WebGLVertexArray obj); void drawArraysInstanced(int p1, int p2, int p3, int p4); + void drawBuffers(int[] p1); + void drawElementsInstanced(int p1, int p2, int p3, int p4, int p5); + void endQuery(int p1); + + void framebufferTextureLayer(int target, int attachment, WebGLTexture texture, int level, int layer); + + int getQueryParameter(WebGLQuery obj, int p2); + int getUniformBlockIndex(WebGLProgram p1, String p2); - void bindBufferRange(int p1, int p2, WebGLBuffer p3, int p4, int p5); + void readBuffer(int p1); + + void renderbufferStorageMultisample(int p1, int p2, int p3, int p4, int p5); + + void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, + int type, ArrayBufferView pixels); + + void texStorage2D(int target, int levels, int internalFormat, int width, int height); void uniformBlockBinding(WebGLProgram p1, int p2, int p3); @@ -83,11 +89,6 @@ public interface WebGL2RenderingContext extends WebGLRenderingContext { void uniformMatrix4x3fv(WebGLUniformLocation location, boolean transpose, Float32Array value); - void texStorage2D(int target, int levels, int internalFormat, int width, int height); - - void texImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, - int type, ArrayBufferView pixels); - - void framebufferTextureLayer(int target, int attachment, WebGLTexture texture, int level, int layer); + void vertexAttribDivisor(int p1, int p2); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLANGLEInstancedArrays.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLANGLEInstancedArrays.java index 71bd8d81..09d366a1 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLANGLEInstancedArrays.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLANGLEInstancedArrays.java @@ -4,18 +4,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface WebGLANGLEInstancedArrays extends JSObject { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLBackBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLBackBuffer.java index 7a7bc829..9c1da8a8 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLBackBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLBackBuffer.java @@ -1,7 +1,68 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; -import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; -import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglActiveTexture; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglAttachShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindAttribLocation; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindFramebuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindRenderbuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindTexture; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBindVertexArray; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglBufferData; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCompileShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCreateProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCreateRenderbuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglCreateShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteBuffers; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteFramebuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteRenderbuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteTextures; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDeleteVertexArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDetachShader; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDisable; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDrawArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglDrawBuffers; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglEnableVertexAttribArray; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglFramebufferRenderbuffer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglFramebufferTexture2D; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenBuffers; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenTextures; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGenVertexArrays; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglGetUniformLocation; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglLinkProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglRenderbufferStorage; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglShaderSource; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglTexImage2D; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglTexParameteri; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUniform1i; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglUseProgram; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglVertexAttribPointer; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL._wglViewport; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.checkOpenGLESVersion; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.checkTextureLODCapable; +import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.checkVAOCapable; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_ARRAY_BUFFER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_BLEND; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_CLAMP_TO_EDGE; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_COLOR_BUFFER_BIT; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_DEPTH_TEST; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_FLOAT; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_FRAGMENT_SHADER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_NEAREST; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_RGBA; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_RGBA8; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_STATIC_DRAW; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE0; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_2D; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_MAG_FILTER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_MIN_FILTER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_WRAP_S; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TEXTURE_WRAP_T; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_TRIANGLES; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_UNSIGNED_BYTE; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_VERTEX_SHADER; +import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.GL_VIEWPORT; import org.teavm.jso.webgl.WebGLFramebuffer; @@ -19,18 +80,19 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class WebGLBackBuffer { @@ -65,98 +127,71 @@ public class WebGLBackBuffer { private static final int _GL_READ_FRAMEBUFFER = 0x8CA8; private static final int _GL_DRAW_FRAMEBUFFER = 0x8CA9; - public static void initBackBuffer(WebGL2RenderingContext ctxIn, WebGLFramebuffer fbo, IFramebufferGL eagFbo, int sw, int sh) { - ctx = ctxIn; - glesVers = checkOpenGLESVersion(); - framebuffer = fbo; - eagFramebuffer = eagFbo; - isVAOCapable = checkVAOCapable(); + public static void destroy() { + if (eagFramebuffer != null) { + _wglDeleteFramebuffer(eagFramebuffer); + eagFramebuffer = null; + } + if (gles3ColorRenderbuffer != null) { + _wglDeleteRenderbuffer(gles3ColorRenderbuffer); + gles3ColorRenderbuffer = null; + } + if (gles3DepthRenderbuffer != null) { + _wglDeleteRenderbuffer(gles3DepthRenderbuffer); + gles3DepthRenderbuffer = null; + } + if (gles2ColorTexture != null) { + _wglDeleteTextures(gles2ColorTexture); + gles2ColorTexture = null; + } + if (gles2DepthRenderbuffer != null) { + _wglDeleteRenderbuffer(gles2DepthRenderbuffer); + gles2DepthRenderbuffer = null; + } + if (gles2BlitProgram != null) { + _wglDeleteProgram(gles2BlitProgram); + gles2BlitProgram = null; + } + if (gles2BlitVAO != null) { + if (isEmulatedVAOPhase) { + EaglercraftGPU.destroyGLBufferArray(gles2BlitVAO); + } else if (isVAOCapable) { + _wglDeleteVertexArrays(gles2BlitVAO); + } + gles2BlitVAO = null; + } + if (gles2BlitVBO != null) { + _wglDeleteBuffers(gles2BlitVBO); + gles2BlitVBO = null; + } + framebuffer = null; + width = 0; + height = 0; + isVAOCapable = false; isEmulatedVAOPhase = false; - width = sw; - height = sh; - if(glesVers >= 300) { - gles3ColorRenderbuffer = _wglCreateRenderbuffer(); - gles3DepthRenderbuffer = _wglCreateRenderbuffer(); - _wglBindFramebuffer(_GL_FRAMEBUFFER, eagFbo); - _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3ColorRenderbuffer); - _wglRenderbufferStorage(_GL_RENDERBUFFER, GL_RGBA8, sw, sh); - _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_COLOR_ATTACHMENT0, _GL_RENDERBUFFER, gles3ColorRenderbuffer); - _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3DepthRenderbuffer); - _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT32F, sw, sh); - _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_DEPTH_ATTACHMENT, _GL_RENDERBUFFER, gles3DepthRenderbuffer); - _wglDrawBuffers(_GL_COLOR_ATTACHMENT0); - }else { - gles2ColorTexture = _wglGenTextures(); - gles2DepthRenderbuffer = _wglCreateRenderbuffer(); - _wglBindFramebuffer(_GL_FRAMEBUFFER, eagFbo); - _wglBindTexture(GL_TEXTURE_2D, gles2ColorTexture); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sw, sh, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer)null); - _wglFramebufferTexture2D(_GL_FRAMEBUFFER, _GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gles2ColorTexture, 0); - _wglBindRenderbuffer(_GL_RENDERBUFFER, gles2DepthRenderbuffer); - _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT16, sw, sh); - _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_DEPTH_ATTACHMENT, _GL_RENDERBUFFER, gles2DepthRenderbuffer); - - ByteBuffer upload = PlatformRuntime.allocateByteBuffer(48); - upload.putFloat(0.0f); upload.putFloat(0.0f); - upload.putFloat(1.0f); upload.putFloat(0.0f); - upload.putFloat(0.0f); upload.putFloat(1.0f); - upload.putFloat(1.0f); upload.putFloat(0.0f); - upload.putFloat(1.0f); upload.putFloat(1.0f); - upload.putFloat(0.0f); upload.putFloat(1.0f); - upload.flip(); - - gles2BlitVBO = _wglGenBuffers(); - EaglercraftGPU.bindVAOGLArrayBufferNow(gles2BlitVBO); - _wglBufferData(GL_ARRAY_BUFFER, upload, GL_STATIC_DRAW); - - PlatformRuntime.freeByteBuffer(upload); - - if(isVAOCapable) { - gles2BlitVAO = _wglGenVertexArrays(); + } + + private static void drawBlitQuad() { + if (isEmulatedVAOPhase) { + EaglercraftGPU.bindGLBufferArray(gles2BlitVAO); + EaglercraftGPU.doDrawArrays(GL_TRIANGLES, 0, 6); + } else { + if (isVAOCapable) { _wglBindVertexArray(gles2BlitVAO); + _wglDrawArrays(GL_TRIANGLES, 0, 6); + } else { + EaglercraftGPU.bindGLArrayBuffer(gles2BlitVBO); _wglEnableVertexAttribArray(0); _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); + _wglDrawArrays(GL_TRIANGLES, 0, 6); } - - IShaderGL vertShader = _wglCreateShader(GL_VERTEX_SHADER); - _wglShaderSource(vertShader, "#version 100\nprecision mediump float; attribute vec2 a_pos2f; varying vec2 v_tex2f; void main() { v_tex2f = a_pos2f; gl_Position = vec4(a_pos2f * 2.0 - 1.0, 0.0, 1.0); }"); - _wglCompileShader(vertShader); - - IShaderGL fragShader = _wglCreateShader(GL_FRAGMENT_SHADER); - _wglShaderSource(fragShader, checkTextureLODCapable() - ? "#version 100\n#extension GL_EXT_shader_texture_lod : enable\nprecision mediump float; precision mediump sampler2D; varying vec2 v_tex2f; uniform sampler2D u_samplerTex; void main() { gl_FragColor = vec4(texture2DLodEXT(u_samplerTex, v_tex2f, 0.0).rgb, 1.0); }" - : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_tex2f; uniform sampler2D u_samplerTex; void main() { gl_FragColor = vec4(texture2D(u_samplerTex, v_tex2f).rgb, 1.0); }"); - _wglCompileShader(fragShader); - - gles2BlitProgram = _wglCreateProgram(); - - _wglAttachShader(gles2BlitProgram, vertShader); - _wglAttachShader(gles2BlitProgram, fragShader); - - _wglBindAttribLocation(gles2BlitProgram, 0, "a_pos2f"); - - _wglLinkProgram(gles2BlitProgram); - - _wglDetachShader(gles2BlitProgram, vertShader); - _wglDetachShader(gles2BlitProgram, fragShader); - - _wglDeleteShader(vertShader); - _wglDeleteShader(fragShader); - - _wglUseProgram(gles2BlitProgram); - - _wglUniform1i(_wglGetUniformLocation(gles2BlitProgram, "u_samplerTex"), 0); } } public static void enterVAOEmulationPhase() { - if(glesVers < 300) { - if(!isEmulatedVAOPhase) { - if(isVAOCapable) { + if (glesVers < 300) { + if (!isEmulatedVAOPhase) { + if (isVAOCapable) { _wglDeleteVertexArrays(gles2BlitVAO); } gles2BlitVAO = EaglercraftGPU.createGLBufferArray(); @@ -169,132 +204,175 @@ public class WebGLBackBuffer { } } - private static void drawBlitQuad() { - if(isEmulatedVAOPhase) { - EaglercraftGPU.bindGLBufferArray(gles2BlitVAO); - EaglercraftGPU.doDrawArrays(GL_TRIANGLES, 0, 6); - }else { - if(isVAOCapable) { - _wglBindVertexArray(gles2BlitVAO); - _wglDrawArrays(GL_TRIANGLES, 0, 6); - }else { - EaglercraftGPU.bindGLArrayBuffer(gles2BlitVBO); - _wglEnableVertexAttribArray(0); - _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); - _wglDrawArrays(GL_TRIANGLES, 0, 6); - } - } - } - public static void flipBuffer(int windowWidth, int windowHeight) { - if(glesVers >= 300) { + if (glesVers >= 300) { ctx.bindFramebuffer(_GL_READ_FRAMEBUFFER, framebuffer); ctx.bindFramebuffer(_GL_DRAW_FRAMEBUFFER, null); ctx.blitFramebuffer(0, 0, width, height, 0, 0, windowWidth, windowHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST); - + ctx.bindFramebuffer(_GL_FRAMEBUFFER, framebuffer); - - if(windowWidth != width || windowHeight != height) { + + if (windowWidth != width || windowHeight != height) { width = windowWidth; height = windowHeight; - + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3ColorRenderbuffer); _wglRenderbufferStorage(_GL_RENDERBUFFER, GL_RGBA8, windowWidth, windowHeight); - + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3DepthRenderbuffer); _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT32F, windowWidth, windowHeight); } - }else { + } else { ctx.bindFramebuffer(_GL_FRAMEBUFFER, null); _wglActiveTexture(GL_TEXTURE0); _wglBindTexture(GL_TEXTURE_2D, gles2ColorTexture); - + int[] viewportStash = null; - if(isEmulatedVAOPhase) { + if (isEmulatedVAOPhase) { viewportStash = new int[4]; EaglercraftGPU.glGetInteger(GL_VIEWPORT, viewportStash); GlStateManager.viewport(0, 0, windowWidth, windowHeight); GlStateManager.eagPushStateForGLES2BlitHack(); GlStateManager.disableDepth(); GlStateManager.disableBlend(); - }else { + } else { _wglViewport(0, 0, windowWidth, windowHeight); _wglDisable(GL_DEPTH_TEST); _wglDisable(GL_BLEND); } - EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM | EaglercraftGPU.CLEAR_BINDING_ARRAY_BUFFER); + EaglercraftGPU.clearCurrentBinding( + EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM | EaglercraftGPU.CLEAR_BINDING_ARRAY_BUFFER); EaglercraftGPU.bindGLShaderProgram(gles2BlitProgram); drawBlitQuad(); - if(windowWidth != width || windowHeight != height) { + if (windowWidth != width || windowHeight != height) { width = windowWidth; height = windowHeight; - - _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, windowWidth, windowHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer)null); - + + _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, windowWidth, windowHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, + (ByteBuffer) null); + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles2DepthRenderbuffer); _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT16, windowWidth, windowHeight); } - if(isEmulatedVAOPhase) { - EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_TEXTURE0 | EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM); - if(viewportStash[2] > 0) { + if (isEmulatedVAOPhase) { + EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_TEXTURE0 + | EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM); + if (viewportStash[2] > 0) { GlStateManager.viewport(viewportStash[0], viewportStash[1], viewportStash[2], viewportStash[3]); } GlStateManager.eagPopStateForGLES2BlitHack(); - }else { - EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_TEXTURE0 | EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM | EaglercraftGPU.CLEAR_BINDING_BUFFER_ARRAY); + } else { + EaglercraftGPU.clearCurrentBinding(EaglercraftGPU.CLEAR_BINDING_TEXTURE0 + | EaglercraftGPU.CLEAR_BINDING_ACTIVE_TEXTURE | EaglercraftGPU.CLEAR_BINDING_SHADER_PROGRAM + | EaglercraftGPU.CLEAR_BINDING_BUFFER_ARRAY); } ctx.bindFramebuffer(_GL_FRAMEBUFFER, framebuffer); } } - public static void destroy() { - if(eagFramebuffer != null) { - _wglDeleteFramebuffer(eagFramebuffer); - eagFramebuffer = null; - } - if(gles3ColorRenderbuffer != null) { - _wglDeleteRenderbuffer(gles3ColorRenderbuffer); - gles3ColorRenderbuffer = null; - } - if(gles3DepthRenderbuffer != null) { - _wglDeleteRenderbuffer(gles3DepthRenderbuffer); - gles3DepthRenderbuffer = null; - } - if(gles2ColorTexture != null) { - _wglDeleteTextures(gles2ColorTexture); - gles2ColorTexture = null; - } - if(gles2DepthRenderbuffer != null) { - _wglDeleteRenderbuffer(gles2DepthRenderbuffer); - gles2DepthRenderbuffer = null; - } - if(gles2BlitProgram != null) { - _wglDeleteProgram(gles2BlitProgram); - gles2BlitProgram = null; - } - if(gles2BlitVAO != null) { - if(isEmulatedVAOPhase) { - EaglercraftGPU.destroyGLBufferArray(gles2BlitVAO); - }else if(isVAOCapable) { - _wglDeleteVertexArrays(gles2BlitVAO); - } - gles2BlitVAO = null; - } - if(gles2BlitVBO != null) { - _wglDeleteBuffers(gles2BlitVBO); - gles2BlitVBO = null; - } - framebuffer = null; - width = 0; - height = 0; - isVAOCapable = false; + public static void initBackBuffer(WebGL2RenderingContext ctxIn, WebGLFramebuffer fbo, IFramebufferGL eagFbo, int sw, + int sh) { + ctx = ctxIn; + glesVers = checkOpenGLESVersion(); + framebuffer = fbo; + eagFramebuffer = eagFbo; + isVAOCapable = checkVAOCapable(); isEmulatedVAOPhase = false; + width = sw; + height = sh; + if (glesVers >= 300) { + gles3ColorRenderbuffer = _wglCreateRenderbuffer(); + gles3DepthRenderbuffer = _wglCreateRenderbuffer(); + _wglBindFramebuffer(_GL_FRAMEBUFFER, eagFbo); + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3ColorRenderbuffer); + _wglRenderbufferStorage(_GL_RENDERBUFFER, GL_RGBA8, sw, sh); + _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_COLOR_ATTACHMENT0, _GL_RENDERBUFFER, + gles3ColorRenderbuffer); + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles3DepthRenderbuffer); + _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT32F, sw, sh); + _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_DEPTH_ATTACHMENT, _GL_RENDERBUFFER, + gles3DepthRenderbuffer); + _wglDrawBuffers(_GL_COLOR_ATTACHMENT0); + } else { + gles2ColorTexture = _wglGenTextures(); + gles2DepthRenderbuffer = _wglCreateRenderbuffer(); + _wglBindFramebuffer(_GL_FRAMEBUFFER, eagFbo); + _wglBindTexture(GL_TEXTURE_2D, gles2ColorTexture); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + _wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + _wglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sw, sh, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer) null); + _wglFramebufferTexture2D(_GL_FRAMEBUFFER, _GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gles2ColorTexture, 0); + _wglBindRenderbuffer(_GL_RENDERBUFFER, gles2DepthRenderbuffer); + _wglRenderbufferStorage(_GL_RENDERBUFFER, _GL_DEPTH_COMPONENT16, sw, sh); + _wglFramebufferRenderbuffer(_GL_FRAMEBUFFER, _GL_DEPTH_ATTACHMENT, _GL_RENDERBUFFER, + gles2DepthRenderbuffer); + + ByteBuffer upload = PlatformRuntime.allocateByteBuffer(48); + upload.putFloat(0.0f); + upload.putFloat(0.0f); + upload.putFloat(1.0f); + upload.putFloat(0.0f); + upload.putFloat(0.0f); + upload.putFloat(1.0f); + upload.putFloat(1.0f); + upload.putFloat(0.0f); + upload.putFloat(1.0f); + upload.putFloat(1.0f); + upload.putFloat(0.0f); + upload.putFloat(1.0f); + upload.flip(); + + gles2BlitVBO = _wglGenBuffers(); + EaglercraftGPU.bindVAOGLArrayBufferNow(gles2BlitVBO); + _wglBufferData(GL_ARRAY_BUFFER, upload, GL_STATIC_DRAW); + + PlatformRuntime.freeByteBuffer(upload); + + if (isVAOCapable) { + gles2BlitVAO = _wglGenVertexArrays(); + _wglBindVertexArray(gles2BlitVAO); + _wglEnableVertexAttribArray(0); + _wglVertexAttribPointer(0, 2, GL_FLOAT, false, 8, 0); + } + + IShaderGL vertShader = _wglCreateShader(GL_VERTEX_SHADER); + _wglShaderSource(vertShader, + "#version 100\nprecision mediump float; attribute vec2 a_pos2f; varying vec2 v_tex2f; void main() { v_tex2f = a_pos2f; gl_Position = vec4(a_pos2f * 2.0 - 1.0, 0.0, 1.0); }"); + _wglCompileShader(vertShader); + + IShaderGL fragShader = _wglCreateShader(GL_FRAGMENT_SHADER); + _wglShaderSource(fragShader, checkTextureLODCapable() + ? "#version 100\n#extension GL_EXT_shader_texture_lod : enable\nprecision mediump float; precision mediump sampler2D; varying vec2 v_tex2f; uniform sampler2D u_samplerTex; void main() { gl_FragColor = vec4(texture2DLodEXT(u_samplerTex, v_tex2f, 0.0).rgb, 1.0); }" + : "#version 100\nprecision mediump float; precision mediump sampler2D; varying vec2 v_tex2f; uniform sampler2D u_samplerTex; void main() { gl_FragColor = vec4(texture2D(u_samplerTex, v_tex2f).rgb, 1.0); }"); + _wglCompileShader(fragShader); + + gles2BlitProgram = _wglCreateProgram(); + + _wglAttachShader(gles2BlitProgram, vertShader); + _wglAttachShader(gles2BlitProgram, fragShader); + + _wglBindAttribLocation(gles2BlitProgram, 0, "a_pos2f"); + + _wglLinkProgram(gles2BlitProgram); + + _wglDetachShader(gles2BlitProgram, vertShader); + _wglDetachShader(gles2BlitProgram, fragShader); + + _wglDeleteShader(vertShader); + _wglDeleteShader(fragShader); + + _wglUseProgram(gles2BlitProgram); + + _wglUniform1i(_wglGetUniformLocation(gles2BlitProgram, "u_samplerTex"), 0); + } } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLOESVertexArrayObject.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLOESVertexArrayObject.java index f15c5614..2941f40c 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLOESVertexArrayObject.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLOESVertexArrayObject.java @@ -4,25 +4,26 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface WebGLOESVertexArrayObject extends JSObject { + void bindVertexArrayOES(WebGLVertexArray obj); + WebGLVertexArray createVertexArrayOES(); void deleteVertexArrayOES(WebGLVertexArray obj); - void bindVertexArrayOES(WebGLVertexArray obj); - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLQuery.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLQuery.java index 2550aa5a..777c1306 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLQuery.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLQuery.java @@ -4,18 +4,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface WebGLQuery extends JSObject { } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLVertexArray.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLVertexArray.java index 93cc8221..80a7c0c6 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLVertexArray.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/WebGLVertexArray.java @@ -4,18 +4,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2022 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public interface WebGLVertexArray extends JSObject { } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMRuntimeDeobfuscatorGenerator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMRuntimeDeobfuscatorGenerator.java index b1ade504..3ad1bfe3 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMRuntimeDeobfuscatorGenerator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMRuntimeDeobfuscatorGenerator.java @@ -17,24 +17,88 @@ import net.lax1dude.eaglercraft.v1_8.internal.teavm.Base64VarIntArray; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMRuntimeDeobfuscatorGenerator implements Generator { - private int indexIntoSet(String name, Map namesSet, List namesList) { + @Override + public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { + Map> map = new HashMap<>(); + List classNamesPartsList = new ArrayList<>(); + Map classNamesPartsSet = new HashMap<>(); + List namesList = new ArrayList<>(); + Map namesSet = new HashMap<>(); + Map> namesEncSet = new HashMap<>(); + for (MethodReference method : context.getDependency().getReachableMethods()) { + ScopedName name = writer.getNaming().getFullNameFor(method); + if (name.scoped) { + continue; + } + String clsName = method.getClassName(); + List lst = map.get(clsName); + if (lst == null) { + map.put(clsName, lst = new ArrayList<>()); + } + lst.add(indexIntoSet(name.value, namesSet, namesList)); + lst.add(indexIntoSet(method.getName(), namesSet, namesList)); + } + for (String str : map.keySet()) { + List builder = new ArrayList<>(); + boolean b = false; + for (String strr : str.split("\\.")) { + builder.add(indexIntoSet(strr, classNamesPartsSet, classNamesPartsList)); + b = true; + } + namesEncSet.put(str, builder); + } + writer.append("return [").ws().append('[').ws(); + boolean b = false; + for (String str : classNamesPartsList) { + if (b) { + writer.append(',').ws(); + } + writer.append('\"').append(str).append('\"'); + b = true; + } + writer.append("],").ws().append('[').ws(); + b = false; + for (String str : namesList) { + if (b) { + writer.append(',').ws(); + } + writer.append('\"').append(str).append('\"'); + b = true; + } + writer.ws().append("],").ws(); + b = false; + for (Entry> name : map.entrySet()) { + if (b) { + writer.append(',').ws(); + } + writer.append('\"').append(Base64VarIntArray.encodeVarIntArray(namesEncSet.get(name.getKey()))) + .append("\",").ws(); + writer.append('\"').appendClass(name.getKey()).append("\",").ws().append('\"'); + writer.append(Base64VarIntArray.encodeVarIntArray(name.getValue())).append('\"').ws(); + b = true; + } + writer.ws().append("];").softNewLine(); + } + + private int indexIntoSet(String name, Map namesSet, List namesList) { Integer ret = namesSet.get(name); - if(ret != null) { + if (ret != null) { return ret.intValue(); } int i = namesList.size(); @@ -43,66 +107,4 @@ public class TeaVMRuntimeDeobfuscatorGenerator implements Generator { return i; } - @Override - public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { - Map> map = new HashMap<>(); - List classNamesPartsList = new ArrayList<>(); - Map classNamesPartsSet = new HashMap<>(); - List namesList = new ArrayList<>(); - Map namesSet = new HashMap<>(); - Map> namesEncSet = new HashMap<>(); - for(MethodReference method : context.getDependency().getReachableMethods()) { - ScopedName name = writer.getNaming().getFullNameFor(method); - if(name.scoped) { - continue; - } - String clsName = method.getClassName(); - List lst = map.get(clsName); - if(lst == null) { - map.put(clsName, lst = new ArrayList<>()); - } - lst.add(indexIntoSet(name.value, namesSet, namesList)); - lst.add(indexIntoSet(method.getName(), namesSet, namesList)); - } - for(String str : map.keySet()) { - List builder = new ArrayList<>(); - boolean b = false; - for(String strr : str.split("\\.")) { - builder.add(indexIntoSet(strr, classNamesPartsSet, classNamesPartsList)); - b = true; - } - namesEncSet.put(str, builder); - } - writer.append("return [").ws().append('[').ws(); - boolean b = false; - for(String str : classNamesPartsList) { - if(b) { - writer.append(',').ws(); - } - writer.append('\"').append(str).append('\"'); - b = true; - } - writer.append("],").ws().append('[').ws(); - b = false; - for(String str : namesList) { - if(b) { - writer.append(',').ws(); - } - writer.append('\"').append(str).append('\"'); - b = true; - } - writer.ws().append("],").ws(); - b = false; - for (Entry> name : map.entrySet()) { - if(b) { - writer.append(',').ws(); - } - writer.append('\"').append(Base64VarIntArray.encodeVarIntArray(namesEncSet.get(name.getKey()))).append("\",").ws(); - writer.append('\"').appendClass(name.getKey()).append("\",").ws().append('\"'); - writer.append(Base64VarIntArray.encodeVarIntArray(name.getValue())).append('\"').ws(); - b = true; - } - writer.ws().append("];").softNewLine(); - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMUtilsUnwrapGenerator.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMUtilsUnwrapGenerator.java index 6eff0e7c..0194a40e 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMUtilsUnwrapGenerator.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/generators/TeaVMUtilsUnwrapGenerator.java @@ -11,18 +11,19 @@ import org.teavm.model.MethodReference; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMUtilsUnwrapGenerator { @@ -49,31 +50,46 @@ public class TeaVMUtilsUnwrapGenerator { } + public static class UnwrapUnsignedTypedArray implements Injector { + + @Override + public void generate(InjectorContext context, MethodReference methodRef) throws IOException { + context.getWriter().append("new Uint8Array("); + context.writeExpr(context.getArgument(0)); + context.getWriter().append(".data.buffer)"); + } + + } + public static class WrapArrayBuffer implements Generator { @Override public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { - String parName = context.getParameterName(1); + String parName = context.getParameterName(1); switch (methodRef.getName()) { case "wrapByteArrayBuffer": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_bytecls(),").ws().append("new Int8Array(").append(parName).append("))").ws(); + writer.append("$rt_createNumericArray($rt_bytecls(),").ws().append("new Int8Array(").append(parName) + .append("))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapIntArrayBuffer": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_intcls(),").ws().append("new Int32Array(").append(parName).append("))").ws(); + writer.append("$rt_createNumericArray($rt_intcls(),").ws().append("new Int32Array(").append(parName) + .append("))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapFloatArrayBuffer": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_floatcls(),").ws().append("new Float32Array(").append(parName).append("))").ws(); + writer.append("$rt_createNumericArray($rt_floatcls(),").ws().append("new Float32Array(").append(parName) + .append("))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapShortArrayBuffer": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_shortcls(),").ws().append("new Int16Array(").append(parName).append("))").ws(); + writer.append("$rt_createNumericArray($rt_shortcls(),").ws().append("new Int16Array(").append(parName) + .append("))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; default: @@ -88,27 +104,31 @@ public class TeaVMUtilsUnwrapGenerator { @Override public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { - String parName = context.getParameterName(1); + String parName = context.getParameterName(1); switch (methodRef.getName()) { case "wrapByteArrayBufferView": case "wrapUnsignedByteArray": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_bytecls(),").ws().append("new Int8Array(").append(parName).append(".buffer))").ws(); + writer.append("$rt_createNumericArray($rt_bytecls(),").ws().append("new Int8Array(").append(parName) + .append(".buffer))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapIntArrayBufferView": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_intcls(),").ws().append("new Int32Array(").append(parName).append(".buffer))").ws(); + writer.append("$rt_createNumericArray($rt_intcls(),").ws().append("new Int32Array(").append(parName) + .append(".buffer))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapFloatArrayBufferView": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_floatcls(),").ws().append("new Float32Array(").append(parName).append(".buffer))").ws(); + writer.append("$rt_createNumericArray($rt_floatcls(),").ws().append("new Float32Array(").append(parName) + .append(".buffer))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; case "wrapShortArrayBufferView": writer.append("return ").append(parName).ws().append('?').ws(); - writer.append("$rt_createNumericArray($rt_shortcls(),").ws().append("new Int16Array(").append(parName).append(".buffer))").ws(); + writer.append("$rt_createNumericArray($rt_shortcls(),").ws().append("new Int16Array(").append(parName) + .append(".buffer))").ws(); writer.append(':').ws().append("null;").softNewLine(); break; default: @@ -123,7 +143,7 @@ public class TeaVMUtilsUnwrapGenerator { @Override public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { - String parName = context.getParameterName(1); + String parName = context.getParameterName(1); switch (methodRef.getName()) { case "wrapByteArray": writer.append("return ").append(parName).ws().append('?').ws(); @@ -152,15 +172,4 @@ public class TeaVMUtilsUnwrapGenerator { } - public static class UnwrapUnsignedTypedArray implements Injector { - - @Override - public void generate(InjectorContext context, MethodReference methodRef) throws IOException { - context.getWriter().append("new Uint8Array("); - context.writeExpr(context.getArgument(0)); - context.getWriter().append(".data.buffer)"); - } - - } - } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsAssetsURI.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsAssetsURI.java index e26301c5..f027c654 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsAssetsURI.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsAssetsURI.java @@ -5,25 +5,26 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class JSEaglercraftXOptsAssetsURI implements JSObject { - @JSBody(script = "return (typeof this.url === \"string\") ? this.url : null;") - public native String getURL(); - @JSBody(params = { "def" }, script = "return (typeof this.path === \"string\") ? this.path : def;") public native String getPath(String defaultValue); + @JSBody(script = "return (typeof this.url === \"string\") ? this.url : null;") + public native String getURL(); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java index bd0b4067..d8410ab5 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java @@ -5,29 +5,30 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class JSEaglercraftXOptsHooks implements JSObject { - @JSBody(script = "return (typeof this.localStorageSaved === \"function\") ? this.localStorageSaved : null;") - public native JSObject getLocalStorageSavedHook(); + @JSBody(script = "return (typeof this.crashReportShow === \"function\") ? this.crashReportShow : null;") + public native JSObject getCrashReportHook(); @JSBody(script = "return (typeof this.localStorageLoaded === \"function\") ? this.localStorageLoaded : null;") public native JSObject getLocalStorageLoadedHook(); - @JSBody(script = "return (typeof this.crashReportShow === \"function\") ? this.crashReportShow : null;") - public native JSObject getCrashReportHook(); + @JSBody(script = "return (typeof this.localStorageSaved === \"function\") ? this.localStorageSaved : null;") + public native JSObject getLocalStorageSavedHook(); @JSBody(script = "return (typeof this.screenChanged === \"function\") ? this.screenChanged : null;") public native JSObject getScreenChangedHook(); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRelay.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRelay.java index dc4f9df4..2782f766 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRelay.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRelay.java @@ -5,18 +5,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class JSEaglercraftXOptsRelay implements JSObject { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java index 500a4f80..706425b6 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java @@ -6,23 +6,49 @@ import org.teavm.jso.core.JSArrayReader; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class JSEaglercraftXOptsRoot implements JSObject { - @JSBody(script = "return (typeof this.container === \"string\") ? this.container : null;") - public native String getContainer(); + @JSBody(params = { + "def" }, script = "return (typeof this.allowBootMenu === \"boolean\") ? this.allowBootMenu : def;") + public native boolean getAllowBootMenu(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowExperimentalWebGL1 === \"boolean\") ? this.allowExperimentalWebGL1 : def;") + public native boolean getAllowExperimentalWebGL1(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowFNAWSkins === \"boolean\") ? this.allowFNAWSkins : def;") + public native boolean getAllowFNAWSkins(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowServerRedirects === \"boolean\") ? this.allowServerRedirects : def;") + public native boolean getAllowServerRedirects(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowUpdateDL === \"boolean\") ? this.allowUpdateDL : def;") + public native boolean getAllowUpdateDL(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowUpdateSvc === \"boolean\") ? this.allowUpdateSvc : def;") + public native boolean getAllowUpdateSvc(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.allowVoiceClient === \"boolean\") ? this.allowVoiceClient : def;") + public native boolean getAllowVoiceClient(boolean defaultValue); @JSBody(script = "return (typeof this.assetsURI === \"string\") ? this.assetsURI : null;") public native String getAssetsURI(); @@ -30,109 +56,82 @@ public abstract class JSEaglercraftXOptsRoot implements JSObject { @JSBody(script = "return (typeof this.assetsURI === \"object\") ? this.assetsURI : null;") public native JSArrayReader getAssetsURIArray(); - @JSBody(params = { "def" }, script = "return (typeof this.lang === \"string\") ? this.lang : def;") - public native String getLang(String defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.autoFixLegacyStyleAttr === \"boolean\") ? this.autoFixLegacyStyleAttr : def;") + public native boolean getAutoFixLegacyStyleAttr(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.joinServer === \"string\") ? this.joinServer : def;") - public native String getJoinServer(String defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.bootMenuBlocksUnsignedClients === \"boolean\") ? this.bootMenuBlocksUnsignedClients : def;") + public native boolean getBootMenuBlocksUnsignedClients(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.localesURI === \"string\") ? this.localesURI : def;") - public native String getLocalesURI(String defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.checkGLErrors === \"boolean\") ? this.checkGLErrors : def;") + public native boolean getCheckGLErrors(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.worldsDB === \"string\") ? this.worldsDB : def;") - public native String getWorldsDB(String defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.checkRelaysForUpdates === \"boolean\") ? this.checkRelaysForUpdates : def;") + public native boolean getCheckRelaysForUpdates(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.resourcePacksDB === \"string\") ? this.resourcePacksDB : def;") - public native String getResourcePacksDB(String defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.checkShaderGLErrors === \"boolean\") ? this.checkShaderGLErrors : def;") + public native boolean getCheckShaderGLErrors(boolean defaultValue); + + @JSBody(script = "return (typeof this.container === \"string\") ? this.container : null;") + public native String getContainer(); + + @JSBody(params = { + "def" }, script = "return (typeof this.crashOnUncaughtExceptions === \"boolean\") ? this.crashOnUncaughtExceptions : def;") + public native boolean getCrashOnUncaughtExceptions(boolean defaultValue); @JSBody(params = { "def" }, script = "return (typeof this.demoMode === \"boolean\") ? this.demoMode : def;") public native boolean getDemoMode(boolean defaultValue); - @JSBody(script = "return (typeof this.servers === \"object\") ? this.servers : null;") - public native JSArrayReader getServers(); + @JSBody(params = { + "def" }, script = "return (typeof this.deobfStackTraces === \"boolean\") ? this.deobfStackTraces : def;") + public native boolean getDeobfStackTraces(boolean deobfStackTraces); - @JSBody(script = "return (typeof this.relays === \"object\") ? this.relays : null;") - public native JSArrayReader getRelays(); + @JSBody(params = { + "def" }, script = "return (typeof this.disableBlobURLs === \"boolean\") ? this.disableBlobURLs : def;") + public native boolean getDisableBlobURLs(boolean deobfStackTraces); - @JSBody(params = { "def" }, script = "return (typeof this.checkGLErrors === \"boolean\") ? this.checkGLErrors : def;") - public native boolean getCheckGLErrors(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.checkShaderGLErrors === \"boolean\") ? this.checkShaderGLErrors : def;") - public native boolean getCheckShaderGLErrors(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.enableDownloadOfflineButton === \"boolean\") ? this.enableDownloadOfflineButton : def;") - public native boolean getEnableDownloadOfflineButton(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.downloadOfflineButtonLink === \"string\") ? this.downloadOfflineButtonLink : def;") + @JSBody(params = { + "def" }, script = "return (typeof this.downloadOfflineButtonLink === \"string\") ? this.downloadOfflineButtonLink : def;") public native String getDownloadOfflineButtonLink(String defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.html5CursorSupport === \"boolean\") ? this.html5CursorSupport : def;") - public native boolean getHtml5CursorSupport(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.eaglerNoDelay === \"boolean\") ? this.eaglerNoDelay : def;") + public native boolean getEaglerNoDelay(boolean deobfStackTraces); - @JSBody(params = { "def" }, script = "return (typeof this.allowUpdateSvc === \"boolean\") ? this.allowUpdateSvc : def;") - public native boolean getAllowUpdateSvc(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.enableDownloadOfflineButton === \"boolean\") ? this.enableDownloadOfflineButton : def;") + public native boolean getEnableDownloadOfflineButton(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.allowUpdateDL === \"boolean\") ? this.allowUpdateDL : def;") - public native boolean getAllowUpdateDL(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.enableEPKVersionCheck === \"boolean\") ? this.enableEPKVersionCheck : def;") + public native boolean getEnableEPKVersionCheck(boolean deobfStackTraces); - @JSBody(params = { "def" }, script = "return (typeof this.logInvalidCerts === \"boolean\") ? this.logInvalidCerts : def;") - public native boolean getLogInvalidCerts(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.enableSignatureBadge === \"boolean\") ? this.enableSignatureBadge : def;") - public native boolean getEnableSignatureBadge(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.checkRelaysForUpdates === \"boolean\") ? this.checkRelaysForUpdates : def;") - public native boolean getCheckRelaysForUpdates(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.allowVoiceClient === \"boolean\") ? this.allowVoiceClient : def;") - public native boolean getAllowVoiceClient(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.allowFNAWSkins === \"boolean\") ? this.allowFNAWSkins : def;") - public native boolean getAllowFNAWSkins(boolean defaultValue); - - @JSBody(script = "return (typeof this.hooks === \"object\") ? this.hooks : null;") - public native JSEaglercraftXOptsHooks getHooks(); - - @JSBody(params = { "def" }, script = "return (typeof this.localStorageNamespace === \"string\") ? this.localStorageNamespace : def;") - public native String getLocalStorageNamespace(String defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.enableMinceraft === \"boolean\") ? this.enableMinceraft : def;") + @JSBody(params = { + "def" }, script = "return (typeof this.enableMinceraft === \"boolean\") ? this.enableMinceraft : def;") public native boolean getEnableMinceraft(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.enableServerCookies === \"boolean\") ? this.enableServerCookies : def;") + @JSBody(params = { + "def" }, script = "return (typeof this.enableServerCookies === \"boolean\") ? this.enableServerCookies : def;") public native boolean getEnableServerCookies(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.allowServerRedirects === \"boolean\") ? this.allowServerRedirects : def;") - public native boolean getAllowServerRedirects(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.enableSignatureBadge === \"boolean\") ? this.enableSignatureBadge : def;") + public native boolean getEnableSignatureBadge(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.crashOnUncaughtExceptions === \"boolean\") ? this.crashOnUncaughtExceptions : def;") - public native boolean getCrashOnUncaughtExceptions(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.openDebugConsoleOnLaunch === \"boolean\") ? this.openDebugConsoleOnLaunch : def;") - public native boolean getOpenDebugConsoleOnLaunch(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.fixDebugConsoleUnloadListener === \"boolean\") ? this.fixDebugConsoleUnloadListener : def;") - public native boolean getFixDebugConsoleUnloadListener(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.forceWebViewSupport === \"boolean\") ? this.forceWebViewSupport : def;") - public native boolean getForceWebViewSupport(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.enableWebViewCSP === \"boolean\") ? this.enableWebViewCSP : def;") + @JSBody(params = { + "def" }, script = "return (typeof this.enableWebViewCSP === \"boolean\") ? this.enableWebViewCSP : def;") public native boolean getEnableWebViewCSP(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.autoFixLegacyStyleAttr === \"boolean\") ? this.autoFixLegacyStyleAttr : def;") - public native boolean getAutoFixLegacyStyleAttr(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.fixDebugConsoleUnloadListener === \"boolean\") ? this.fixDebugConsoleUnloadListener : def;") + public native boolean getFixDebugConsoleUnloadListener(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.showBootMenuOnLaunch === \"boolean\") ? this.showBootMenuOnLaunch : def;") - public native boolean getShowBootMenuOnLaunch(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.bootMenuBlocksUnsignedClients === \"boolean\") ? this.bootMenuBlocksUnsignedClients : def;") - public native boolean getBootMenuBlocksUnsignedClients(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.allowBootMenu === \"boolean\") ? this.allowBootMenu : def;") - public native boolean getAllowBootMenu(boolean defaultValue); - - @JSBody(params = { "def" }, script = "return (typeof this.forceProfanityFilter === \"boolean\") ? this.forceProfanityFilter : def;") + @JSBody(params = { + "def" }, script = "return (typeof this.forceProfanityFilter === \"boolean\") ? this.forceProfanityFilter : def;") public native boolean getForceProfanityFilter(boolean defaultValue); @JSBody(params = { "def" }, script = "return (typeof this.forceWebGL1 === \"boolean\") ? this.forceWebGL1 : def;") @@ -141,40 +140,78 @@ public abstract class JSEaglercraftXOptsRoot implements JSObject { @JSBody(params = { "def" }, script = "return (typeof this.forceWebGL2 === \"boolean\") ? this.forceWebGL2 : def;") public native boolean getForceWebGL2(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.allowExperimentalWebGL1 === \"boolean\") ? this.allowExperimentalWebGL1 : def;") - public native boolean getAllowExperimentalWebGL1(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.forceWebViewSupport === \"boolean\") ? this.forceWebViewSupport : def;") + public native boolean getForceWebViewSupport(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.useWebGLExt === \"boolean\") ? this.useWebGLExt : def;") - public native boolean getUseWebGLExt(boolean defaultValue); + @JSBody(script = "return (typeof this.hooks === \"object\") ? this.hooks : null;") + public native JSEaglercraftXOptsHooks getHooks(); - @JSBody(params = { "def" }, script = "return (typeof this.useDelayOnSwap === \"boolean\") ? this.useDelayOnSwap : def;") - public native boolean getUseDelayOnSwap(boolean defaultValue); + @JSBody(params = { + "def" }, script = "return (typeof this.html5CursorSupport === \"boolean\") ? this.html5CursorSupport : def;") + public native boolean getHtml5CursorSupport(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.useJOrbisAudioDecoder === \"boolean\") ? this.useJOrbisAudioDecoder : def;") - public native boolean getUseJOrbisAudioDecoder(boolean defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.joinServer === \"string\") ? this.joinServer : def;") + public native String getJoinServer(String defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.useXHRFetch === \"boolean\") ? this.useXHRFetch : def;") - public native boolean getUseXHRFetch(boolean defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.lang === \"string\") ? this.lang : def;") + public native String getLang(String defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.useVisualViewport === \"boolean\") ? this.useVisualViewport : def;") - public native boolean getUseVisualViewport(boolean defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.localesURI === \"string\") ? this.localesURI : def;") + public native String getLocalesURI(String defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.deobfStackTraces === \"boolean\") ? this.deobfStackTraces : def;") - public native boolean getDeobfStackTraces(boolean deobfStackTraces); + @JSBody(params = { + "def" }, script = "return (typeof this.localStorageNamespace === \"string\") ? this.localStorageNamespace : def;") + public native String getLocalStorageNamespace(String defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.disableBlobURLs === \"boolean\") ? this.disableBlobURLs : def;") - public native boolean getDisableBlobURLs(boolean deobfStackTraces); + @JSBody(params = { + "def" }, script = "return (typeof this.logInvalidCerts === \"boolean\") ? this.logInvalidCerts : def;") + public native boolean getLogInvalidCerts(boolean defaultValue); - @JSBody(params = { "def" }, script = "return (typeof this.eaglerNoDelay === \"boolean\") ? this.eaglerNoDelay : def;") - public native boolean getEaglerNoDelay(boolean deobfStackTraces); + @JSBody(params = { + "def" }, script = "return (typeof this.openDebugConsoleOnLaunch === \"boolean\") ? this.openDebugConsoleOnLaunch : def;") + public native boolean getOpenDebugConsoleOnLaunch(boolean defaultValue); @JSBody(params = { "def" }, script = "return (typeof this.ramdiskMode === \"boolean\") ? this.ramdiskMode : def;") public native boolean getRamdiskMode(boolean deobfStackTraces); - @JSBody(params = { "def" }, script = "return (typeof this.singleThreadMode === \"boolean\") ? this.singleThreadMode : def;") + @JSBody(script = "return (typeof this.relays === \"object\") ? this.relays : null;") + public native JSArrayReader getRelays(); + + @JSBody(params = { + "def" }, script = "return (typeof this.resourcePacksDB === \"string\") ? this.resourcePacksDB : def;") + public native String getResourcePacksDB(String defaultValue); + + @JSBody(script = "return (typeof this.servers === \"object\") ? this.servers : null;") + public native JSArrayReader getServers(); + + @JSBody(params = { + "def" }, script = "return (typeof this.showBootMenuOnLaunch === \"boolean\") ? this.showBootMenuOnLaunch : def;") + public native boolean getShowBootMenuOnLaunch(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.singleThreadMode === \"boolean\") ? this.singleThreadMode : def;") public native boolean getSingleThreadMode(boolean deobfStackTraces); - @JSBody(params = { "def" }, script = "return (typeof this.enableEPKVersionCheck === \"boolean\") ? this.enableEPKVersionCheck : def;") - public native boolean getEnableEPKVersionCheck(boolean deobfStackTraces); + @JSBody(params = { + "def" }, script = "return (typeof this.useDelayOnSwap === \"boolean\") ? this.useDelayOnSwap : def;") + public native boolean getUseDelayOnSwap(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.useJOrbisAudioDecoder === \"boolean\") ? this.useJOrbisAudioDecoder : def;") + public native boolean getUseJOrbisAudioDecoder(boolean defaultValue); + + @JSBody(params = { + "def" }, script = "return (typeof this.useVisualViewport === \"boolean\") ? this.useVisualViewport : def;") + public native boolean getUseVisualViewport(boolean defaultValue); + + @JSBody(params = { "def" }, script = "return (typeof this.useWebGLExt === \"boolean\") ? this.useWebGLExt : def;") + public native boolean getUseWebGLExt(boolean defaultValue); + + @JSBody(params = { "def" }, script = "return (typeof this.useXHRFetch === \"boolean\") ? this.useXHRFetch : def;") + public native boolean getUseXHRFetch(boolean defaultValue); + + @JSBody(params = { "def" }, script = "return (typeof this.worldsDB === \"string\") ? this.worldsDB : def;") + public native String getWorldsDB(String defaultValue); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsServer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsServer.java index e5c06240..f5fc4aa7 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsServer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsServer.java @@ -5,18 +5,19 @@ import org.teavm.jso.JSObject; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public abstract class JSEaglercraftXOptsServer implements JSObject { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java index 0d254f4a..b575570a 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/sp/internal/ClientPlatformSingleplayer.java @@ -16,6 +16,7 @@ import org.teavm.jso.workers.Worker; import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData; import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; +import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC; import net.lax1dude.eaglercraft.v1_8.internal.teavm.ClientMain; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMBlobURLManager; import net.lax1dude.eaglercraft.v1_8.internal.teavm.TeaVMClientConfigAdapter; @@ -26,292 +27,133 @@ import net.lax1dude.eaglercraft.v1_8.sp.server.internal.teavm.SingleThreadWorker /** * Copyright (c) 2023-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class ClientPlatformSingleplayer { - private static final Logger logger = LogManager.getLogger("ClientPlatformSingleplayer"); - - private static final LinkedList messageQueue = new LinkedList<>(); - - @JSBody(params = {}, script = "return (typeof eaglercraftXClientScriptElement !== \"undefined\") ? eaglercraftXClientScriptElement : null;") - private static native JSObject loadIntegratedServerSourceOverride(); - - @JSBody(params = {}, script = "return (typeof eaglercraftXClientScriptURL === \"string\") ? eaglercraftXClientScriptURL : null;") - private static native String loadIntegratedServerSourceOverrideURL(); - - @JSBody(params = {}, script = "try{throw new Error();}catch(ex){return ex.stack||null;}return null;") - private static native String loadIntegratedServerSourceStack(); - - @JSBody(params = { "csc" }, script = "if(typeof csc.src === \"string\" && csc.src.length > 0) return csc.src; else return null;") - private static native String loadIntegratedServerSourceURL(JSObject scriptTag); - - @JSBody(params = { "csc", "tail" }, script = "var cscText = csc.text;" - + "if(typeof cscText === \"string\" && cscText.length > 0) return new Blob([cscText, tail], { type: \"text/javascript;charset=utf8\" });" - + "else return null;") - private static native JSObject loadIntegratedServerSourceInline(JSObject scriptTag, String tail); - - @JSBody(params = { "csc" }, script = "var cscText = csc.text;" - + "if(typeof cscText === \"string\" && cscText.length > 0) return cscText;" - + "else return null;") - private static native String loadIntegratedServerSourceInlineStr(JSObject scriptTag); - - private static String integratedServerSource = null; - private static String integratedServerSourceOriginalURL = null; - private static boolean serverSourceLoaded = false; - private static boolean isSingleThreadMode = false; - - private static Worker workerObj = null; - @JSFunctor private static interface WorkerBinaryPacketHandler extends JSObject { public void onMessage(String channel, ArrayBuffer buf); } - @JSBody(params = { "w", "wb" }, script = "w.addEventListener(\"message\", function(o) { wb(o.data.ch, o.data.dat); });") - private static native void registerPacketHandler(Worker w, WorkerBinaryPacketHandler wb); - - @JSBody(params = { "w", "ch", "dat" }, script = "w.postMessage({ ch: ch, dat : dat });") - private static native void sendWorkerPacket(Worker w, String channel, ArrayBuffer arr); - - @JSBody(params = { "w", "workerArgs" }, script = "w.postMessage({ msg : workerArgs });") - private static native void sendWorkerStartPacket(Worker w, String workerArgs); - private static class WorkerBinaryPacketHandlerImpl implements WorkerBinaryPacketHandler { - + + @Override public void onMessage(String channel, ArrayBuffer buf) { - if(channel == null) { + if (channel == null) { logger.error("Recieved IPC packet with null channel"); return; } - - if(buf == null) { + + if (buf == null) { logger.error("Recieved IPC packet with null buffer"); return; } - - synchronized(messageQueue) { + + if (PlatformWebRTC.serverLANPeerPassIPC(channel, buf)) { + return; + } + + synchronized (messageQueue) { messageQueue.add(new IPCPacketData(channel, TeaVMUtils.wrapByteArrayBuffer(buf))); } } - + } - @JSBody(params = { "blobObj" }, script = "return URL.createObjectURL(blobObj);") - private static native String createWorkerScriptURL(JSObject blobObj); + private static final Logger logger = LogManager.getLogger("ClientPlatformSingleplayer"); - @JSBody(params = { "cscText", "tail" }, script = "return new Blob([cscText, tail], { type: \"text/javascript;charset=utf8\" });") - private static native JSObject createBlobObj(ArrayBuffer buf, String tail); + private static final LinkedList messageQueue = new LinkedList<>(); + private static String integratedServerSource = null; + + private static String integratedServerSourceOriginalURL = null; + + private static boolean serverSourceLoaded = false; + + private static boolean isSingleThreadMode = false; + + private static Worker workerObj = null; private static final String workerBootstrapCode = "\n\nmain([\"_worker_process_\"]);"; - private static JSObject loadIntegratedServerSource() { - String str = loadIntegratedServerSourceOverrideURL(); - if(str != null) { - ArrayBuffer buf = PlatformRuntime.downloadRemoteURI(str, true); - if(buf != null) { - integratedServerSourceOriginalURL = str; - logger.info("Using integrated server at: {}", truncateURL(str)); - return createBlobObj(buf, workerBootstrapCode); - }else { - logger.error("Failed to load integrated server: {}", truncateURL(str)); - } - } - JSObject el = loadIntegratedServerSourceOverride(); - if(el != null) { - String url = loadIntegratedServerSourceURL(el); - if(url == null) { - el = loadIntegratedServerSourceInline(el, workerBootstrapCode); - if(el != null) { - integratedServerSourceOriginalURL = "inline script tag"; - logger.info("Loading integrated server from inline script tag"); - return el; - } - }else { - ArrayBuffer buf = PlatformRuntime.downloadRemoteURI(url, true); - if(buf != null) { - integratedServerSourceOriginalURL = url; - logger.info("Using integrated server from script tag src: {}", truncateURL(url)); - return createBlobObj(buf, workerBootstrapCode); - }else { - logger.error("Failed to load integrated server from script tag src: {}", truncateURL(url)); - } - } - } - str = TeaVMUtils.tryResolveClassesSource(); - if(str != null) { - ArrayBuffer buf = PlatformRuntime.downloadRemoteURI(str, true); - if(buf != null) { - integratedServerSourceOriginalURL = str; - logger.info("Using integrated server from script src: {}", truncateURL(str)); - return createBlobObj(buf, workerBootstrapCode); - }else { - logger.error("Failed to load integrated server from script src: {}", truncateURL(str)); - } - } - HTMLScriptElement sc = TeaVMUtils.tryResolveClassesSourceInline(); - if(sc != null) { - el = loadIntegratedServerSourceInline(sc, workerBootstrapCode); - if(el != null) { - integratedServerSourceOriginalURL = "inline script tag (client guess)"; - logger.info("Loading integrated server from (likely) inline script tag"); - return el; - } - } - logger.info("Could not resolve the location of client's classes.js!"); - logger.info("Make sure client's classes.js is linked/embedded in a dedicated + + + + +
+ +

The eaglercraft client.

+
+
+ + + +
+ + diff --git a/wasm_gc_teavm/javascript/classes.wasm-deobfuscator.wasm b/wasm_gc_teavm/javascript/classes.wasm-deobfuscator.wasm new file mode 100644 index 00000000..64aa55ae Binary files /dev/null and b/wasm_gc_teavm/javascript/classes.wasm-deobfuscator.wasm differ diff --git a/wasm_gc_teavm/javascript/crashLogo.png b/wasm_gc_teavm/javascript/crashLogo.png new file mode 100644 index 00000000..8adc8cdf Binary files /dev/null and b/wasm_gc_teavm/javascript/crashLogo.png differ diff --git a/wasm_gc_teavm/javascript/enableJSPIScreen.html b/wasm_gc_teavm/javascript/enableJSPIScreen.html new file mode 100644 index 00000000..335390a0 --- /dev/null +++ b/wasm_gc_teavm/javascript/enableJSPIScreen.html @@ -0,0 +1,204 @@ + + + + + + JSPI is not enabled! + + + + +

Error: JSPI is not enabled!

+

Chrome, Edge, and Firefox all support JSPI (WebAssembly JavaScript Promise Integration), however it is not enabled by default. You can manually enable it yourself through your browser's flags, or if you are the owner of this website you can request an origin trial from Google and Microsoft to enable it automatically for all of your visitors.

+
+ +
+
+

Step 1

+

On a new tab, enter chrome://flags/

+

+

Step 2

+

Search for "JSPI", there should be an "Experimental WebAssembly JavaScript Promise Integration" option available

+

+

Step 3

+

Make sure its enabled

+

+

Step 4

+

Relauch chrome (if required)

+

+

Other Notes

+

The option may just be called "Experimental WebAssembly" on older versions or forks of Google Chrome

+

If you own a website, you can request an origin trial from Google to enable JSPI for visitors automatically

+
+ + +
+
+ + diff --git a/wasm_gc_teavm/javascript/epw_meta.txt b/wasm_gc_teavm/javascript/epw_meta.txt new file mode 100644 index 00000000..0b614200 --- /dev/null +++ b/wasm_gc_teavm/javascript/epw_meta.txt @@ -0,0 +1,8 @@ +client-version-integer=46 +client-package-name=net.lax1dude.eaglercraft.v1_8.client +client-origin-name=EaglercraftX +client-origin-version=u46 +client-origin-vendor=lax1dude +client-fork-name=EaglercraftX +client-fork-version=u46 +client-fork-vendor=lax1dude diff --git a/wasm_gc_teavm/javascript/epw_src.txt b/wasm_gc_teavm/javascript/epw_src.txt new file mode 100644 index 00000000..1cc5e6db --- /dev/null +++ b/wasm_gc_teavm/javascript/epw_src.txt @@ -0,0 +1,19 @@ +loader-js-file=loader.js +loader-wasm-file=loader.wasm +eagruntime-js-file=eagruntime.js +classes-wasm-file=classes.wasm +classes-deobf-teadbg-file=classes.wasm.teadbg +classes-deobf-wasm-file=classes.wasm-deobfuscator.wasm +assets-epk-0-file=assets.epk +splash-logo-image-file=splash.png +splash-logo-image-mime=image/png +press-any-key-image-file=pressAnyKey.png +press-any-key-image-mime=image/png +crash-logo-image-file=crashLogo.png +crash-logo-image-mime=image/png +favicon-image-file=favicon.png +favicon-image-mime=image/png +jspi-unavailable-file=enableJSPIScreen.html +offline-download-template=OfflineDownloadTemplate.txt +offline-download-script=../../javascript/bootstrap.js +offline-download-name=Starlike_Client_Offline_WASM.html diff --git a/wasm_gc_teavm/javascript/pressAnyKey.png b/wasm_gc_teavm/javascript/pressAnyKey.png new file mode 100644 index 00000000..9d3e1a4f Binary files /dev/null and b/wasm_gc_teavm/javascript/pressAnyKey.png differ diff --git a/wasm_gc_teavm/javascript/splash.png b/wasm_gc_teavm/javascript/splash.png new file mode 100644 index 00000000..262ec653 Binary files /dev/null and b/wasm_gc_teavm/javascript/splash.png differ diff --git a/wasm_gc_teavm/settings.gradle b/wasm_gc_teavm/settings.gradle new file mode 100644 index 00000000..d21322fe --- /dev/null +++ b/wasm_gc_teavm/settings.gradle @@ -0,0 +1,19 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/6.0/userguide/multi_project_builds.html + */ + +pluginManagement { + repositories { + maven { + url = uri("https://eaglercraft-teavm-fork.github.io/maven/") + } + mavenCentral() + } +} + +rootProject.name = 'eagler-workspace-wasm-gc-teavm'